From 6f0a781fb8e66b1de473bee78d5fded0f4b7e6ec Mon Sep 17 00:00:00 2001 From: devRaGonSa Date: Thu, 4 Jun 2026 09:26:38 +0200 Subject: [PATCH] initial export --- .gitignore | 26 + README.md | 261 ++ backend/.dockerignore | 11 + backend/.env.example | 21 + backend/Dockerfile | 20 + backend/README.md | 1685 +++++++++ backend/app/__init__.py | 59 + backend/app/a2s_client.py | 176 + backend/app/collector.py | 269 ++ backend/app/config.py | 604 +++ backend/app/data_sources.py | 446 +++ backend/app/database_maintenance.py | 638 ++++ backend/app/elo_mmr_engine.py | 1013 +++++ backend/app/elo_mmr_models.py | 74 + backend/app/elo_mmr_storage.py | 578 +++ backend/app/historical_ingestion.py | 714 ++++ backend/app/historical_models.py | 126 + backend/app/historical_runner.py | 529 +++ backend/app/historical_snapshot_storage.py | 370 ++ backend/app/historical_snapshots.py | 842 +++++ backend/app/historical_storage.py | 3325 +++++++++++++++++ backend/app/main.py | 90 + backend/app/monthly_mvp.py | 163 + backend/app/monthly_mvp_v2.py | 201 + backend/app/normalizers.py | 164 + backend/app/payloads.py | 2187 +++++++++++ backend/app/player_event_aggregates.py | 261 ++ backend/app/player_event_models.py | 32 + backend/app/player_event_source.py | 111 + backend/app/player_event_storage.py | 440 +++ backend/app/player_event_worker.py | 490 +++ backend/app/player_external_profiles.py | 65 + backend/app/postgres_display_storage.py | 929 +++++ backend/app/postgres_rcon_storage.py | 1038 +++++ .../providers/player_event_source_provider.py | 415 ++ .../providers/public_scoreboard_provider.py | 139 + backend/app/providers/rcon_provider.py | 67 + backend/app/rcon_admin_log_ingestion.py | 147 + backend/app/rcon_admin_log_materialization.py | 863 +++++ backend/app/rcon_admin_log_parser.py | 464 +++ backend/app/rcon_admin_log_storage.py | 1021 +++++ backend/app/rcon_client.py | 660 ++++ backend/app/rcon_historical_backfill.py | 484 +++ .../rcon_historical_backfill_operational.py | 173 + backend/app/rcon_historical_leaderboards.py | 600 +++ backend/app/rcon_historical_read_model.py | 627 ++++ backend/app/rcon_historical_storage.py | 1109 ++++++ backend/app/rcon_historical_worker.py | 554 +++ backend/app/rcon_scoreboard_correlation.py | 448 +++ backend/app/rcon_scoreboard_relink.py | 78 + backend/app/routes.py | 395 ++ backend/app/scheduler.py | 100 + backend/app/scoreboard_candidate_backfill.py | 259 ++ .../app/scoreboard_correlation_diagnostics.py | 83 + backend/app/scoreboard_origins.py | 97 + backend/app/server_targets.py | 106 + backend/app/snapshots.py | 54 + backend/app/sqlite_to_postgres_migration.py | 368 ++ backend/app/sqlite_utils.py | 41 + backend/app/storage.py | 549 +++ backend/app/storage_diagnostics.py | 164 + backend/app/writer_lock.py | 255 ++ backend/data/.gitkeep | 1 + backend/data/snapshots/.gitkeep | 1 + backend/requirements.txt | 2 + backend/tests/test_current_match_payload.py | 524 +++ backend/tests/test_database_maintenance.py | 448 +++ .../test_historical_runner_maintenance.py | 153 + .../tests/test_historical_snapshot_refresh.py | 126 + backend/tests/test_json_serialization.py | 27 + backend/tests/test_rcon_admin_log_parser.py | 166 + backend/tests/test_rcon_admin_log_storage.py | 497 +++ .../tests/test_rcon_historical_backfill.py | 171 + .../test_rcon_materialization_pipeline.py | 400 ++ backend/tests/test_scoreboard_match_links.py | 436 +++ deploy/jta/.env.example | 25 + deploy/jta/README.md | 164 + deploy/jta/backups/.gitkeep | 1 + deploy/jta/docker-compose.yml | 140 + deploy/portainer/Caddyfile.example | 8 + deploy/portainer/docker-compose.nas.yml | 128 + deploy/portainer/stack.env.example | 29 + docker-compose.yml | 107 + docs/crcon-advanced-metrics-origin-audit.md | 223 ++ docs/current-hll-data-ingestion-plan.md | 130 + docs/current-hll-servers-source-plan.md | 130 + docs/database-maintenance.md | 307 ++ docs/decisions.md | 242 ++ docs/deployment/nas-portainer.md | 130 + docs/discord-and-server-data-plan.md | 119 + docs/elo-mmr-monthly-ranking-design.md | 214 ++ docs/frontend-backend-contract.md | 263 ++ docs/frontend-data-consumption-plan.md | 73 + docs/historical-coverage-report.md | 120 + docs/historical-crcon-source-discovery.md | 243 ++ docs/historical-data-quality-notes.md | 66 + docs/historical-domain-model.md | 194 + docs/historical-rcon-backfill.md | 57 + docs/monthly-mvp-ranking-scoring-design.md | 197 + docs/monthly-mvp-v2-scoring-design.md | 243 ++ docs/monthly-player-ranking-data-audit.md | 246 ++ docs/player-event-pipeline-v2-design.md | 340 ++ docs/project-overview.md | 42 + docs/rcon-data-capability-audit.md | 191 + docs/rcon-historical-ingestion-design.md | 271 ++ docs/roadmap.md | 35 + docs/scoreboard-correlation-debugging.md | 45 + docs/stats-database-schema-foundation.md | 151 + frontend/.dockerignore | 7 + frontend/Dockerfile | 12 + frontend/assets/css/hero-header-compact.css | 92 + .../css/historico-scoreboard-detail.css | 752 ++++ frontend/assets/css/historico.css | 1356 +++++++ frontend/assets/css/styles.css | 1066 ++++++ frontend/assets/img/.gitkeep | 1 + .../assets/img/clans/250hispania-shield.png | Bin 0 -> 8421 bytes frontend/assets/img/clans/250hispania.png | Bin 0 -> 18108 bytes frontend/assets/img/clans/7dv.png | Bin 0 -> 1060870 bytes frontend/assets/img/clans/bxb.png | Bin 0 -> 370262 bytes frontend/assets/img/clans/h9h.png | Bin 0 -> 136424 bytes frontend/assets/img/clans/la129.png | Bin 0 -> 81694 bytes frontend/assets/img/clans/lcm.png | Bin 0 -> 8985997 bytes frontend/assets/img/factions/britain.webp | Bin 0 -> 51566 bytes frontend/assets/img/factions/germany.webp | Bin 0 -> 49890 bytes frontend/assets/img/factions/soviets.webp | Bin 0 -> 54626 bytes frontend/assets/img/factions/us.webp | Bin 0 -> 55706 bytes frontend/assets/img/logo.png | Bin 0 -> 2220863 bytes frontend/assets/img/maps/carentan-day.webp | Bin 0 -> 143454 bytes frontend/assets/img/maps/driel-day.webp | Bin 0 -> 139692 bytes frontend/assets/img/maps/elalamein-day.webp | Bin 0 -> 124500 bytes .../assets/img/maps/elsenbornridge-day.webp | Bin 0 -> 68392 bytes frontend/assets/img/maps/foy-day.webp | Bin 0 -> 117998 bytes frontend/assets/img/maps/hill400-day.webp | Bin 0 -> 152070 bytes .../assets/img/maps/hurtgenforest-day.webp | Bin 0 -> 195664 bytes frontend/assets/img/maps/kharkov-day.webp | Bin 0 -> 130470 bytes frontend/assets/img/maps/kursk-day.webp | Bin 0 -> 97440 bytes frontend/assets/img/maps/mortain-day.webp | Bin 0 -> 159648 bytes frontend/assets/img/maps/omahabeach-day.webp | Bin 0 -> 87406 bytes .../assets/img/maps/purpleheartlane-rain.webp | Bin 0 -> 85252 bytes frontend/assets/img/maps/smolensk-day.webp | Bin 0 -> 94676 bytes .../assets/img/maps/stmariedumont-day.webp | Bin 0 -> 103794 bytes .../assets/img/maps/stmereeglise-day.webp | Bin 0 -> 129342 bytes frontend/assets/img/maps/tobruk-dawn.webp | Bin 0 -> 55432 bytes frontend/assets/img/maps/tobruk-day.webp | Bin 0 -> 75436 bytes frontend/assets/img/maps/utahbeach-day.webp | Bin 0 -> 69086 bytes frontend/assets/img/weapons/bazooka.PNG | Bin 0 -> 20641 bytes .../img/weapons/black/bazooka_black.svg | 3 + .../img/weapons/black/bren_gun_black.svg | 3 + .../img/weapons/black/browing_m1919_black.svg | 3 + .../img/weapons/black/colt_1911_black.svg | 3 + .../assets/img/weapons/black/dp27_black.svg | 3 + .../weapons/black/flammenwefer41_black.svg | 3 + .../assets/img/weapons/black/gewehr_black.svg | 3 + .../assets/img/weapons/black/kar98k_black.svg | 3 + .../img/weapons/black/kar98k_x8_black.svg | 3 + .../weapons/black/lee_enfield_n4_black.svg | 3 + .../img/weapons/black/luger_p08_black.svg | 3 + .../weapons/black/m1903_springfield_black.svg | 3 + .../img/weapons/black/m1_carabine_black.svg | 3 + .../img/weapons/black/m1_garand_black.svg | 3 + .../weapons/black/m2_flamethrower_black.svg | 3 + .../img/weapons/black/m3_grease_gun_black.svg | 3 + .../assets/img/weapons/black/m97_black.svg | 3 + .../assets/img/weapons/black/mg34_black.svg | 3 + .../assets/img/weapons/black/mg42_black.svg | 3 + .../black/mosing_nagant_1891_black.svg | 3 + .../black/mosing_nagant_9130_black.svg | 3 + .../weapons/black/mosing_nagant_m38_black.svg | 3 + .../assets/img/weapons/black/mp40_black.svg | 3 + .../img/weapons/black/nagant_m1895_black.svg | 3 + .../img/weapons/black/panzerchreck_black.svg | 3 + .../assets/img/weapons/black/piat_black.svg | 3 + .../assets/img/weapons/black/ppsh41_black.svg | 3 + .../img/weapons/black/ppsh_41w_drum_black.svg | 3 + .../assets/img/weapons/black/ptrs41_black.svg | 3 + .../black/scoped_mosin_nagant_9130_black.svg | 3 + .../img/weapons/black/scoped_svt40_black.svg | 3 + .../img/weapons/black/sten_mk_v_black.svg | 3 + .../assets/img/weapons/black/stg44_black.svg | 3 + .../assets/img/weapons/black/svt40_black.svg | 3 + .../img/weapons/black/thompson_black.svg | 3 + .../img/weapons/black/tokarev_tt33_black.svg | 3 + .../img/weapons/black/walther_p38_black.svg | 3 + .../weapons/black/webley_revolver_black.svg | 3 + frontend/assets/img/weapons/bren_gun.PNG | Bin 0 -> 27553 bytes frontend/assets/img/weapons/browing_m1919.PNG | Bin 0 -> 22519 bytes frontend/assets/img/weapons/colt_1911.PNG | Bin 0 -> 15114 bytes frontend/assets/img/weapons/dp27.PNG | Bin 0 -> 22043 bytes .../assets/img/weapons/flammenwefer41.PNG | Bin 0 -> 25428 bytes frontend/assets/img/weapons/gewehr.PNG | Bin 0 -> 17629 bytes frontend/assets/img/weapons/kar98k.PNG | Bin 0 -> 18822 bytes frontend/assets/img/weapons/kar98k_x8.PNG | Bin 0 -> 13855 bytes .../assets/img/weapons/lee_enfield_n4.PNG | Bin 0 -> 18130 bytes frontend/assets/img/weapons/luger_p08.PNG | Bin 0 -> 17447 bytes .../assets/img/weapons/m1903_springfield.PNG | Bin 0 -> 14780 bytes frontend/assets/img/weapons/m1_carabine.PNG | Bin 0 -> 19456 bytes frontend/assets/img/weapons/m1_garand.PNG | Bin 0 -> 25789 bytes .../assets/img/weapons/m2_flamethrower.PNG | Bin 0 -> 19206 bytes frontend/assets/img/weapons/m3_grease_gun.PNG | Bin 0 -> 17261 bytes frontend/assets/img/weapons/m97.PNG | Bin 0 -> 12194 bytes frontend/assets/img/weapons/mg34.PNG | Bin 0 -> 17971 bytes frontend/assets/img/weapons/mg42.PNG | Bin 0 -> 20495 bytes .../assets/img/weapons/mosing_nagant_1891.PNG | Bin 0 -> 15972 bytes .../assets/img/weapons/mosing_nagant_9130.PNG | Bin 0 -> 17485 bytes .../assets/img/weapons/mosing_nagant_m38.PNG | Bin 0 -> 15524 bytes frontend/assets/img/weapons/mp40.PNG | Bin 0 -> 20188 bytes frontend/assets/img/weapons/nagant_m1895.PNG | Bin 0 -> 15812 bytes frontend/assets/img/weapons/panzerchreck.PNG | Bin 0 -> 18751 bytes frontend/assets/img/weapons/piat.PNG | Bin 0 -> 18399 bytes frontend/assets/img/weapons/ppsh41.PNG | Bin 0 -> 19307 bytes frontend/assets/img/weapons/ppsh_41w_drum.PNG | Bin 0 -> 18145 bytes frontend/assets/img/weapons/ptrs41.PNG | Bin 0 -> 18633 bytes .../assets/img/weapons/red/bazooka_red.svg | 3 + .../assets/img/weapons/red/bren_gun_red.svg | 3 + .../img/weapons/red/browing_m1919_red.svg | 3 + .../assets/img/weapons/red/colt_1911_red.svg | 3 + frontend/assets/img/weapons/red/dp27_red.svg | 3 + .../img/weapons/red/flammenwefer41_red.svg | 3 + .../assets/img/weapons/red/gewehr_red.svg | 3 + .../assets/img/weapons/red/kar98k_red.svg | 3 + .../assets/img/weapons/red/kar98k_x8_red.svg | 3 + .../img/weapons/red/lee_enfield_n4_red.svg | 3 + .../assets/img/weapons/red/luger_p08_red.svg | 3 + .../img/weapons/red/m1903_springfield_red.svg | 3 + .../img/weapons/red/m1_carabine_red.svg | 3 + .../assets/img/weapons/red/m1_garand_red.svg | 3 + .../img/weapons/red/m2_flamethrower_red.svg | 3 + .../img/weapons/red/m3_grease_gun_red.svg | 3 + frontend/assets/img/weapons/red/m97_red.svg | 3 + frontend/assets/img/weapons/red/mg34_red.svg | 3 + frontend/assets/img/weapons/red/mg42_red.svg | 3 + .../weapons/red/mosing_nagant_1891_red.svg | 3 + .../weapons/red/mosing_nagant_9130_red.svg | 3 + .../img/weapons/red/mosing_nagant_m38_red.svg | 3 + frontend/assets/img/weapons/red/mp40_red.svg | 3 + .../img/weapons/red/nagant_m1895_red.svg | 3 + .../img/weapons/red/panzerchreck_red.svg | 3 + frontend/assets/img/weapons/red/piat_red.svg | 3 + .../assets/img/weapons/red/ppsh41_red.svg | 3 + .../img/weapons/red/ppsh_41w_drum_red.svg | 3 + .../assets/img/weapons/red/ptrs41_red.svg | 3 + .../red/scoped_mosin_nagant_9130_red.svg | 3 + .../img/weapons/red/scoped_svt40_red.svg | 3 + .../assets/img/weapons/red/sten_mk_v_red.svg | 3 + frontend/assets/img/weapons/red/stg44_red.svg | 3 + frontend/assets/img/weapons/red/svt40_red.svg | 3 + .../assets/img/weapons/red/thompson_red.svg | 3 + .../img/weapons/red/tokarev_tt33_red.svg | 3 + .../img/weapons/red/walther_p38_red.svg | 3 + .../img/weapons/red/webley_revolver_red.svg | 3 + .../img/weapons/scoped_mosin_nagant_9130.PNG | Bin 0 -> 21907 bytes frontend/assets/img/weapons/scoped_svt40.PNG | Bin 0 -> 19742 bytes frontend/assets/img/weapons/sten_mk_v.PNG | Bin 0 -> 16891 bytes frontend/assets/img/weapons/stg44.PNG | Bin 0 -> 21841 bytes frontend/assets/img/weapons/svt40.PNG | Bin 0 -> 20469 bytes frontend/assets/img/weapons/thompson.PNG | Bin 0 -> 23017 bytes frontend/assets/img/weapons/tokarev_tt33.PNG | Bin 0 -> 15343 bytes frontend/assets/img/weapons/walther_p38.PNG | Bin 0 -> 15978 bytes .../assets/img/weapons/webley_revolver.PNG | Bin 0 -> 21901 bytes .../img/weapons/white/bazooka_white.svg | 3 + .../img/weapons/white/bren_gun_white.svg | 3 + .../img/weapons/white/browing_m1919_white.svg | 3 + .../img/weapons/white/colt_1911_white.svg | 3 + .../assets/img/weapons/white/dp27_white.svg | 3 + .../weapons/white/flammenwefer41_white.svg | 3 + .../assets/img/weapons/white/gewehr_white.svg | 3 + .../assets/img/weapons/white/kar98k_white.svg | 3 + .../img/weapons/white/kar98k_x8_white.svg | 3 + .../weapons/white/lee_enfield_n4_white.svg | 3 + .../img/weapons/white/luger_p08_white.svg | 3 + .../weapons/white/m1903_springfield_white.svg | 3 + .../img/weapons/white/m1_carabine_white.svg | 3 + .../img/weapons/white/m1_garand_white.svg | 3 + .../weapons/white/m2_flamethrower_white.svg | 3 + .../img/weapons/white/m3_grease_gun_white.svg | 3 + .../assets/img/weapons/white/m97_white.svg | 3 + .../assets/img/weapons/white/mg34_white.svg | 3 + .../assets/img/weapons/white/mg42_white.svg | 3 + .../white/mosing_nagant_1891_white.svg | 3 + .../white/mosing_nagant_9130_white.svg | 3 + .../weapons/white/mosing_nagant_m38_white.svg | 3 + .../assets/img/weapons/white/mp40_white.svg | 3 + .../img/weapons/white/nagant_m1895_white.svg | 3 + .../img/weapons/white/panzerchreck_white.svg | 3 + .../assets/img/weapons/white/piat_white.svg | 3 + .../assets/img/weapons/white/ppsh41_white.svg | 3 + .../img/weapons/white/ppsh_41w_drum_white.svg | 3 + .../assets/img/weapons/white/ptrs41_white.svg | 3 + .../white/scoped_mosin_nagant_9130_white.svg | 3 + .../img/weapons/white/scoped_svt40_white.svg | 3 + .../img/weapons/white/sten_mk_v_white.svg | 3 + .../assets/img/weapons/white/stg44_white.svg | 3 + .../assets/img/weapons/white/svt40_white.svg | 3 + .../img/weapons/white/thompson_white.svg | 3 + .../img/weapons/white/tokarev_tt33_white.svg | 3 + .../img/weapons/white/walther_p38_white.svg | 3 + .../weapons/white/webley_revolver_white.svg | 3 + frontend/assets/js/config.js | 70 + frontend/assets/js/historico-partida.js | 979 +++++ frontend/assets/js/historico-recent-live.js | 363 ++ frontend/assets/js/historico.js | 1939 ++++++++++ frontend/assets/js/main.js | 611 +++ frontend/assets/js/partida-actual.js | 922 +++++ frontend/historico-partida.html | 167 + frontend/historico.html | 229 ++ frontend/index.html | 128 + frontend/partida-actual.html | 139 + .../run-historical-ui-regression-tests.ps1 | 95 + scripts/run-rcon-data-pipeline-tests.ps1 | 123 + 309 files changed, 45497 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 backend/.dockerignore create mode 100644 backend/.env.example create mode 100644 backend/Dockerfile create mode 100644 backend/README.md create mode 100644 backend/app/__init__.py create mode 100644 backend/app/a2s_client.py create mode 100644 backend/app/collector.py create mode 100644 backend/app/config.py create mode 100644 backend/app/data_sources.py create mode 100644 backend/app/database_maintenance.py create mode 100644 backend/app/elo_mmr_engine.py create mode 100644 backend/app/elo_mmr_models.py create mode 100644 backend/app/elo_mmr_storage.py create mode 100644 backend/app/historical_ingestion.py create mode 100644 backend/app/historical_models.py create mode 100644 backend/app/historical_runner.py create mode 100644 backend/app/historical_snapshot_storage.py create mode 100644 backend/app/historical_snapshots.py create mode 100644 backend/app/historical_storage.py create mode 100644 backend/app/main.py create mode 100644 backend/app/monthly_mvp.py create mode 100644 backend/app/monthly_mvp_v2.py create mode 100644 backend/app/normalizers.py create mode 100644 backend/app/payloads.py create mode 100644 backend/app/player_event_aggregates.py create mode 100644 backend/app/player_event_models.py create mode 100644 backend/app/player_event_source.py create mode 100644 backend/app/player_event_storage.py create mode 100644 backend/app/player_event_worker.py create mode 100644 backend/app/player_external_profiles.py create mode 100644 backend/app/postgres_display_storage.py create mode 100644 backend/app/postgres_rcon_storage.py create mode 100644 backend/app/providers/player_event_source_provider.py create mode 100644 backend/app/providers/public_scoreboard_provider.py create mode 100644 backend/app/providers/rcon_provider.py create mode 100644 backend/app/rcon_admin_log_ingestion.py create mode 100644 backend/app/rcon_admin_log_materialization.py create mode 100644 backend/app/rcon_admin_log_parser.py create mode 100644 backend/app/rcon_admin_log_storage.py create mode 100644 backend/app/rcon_client.py create mode 100644 backend/app/rcon_historical_backfill.py create mode 100644 backend/app/rcon_historical_backfill_operational.py create mode 100644 backend/app/rcon_historical_leaderboards.py create mode 100644 backend/app/rcon_historical_read_model.py create mode 100644 backend/app/rcon_historical_storage.py create mode 100644 backend/app/rcon_historical_worker.py create mode 100644 backend/app/rcon_scoreboard_correlation.py create mode 100644 backend/app/rcon_scoreboard_relink.py create mode 100644 backend/app/routes.py create mode 100644 backend/app/scheduler.py create mode 100644 backend/app/scoreboard_candidate_backfill.py create mode 100644 backend/app/scoreboard_correlation_diagnostics.py create mode 100644 backend/app/scoreboard_origins.py create mode 100644 backend/app/server_targets.py create mode 100644 backend/app/snapshots.py create mode 100644 backend/app/sqlite_to_postgres_migration.py create mode 100644 backend/app/sqlite_utils.py create mode 100644 backend/app/storage.py create mode 100644 backend/app/storage_diagnostics.py create mode 100644 backend/app/writer_lock.py create mode 100644 backend/data/.gitkeep create mode 100644 backend/data/snapshots/.gitkeep create mode 100644 backend/requirements.txt create mode 100644 backend/tests/test_current_match_payload.py create mode 100644 backend/tests/test_database_maintenance.py create mode 100644 backend/tests/test_historical_runner_maintenance.py create mode 100644 backend/tests/test_historical_snapshot_refresh.py create mode 100644 backend/tests/test_json_serialization.py create mode 100644 backend/tests/test_rcon_admin_log_parser.py create mode 100644 backend/tests/test_rcon_admin_log_storage.py create mode 100644 backend/tests/test_rcon_historical_backfill.py create mode 100644 backend/tests/test_rcon_materialization_pipeline.py create mode 100644 backend/tests/test_scoreboard_match_links.py create mode 100644 deploy/jta/.env.example create mode 100644 deploy/jta/README.md create mode 100644 deploy/jta/backups/.gitkeep create mode 100644 deploy/jta/docker-compose.yml create mode 100644 deploy/portainer/Caddyfile.example create mode 100644 deploy/portainer/docker-compose.nas.yml create mode 100644 deploy/portainer/stack.env.example create mode 100644 docker-compose.yml create mode 100644 docs/crcon-advanced-metrics-origin-audit.md create mode 100644 docs/current-hll-data-ingestion-plan.md create mode 100644 docs/current-hll-servers-source-plan.md create mode 100644 docs/database-maintenance.md create mode 100644 docs/decisions.md create mode 100644 docs/deployment/nas-portainer.md create mode 100644 docs/discord-and-server-data-plan.md create mode 100644 docs/elo-mmr-monthly-ranking-design.md create mode 100644 docs/frontend-backend-contract.md create mode 100644 docs/frontend-data-consumption-plan.md create mode 100644 docs/historical-coverage-report.md create mode 100644 docs/historical-crcon-source-discovery.md create mode 100644 docs/historical-data-quality-notes.md create mode 100644 docs/historical-domain-model.md create mode 100644 docs/historical-rcon-backfill.md create mode 100644 docs/monthly-mvp-ranking-scoring-design.md create mode 100644 docs/monthly-mvp-v2-scoring-design.md create mode 100644 docs/monthly-player-ranking-data-audit.md create mode 100644 docs/player-event-pipeline-v2-design.md create mode 100644 docs/project-overview.md create mode 100644 docs/rcon-data-capability-audit.md create mode 100644 docs/rcon-historical-ingestion-design.md create mode 100644 docs/roadmap.md create mode 100644 docs/scoreboard-correlation-debugging.md create mode 100644 docs/stats-database-schema-foundation.md create mode 100644 frontend/.dockerignore create mode 100644 frontend/Dockerfile create mode 100644 frontend/assets/css/hero-header-compact.css create mode 100644 frontend/assets/css/historico-scoreboard-detail.css create mode 100644 frontend/assets/css/historico.css create mode 100644 frontend/assets/css/styles.css create mode 100644 frontend/assets/img/.gitkeep create mode 100644 frontend/assets/img/clans/250hispania-shield.png create mode 100644 frontend/assets/img/clans/250hispania.png create mode 100644 frontend/assets/img/clans/7dv.png create mode 100644 frontend/assets/img/clans/bxb.png create mode 100644 frontend/assets/img/clans/h9h.png create mode 100644 frontend/assets/img/clans/la129.png create mode 100644 frontend/assets/img/clans/lcm.png create mode 100644 frontend/assets/img/factions/britain.webp create mode 100644 frontend/assets/img/factions/germany.webp create mode 100644 frontend/assets/img/factions/soviets.webp create mode 100644 frontend/assets/img/factions/us.webp create mode 100644 frontend/assets/img/logo.png create mode 100644 frontend/assets/img/maps/carentan-day.webp create mode 100644 frontend/assets/img/maps/driel-day.webp create mode 100644 frontend/assets/img/maps/elalamein-day.webp create mode 100644 frontend/assets/img/maps/elsenbornridge-day.webp create mode 100644 frontend/assets/img/maps/foy-day.webp create mode 100644 frontend/assets/img/maps/hill400-day.webp create mode 100644 frontend/assets/img/maps/hurtgenforest-day.webp create mode 100644 frontend/assets/img/maps/kharkov-day.webp create mode 100644 frontend/assets/img/maps/kursk-day.webp create mode 100644 frontend/assets/img/maps/mortain-day.webp create mode 100644 frontend/assets/img/maps/omahabeach-day.webp create mode 100644 frontend/assets/img/maps/purpleheartlane-rain.webp create mode 100644 frontend/assets/img/maps/smolensk-day.webp create mode 100644 frontend/assets/img/maps/stmariedumont-day.webp create mode 100644 frontend/assets/img/maps/stmereeglise-day.webp create mode 100644 frontend/assets/img/maps/tobruk-dawn.webp create mode 100644 frontend/assets/img/maps/tobruk-day.webp create mode 100644 frontend/assets/img/maps/utahbeach-day.webp create mode 100644 frontend/assets/img/weapons/bazooka.PNG create mode 100644 frontend/assets/img/weapons/black/bazooka_black.svg create mode 100644 frontend/assets/img/weapons/black/bren_gun_black.svg create mode 100644 frontend/assets/img/weapons/black/browing_m1919_black.svg create mode 100644 frontend/assets/img/weapons/black/colt_1911_black.svg create mode 100644 frontend/assets/img/weapons/black/dp27_black.svg create mode 100644 frontend/assets/img/weapons/black/flammenwefer41_black.svg create mode 100644 frontend/assets/img/weapons/black/gewehr_black.svg create mode 100644 frontend/assets/img/weapons/black/kar98k_black.svg create mode 100644 frontend/assets/img/weapons/black/kar98k_x8_black.svg create mode 100644 frontend/assets/img/weapons/black/lee_enfield_n4_black.svg create mode 100644 frontend/assets/img/weapons/black/luger_p08_black.svg create mode 100644 frontend/assets/img/weapons/black/m1903_springfield_black.svg create mode 100644 frontend/assets/img/weapons/black/m1_carabine_black.svg create mode 100644 frontend/assets/img/weapons/black/m1_garand_black.svg create mode 100644 frontend/assets/img/weapons/black/m2_flamethrower_black.svg create mode 100644 frontend/assets/img/weapons/black/m3_grease_gun_black.svg create mode 100644 frontend/assets/img/weapons/black/m97_black.svg create mode 100644 frontend/assets/img/weapons/black/mg34_black.svg create mode 100644 frontend/assets/img/weapons/black/mg42_black.svg create mode 100644 frontend/assets/img/weapons/black/mosing_nagant_1891_black.svg create mode 100644 frontend/assets/img/weapons/black/mosing_nagant_9130_black.svg create mode 100644 frontend/assets/img/weapons/black/mosing_nagant_m38_black.svg create mode 100644 frontend/assets/img/weapons/black/mp40_black.svg create mode 100644 frontend/assets/img/weapons/black/nagant_m1895_black.svg create mode 100644 frontend/assets/img/weapons/black/panzerchreck_black.svg create mode 100644 frontend/assets/img/weapons/black/piat_black.svg create mode 100644 frontend/assets/img/weapons/black/ppsh41_black.svg create mode 100644 frontend/assets/img/weapons/black/ppsh_41w_drum_black.svg create mode 100644 frontend/assets/img/weapons/black/ptrs41_black.svg create mode 100644 frontend/assets/img/weapons/black/scoped_mosin_nagant_9130_black.svg create mode 100644 frontend/assets/img/weapons/black/scoped_svt40_black.svg create mode 100644 frontend/assets/img/weapons/black/sten_mk_v_black.svg create mode 100644 frontend/assets/img/weapons/black/stg44_black.svg create mode 100644 frontend/assets/img/weapons/black/svt40_black.svg create mode 100644 frontend/assets/img/weapons/black/thompson_black.svg create mode 100644 frontend/assets/img/weapons/black/tokarev_tt33_black.svg create mode 100644 frontend/assets/img/weapons/black/walther_p38_black.svg create mode 100644 frontend/assets/img/weapons/black/webley_revolver_black.svg create mode 100644 frontend/assets/img/weapons/bren_gun.PNG create mode 100644 frontend/assets/img/weapons/browing_m1919.PNG create mode 100644 frontend/assets/img/weapons/colt_1911.PNG create mode 100644 frontend/assets/img/weapons/dp27.PNG create mode 100644 frontend/assets/img/weapons/flammenwefer41.PNG create mode 100644 frontend/assets/img/weapons/gewehr.PNG create mode 100644 frontend/assets/img/weapons/kar98k.PNG create mode 100644 frontend/assets/img/weapons/kar98k_x8.PNG create mode 100644 frontend/assets/img/weapons/lee_enfield_n4.PNG create mode 100644 frontend/assets/img/weapons/luger_p08.PNG create mode 100644 frontend/assets/img/weapons/m1903_springfield.PNG create mode 100644 frontend/assets/img/weapons/m1_carabine.PNG create mode 100644 frontend/assets/img/weapons/m1_garand.PNG create mode 100644 frontend/assets/img/weapons/m2_flamethrower.PNG create mode 100644 frontend/assets/img/weapons/m3_grease_gun.PNG create mode 100644 frontend/assets/img/weapons/m97.PNG create mode 100644 frontend/assets/img/weapons/mg34.PNG create mode 100644 frontend/assets/img/weapons/mg42.PNG create mode 100644 frontend/assets/img/weapons/mosing_nagant_1891.PNG create mode 100644 frontend/assets/img/weapons/mosing_nagant_9130.PNG create mode 100644 frontend/assets/img/weapons/mosing_nagant_m38.PNG create mode 100644 frontend/assets/img/weapons/mp40.PNG create mode 100644 frontend/assets/img/weapons/nagant_m1895.PNG create mode 100644 frontend/assets/img/weapons/panzerchreck.PNG create mode 100644 frontend/assets/img/weapons/piat.PNG create mode 100644 frontend/assets/img/weapons/ppsh41.PNG create mode 100644 frontend/assets/img/weapons/ppsh_41w_drum.PNG create mode 100644 frontend/assets/img/weapons/ptrs41.PNG create mode 100644 frontend/assets/img/weapons/red/bazooka_red.svg create mode 100644 frontend/assets/img/weapons/red/bren_gun_red.svg create mode 100644 frontend/assets/img/weapons/red/browing_m1919_red.svg create mode 100644 frontend/assets/img/weapons/red/colt_1911_red.svg create mode 100644 frontend/assets/img/weapons/red/dp27_red.svg create mode 100644 frontend/assets/img/weapons/red/flammenwefer41_red.svg create mode 100644 frontend/assets/img/weapons/red/gewehr_red.svg create mode 100644 frontend/assets/img/weapons/red/kar98k_red.svg create mode 100644 frontend/assets/img/weapons/red/kar98k_x8_red.svg create mode 100644 frontend/assets/img/weapons/red/lee_enfield_n4_red.svg create mode 100644 frontend/assets/img/weapons/red/luger_p08_red.svg create mode 100644 frontend/assets/img/weapons/red/m1903_springfield_red.svg create mode 100644 frontend/assets/img/weapons/red/m1_carabine_red.svg create mode 100644 frontend/assets/img/weapons/red/m1_garand_red.svg create mode 100644 frontend/assets/img/weapons/red/m2_flamethrower_red.svg create mode 100644 frontend/assets/img/weapons/red/m3_grease_gun_red.svg create mode 100644 frontend/assets/img/weapons/red/m97_red.svg create mode 100644 frontend/assets/img/weapons/red/mg34_red.svg create mode 100644 frontend/assets/img/weapons/red/mg42_red.svg create mode 100644 frontend/assets/img/weapons/red/mosing_nagant_1891_red.svg create mode 100644 frontend/assets/img/weapons/red/mosing_nagant_9130_red.svg create mode 100644 frontend/assets/img/weapons/red/mosing_nagant_m38_red.svg create mode 100644 frontend/assets/img/weapons/red/mp40_red.svg create mode 100644 frontend/assets/img/weapons/red/nagant_m1895_red.svg create mode 100644 frontend/assets/img/weapons/red/panzerchreck_red.svg create mode 100644 frontend/assets/img/weapons/red/piat_red.svg create mode 100644 frontend/assets/img/weapons/red/ppsh41_red.svg create mode 100644 frontend/assets/img/weapons/red/ppsh_41w_drum_red.svg create mode 100644 frontend/assets/img/weapons/red/ptrs41_red.svg create mode 100644 frontend/assets/img/weapons/red/scoped_mosin_nagant_9130_red.svg create mode 100644 frontend/assets/img/weapons/red/scoped_svt40_red.svg create mode 100644 frontend/assets/img/weapons/red/sten_mk_v_red.svg create mode 100644 frontend/assets/img/weapons/red/stg44_red.svg create mode 100644 frontend/assets/img/weapons/red/svt40_red.svg create mode 100644 frontend/assets/img/weapons/red/thompson_red.svg create mode 100644 frontend/assets/img/weapons/red/tokarev_tt33_red.svg create mode 100644 frontend/assets/img/weapons/red/walther_p38_red.svg create mode 100644 frontend/assets/img/weapons/red/webley_revolver_red.svg create mode 100644 frontend/assets/img/weapons/scoped_mosin_nagant_9130.PNG create mode 100644 frontend/assets/img/weapons/scoped_svt40.PNG create mode 100644 frontend/assets/img/weapons/sten_mk_v.PNG create mode 100644 frontend/assets/img/weapons/stg44.PNG create mode 100644 frontend/assets/img/weapons/svt40.PNG create mode 100644 frontend/assets/img/weapons/thompson.PNG create mode 100644 frontend/assets/img/weapons/tokarev_tt33.PNG create mode 100644 frontend/assets/img/weapons/walther_p38.PNG create mode 100644 frontend/assets/img/weapons/webley_revolver.PNG create mode 100644 frontend/assets/img/weapons/white/bazooka_white.svg create mode 100644 frontend/assets/img/weapons/white/bren_gun_white.svg create mode 100644 frontend/assets/img/weapons/white/browing_m1919_white.svg create mode 100644 frontend/assets/img/weapons/white/colt_1911_white.svg create mode 100644 frontend/assets/img/weapons/white/dp27_white.svg create mode 100644 frontend/assets/img/weapons/white/flammenwefer41_white.svg create mode 100644 frontend/assets/img/weapons/white/gewehr_white.svg create mode 100644 frontend/assets/img/weapons/white/kar98k_white.svg create mode 100644 frontend/assets/img/weapons/white/kar98k_x8_white.svg create mode 100644 frontend/assets/img/weapons/white/lee_enfield_n4_white.svg create mode 100644 frontend/assets/img/weapons/white/luger_p08_white.svg create mode 100644 frontend/assets/img/weapons/white/m1903_springfield_white.svg create mode 100644 frontend/assets/img/weapons/white/m1_carabine_white.svg create mode 100644 frontend/assets/img/weapons/white/m1_garand_white.svg create mode 100644 frontend/assets/img/weapons/white/m2_flamethrower_white.svg create mode 100644 frontend/assets/img/weapons/white/m3_grease_gun_white.svg create mode 100644 frontend/assets/img/weapons/white/m97_white.svg create mode 100644 frontend/assets/img/weapons/white/mg34_white.svg create mode 100644 frontend/assets/img/weapons/white/mg42_white.svg create mode 100644 frontend/assets/img/weapons/white/mosing_nagant_1891_white.svg create mode 100644 frontend/assets/img/weapons/white/mosing_nagant_9130_white.svg create mode 100644 frontend/assets/img/weapons/white/mosing_nagant_m38_white.svg create mode 100644 frontend/assets/img/weapons/white/mp40_white.svg create mode 100644 frontend/assets/img/weapons/white/nagant_m1895_white.svg create mode 100644 frontend/assets/img/weapons/white/panzerchreck_white.svg create mode 100644 frontend/assets/img/weapons/white/piat_white.svg create mode 100644 frontend/assets/img/weapons/white/ppsh41_white.svg create mode 100644 frontend/assets/img/weapons/white/ppsh_41w_drum_white.svg create mode 100644 frontend/assets/img/weapons/white/ptrs41_white.svg create mode 100644 frontend/assets/img/weapons/white/scoped_mosin_nagant_9130_white.svg create mode 100644 frontend/assets/img/weapons/white/scoped_svt40_white.svg create mode 100644 frontend/assets/img/weapons/white/sten_mk_v_white.svg create mode 100644 frontend/assets/img/weapons/white/stg44_white.svg create mode 100644 frontend/assets/img/weapons/white/svt40_white.svg create mode 100644 frontend/assets/img/weapons/white/thompson_white.svg create mode 100644 frontend/assets/img/weapons/white/tokarev_tt33_white.svg create mode 100644 frontend/assets/img/weapons/white/walther_p38_white.svg create mode 100644 frontend/assets/img/weapons/white/webley_revolver_white.svg create mode 100644 frontend/assets/js/config.js create mode 100644 frontend/assets/js/historico-partida.js create mode 100644 frontend/assets/js/historico-recent-live.js create mode 100644 frontend/assets/js/historico.js create mode 100644 frontend/assets/js/main.js create mode 100644 frontend/assets/js/partida-actual.js create mode 100644 frontend/historico-partida.html create mode 100644 frontend/historico.html create mode 100644 frontend/index.html create mode 100644 frontend/partida-actual.html create mode 100644 scripts/run-historical-ui-regression-tests.ps1 create mode 100644 scripts/run-rcon-data-pipeline-tests.ps1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31b24dd --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +.venv/ +__pycache__/ +*.pyc +node_modules/ +.idea/ +.vscode/ +dist/ +build/ +.DS_Store +Thumbs.db + +# Local AI worker/runtime artifacts +ai/worker.lock +ai/reports/*.md +!ai/reports/.gitkeep + +# Local backend runtime data +backend/runtime/ +backend/data/*.sqlite3 +backend/data/*.writer.lock +!backend/data/.gitkeep +backend/data/snapshots/** +!backend/data/snapshots/.gitkeep +.env +backend/data/*.sqlite3-shm +backend/data/*.sqlite3-wal diff --git a/README.md b/README.md new file mode 100644 index 0000000..2ac8dbc --- /dev/null +++ b/README.md @@ -0,0 +1,261 @@ +# HLL Vietnam + +HLL Vietnam es la base inicial del repositorio para una futura web de comunidad enfocada en la comunidad hispana de Discord del juego HLL Vietnam. + +En esta primera fase, el proyecto se centra en una landing sencilla, limpia y profesional que sirva como punto de entrada para la comunidad. La implementacion actual utiliza HTML, CSS y JavaScript sin frameworks pesados para mantener una base facil de mantener y ampliar. + +## Estado actual + +- Landing inicial de comunidad. +- Estructura de repositorio preparada para crecer. +- Carpeta de backend reservada para una futura implementacion en Python. +- Carpeta `ai/` ya integrada como capa operativa para orquestacion por tasks y trabajo con Codex. + +## Estructura del repositorio + +```text +/ +|-- README.md +|-- .gitignore +|-- AGENTS.md +|-- docs/ +| |-- project-overview.md +| |-- roadmap.md +| `-- decisions.md +|-- frontend/ +| |-- index.html +| |-- historico.html +| |-- Dockerfile +| |-- .dockerignore +| `-- assets/ +| |-- css/ +| |-- js/ +| `-- img/ +|-- backend/ +| |-- README.md +| |-- requirements.txt +| |-- Dockerfile +| |-- .dockerignore +| |-- .env.example +| `-- app/ +| `-- __init__.py +|-- ai/ +| |-- README.md +| |-- architecture-index.md +| |-- repo-context.md +| |-- system-metrics.md +| |-- task-template.md +| |-- prompts/ +| | `-- plan-feature.md +| |-- orchestrator/ +| | `-- README.md +| `-- tasks/ +| |-- pending/ +| |-- in-progress/ +| `-- done/ +|-- docker-compose.yml +`-- scripts/ +``` + +## Backend futuro + +El backend principal esta previsto en Python, pero en esta fase no se introduce infraestructura final de produccion. La base actual prioriza un bootstrap pequeno, una persistencia local clara y una evolucion controlada. + +## Como abrir el frontend localmente + +1. Ve a la carpeta `frontend/`. +2. Abre `index.html` directamente en el navegador. + +No hace falta servidor para esta primera version. + +## Ejecucion con Docker + +El repositorio ya incluye: + +- `backend/Dockerfile` +- `frontend/Dockerfile` +- `docker-compose.yml` +- `backend/.env.example` + +Seleccion de proveedor por entorno hoy: + +- desarrollo: + - `HLL_BACKEND_LIVE_DATA_SOURCE=rcon` + - `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon` +- produccion realista en esta fase: + - `HLL_BACKEND_LIVE_DATA_SOURCE=rcon` + - `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon` + +Esto refleja la politica operativa actual: RCON es la fuente primaria para +live e historico. El scoreboard publico queda como fallback historico cuando +RCON falla, no cubre una operacion concreta o aun no tiene cobertura suficiente. + +Modo normal recomendado: + +- levantar solo `backend` + `frontend` +- mantener `historical-runner` y `rcon-historical-worker` como servicios + avanzados bajo demanda +- mantener Comunidad Hispana #03 fuera de los targets RCON por defecto +- dejar Elo/MMR y la materializacion historica compleja en pausa operativa + hasta una reintroduccion explicita + +Primer arranque: + +```powershell +docker compose up --build +``` + +Con la configuracion actual, ese comando levanta solo `backend` y `frontend`. +Los workers historicos estan en el perfil Compose `advanced` y no forman parte +del arranque normal. + +Accesos locales esperados: + +- frontend: `http://localhost:8080` +- backend: `http://localhost:8000` +- health del backend: `http://localhost:8000/health` + +Persistencia: + +- el SQLite historico se conserva en `backend/data/hll_vietnam_dev.sqlite3` +- los snapshots JSON se conservan en `backend/data/snapshots/` +- `docker-compose.yml` monta `./backend/data` dentro del contenedor en `/app/data` + +Reinicio normal: + +```powershell +docker compose up -d +``` + +Parada: + +```powershell +docker compose down +``` + +Recreacion de imagenes tras cambios: + +```powershell +docker compose up --build +``` + +## Runbook de proveedores + +Verificacion minima del proveedor activo: + +```powershell +Invoke-WebRequest http://localhost:8000/health | Select-Object -Expand Content +``` + +La respuesta incluye `live_data_source` y `historical_data_source`. + +Modo desarrollo recomendado: + +```powershell +docker compose up --build +``` + +Modo live con RCON en Docker Compose: + +```powershell +$env:HLL_BACKEND_LIVE_DATA_SOURCE='rcon' +$env:HLL_BACKEND_HISTORICAL_DATA_SOURCE='rcon' +$env:HLL_BACKEND_RCON_TARGETS='[ + { + "name": "Comunidad Hispana #01", + "host": "203.0.113.10", + "port": 28015, + "password": "replace-me", + "external_server_id": "comunidad-hispana-01", + "region": "ES", + "game_port": 7777, + "query_port": 7778 + } +]' +docker compose up -d backend frontend +``` + +Buenas practicas: + +- no versionar credenciales reales en `backend/.env.example` +- preferir exportarlas como variables de entorno del host o del secreto del + despliegue +- mantener `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon` como valor normal y usar + `public-scoreboard` solo como fallback historico controlado +- no reintroducir Comunidad Hispana #03 en `HLL_BACKEND_RCON_TARGETS` salvo que + una task nueva valide su disponibilidad + +## Operaciones historicas avanzadas con Docker + +Estas operaciones quedan disponibles para uso explicito, pero no son parte del +arranque recomendado. La ruta normal de despliegue es `backend` + `frontend`. +El codigo, las migraciones, los snapshots historicos y Elo/MMR se conservan en +la repo, pero Elo/MMR y la materializacion historica compleja quedan pausados +operativamente en esta fase. + +Refresh historico puntual dentro del contenedor backend: + +```powershell +docker compose exec backend python -m app.historical_ingestion refresh +``` + +Bootstrap o backfill historico: + +```powershell +docker compose exec backend python -m app.historical_ingestion bootstrap +``` + +Regeneracion puntual de snapshots mediante refresh controlado: + +```powershell +docker compose exec backend python -m app.historical_runner --max-runs 1 +``` + +Automatizacion horaria avanzada: + +```powershell +docker compose --profile advanced up -d backend historical-runner frontend +``` + +`historical-runner` es un servicio Compose separado que ejecuta +`python -m app.historical_runner --hourly`. Sigue disponible para tareas +historicas explicitas, pero no se recomienda como requisito normal de +despliegue. Los targets RCON por defecto solo incluyen `comunidad-hispana-01` +y `comunidad-hispana-02`; `comunidad-hispana-03` queda deshabilitado en la +configuracion por defecto porque ya no es una fuente operativa vigente. + +Verificacion minima: + +- `docker compose ps historical-runner` +- `docker compose logs -f historical-runner` +- revisar `generated_at` en `backend/data/snapshots/` + +## Arquitectura historica RCON-first + +La linea historica actual usa RCON como fuente primaria. El flujo previsto es: + +- captura de sesiones RCON para cobertura, frescura y ventanas competitivas +- ingesta de AdminLog mediante `app.rcon_admin_log_ingestion` +- parsing de eventos AdminLog hacia eventos normalizados +- almacenamiento en tablas `rcon_admin_log_*` y `rcon_historical_*` +- materializacion de partidas cerradas y estadisticas de jugador desde eventos RCON +- enriquecimiento opcional con snapshots de perfil de jugador, sin tratarlos + como hechos autoritativos de una partida + +El scoreboard publico queda limitado a enriquecimiento, links confiables o +fallback historico cuando RCON falla, no tiene cobertura suficiente o no cubre +una operacion concreta. Elo/MMR sigue pausado y Comunidad Hispana #03 permanece +fuera de los targets RCON por defecto. + +Comandos manuales RCON dentro del contenedor backend: + +```powershell +docker compose exec backend python -m app.rcon_admin_log_ingestion --minutes 1440 +docker compose exec backend python -m app.rcon_historical_worker capture +``` + +Si se prefiere operar fuera de Docker, el backend sigue pudiendo arrancar localmente con `python -m app.main` desde `backend/`. + +## Evolucion prevista + +La capa inspirada en `ai-dev-platform-template` ya esta integrada y adaptada al contexto real de HLL Vietnam. Las siguientes iteraciones deben centrarse en usarla para planificar y ejecutar tasks reales del producto sin ampliar alcance fuera de ese flujo. diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..50e1456 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,11 @@ +.git +.gitignore +.venv/ +__pycache__/ +*.pyc +*.pyo +*.pyd +data/*.sqlite3 +data/snapshots/** +!data/.gitkeep +!data/snapshots/.gitkeep diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..c252827 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,21 @@ +HLL_BACKEND_HOST=0.0.0.0 +HLL_BACKEND_PORT=8000 +HLL_BACKEND_STORAGE_PATH=/app/data/hll_vietnam_dev.sqlite3 +HLL_BACKEND_DATABASE_URL=postgresql://hll_vietnam:hll_vietnam_dev@postgres:5432/hll_vietnam +HLL_BACKEND_ALLOWED_ORIGINS=http://127.0.0.1,http://127.0.0.1:8080,http://localhost,http://localhost:8080 +HLL_BACKEND_REFRESH_INTERVAL_SECONDS=120 +HLL_BACKEND_LIVE_DATA_SOURCE=rcon +HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon +HLL_BACKEND_RCON_TIMEOUT_SECONDS=20 +HLL_BACKEND_RCON_TARGETS=[{"name":"Comunidad Hispana #01","slug":"comunidad-hispana-01","external_server_id":"comunidad-hispana-01","host":"152.114.195.174","port":7779,"password":"replace-me-01","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null},{"name":"Comunidad Hispana #02","slug":"comunidad-hispana-02","external_server_id":"comunidad-hispana-02","host":"152.114.195.150","port":7879,"password":"replace-me-02","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null}] +HLL_HISTORICAL_CRCON_PAGE_SIZE=50 +HLL_HISTORICAL_CRCON_TIMEOUT_SECONDS=15 +HLL_HISTORICAL_CRCON_DETAIL_WORKERS=8 +HLL_HISTORICAL_CRCON_REQUEST_RETRIES=3 +HLL_HISTORICAL_CRCON_RETRY_DELAY_SECONDS=0.5 +HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS=900 +HLL_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS=4 +HLL_HISTORICAL_REFRESH_MAX_RETRIES=2 +HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS=30 +HLL_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES=3 +HLL_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY=2 diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..f1ff44b --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + HLL_BACKEND_HOST=0.0.0.0 \ + HLL_BACKEND_PORT=8000 \ + HLL_BACKEND_STORAGE_PATH=/app/data/hll_vietnam_dev.sqlite3 + +WORKDIR /app + +COPY requirements.txt ./ +RUN pip install --no-cache-dir --requirement requirements.txt + +COPY app ./app + +RUN mkdir -p /app/data/snapshots + +EXPOSE 8000 + +CMD ["python", "-m", "app.main"] diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..25e74b9 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,1685 @@ +# Backend + +Esta carpeta contiene el bootstrap minimo del futuro backend principal en Python para HLL Vietnam. + +## Objetivo en esta fase + +- dejar un punto de entrada claro para la aplicacion +- validar que el backend puede arrancar localmente +- exponer rutas placeholder coherentes con el contrato frontend-backend + +## Stack actual del bootstrap + +- Python 3 +- libreria estandar de Python (`http.server`, sin frameworks ni dependencias externas) + +## Estructura minima + +```text +backend/ +|-- README.md +|-- requirements.txt +`-- app/ + |-- a2s_client.py + |-- __init__.py + |-- collector.py + |-- main.py + |-- historical_ingestion.py + |-- historical_models.py + |-- historical_runner.py + |-- historical_storage.py + |-- normalizers.py + |-- payloads.py + |-- routes.py + |-- server_targets.py + `-- snapshots.py +``` + +La persistencia local de desarrollo se crea bajo `backend/data/` cuando el +colector la necesita por primera vez. + +`app` es el paquete Python del backend. El archivo correcto del paquete es +`backend/app/__init__.py`; no debe existir una variante `init.py`. + +## Punto de entrada + +El entrypoint real del backend es el modulo `app.main`, ubicado en +`backend/app/main.py`. + +Desde la carpeta `backend/`, se puede arrancar localmente con: + +```powershell +python -m app.main +``` + +Ese comando usa imports relativos de paquete (`from .routes import ...`), por lo +que la forma soportada de arranque es por modulo y no ejecutando el archivo como +script suelto. + +Por defecto escuchara en `127.0.0.1:8000`. + +Variables opcionales: + +- `HLL_BACKEND_HOST` +- `HLL_BACKEND_PORT` +- `HLL_BACKEND_ALLOWED_ORIGINS` +- `HLL_BACKEND_REFRESH_INTERVAL_SECONDS` +- `HLL_BACKEND_LIVE_DATA_SOURCE` +- `HLL_BACKEND_HISTORICAL_DATA_SOURCE` +- `HLL_BACKEND_RCON_TIMEOUT_SECONDS` +- `HLL_BACKEND_RCON_TARGETS` +- `HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS` +- `HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES` +- `HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS` +- `HLL_RCON_BACKFILL_CHUNK_HOURS` +- `HLL_RCON_BACKFILL_SLEEP_SECONDS` +- `HLL_RCON_BACKFILL_MAX_DAYS_BACK` +- `HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES` +- `HLL_BACKEND_SQLITE_WRITER_TIMEOUT_SECONDS` +- `HLL_BACKEND_SQLITE_BUSY_TIMEOUT_MS` +- `HLL_BACKEND_WRITER_LOCK_TIMEOUT_SECONDS` +- `HLL_BACKEND_WRITER_LOCK_POLL_INTERVAL_SECONDS` +- `HLL_HISTORICAL_CRCON_PAGE_SIZE` +- `HLL_HISTORICAL_CRCON_TIMEOUT_SECONDS` +- `HLL_HISTORICAL_CRCON_DETAIL_WORKERS` +- `HLL_HISTORICAL_CRCON_REQUEST_RETRIES` +- `HLL_HISTORICAL_CRCON_RETRY_DELAY_SECONDS` +- `HLL_HISTORICAL_REFRESH_INTERVAL_SECONDS` +- `HLL_HISTORICAL_REFRESH_OVERLAP_HOURS` +- `HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS` +- `HLL_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS` +- `HLL_HISTORICAL_REFRESH_MAX_RETRIES` +- `HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS` +- `HLL_BACKEND_SQLITE_WRITER_TIMEOUT_SECONDS` +- `HLL_BACKEND_SQLITE_BUSY_TIMEOUT_MS` +- `HLL_BACKEND_WRITER_LOCK_TIMEOUT_SECONDS` +- `HLL_BACKEND_WRITER_LOCK_POLL_INTERVAL_SECONDS` +- `HLL_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES` +- `HLL_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY` + +Variables especialmente relevantes para Docker y Compose: + +- `HLL_BACKEND_HOST` +- `HLL_BACKEND_PORT` +- `HLL_BACKEND_DATABASE_URL` +- `HLL_BACKEND_STORAGE_PATH` +- `HLL_BACKEND_ALLOWED_ORIGINS` +- `HLL_BACKEND_LIVE_DATA_SOURCE` +- `HLL_BACKEND_HISTORICAL_DATA_SOURCE` +- `HLL_BACKEND_RCON_TIMEOUT_SECONDS` +- `HLL_BACKEND_RCON_TARGETS` +- `HLL_HISTORICAL_CRCON_PAGE_SIZE` +- `HLL_HISTORICAL_CRCON_TIMEOUT_SECONDS` +- `HLL_HISTORICAL_CRCON_DETAIL_WORKERS` +- `HLL_HISTORICAL_CRCON_REQUEST_RETRIES` +- `HLL_HISTORICAL_CRCON_RETRY_DELAY_SECONDS` +- `HLL_HISTORICAL_REFRESH_OVERLAP_HOURS` +- `HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS` +- `HLL_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS` +- `HLL_HISTORICAL_REFRESH_MAX_RETRIES` +- `HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS` + +Para ejecucion containerizada, el repositorio incluye tambien: + +- `backend/Dockerfile` +- `backend/.dockerignore` +- `backend/.env.example` + +El contenedor usa el mismo entrypoint real del proyecto: + +```powershell +python -m app.main +``` + +Dentro del contenedor arranca por defecto con: + +- `HLL_BACKEND_HOST=0.0.0.0` +- `HLL_BACKEND_PORT=8000` +- `HLL_BACKEND_STORAGE_PATH=/app/data/hll_vietnam_dev.sqlite3` + +Compose configura ademas `HLL_BACKEND_DATABASE_URL` para que PostgreSQL sea el +almacenamiento autoritativo de la fase 1 RCON: muestras/ventanas de captura, +AdminLog, snapshots de perfil y partidas/estadisticas materializadas. Sin esa +variable, la ejecucion local mantiene fallback SQLite para esos dominios. + +Diagnostico rapido del backend activo: + +```powershell +python -m app.storage_diagnostics +``` + +La salida lista el backend RCON activo, counts de las tablas migradas, la ultima +partida materializada por servidor y que superficies siguen temporalmente en +SQLite en esta fase. + +Build local: + +```powershell +docker build -t hll-vietnam-backend ./backend +``` + +Ejecucion local con persistencia bind-mounted: + +```powershell +docker run --rm ` + -p 8000:8000 ` + --env-file backend/.env.example ` + -v ${PWD}\backend\data:/app/data ` + hll-vietnam-backend +``` + +Si se prefiere no usar `--env-file`, el contenedor puede arrancar solo con sus +defaults para host, puerto y path de SQLite. El bind mount de `/app/data` sigue +siendo la forma recomendada de no perder persistencia al recrear el contenedor. + +El `frontend/index.html` viene preparado para volver a consultar el bloque de +servidores cada `120000` ms (`120s`) sin recargar la pagina completa. La landing +lee ese valor desde `data-server-refresh-ms`, por lo que puede ajustarse en el +HTML si una demo local necesita un intervalo distinto. + +Valor por defecto de `HLL_BACKEND_ALLOWED_ORIGINS`: + +- `null` +- `http://127.0.0.1` +- `http://127.0.0.1:5500` +- `http://127.0.0.1:8080` +- `http://localhost` +- `http://localhost:5500` +- `http://localhost:8080` + +Esto cubre el caso de abrir `frontend/index.html` directamente desde `file://` +y los puertos locales mas habituales cuando el frontend se sirve con un +servidor sencillo. + +Prueba local recomendada para validar frontend y backend juntos: + +1. En una terminal, desde `backend/`, arrancar el backend: + + ```powershell + python -m app.main + ``` + +2. En otra terminal, desde `frontend/`, servir la landing: + + ```powershell + python -m http.server 8080 + ``` + +3. Abrir `http://localhost:8080`. + +Si se necesita otra combinacion de origenes locales, puede sobrescribirse +`HLL_BACKEND_ALLOWED_ORIGINS` con una lista separada por comas. El backend +normaliza espacios y barras finales para mantener la comparacion con el header +`Origin` del navegador. + +## Endpoints placeholder disponibles + +- `GET /health` +- `GET /api/community` +- `GET /api/trailer` +- `GET /api/discord` +- `GET /api/servers` +- `GET /api/servers/latest` +- `GET /api/servers/history?limit=20` +- `GET /api/servers/{id}/history?limit=20` +- `GET /api/historical/weekly-top-kills?limit=10&server=comunidad-hispana-01` +- `GET /api/historical/weekly-leaderboard?metric=kills&limit=10&server=comunidad-hispana-01` +- `GET /api/historical/leaderboard?timeframe=monthly&metric=kills&limit=10&server=comunidad-hispana-01` +- `GET /api/historical/monthly-mvp?limit=10&server=comunidad-hispana-01` +- `GET /api/historical/monthly-mvp-v2?limit=10&server=comunidad-hispana-01` +- `GET /api/historical/player-events?view=most-killed&limit=10&server=comunidad-hispana-01` +- `GET /api/historical/recent-matches?limit=20&server=comunidad-hispana-01` +- `GET /api/historical/server-summary?server=comunidad-hispana-01` +- `GET /api/historical/snapshots/server-summary?server=comunidad-hispana-01` +- `GET /api/historical/snapshots/weekly-leaderboard?metric=kills&limit=10&server=comunidad-hispana-01` +- `GET /api/historical/snapshots/leaderboard?timeframe=monthly&metric=kills&limit=10&server=comunidad-hispana-01` +- `GET /api/historical/snapshots/monthly-mvp?limit=10&server=comunidad-hispana-01` +- `GET /api/historical/snapshots/monthly-mvp-v2?limit=10&server=comunidad-hispana-01` +- `GET /api/historical/snapshots/player-events?view=most-killed&limit=10&server=comunidad-hispana-01` +- `GET /api/historical/snapshots/recent-matches?limit=6&server=comunidad-hispana-01` +- `GET /api/historical/player-profile?player=steam%3A76561198000000000` + +`GET /health` expone tambien: + +- `live_data_source` +- `historical_data_source` + +`GET /api/servers` trata el ultimo snapshot persistido como cache local y lo +reutiliza solo si sigue dentro del objetivo de `120` segundos. Si ese snapshot +esta vencido, el endpoint intenta primero una consulta RCON real inmediata +contra los targets configurados. Solo si RCON falla o no devuelve snapshots +utilizables, cae a A2S de forma controlada antes de responder. + +La respuesta incluye metadata de frescura pensada para frontend: + +- `last_snapshot_at` +- `snapshot_age_seconds` +- `snapshot_age_minutes` +- `max_snapshot_age_seconds` +- `is_stale` +- `freshness` +- `source` +- `refresh_attempted` +- `refresh_status` +- `primary_source` +- `selected_source` +- `fallback_used` +- `fallback_reason` +- `source_attempts` + +Si la consulta real falla, `/api/servers` devuelve el ultimo snapshot valido +disponible marcado como stale. Si no existe ningun snapshot valido, responde +`items: []` en lugar de reintroducir servidores de respaldo ajenos a la +comunidad. Cada respuesta deja tambien trazabilidad de arbitraje de fuente para +que sea visible si se sirvio RCON directo o si hubo fallback a A2S. + +Los endpoints historicos leen la persistencia local SQLite creada por el +colector. Si todavia no hay snapshots guardados, responden `status: "ok"` con +`items: []` para mantener un contrato simple en desarrollo. + +## Seleccion de fuente de datos + +El backend separa ahora la fuente de datos del contrato HTTP del producto. +Esto permite cambiar proveedores por entorno sin tocar `routes.py`, payloads de +UI ni el formato consumido por frontend. + +Variables nuevas: + +- `HLL_BACKEND_LIVE_DATA_SOURCE` +- `HLL_BACKEND_HISTORICAL_DATA_SOURCE` + +Valores soportados en esta fase: + +- live: + - `rcon` como camino primario recomendado + - `a2s` como fallback legacy o override explicito +- historico: + - `rcon` como camino primario recomendado para captura y writer path primario + - `public-scoreboard` como fallback legacy controlado + +Defaults actuales: + +- `HLL_BACKEND_LIVE_DATA_SOURCE=rcon` +- `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon` + +La seleccion efectiva se resuelve en `app/data_sources.py` y en adapters +dedicados dentro de `app/providers/`: + +- `get_live_data_source()` entrega el proveedor usado por `payloads.py` + cuando `/api/servers` necesita un refresh real +- `get_historical_data_source()` entrega el proveedor usado por + `historical_ingestion.py` para bootstrap y refresh incremental +- `providers/public_scoreboard_provider.py` encapsula la semantica actual del + scoreboard/CRCON publico bajo el contrato historico +- `providers/rcon_provider.py` encapsula el proveedor live basado en comandos + RCON HLL v2 mediante `ServerConnect`, `Login` y `GetServerInformation` + +Proveedores operativos en esta fase: + +- live `rcon` +- live `a2s` +- historico `rcon` solo para read model minimo y captura prospectiva +- historico `public-scoreboard` como fallback para cobertura competitiva sin paridad RCON + +Politica funcional actual: + +- live: + - RCON primero + - A2S solo si RCON falla o no devuelve snapshots utilizables +- historico/recopilacion: + - RCON primero + - `public-scoreboard` solo si RCON no soporta aun esa operacion concreta o + falla la captura primaria + +Estado real de "historico por RCON" en esta repo: + +- no existe backfill retroactivo por RCON con el cliente actual +- la viabilidad documentada hoy es solo para captura prospectiva separada +- `historical_ingestion.py` intenta primero el writer path prospectivo RCON +- la persistencia competitiva `historical_*` sigue necesitando fallback a + `public-scoreboard` mientras RCON no exponga pagina historica/detalle de + match cerrada con paridad suficiente +- el diseno tecnico de esa linea prospectiva queda en + `docs/rcon-historical-ingestion-design.md` + +Variables especificas de RCON live: + +- `HLL_BACKEND_RCON_TIMEOUT_SECONDS` +- `HLL_BACKEND_RCON_TARGETS` + +Variables especificas de captura historica prospectiva RCON: + +- `HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS` +- `HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES` +- `HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS` + +`HLL_BACKEND_RCON_TARGETS` acepta un array JSON con: + +- `name` +- `slug` opcional como alias legacy +- `host` +- `port` +- `password` +- `external_server_id` opcional +- `region` opcional +- `game_port` opcional +- `query_port` opcional +- `source_name` opcional + +Compatibilidad operativa del loader: + +- si llega `slug` pero no `external_server_id`, el backend reutiliza `slug` + como `external_server_id` +- si falta `name` pero existe `slug`, el backend genera un nombre razonable a + partir del slug en vez de dejar `Unnamed RCON target` +- los errores de validacion indican el campo que falta y las claves + efectivamente recibidas + +Timeout recomendado por defecto: + +- `HLL_BACKEND_RCON_TIMEOUT_SECONDS=20` + +Diagnostico operativo del cliente RCON: + +- el cliente informa ahora el stage exacto del fallo cuando puede distinguirlo +- stages observables: + - `tcp_connect` + - `server_connect_request` + - `server_connect_response` + - `xor_key_decode` + - `login_request` + - `login_response` + - `get_server_information_request` + - `get_server_information_response` + - `payload_decode` + - `unexpected_response` + - `timeout` +- esto mejora el diagnostico del protocolo, pero no resuelve por si solo la + conectividad real si el servidor acepta TCP y luego no responde al handshake + RCON o al comando `GetServerInformation` + +Ejemplo: + +```powershell +$env:HLL_BACKEND_RCON_TARGETS='[ + { + "name": "Comunidad Hispana #01", + "slug": "comunidad-hispana-01", + "host": "152.114.195.174", + "port": 7779, + "password": "replace-me", + "external_server_id": "comunidad-hispana-01", + "region": "ES", + "game_port": null, + "query_port": null, + "source_name": "community-hispana-rcon" + } +]' +``` + +Runbook operativo minimo: + +- modo recomendado por defecto: + - `HLL_BACKEND_LIVE_DATA_SOURCE=rcon` + - `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon` + - usar solo `comunidad-hispana-01` y `comunidad-hispana-02` en los targets + RCON por defecto +- modo historico/RCON avanzado: + - iniciar workers solo de forma explicita + - no reintroducir `comunidad-hispana-03` salvo validacion nueva +- override legacy live/A2S: + - `HLL_BACKEND_LIVE_DATA_SOURCE=a2s` + - `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon` + +Verificacion minima del proveedor activo: + +```powershell +Invoke-WebRequest http://127.0.0.1:8000/health | Select-Object -Expand Content +``` + +La respuesta incluye `live_data_source` y `historical_data_source`, util para +confirmar si la instancia esta usando `a2s` o `rcon` para live. + +Captura historica prospectiva por RCON: + +- se ejecuta fuera del request path HTTP +- persiste muestras live hacia delante en tablas `rcon_historical_*` +- usa RCON como camino historico primario y mantiene `public-scoreboard` solo + como fallback para operaciones competitivas que aun no tienen paridad RCON +- no promete backfill retroactivo de matches ya perdidos + +Arquitectura RCON-first de datos historicos: + +- `app.rcon_historical_worker` captura sesiones RCON y mantiene ventanas + competitivas prospectivas. +- `app.rcon_admin_log_ingestion` ingiere AdminLog para el periodo solicitado. +- `app.rcon_admin_log_parser` normaliza eventos como inicio/cierre de partida, + kills, cambios de equipo, chat y mensajes de perfil. +- `app.rcon_admin_log_storage` persiste eventos AdminLog deduplicados y + snapshots de perfil de jugador. +- `app.rcon_admin_log_materialization` materializa partidas cerradas y + estadisticas por jugador desde eventos RCON. +- `app.rcon_historical_read_model` expone las lecturas historicas actuales y + solo recurre a `public-scoreboard` como fallback/enriquecimiento cuando RCON + no cubre la operacion. + +Comandos manuales equivalentes dentro de Docker Compose: + +```powershell +docker compose exec backend python -m app.rcon_admin_log_ingestion --minutes 1440 +docker compose exec backend python -m app.rcon_historical_worker capture +``` + +Backfill historico RCON/AdminLog: + +- runbook: `docs/historical-rcon-backfill.md` +- ejemplo seco: + + ```powershell + docker compose run --rm rcon-historical-worker python -m app.rcon_historical_backfill --ensure-recent-matches 100 --servers comunidad-hispana-01,comunidad-hispana-02 --dry-run + ``` + +Comandos manuales desde `backend/`: + +```powershell +python -m app.rcon_historical_worker capture +python -m app.rcon_historical_worker capture --target comunidad-hispana-01 +python -m app.rcon_historical_worker loop --interval 120 +``` + +Runbook minimo: + +- una pasada manual sobre todos los targets RCON configurados: + + ```powershell + python -m app.rcon_historical_worker capture + ``` + +- una validacion acotada sobre un target concreto: + + ```powershell + python -m app.rcon_historical_worker capture --target comunidad-hispana-01 + ``` + +- un worker local en bucle: + + ```powershell + python -m app.rcon_historical_worker loop --interval 120 --max-runs 1 + ``` + +La salida del worker incluye: + +- `target_scope` +- `captured_at` +- `targets` +- `errors` +- `storage_status` + +Cuando una captura falla, cada error incluye como minimo: + +- `target_key` +- `external_server_id` +- `name` +- `host` +- `port` +- `timeout_seconds` +- `error_type` +- `error_stage` +- `message` + +`error_type` intenta clasificar al menos: + +- `timeout` +- `auth/login` +- `connection-refused` +- `payload-invalid` +- `other-error` + +La persistencia queda separada del historico `historical_*` actual y usa: + +- `rcon_historical_targets` +- `rcon_historical_capture_runs` +- `rcon_historical_samples` +- `rcon_historical_checkpoints` + +Lectura historica minima cuando `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon`: + +- endpoints soportados hoy directamente por RCON persistido: + - `GET /api/historical/server-summary` + - `GET /api/historical/recent-matches` +- lo que devuelven: + - cobertura por target RCON configurado + - frescura del ultimo capture exitoso + - actividad reciente persistida +- endpoints que hoy caen automaticamente a `public-scoreboard` para mantener el + contrato completo: + - `GET /api/historical/weekly-top-kills` + - `GET /api/historical/weekly-leaderboard` + - `GET /api/historical/leaderboard` + - `GET /api/historical/monthly-mvp` + - `GET /api/historical/monthly-mvp-v2` + - `GET /api/historical/player-events` + - `GET /api/historical/player-profile` + - `GET /api/historical/snapshots/*` + +Cuando esos endpoints se consultan con `historical_data_source=rcon`, el backend +intenta primero RCON para la operacion soportada y, si no hay cobertura o la +capacidad aun no existe, cae automaticamente a `public-scoreboard`. La +respuesta deja trazabilidad con `primary_source`, `selected_source`, +`fallback_used`, `fallback_reason` y `source_attempts`. + +## Criterio de estructura + +- `__init__.py` declara el paquete `app` y reexporta las utilidades publicas + minimas del bootstrap. +- `collector.py` define el flujo minimo de captura para desarrollo usando una + fuente controlada. +- `a2s_client.py` encapsula una consulta minima A2S_INFO por UDP para probar + servidores reales sin acoplar todavia el backend a una fuente mas compleja. +- `rcon_client.py` encapsula una conexion minima HLL RCON v2 por TCP con + `ServerConnect`, XOR key base64, `authToken` y `GetServerInformation` para + consultas live de produccion. +- `config.py` centraliza host, puerto y allowlist minima de origenes locales. +- `data_sources.py` define los contratos y la seleccion por entorno para live e historico. +- `historical_ingestion.py` intenta primero el writer path RCON y, si hace falta + poblar `historical_*`, cae de forma explicita a la capa JSON publica de CRCON. +- `historical_models.py` fija las entidades historicas minimas del dominio. +- `historical_snapshots.py` fija los tipos y selectores validos de snapshots historicos precalculados. +- `historical_snapshot_storage.py` persiste snapshots historicos precalculados listos para lectura rapida. +- `historical_runner.py` ejecuta refresh incremental periodico con reintentos basicos. +- `historical_storage.py` prepara la persistencia `historical_*` y las consultas agregadas iniciales. +- `main.py` contiene el entrypoint HTTP y la creacion del servidor. +- `normalizers.py` transforma registros crudos o respuestas A2S a un modelo + comun del colector. +- `routes.py` resuelve las rutas GET soportadas. +- `payloads.py` centraliza respuestas placeholder y mock. +- `server_targets.py` registra targets A2S de prueba de forma desacoplada del + flujo principal del colector. +- `snapshots.py` construye snapshots consistentes con timestamp comun de + captura. +- `storage.py` prepara una persistencia local minima en SQLite para + `game_sources`, `servers` y `server_snapshots`. + +## Persistencia local minima + +El backend ya puede guardar snapshots en un SQLite local de desarrollo usando +solo libreria estandar de Python. Esta base minima sigue el modelo logico de: + +- `game_sources` +- `servers` +- `server_snapshots` +- `historical_servers` +- `historical_maps` +- `historical_matches` +- `historical_players` +- `historical_player_match_stats` +- `historical_ingestion_runs` + +Por defecto el archivo se crea en: + +```text +backend/data/hll_vietnam_dev.sqlite3 +``` + +En Docker, ese mismo rol de persistencia debe montarse fuera del contenedor en: + +```text +/app/data/hll_vietnam_dev.sqlite3 +``` + +Politica comun SQLite para writers: + +- `timeout` explicito compartido +- `PRAGMA foreign_keys = ON` +- `PRAGMA journal_mode = WAL` +- `PRAGMA busy_timeout` +- `row_factory = sqlite3.Row` + +Esta politica se aplica de forma uniforme a las capas writer-capable que +comparten el mismo SQLite, incluyendo: + +- `historical_storage.py` +- `player_event_storage.py` +- `rcon_historical_storage.py` +- `storage.py` + +Politica read-only para historico: + +- las rutas de lectura de `historical_storage.py` no ejecutan ya + `initialize_historical_storage()` +- si el SQLite historico todavia no existe, esas lecturas devuelven resultados + vacios o defaults estables sin crear archivo ni correr seed/migraciones +- cuando el archivo ya existe, esas lecturas abren `mode=ro` con + `row_factory = sqlite3.Row` y `PRAGMA busy_timeout` +- la inicializacion, migraciones, seed y normalizaciones siguen reservadas al + writer path explicito + +Variable opcional: + +- `HLL_BACKEND_STORAGE_PATH` +- `HLL_BACKEND_A2S_TARGETS` + +La base logica sigue documentada en +`docs/stats-database-schema-foundation.md` para snapshots live y en +`docs/historical-domain-model.md` para el historico CRCON. Esta implementacion +no introduce ORM, migraciones ni una decision de almacenamiento productivo. + +## Snapshots historicos precalculados + +La capa historica persiste ahora los snapshots precalculados orientados a UI +como archivos JSON independientes en disco, separados del SQLite del historico +bruto. Esta capa esta preparada para guardar: + +- `server-summary` +- `weekly-leaderboard` con metricas `kills`, `deaths`, `support` y `matches_over_100_kills` +- `monthly-leaderboard` con las mismas metricas semanticas +- `monthly-mvp` +- `recent-matches` + +Por defecto se escriben bajo: + +```text +backend/data/snapshots// +``` + +En Docker, estos snapshots deben persistirse bajo: + +```text +/app/data/snapshots// +``` + +Ejemplos: + +- `backend/data/snapshots/comunidad-hispana-01/server-summary.json` +- `backend/data/snapshots/comunidad-hispana-01/weekly-kills.json` +- `backend/data/snapshots/comunidad-hispana-02/recent-matches.json` +- `backend/data/snapshots/all-servers/weekly-support.json` +- `backend/data/snapshots/all-servers/monthly-mvp.json` + +Cada archivo conserva metadatos operativos minimos: + +- `server_key` +- `snapshot_type` +- `metric` +- `window` +- `payload` +- `generated_at` +- `source_range_start` +- `source_range_end` +- `is_stale` + +La persistencia usa una identidad de archivo estable por combinacion de +servidor, tipo y metrica para que cada refresh reemplace el artefacto anterior +sin mezclarlo con el historico bruto. + +Resumen de persistencia recomendada para contenedor: + +- montar `/app/data` +- conservar el SQLite historico en `/app/data/hll_vietnam_dev.sqlite3` +- conservar los snapshots JSON en `/app/data/snapshots/` + +Con `docker compose`, esa persistencia ya queda montada desde: + +- `./backend/data -> /app/data` + +## Bootstrap del colector + +El backend incluye un bootstrap minimo para el futuro flujo de snapshots: + +- `fetch_controlled_server_source()` obtiene datos controlados de desarrollo +- `query_server_info()` permite consultar metadata basica real por A2S_INFO +- `fetch_a2s_probe()` adapta una consulta A2S real al modelo interno del colector +- `fetch_configured_a2s_probes()` consulta la lista configurada de targets A2S +- `normalize_server_record()` reduce los registros a una forma comun +- `normalize_a2s_server_info()` reduce una respuesta A2S al mismo contrato interno +- `build_server_snapshot()` y `build_snapshot_batch()` generan snapshots con + `captured_at` +- `collect_server_snapshots()` orquesta captura, normalizacion, ensamblado y + persistencia opcional +- `persist_snapshot_batch()` escribe el lote en SQLite y mantiene identidad de + servidor separada del historico + +Ejecucion manual desde `backend/`: + +```powershell +python -m app.collector --source auto +``` + +Ese comando intenta consultar primero los targets A2S configurados. Si ninguno +responde y no se ha desactivado el fallback, usa la fuente controlada de +desarrollo para no romper el flujo local. El resultado imprime el modo usado, +los errores de consulta y el lote de snapshots persistido en SQLite. + +Si se quiere forzar solo A2S real: + +```powershell +python -m app.collector --source a2s --no-fallback +``` + +Ese flujo es la validacion local minima extremo a extremo para los targets +reales configurados de Comunidad Hispana. El timeout por defecto del cliente +A2S es `6.0s` para tolerar mejor latencia puntual entre multiples consultas +reales consecutivas. Cuando responden ambos targets por defecto, el comando +debe devolver: + +- `collection_mode: "a2s"` +- `target_count: 2` +- `success_count: 2` +- un snapshot con `external_server_id: "comunidad-hispana-01"` +- un snapshot con `external_server_id: "comunidad-hispana-02"` +- `source_name: "community-hispana-a2s"` +- `snapshot_origin: "real-a2s"` en ambos +- `source_ref: "a2s://152.114.195.174:7778"` +- `source_ref: "a2s://152.114.195.150:7878"` +- persistencia en `backend/data/hll_vietnam_dev.sqlite3` + +Si la consulta se ejecuta desde un entorno con red restringida, sin salida UDP +o con latencia puntual alta, el cliente puede devolver timeout aunque el target +este sano. En ese caso el resultado conserva errores controlados por target y +puede acabar con `success_count` parcial o `0` segun cuantas consultas fallen. + +Los snapshots persistidos y los endpoints historicos exponen ademas: + +- `snapshot_origin` para distinguir `real-a2s` frente a `controlled-fallback` +- `source_ref` para conservar una referencia de procedencia util en historico + +Si se quiere seguir usando solo datos controlados: + +```powershell +python -m app.collector --source controlled +``` + +## Refresco local periodico de snapshots + +Para evitar lanzar el colector manualmente en cada captura, el backend incluye +un bucle local de refresco periodico pensado solo para desarrollo: + +```powershell +python -m app.scheduler +``` + +Ese comando ejecuta capturas persistidas de forma repetida usando el mismo +flujo del colector y la base SQLite local. Por defecto: + +- usa `--source auto` +- espera `120` segundos entre ejecuciones +- permite fallback controlado si A2S no responde +- sigue en ejecucion hasta que se detiene manualmente + +Se puede detener de forma segura con `Ctrl+C`. + +Variables y flags utiles: + +- `HLL_BACKEND_REFRESH_INTERVAL_SECONDS` para cambiar el intervalo por defecto +- `--interval 120` para fijar el intervalo en segundos en una ejecucion concreta +- `--source a2s --no-fallback` para forzar solo capturas reales +- `--max-runs 3` para limitar el numero de ciclos y evitar un bucle indefinido + +Ejemplos: + +```powershell +python -m app.scheduler --interval 120 +python -m app.scheduler --source a2s --no-fallback --max-runs 2 +``` + +Flujo local recomendado para ver datos vivos en la landing: + +1. Desde `backend/`, arrancar la API: + + ```powershell + python -m app.main + ``` + +2. En otra terminal, dejar el scheduler corriendo: + + ```powershell + python -m app.scheduler + ``` + +3. Servir `frontend/` con un servidor local sencillo y abrir la landing. El + frontend volvera a pedir `/api/servers` cada `120` segundos, por lo que los + cambios de mapa o poblacion apareceran sin recarga manual cuando existan + snapshots nuevos. + +Este mecanismo deja el refresco desacoplado del servidor HTTP y es facil de +reemplazar mas adelante por un scheduler mas serio sin rehacer el colector. + +Prueba manual minima de A2S desde `backend/`: + +```powershell +python -m app.a2s_client 203.0.113.10 27015 +``` + +Ese comando lanza una consulta `A2S_INFO` por UDP y devuelve JSON con nombre de +servidor, mapa, jugadores y capacidad maxima cuando el query port responde. +Tambien puede reutilizarse desde Python con `query_server_info()` o +`fetch_a2s_probe()`. Si el servidor no responde o el puerto es incorrecto, el +cliente eleva errores controlados de timeout o protocolo para que la siguiente +task pueda integrarlo en el pipeline de snapshots sin romper el backend. + +## Registro local de targets A2S + +La lista de targets A2S vive en `app/server_targets.py`. Por defecto el backend +registra solo el primer target real verificado del proyecto: + +- `Comunidad Hispana #01` +- host/IP: `152.114.195.174` +- `query_port`: `7778` +- `game_port`: `7777` +- `source_name`: `community-hispana-a2s` +- `external_server_id`: `comunidad-hispana-01` + +`query_port` es el puerto usado para `A2S_INFO`; `game_port` se conserva por +separado para documentar el puerto de juego real sin mezclar ambos conceptos en +la configuracion. + +El registro por defecto incluye dos targets reales verificados: + +- `Comunidad Hispana #01` + - host/IP: `152.114.195.174` + - `query_port`: `7778` + - `game_port`: `7777` + - `external_server_id`: `comunidad-hispana-01` +- `Comunidad Hispana #02` + - host/IP: `152.114.195.150` + - `query_port`: `7878` + - `game_port`: `7877` + - `external_server_id`: `comunidad-hispana-02` + +Si se quiere cambiar la lista sin editar codigo, puede definirse +`HLL_BACKEND_A2S_TARGETS` como un array JSON: + +```powershell +$env:HLL_BACKEND_A2S_TARGETS='[ + { + "name": "Comunidad Hispana #01", + "host": "152.114.195.174", + "query_port": 7778, + "game_port": 7777, + "source_name": "community-hispana-a2s", + "external_server_id": "comunidad-hispana-01", + "region": "ES" + }, + { + "name": "Comunidad Hispana #02", + "host": "152.114.195.150", + "query_port": 7878, + "game_port": 7877, + "source_name": "community-hispana-a2s", + "external_server_id": "comunidad-hispana-02", + "region": "ES" + } +]' +``` + +Cada target soporta: + +- `name` +- `host` +- `query_port` +- `game_port` opcional +- `source_name` +- `external_server_id` opcional +- `region` opcional + +El colector puede resolver esos targets con `load_a2s_targets()` o +`fetch_configured_a2s_probes()` sin depender de constantes dispersas. + +## Consulta historica minima + +Una vez existen snapshots persistidos, el backend expone una primera capa de +consulta historica: + +- `/api/servers/latest` devuelve el ultimo snapshot conocido por servidor +- `/api/servers/history` devuelve snapshots recientes agregados +- `/api/servers/{id}/history` devuelve el historial reciente de un servidor + +`{id}` acepta el `server_id` numerico interno o el `external_server_id` +persistido por el colector. El parametro opcional `limit` acepta valores entre +`1` y `100`. + +La capa historica propia expone: + +- `/api/historical/weekly-top-kills` +- `/api/historical/weekly-leaderboard` +- `/api/historical/leaderboard` +- `/api/historical/recent-matches` +- `/api/historical/server-summary` +- `/api/historical/snapshots/server-summary` +- `/api/historical/snapshots/weekly-leaderboard` +- `/api/historical/snapshots/leaderboard` +- `/api/historical/snapshots/recent-matches` +- `/api/historical/player-profile` + +Parametros opcionales: + +- `limit` entre `1` y `100` +- `server` con slug historico como `comunidad-hispana-01` +- `player` en `/api/historical/player-profile` aceptando `stable_player_key`, + `steam_id` o `source_player_id` + +Ademas de los slugs fisicos de cada scoreboard, la capa historica acepta la +clave logica `all-servers` para devolver agregados globales sobre los tres +servidores de Comunidad Hispana sin tratarla como un origen CRCON real aparte. + +La ventana temporal usa semana calendario UTC y solo considera partidas +cerradas con `ended_at` para no mezclar partidas aun en curso ni filas +historicas transitorias. El payload devuelve servidor, rango temporal, +jugador, kills semanales, posicion y numero de partidas consideradas. + +`weekly-leaderboard` generaliza ese bloque para varias metricas semanales por +servidor usando el mismo filtro de partidas cerradas. Si la semana actual cae +entre lunes y miercoles UTC y todavia no acumula al menos `3` partidas +cerradas, el backend activa un fallback temporal a la semana cerrada anterior. +Metricas soportadas: + +- `kills` +- `deaths` +- `support` +- `matches_over_100_kills` + +El endpoint legacy `/api/historical/weekly-top-kills` se conserva como alias +compatible para la metrica `kills`. + +`/api/historical/leaderboard` y `/api/historical/snapshots/leaderboard` +generalizan ese mismo contrato con `timeframe=weekly|monthly`. Para `monthly`, +la politica temporal usa el mes natural UTC en curso y hace fallback al mes +cerrado anterior solo cuando el mes actual todavia no tiene ningun cierre. +Ambas variantes exponen el rango real usado mediante `window_start`, +`window_end`, `window_kind`, `window_label` y `selection_reason`. + +`recent-matches` devuelve cierres recientes por servidor con marcador, mapa y +conteo de jugadores. `server-summary` agrega volumen historico, jugadores +unicos, kills, mapas dominantes y rango temporal cubierto. `player-profile` +deja lista la base de consulta agregada por jugador para futuras vistas. + +La familia `/api/historical/snapshots/*` lee directamente los archivos JSON +precalculados bajo `backend/data/snapshots/` y evita recalcular agregados +pesados en cada request. Estos endpoints devuelven payloads ligeros listos para +frontend con: + +- `snapshot_status` +- `missing_reason` +- `request_path_policy` +- `generation_policy` +- `generated_at` +- `source_range_start` +- `source_range_end` +- `is_stale` +- `freshness` +- `found` +- `window_start` +- `window_end` +- `window_kind` +- `window_label` +- `uses_fallback` +- `selection_reason` +- `current_week_closed_matches` +- `previous_week_closed_matches` +- `sufficient_sample` + +Si un snapshot todavia no existe en `backend/data/snapshots/`, la API responde +rapido con `found: false`, `snapshot_status: "missing"` y +`missing_reason: "snapshot-not-generated"`. La generacion y refresco de esos +artefactos debe ocurrir fuera del request path mediante `historical_ingestion` +o `historical_runner`; la lectura HTTP se mantiene como fast path de solo +lectura. + +`/api/historical/snapshots/server-summary` devuelve `item` con el resumen del +servidor. `/api/historical/snapshots/weekly-leaderboard` devuelve `items` ya +precalculados para una metrica semanal y acepta `limit` para recortar el +payload ya persistido sin recalcularlo. `/api/historical/snapshots/recent-matches` +devuelve `items` de cierres recientes ya preparados y tambien acepta `limit` +para servir solo una parte del snapshot persistido. + +La misma capa de snapshots guarda tambien `monthly-leaderboard` por servidor y +por agregado `all-servers`, con archivos como `monthly-kills.json` y +`monthly-support.json`. + +Tambien persiste `monthly-mvp.json` por servidor y para `all-servers`, listo +para lectura rapida desde `/api/historical/monthly-mvp` y +`/api/historical/snapshots/monthly-mvp` sin recalculo pesado en request. + +La misma operativa persiste tambien snapshots V2 de eventos de jugador para el +ultimo mes con datos disponible por servidor y para `all-servers`, listos para +lectura rapida sin consultas pesadas on-demand: + +- `player-events-most-killed.json` +- `player-events-death-by.json` +- `player-events-duels.json` +- `player-events-weapon-kills.json` +- `player-events-teamkills.json` + +Los endpoints `/api/historical/player-events` y +`/api/historical/snapshots/player-events` aceptan: + +- `view=most-killed` +- `view=death-by` +- `view=duels` +- `view=weapon-kills` +- `view=teamkills` + +La respuesta expone metadata operativa alineada con el resto de snapshots: + +- `generated_at` +- `month_key` +- `source_range_start` +- `source_range_end` +- `found` +- `is_stale` + +El backend incluye ademas el calculo interno de `monthly MVP V1` en +`app/monthly_mvp.py`, separado de los leaderboards mensuales simples por +metrica. Ese calculo: + +- usa solo `kills`, `support`, `time_seconds`, `deaths` y `teamkills` + persistidos +- recompone `KPM` y `KDA` desde totales mensuales +- aplica elegibilidad minima de `6` partidas cerradas y `6` horas +- soporta servidor individual y el agregado logico `all-servers` + +En esta fase el ranking MVP queda listo para serializar en snapshots o payloads +sin reemplazar los leaderboards mensuales ya existentes por `kills`, `deaths`, +`support` y `matches_over_100_kills`. + +La repo incluye tambien un calculo backend separado de `monthly MVP V2` en +`app/monthly_mvp_v2.py`, expuesto de momento por +`/api/historical/monthly-mvp-v2`. + +Esta V2: + +- convive sin reemplazar `monthly MVP V1` +- reusa la misma ventana mensual y la misma elegibilidad base +- anade `rivalry_edge` y `duel_control` derivados del ledger V2 de eventos +- aplica una penalizacion de teamkills mas estricta +- mantiene fuera del score el peso por arma o tipo de kill hasta validar mejor + esas senales + +Esa capacidad V2 se persiste tambien en snapshots dedicados +`monthly-mvp-v2.json` por servidor y para `all-servers`, leidos por: + +- `/api/historical/monthly-mvp-v2` +- `/api/historical/snapshots/monthly-mvp-v2` + +La lectura HTTP de V2 sigue asi la misma politica de fast path de solo lectura +que el resto de snapshots historicos, con metadata util como: + +- `generated_at` +- `month_key` +- `found` +- `source_range_start` +- `source_range_end` +- `event_coverage` + +## Ingesta historica CRCON + +La ingesta historica no usa A2S ni scraping del HTML de `/games`. Consume la +capa JSON publica detectada en los scoreboards CRCON de Comunidad Hispana y +persiste el resultado en las tablas `historical_*`. + +Fuentes configuradas: + +- `https://scoreboard.comunidadhll.es` +- `https://scoreboard.comunidadhll.es:5443` +- `https://scoreboard.comunidadhll.es:3443` + +Comandos manuales desde `backend/`: + +```powershell +python -m app.historical_ingestion bootstrap +python -m app.historical_ingestion refresh +python -m app.historical_runner --interval 1800 +``` + +Los mismos flujos desde Docker Compose: + +```powershell +docker compose exec backend python -m app.historical_ingestion bootstrap +docker compose exec backend python -m app.historical_ingestion refresh +docker compose exec backend python -m app.historical_runner --interval 1800 +``` + +Flags utiles: + +- `--server comunidad-hispana-01` para limitar a un servidor +- `--server comunidad-hispana-02` para validar solo el segundo servidor activo +- `--overlap-hours 48` para releer una ventana reciente mayor sin relanzar bootstrap +- `--max-pages 2` para validacion local acotada +- `--page-size 25` para ajustar paginacion +- `--start-page 4` para forzar una pagina concreta en bootstraps largos +- `--detail-workers 16` para paralelizar el detalle por partida + +La ejecucion `bootstrap` recorre paginas historicas hasta agotar resultados. +La ejecucion `refresh` usa una ventana de solape sobre la ultima partida +persistida por servidor para releer solo paginas recientes y absorber updates +tardios sin reimportar todo el historico. Cuando una ejecucion termina +correctamente, tambien recompone los snapshots historicos precalculados para el +servidor afectado o para todos los servidores si la ingesta fue global. +Si la recomposicion se lanza para un servidor fisico concreto, el backend +rehace tambien el agregado logico `all-servers` para mantener `Todos` +alineado con `#01` y `#02` aunque `#03` siga sin bootstrap. + +En esta fase, el comando muestra progreso operativo util sin saturar stdout: + +- intento primario RCON +- fuente finalmente seleccionada +- servidor actual +- pagina actual +- `match_ids_to_detail` de cada pagina + +Si RCON no puede cubrir la operacion competitiva real, el fallback a +`public-scoreboard` queda visible tanto durante la ejecucion como en el JSON +final mediante: + +- `primary_source` +- `selected_source` +- `fallback_used` +- `fallback_reason` +- `source_attempts` +- `primary_writer_result` + +El comando devuelve ademas un resumen de cobertura persistida por servidor. Esto +ayuda a validar rapidamente cuantos matches reales quedaron importados, el rango +temporal cubierto y si la carga ya supera la ultima semana movil que usa la UI. +Ese resumen incluye tambien checkpoint y estado operativo de backfill por +servidor: + +- `next_page` +- `last_completed_page` +- `discovered_total_matches` +- `discovered_total_pages` +- `archive_exhausted` +- `last_run` + +Como la fuente CRCON publica expone un archivo muy profundo y puede devolver +errores `502` intermitentes bajo carga sostenida, el bootstrap completo debe +tratarse como una operacion reanudable. Flujo recomendado: + +```powershell +python -m app.historical_ingestion bootstrap --detail-workers 16 +python -m app.historical_ingestion bootstrap --detail-workers 16 +``` + +La segunda invocacion reutiliza automaticamente el checkpoint persistido en +`historical_backfill_progress` y continua desde la siguiente pagina pendiente si +la sesion anterior se corta por tiempo disponible o por inestabilidad puntual +del origen. `--start-page` queda como override manual cuando se quiera +reprocesar o inspeccionar un tramo concreto. + +Runbook operativo para overlap manual: + +```powershell +python -m app.historical_ingestion refresh --overlap-hours 48 +python -m app.historical_ingestion refresh --server comunidad-hispana-01 --overlap-hours 48 --max-pages 2 +python -m app.historical_runner --max-runs 1 +``` + +La primera pasada relee 48 horas sobre los tres servidores historicos ya +registrados. La segunda sirve para validar un solo servidor con alcance +acotado. La tercera recompone snapshots despues de una pasada manual cuando se +quiere confirmar que la capa precalculada vuelve a quedar alineada. + +Interpretacion operativa recomendada: + +- si aparece `historical-ingestion-rcon-primary-succeeded`, RCON se intento de + verdad primero y la captura prospectiva quedo registrada +- si despues `selected_source` termina en `public-scoreboard`, eso significa + que la reconstruccion del archivo competitivo `historical_*` siguio + necesitando fallback clasico +- si RCON falla por red, auth o timeout, el motivo queda visible en + `fallback_reason` y en `source_attempts` + +Los reintentos de cada request JSON pueden ajustarse sin tocar codigo con: + +- `HLL_HISTORICAL_CRCON_REQUEST_RETRIES` +- `HLL_HISTORICAL_CRCON_RETRY_DELAY_SECONDS` + +El runner `python -m app.historical_runner` deja ahora una orquestacion +RCON-first lista para ejecucion local repetida sin depender de infraestructura +externa y mantiene calientes los snapshots historicos mas visibles cuando el +fallback clasico entra de forma controlada. Por defecto: + +- intenta primero una captura prospectiva RCON en cada ciclo +- solo lanza el refresh historico clasico cuando RCON falla, cuando se pide un + scope manual que sigue requiriendo cobertura competitiva, o en la cadencia + periodica de fallback para mantener rankings y snapshots clasicos +- refresca cada `900` segundos +- prewarmea en cada ciclo: + - `server-summary` para `comunidad-hispana-01`, `comunidad-hispana-02` y `all-servers` + - `weekly-leaderboard` de la metrica por defecto `kills` para esos mismos alcances + - `monthly-leaderboard` de la metrica por defecto `kills` para esos mismos alcances + - `recent-matches` para esos mismos alcances +- recompone la matriz completa de snapshots cada `4` ciclos para mantener el resto de metricas al dia sin penalizar todos los refresh +- reintenta hasta `2` veces tras un fallo +- espera `30` segundos entre reintentos +- reutiliza el registro de `historical_ingestion_runs` para dejar trazabilidad + de ultimo refresh, resultado y errores basicos +- persiste por servidor: + - `server-summary` + - `weekly-leaderboard` para `kills`, `deaths`, `support` y `matches_over_100_kills` + - `monthly-leaderboard` para `kills`, `deaths`, `support` y `matches_over_100_kills` + - `recent-matches` + +Flags utiles del runner: + +- `--server comunidad-hispana-01` para limitar a un servidor +- `--interval 900` para fijar la frecuencia recomendada de snapshots +- `--hourly` para fijar directamente un ciclo horario de `3600` segundos +- `--retries 1` para reducir reintentos +- `--retry-delay 10` para bajar la espera entre fallos +- `--max-runs 1` para una validacion puntual sin bucle indefinido + +Para dejar automatizado el refresh historico horario en local, el comando +avanzado sigue disponible: + +```powershell +python -m app.historical_runner --hourly +``` + +Sin `--server`, ese runner refresca: + +- `comunidad-hispana-01` +- `comunidad-hispana-02` + +Despues de cada fallback clasico correcto, recompone snapshots para los +servidores afectados y vuelve a alinear el agregado `all-servers`. Si el ciclo +RCON primario fue suficiente y no hizo falta el fallback clasico, el runner +deja constancia explicita de ese motivo en su salida JSON. + +Para regenerar snapshots de forma puntual dentro del contenedor sin dejar un +bucle permanente, la validacion operativa minima es: + +```powershell +docker compose exec backend python -m app.historical_runner --max-runs 1 +``` + +Operativa local minima: + +1. Desde `backend/`, arrancar la API con `python -m app.main`. +2. En otra terminal, dejar corriendo `python -m app.historical_runner --hourly`. +3. Verificar el proceso revisando la salida del runner: al arrancar imprime un + bloque JSON con `event: "historical-refresh-loop-started"`, `server_scope` + y `snapshot_scope`. +4. Confirmar que los snapshots siguen actualizandose revisando `generated_at` + en archivos bajo `backend/data/snapshots/`, por ejemplo: + - `backend/data/snapshots/comunidad-hispana-01/server-summary.json` + - `backend/data/snapshots/comunidad-hispana-02/recent-matches.json` + - `backend/data/snapshots/comunidad-hispana-02/weekly-kills.json` + - `backend/data/snapshots/all-servers/monthly-kills.json` + +Operativa avanzada con Docker Compose: + +```powershell +docker compose --profile advanced up -d backend historical-runner frontend +``` + +El servicio `historical-runner` usa el mismo volumen persistente `./backend/data` +y ejecuta `python -m app.historical_runner --hourly` como bucle operativo +dedicado, sin mezclar el scheduler con el proceso HTTP principal. No forma +parte del despliegue normal, que queda limitado a `backend` + `frontend`. + +En frontend, la landing ya no arranca con cards fake estaticas para servidores: + +- el contenedor queda en estado de loading +- solo se renderizan cards con datos reales al hidratar +- si la API falla, se muestra una degradacion limpia en lugar de datos falsos + +## Coordinacion single-writer para automatizaciones y CLI + +Todos los procesos writer-oriented que comparten el mismo SQLite usan ahora un +lock comun derivado de `HLL_BACKEND_STORAGE_PATH` y persistido junto al volumen +de datos compartido. Ese lock coordina: + +- `app.historical_ingestion` +- `app.historical_runner` +- `app.player_event_worker` +- `app.rcon_historical_worker` + +Rutas HTTP read-only como `/api/historical/snapshots/*`, `/api/servers` en modo +cache local y el read model minimo RCON no adquieren este lock. + +Variables operativas: + +- `HLL_BACKEND_WRITER_LOCK_TIMEOUT_SECONDS` +- `HLL_BACKEND_WRITER_LOCK_POLL_INTERVAL_SECONDS` + +Comportamiento: + +- si un writer ya esta ejecutandose, el siguiente espera de forma controlada + hasta agotar el timeout configurado +- si no puede adquirir el lock, falla con un error claro indicando: + - lock path + - holder + - `started_at` + - host + - pid +- si el lock parece venir de un contenedor Docker ya parado, el backend puede + recuperarlo automaticamente cuando: + - el holder venia de un cwd tipo `/app` + - el lock ya supero una gracia minima de seguridad +- la coordinacion principal es este single-writer lock; WAL y `busy_timeout` + quedan como endurecimiento complementario, no como solucion unica + +Runbook minimo: + +- pasada manual del historico base mientras el runner automatico existe: + + ```powershell + docker compose exec backend python -m app.historical_ingestion refresh --overlap-hours 48 + ``` + + Si el lock esta ocupado, el comando esperara hasta el timeout configurado y, + si no se libera, terminara con un mensaje claro de lock ocupado. + +- pasada manual de player-events: + + ```powershell + docker compose exec backend python -m app.player_event_worker refresh --overlap-hours 48 + ``` + +- pasada manual de captura prospectiva RCON: + + ```powershell + docker compose exec backend python -m app.rcon_historical_worker capture + ``` + +- convivencia recomendada con automatizaciones: + - no hace falta parar contenedores por defecto + - dejar que el lock coordine la exclusión mutua + - usar `--max-runs 1` o comandos manuales puntuales cuando se quiera una + pasada controlada + +Comprobaciones utiles con Compose: + +- `docker compose ps historical-runner` +- `docker compose logs -f historical-runner` +- `docker compose exec backend python -m app.historical_runner --max-runs 1` + +Compose para captura prospectiva RCON: + +```powershell +docker compose --profile advanced up -d rcon-historical-worker +docker compose logs -f rcon-historical-worker +docker compose exec backend python -m app.rcon_historical_worker capture +``` + +Variables utiles del runner: + +- `HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS` +- `HLL_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS` +- `HLL_HISTORICAL_REFRESH_MAX_RETRIES` +- `HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS` +- `HLL_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES` +- `HLL_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY` + +Al inicializar la persistencia local, el backend normaliza tambien la identidad +historica ya guardada: + +- prioriza `steaminfo.profile.steamid` cuando existe +- si `player_id` ya parece un SteamID real, lo promueve igualmente a `steam:*` +- si no hay SteamID, usa `player_id` como clave `crcon-player:*` +- deja `steaminfo.id` como ultimo fallback cuando faltan las claves anteriores + +La misma inicializacion fusiona filas duplicadas si una partida abierta quedo +guardada con un id sintetico y mas tarde CRCON la expone con un id numerico +definitivo. Esto evita que el ranking semanal cuente dos veces la misma sesion. + +## CORS local minimo + +El backend responde con `Access-Control-Allow-Origin` solo si la peticion llega +desde uno de los origenes permitidos en desarrollo local. No se habilita un +comodin global ni configuracion de produccion en esta fase. + +La allowlist por defecto cubre `file://` mediante el origen `null` y los flujos +locales mas comunes del proyecto: + +- `http://127.0.0.1:5500` +- `http://localhost:5500` +- `http://127.0.0.1` +- `http://127.0.0.1:8080` +- `http://localhost` +- `http://localhost:8080` + +Las respuestas `GET` y `OPTIONS` incluyen `Access-Control-Allow-Origin` cuando +el origen esta permitido, suficiente para probar la landing contra la API local +sin tocar endpoints ni payloads. + +Esta separacion mantiene el backend simple y deja una base clara para futuras tasks sin introducir integraciones reales todavia. + +## Fuente y ledger de eventos de jugador V2 + +La repo incluye ahora una primera base V2 separada del historico `historical_*` +para preparar metricas avanzadas de duelos, armas y teamkills sin tocar todavia +la UI ni el scoring final. + +Fuente minima elegida en esta fase: + +- detalle de partida `GET /api/get_map_scoreboard?map_id={id}` del scoreboard CRCON + +Importante: + +- esta fuente no es un feed raw por kill +- el adaptador actual normaliza solo senales parciales ya visibles en el + resumen de partida: + - `most_killed` + - `death_by` + - `weapons` + - `death_by_weapons` + - `teamkills` +- `occurred_at` usa el timestamp de cierre o inicio de la partida, no el + instante exacto del kill +- el ledger raw es append-only y deduplica por `event_id` +- la persistencia queda separada de `historical_matches` y + `historical_player_match_stats` aunque comparte el mismo SQLite de desarrollo + +Contrato minimo normalizado por evento: + +- `event_id` +- `event_type` +- `occurred_at` +- `server_slug` +- `external_match_id` +- `source_kind` +- `source_ref` +- `killer_player_key` +- `victim_player_key` +- `weapon_name` +- `kill_category` +- `is_teamkill` +- `event_value` + +Tablas nuevas: + +- `player_event_raw_ledger` +- `player_event_ingestion_runs` +- `player_event_backfill_progress` + +Comandos manuales desde `backend/`: + +```powershell +python -m app.player_event_worker refresh +python -m app.player_event_worker refresh --server comunidad-hispana-01 --max-pages 1 +python -m app.player_event_worker loop --interval 1800 +``` + +Variables opcionales del worker: + +- `HLL_PLAYER_EVENT_REFRESH_INTERVAL_SECONDS` +- `HLL_PLAYER_EVENT_REFRESH_OVERLAP_HOURS` +- `HLL_PLAYER_EVENT_REFRESH_MAX_RETRIES` +- `HLL_PLAYER_EVENT_REFRESH_RETRY_DELAY_SECONDS` + +Flags utiles del worker: + +- `--server comunidad-hispana-01` para validar un solo servidor +- `--overlap-hours 48` para releer una ventana reciente mayor +- `--max-pages 1` para una comprobacion acotada + +Ejemplos operativos: + +```powershell +python -m app.player_event_worker refresh --overlap-hours 48 +python -m app.player_event_worker refresh --server comunidad-hispana-01 --overlap-hours 48 --max-pages 1 +``` + +Politica operativa minima: + +- el worker corre fuera del request path HTTP +- reusa la capa historica `public-scoreboard` solo como fuente de detalle +- persiste checkpoints por servidor y pagina +- la reejecucion es segura porque el ledger usa insercion idempotente por + `event_id` + +Agregados V2 ya disponibles desde codigo: + +- `list_most_killed()` +- `list_death_by()` +- `list_net_duel_summaries()` +- `list_weapon_kills()` +- `list_teamkill_summaries()` + +Limitaciones actuales de esta fase: + +- no existe todavia un ledger raw por kill individual +- los agregados de duelos y armas son parciales, porque dependen del mejor + resumen disponible por jugador en CRCON y no de todos los encounters del match +- la V2 no expone aun endpoints HTTP ni snapshots propios + +## Historical Runtime Policy + +El backend queda orientado a `RCON-first` tambien para historico: + +- live: + - `rcon` primero + - `a2s` solo como fallback +- historico: + - `rcon` primero tanto para lectura minima como para el writer path primario + de `historical_ingestion` + - `public-scoreboard` solo como fallback cuando RCON no cubre una operacion + competitiva concreta, no tiene cobertura suficiente o falla la captura + primaria + +Metadata observable en payloads historicos: + +- `primary_source` +- `selected_source` +- `fallback_used` +- `fallback_reason` +- `source_attempts` + +Estado real a fecha de esta fase: + +- el read model historico RCON soporta ya una capa competitiva primaria basada + en ventanas derivadas desde persistencia `rcon_historical_*` +- `server-summary` y `recent-matches` pasan a usar esa capa RCON-backed como + camino principal real +- en runtime, esas dos rutas solo se sirven como `rcon` cuando la capability + sigue soportada y existe cobertura RCON util para el scope pedido +- cobertura util en esta frontera significa: + - `server-summary`: al menos una fila con `coverage.status != "empty"` y + `window_count` o `sample_count` mayor que cero + - `recent-matches`: al menos una ventana con `match_id`, `closed_at` y + `sample_count > 0` +- si el target persistido quedo con clave legacy `rcon::` pero el + runtime actual ya conoce su `external_server_id`, la capa read model intenta + resolver ambos aliases antes de caer a fallback +- si no hay coverage suficiente o la lectura RCON falla, el backend mantiene + fallback explicito a `public-scoreboard` con `fallback_used = true` y + `fallback_reason` visible +- `historical_ingestion` intenta primero una captura writer-oriented por RCON y + deja esa tentativa visible en su salida +- leaderboards semanales/mensuales, MVP V1/V2 y player-events siguen teniendo + fallback a `public-scoreboard` mientras RCON no disponga de señal competitiva + por jugador con paridad suficiente +- Elo/MMR permanece pausado y desacoplado del arranque del backend; cuando se + reactive mediante una task explicita, debera respetar el contexto + RCON-backed primario y usar `public-scoreboard` solo como suplemento/fallback + para estadisticas por jugador sin paridad RCON + +## PostgreSQL Phase 2 Displayed Data Migration + +Cuando `HLL_BACKEND_DATABASE_URL` esta configurado, los endpoints visibles de +historico y el cache mostrado por `/api/servers` leen PostgreSQL. SQLite y los +JSON legacy quedan como fuente de migracion o fixture explicito con `db_path`. + +Migracion idempotente: + +```powershell +cd backend +python -m app.sqlite_to_postgres_migration +python -m app.storage_diagnostics +``` + +La salida JSON de `sqlite_to_postgres_migration` lista rutas fuente, dominios y +tablas migradas, filas leidas, insertadas, actualizadas, omitidas y errores. +La migracion conserva `external_match_id`, IDs legacy y `match_key` RCON para +que URLs de detalle existentes sigan resolviendo. Tambien copia candidatos y +URLs seguras de scoreboard; no vuelve a activar filas visibles de +`comunidad-hispana-03`. + +Paridad minima a revisar en `storage_diagnostics`: + +- `admin_log_events`, `materialized_matches`, `player_stats` +- `public_scoreboard_historical_matches` +- fuentes de rankings semanales y mensuales +- `server_summary_cache`, `server_snapshots`, `player_event_ledger` +- `scoreboard_candidates` +- ultimas partidas materializadas y ultimos eventos AdminLog `match_end` + +Fuera de phase 2 quedan checkpoints/runs de ingesta publica que no se muestran +en frontend y Elo/MMR pausado. Si un endpoint de mantenimiento recibe un +`db_path` explicito, sigue trabajando contra SQLite para migracion, tests o +compatibilidad operativa controlada. + +## Elo/MMR Monthly Ranking + +Se añade una primera base operativa inspirada en el documento +`sistema_elo_mensual_hll.pdf`, pero adaptada a la telemetria real disponible. + +Superficies nuevas: + +- `python -m app.elo_mmr_engine rebuild` +- `python -m app.elo_mmr_engine leaderboard --server all-servers --limit 10` +- `python -m app.elo_mmr_engine player --server all-servers --player ` +- `/api/historical/elo-mmr/leaderboard` +- `/api/historical/elo-mmr/player` + +Persistencia nueva en SQLite: + +- `elo_mmr_player_ratings` +- `elo_mmr_match_results` +- `elo_mmr_monthly_rankings` +- `elo_mmr_monthly_checkpoints` + +Politica de exactitud: + +- `exact`: outcome, combat, utility, disciplina por teamkills, MMR persistente +- `approximate`: role bucket, objective index, strength of schedule +- `not_available`: leadership y tacticas finas no persistidas + +Cuando `historical_data_source=rcon`, el motor Elo/MMR deja visible una +frontera hibrida y honesta: + +- `primary_source = rcon` +- `selected_source = hybrid-rcon-competitive-plus-public-scoreboard` +- `fallback_used = true` + +Eso significa que la capa RCON-backed ya aporta el contexto competitivo de +cobertura y calidad de match, pero las estadisticas competitivas por jugador +siguen necesitando el suplemento clasico hasta que RCON tenga esa granularidad. + +La especificacion detallada y el mapa de capabilities quedan en: + +- `docs/elo-mmr-monthly-ranking-design.md` + +## Alcance + +Esta fase no implementa: + +- logica real de Discord +- integraciones con servidores de juego +- base de datos +- autenticacion +- dependencias nuevas + +La idea es dejar un esqueleto funcional, pequeno y coherente con `docs/frontend-backend-contract.md`. diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..2ed7cc2 --- /dev/null +++ b/backend/app/__init__.py @@ -0,0 +1,59 @@ +"""Minimal bootstrap package for the HLL Vietnam Python backend.""" + +from .config import get_allowed_origins, get_bind_address +from .main import create_server, run +from .normalizers import normalize_a2s_server_info, normalize_server_record +from .payloads import build_health_payload +from .routes import resolve_get_payload +from .snapshots import build_server_snapshot, build_snapshot_batch, utc_now +from .storage import initialize_storage, persist_snapshot_batch + + +def collect_server_snapshots(*args: object, **kwargs: object) -> dict[str, object]: + """Proxy collector access without importing the module during package init.""" + from .collector import collect_server_snapshots as _collect_server_snapshots + + return _collect_server_snapshots(*args, **kwargs) + + +def fetch_a2s_probe(*args: object, **kwargs: object) -> dict[str, object]: + """Proxy A2S probe access without importing the collector during package init.""" + from .collector import fetch_a2s_probe as _fetch_a2s_probe + + return _fetch_a2s_probe(*args, **kwargs) + + +def query_server_info(*args: object, **kwargs: object) -> object: + """Proxy A2S info queries without importing the module during package init.""" + from .a2s_client import query_server_info as _query_server_info + + return _query_server_info(*args, **kwargs) + + +def fetch_controlled_server_source() -> tuple[dict[str, object], ...]: + """Proxy the controlled source without importing the module during package init.""" + from .collector import ( + fetch_controlled_server_source as _fetch_controlled_server_source, + ) + + return tuple(_fetch_controlled_server_source()) + +__all__ = [ + "build_health_payload", + "build_server_snapshot", + "build_snapshot_batch", + "collect_server_snapshots", + "create_server", + "fetch_a2s_probe", + "fetch_controlled_server_source", + "get_allowed_origins", + "get_bind_address", + "initialize_storage", + "normalize_a2s_server_info", + "normalize_server_record", + "persist_snapshot_batch", + "query_server_info", + "resolve_get_payload", + "run", + "utc_now", +] diff --git a/backend/app/a2s_client.py b/backend/app/a2s_client.py new file mode 100644 index 0000000..f839599 --- /dev/null +++ b/backend/app/a2s_client.py @@ -0,0 +1,176 @@ +"""Minimal Steam A2S info client for development-time HLL server probes.""" + +from __future__ import annotations + +import argparse +import json +import socket +import struct +from dataclasses import asdict, dataclass + + +DEFAULT_A2S_TIMEOUT = 6.0 +_A2S_PREFIX = b"\xFF\xFF\xFF\xFF" +_A2S_INFO_REQUEST = _A2S_PREFIX + b"\x54Source Engine Query\x00" +_A2S_CHALLENGE_RESPONSE = 0x41 +_A2S_INFO_RESPONSE = 0x49 + + +class A2SError(RuntimeError): + """Base error for A2S query failures.""" + + +class A2STimeoutError(A2SError): + """Raised when an A2S query does not complete before the timeout.""" + + +class A2SProtocolError(A2SError): + """Raised when an A2S server returns an unexpected payload.""" + + +@dataclass(frozen=True, slots=True) +class A2SServerInfo: + """Minimal metadata returned by an A2S info query.""" + + host: str + query_port: int + server_name: str + map_name: str | None + players: int + max_players: int + protocol: int + folder: str | None = None + game: str | None = None + version: str | None = None + + +def query_server_info( + host: str, + query_port: int, + *, + timeout: float = DEFAULT_A2S_TIMEOUT, +) -> A2SServerInfo: + """Query one server using A2S_INFO and return minimal reusable metadata.""" + with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as udp_socket: + udp_socket.settimeout(timeout) + address = (host, query_port) + + try: + udp_socket.sendto(_A2S_INFO_REQUEST, address) + payload = _receive_packet(udp_socket) + if _is_challenge_packet(payload): + challenge = payload[5:9] + udp_socket.sendto(_A2S_INFO_REQUEST + challenge, address) + payload = _receive_packet(udp_socket) + except socket.timeout as error: + raise A2STimeoutError( + f"A2S query to {host}:{query_port} timed out after {timeout:.1f}s." + ) from error + except OSError as error: + raise A2SError( + f"A2S query to {host}:{query_port} failed: {error}." + ) from error + + return _parse_info_payload(payload, host=host, query_port=query_port) + + +def main() -> None: + """Allow a direct development-time probe of one A2S target.""" + parser = argparse.ArgumentParser(description="Probe one server with A2S_INFO.") + parser.add_argument("host", help="Server hostname or IPv4 address.") + parser.add_argument("query_port", type=int, help="Server Steam query port.") + parser.add_argument( + "--timeout", + type=float, + default=DEFAULT_A2S_TIMEOUT, + help="Socket timeout in seconds.", + ) + args = parser.parse_args() + + payload = asdict( + query_server_info(args.host, args.query_port, timeout=args.timeout) + ) + print(json.dumps(payload, indent=2)) + + +def _receive_packet(udp_socket: socket.socket) -> bytes: + payload, _ = udp_socket.recvfrom(4096) + return payload + + +def _is_challenge_packet(payload: bytes) -> bool: + return ( + len(payload) >= 9 + and payload.startswith(_A2S_PREFIX) + and payload[4] == _A2S_CHALLENGE_RESPONSE + ) + + +def _parse_info_payload( + payload: bytes, + *, + host: str, + query_port: int, +) -> A2SServerInfo: + if len(payload) < 6 or not payload.startswith(_A2S_PREFIX): + raise A2SProtocolError("A2S response did not include the expected packet header.") + if payload[4] != _A2S_INFO_RESPONSE: + raise A2SProtocolError( + f"A2S response type {payload[4]!r} is not an info response." + ) + + protocol = payload[5] + offset = 6 + server_name, offset = _read_c_string(payload, offset) + map_name, offset = _read_c_string(payload, offset) + folder, offset = _read_c_string(payload, offset) + game, offset = _read_c_string(payload, offset) + offset += 2 # app id + players = _read_byte(payload, offset) + max_players = _read_byte(payload, offset + 1) + offset += 6 # players, max, bots, server type, environment, visibility + offset += 1 # vac + version, offset = _read_c_string(payload, offset) + + if offset < len(payload): + extra_data_flag = payload[offset] + offset += 1 + if extra_data_flag & 0x80: + offset += 2 + if extra_data_flag & 0x10: + _, offset = _read_c_string(payload, offset) + if extra_data_flag & 0x40: + offset += 2 + offset += 8 + if extra_data_flag & 0x20: + offset += 8 + + return A2SServerInfo( + host=host, + query_port=query_port, + server_name=server_name or "Unknown server", + map_name=map_name or None, + players=players, + max_players=max_players, + protocol=protocol, + folder=folder or None, + game=game or None, + version=version or None, + ) + + +def _read_c_string(payload: bytes, offset: int) -> tuple[str, int]: + end = payload.find(b"\x00", offset) + if end == -1: + raise A2SProtocolError("A2S response ended before a null-terminated string.") + return payload[offset:end].decode("utf-8", errors="replace"), end + 1 + + +def _read_byte(payload: bytes, offset: int) -> int: + if offset >= len(payload): + raise A2SProtocolError("A2S response ended before expected integer fields.") + return struct.unpack_from(" Sequence[Mapping[str, object]]: + """Return the controlled development source used by the collector bootstrap.""" + return CONTROLLED_RAW_SERVER_SOURCE + + +def fetch_a2s_probe( + host: str, + query_port: int, + *, + timeout: float = DEFAULT_A2S_TIMEOUT, + source_name: str = "a2s-info", + external_server_id: str | None = None, + region: str | None = None, +) -> dict[str, object]: + """Probe one A2S target and normalize its metadata for the collector model.""" + server_info = query_server_info(host, query_port, timeout=timeout) + return normalize_a2s_server_info( + server_info, + source_name=source_name, + external_server_id=external_server_id, + region=region, + ) + + +def fetch_configured_a2s_probes( + *, + timeout: float = DEFAULT_A2S_TIMEOUT, + probe_target: TargetProbe | None = None, +) -> tuple[dict[str, object], ...]: + """Probe the configured A2S targets without hardcoding them in collector logic.""" + probe = probe_target or _probe_configured_target + return tuple( + dict(probe(target, timeout)) + for target in load_a2s_targets() + ) + + +def collect_server_snapshots( + *, + fetch_raw_source: RawSourceFetcher = fetch_controlled_server_source, + source_name: str = "controlled-placeholder", + source_mode: str = "controlled", + timeout: float = DEFAULT_A2S_TIMEOUT, + allow_controlled_fallback: bool = True, + probe_target: TargetProbe | None = None, + persist: bool = False, + db_path: Path | None = None, +) -> dict[str, object]: + """Collect snapshot batches from controlled data, A2S, or auto mode.""" + normalized_records, collection_details = _collect_normalized_records( + fetch_raw_source=fetch_raw_source, + source_name=source_name, + source_mode=source_mode, + timeout=timeout, + allow_controlled_fallback=allow_controlled_fallback, + probe_target=probe_target, + ) + captured_at = utc_now() + + payload = { + "source_name": collection_details["source_name"], + "collection_mode": collection_details["collection_mode"], + "fallback_used": collection_details["fallback_used"], + "target_count": collection_details["target_count"], + "success_count": collection_details["success_count"], + "errors": collection_details["errors"], + "captured_at": captured_at.isoformat().replace("+00:00", "Z"), + "snapshots": build_snapshot_batch( + normalized_records, + captured_at=captured_at, + ), + } + if persist: + payload["storage"] = persist_snapshot_batch( + payload["snapshots"], + source_name=payload["source_name"], + captured_at=payload["captured_at"], + db_path=db_path, + ) + + return payload + + +def main() -> None: + """Allow manual collector execution during development.""" + parser = argparse.ArgumentParser(description="Collect development server snapshots.") + parser.add_argument( + "--source", + choices=("controlled", "a2s", "auto"), + default="auto", + help="Choose controlled data, configured A2S targets, or auto with fallback.", + ) + parser.add_argument( + "--timeout", + type=float, + default=DEFAULT_A2S_TIMEOUT, + help="Socket timeout in seconds for A2S probes.", + ) + parser.add_argument( + "--no-fallback", + action="store_true", + help="Disable fallback to controlled data when A2S fails.", + ) + args = parser.parse_args() + + payload = collect_server_snapshots( + source_mode=args.source, + timeout=args.timeout, + allow_controlled_fallback=not args.no_fallback, + persist=True, + ) + print(json.dumps(payload, indent=2)) + + +def _collect_normalized_records( + *, + fetch_raw_source: RawSourceFetcher, + source_name: str, + source_mode: str, + timeout: float, + allow_controlled_fallback: bool, + probe_target: TargetProbe | None, +) -> tuple[list[dict[str, object]], dict[str, object]]: + if source_mode == "controlled": + raw_records = fetch_raw_source() + return ( + [ + normalize_server_record(record, source_name=source_name) + for record in raw_records + ], + { + "source_name": source_name, + "collection_mode": "controlled", + "fallback_used": False, + "target_count": 0, + "success_count": 0, + "errors": [], + }, + ) + + configured_targets = load_a2s_targets() + records: list[dict[str, object]] = [] + errors: list[dict[str, object]] = [] + probe = probe_target or _probe_configured_target + + for target in configured_targets: + try: + records.append(dict(probe(target, timeout))) + except Exception as error: # noqa: BLE001 - keep collector failures controlled + errors.append( + { + "target": target.name, + "host": target.host, + "query_port": target.query_port, + "message": str(error), + } + ) + + if records: + return ( + records, + { + "source_name": "a2s-info", + "collection_mode": "a2s", + "fallback_used": False, + "target_count": len(configured_targets), + "success_count": len(records), + "errors": errors, + }, + ) + + if source_mode == "a2s" or not allow_controlled_fallback: + return ( + [], + { + "source_name": "a2s-info", + "collection_mode": "a2s", + "fallback_used": False, + "target_count": len(configured_targets), + "success_count": 0, + "errors": errors, + }, + ) + + raw_records = fetch_raw_source() + normalized_records = [ + normalize_server_record(record, source_name=source_name) + for record in raw_records + ] + return ( + normalized_records, + { + "source_name": source_name, + "collection_mode": "controlled-fallback", + "fallback_used": True, + "target_count": len(configured_targets), + "success_count": 0, + "errors": errors, + }, + ) + + +def _probe_configured_target( + target: A2SServerTarget, + timeout: float, +) -> dict[str, object]: + return fetch_a2s_probe( + target.host, + target.query_port, + timeout=timeout, + source_name=target.source_name, + external_server_id=target.external_server_id, + region=target.region, + ) + + +if __name__ == "__main__": + main() diff --git a/backend/app/config.py b/backend/app/config.py new file mode 100644 index 0000000..49aefcb --- /dev/null +++ b/backend/app/config.py @@ -0,0 +1,604 @@ +"""Local development configuration for the HLL Vietnam backend bootstrap.""" + +from __future__ import annotations + +import os +from pathlib import Path + + +DEFAULT_HOST = "127.0.0.1" +DEFAULT_PORT = 8000 +DEFAULT_STORAGE_FILENAME = "hll_vietnam_dev.sqlite3" +DEFAULT_REFRESH_INTERVAL_SECONDS = 300 +DEFAULT_LIVE_DATA_SOURCE = "rcon" +DEFAULT_HISTORICAL_DATA_SOURCE = "rcon" +DEFAULT_RCON_TIMEOUT_SECONDS = 20.0 +DEFAULT_HISTORICAL_CRCON_PAGE_SIZE = 50 +DEFAULT_HISTORICAL_CRCON_TIMEOUT_SECONDS = 15.0 +DEFAULT_HISTORICAL_CRCON_DETAIL_WORKERS = 8 +DEFAULT_HISTORICAL_CRCON_REQUEST_RETRIES = 3 +DEFAULT_HISTORICAL_CRCON_RETRY_DELAY_SECONDS = 0.5 +DEFAULT_HISTORICAL_REFRESH_INTERVAL_SECONDS = 1800 +DEFAULT_HISTORICAL_REFRESH_OVERLAP_HOURS = 12 +DEFAULT_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS = 900 +DEFAULT_HISTORICAL_REFRESH_MAX_RETRIES = 2 +DEFAULT_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS = 30 +DEFAULT_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS = 4 +DEFAULT_HISTORICAL_ELO_MMR_REBUILD_INTERVAL_MINUTES = 180 +DEFAULT_HISTORICAL_ELO_MMR_MIN_NEW_SAMPLES = 12 +DEFAULT_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES = 3 +DEFAULT_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY = 2 +DEFAULT_PLAYER_EVENT_REFRESH_INTERVAL_SECONDS = 1800 +DEFAULT_PLAYER_EVENT_REFRESH_OVERLAP_HOURS = 12 +DEFAULT_PLAYER_EVENT_REFRESH_MAX_RETRIES = 2 +DEFAULT_PLAYER_EVENT_REFRESH_RETRY_DELAY_SECONDS = 30 +DEFAULT_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS = 600 +DEFAULT_RCON_HISTORICAL_CAPTURE_MAX_RETRIES = 2 +DEFAULT_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS = 15 +DEFAULT_RCON_BACKFILL_CHUNK_HOURS = 6 +DEFAULT_RCON_BACKFILL_SLEEP_SECONDS = 1.0 +DEFAULT_RCON_BACKFILL_MAX_DAYS_BACK = 45 +DEFAULT_RECENT_MATCHES_KEEP = 100 +DEFAULT_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS = 30 +DEFAULT_ADMIN_LOG_CRITICAL_RETENTION_DAYS = 90 +DEFAULT_SERVER_SNAPSHOT_RETENTION_DAYS = 14 +DEFAULT_DB_MAINTENANCE_BATCH_SIZE = 5000 +DEFAULT_DB_MAINTENANCE_ENABLED = False +DEFAULT_DB_MAINTENANCE_INTERVAL_SECONDS = 43200 +DEFAULT_SQLITE_WRITER_TIMEOUT_SECONDS = 30.0 +DEFAULT_SQLITE_BUSY_TIMEOUT_MS = 30000 +DEFAULT_WRITER_LOCK_TIMEOUT_SECONDS = 120.0 +DEFAULT_WRITER_LOCK_POLL_INTERVAL_SECONDS = 1.0 +DEFAULT_ALLOWED_ORIGINS = ( + "null", + "http://127.0.0.1", + "http://127.0.0.1:5500", + "http://127.0.0.1:8080", + "http://localhost", + "http://localhost:5500", + "http://localhost:8080", +) +DEFAULT_A2S_TARGETS_ENV_VAR = "HLL_BACKEND_A2S_TARGETS" +DEFAULT_A2S_SOURCE_NAME = "community-hispana-a2s" +DEFAULT_RCON_TARGETS_ENV_VAR = "HLL_BACKEND_RCON_TARGETS" +DEFAULT_RCON_SOURCE_NAME = "community-hispana-rcon" + + +def get_bind_address() -> tuple[str, int]: + """Return the host and port used by the local backend bootstrap.""" + host = os.getenv("HLL_BACKEND_HOST", DEFAULT_HOST) + port = int(os.getenv("HLL_BACKEND_PORT", str(DEFAULT_PORT))) + return host, port + + +def get_allowed_origins() -> tuple[str, ...]: + """Return the small allowlist used for local frontend development.""" + raw_origins = os.getenv( + "HLL_BACKEND_ALLOWED_ORIGINS", + ",".join(DEFAULT_ALLOWED_ORIGINS), + ) + origins = [] + for origin in raw_origins.split(","): + normalized_origin = _normalize_origin(origin) + if normalized_origin: + origins.append(normalized_origin) + return tuple(origins) or DEFAULT_ALLOWED_ORIGINS + + +def _normalize_origin(origin: str) -> str: + """Normalize configured origins so env overrides match browser Origin values.""" + return origin.strip().rstrip("/") + + +def get_storage_path() -> Path: + """Return the local SQLite path used for development snapshot persistence.""" + default_path = Path(__file__).resolve().parent.parent / "data" / DEFAULT_STORAGE_FILENAME + configured_path = os.getenv("HLL_BACKEND_STORAGE_PATH") + return Path(configured_path) if configured_path else default_path + + +def get_database_url() -> str | None: + """Return the optional PostgreSQL URL for migrated backend storage domains.""" + configured_url = os.getenv("HLL_BACKEND_DATABASE_URL") + if configured_url is None: + return None + normalized_url = configured_url.strip() + return normalized_url or None + + +def use_postgres_rcon_storage(*, explicit_sqlite_path: Path | None = None) -> bool: + """Return whether phase-1 RCON storage should use PostgreSQL.""" + return explicit_sqlite_path is None and get_database_url() is not None + + +def get_sqlite_writer_timeout_seconds() -> float: + """Return the SQLite connection timeout shared by writer-capable storage layers.""" + configured_value = os.getenv( + "HLL_BACKEND_SQLITE_WRITER_TIMEOUT_SECONDS", + str(DEFAULT_SQLITE_WRITER_TIMEOUT_SECONDS), + ) + timeout_seconds = float(configured_value) + if timeout_seconds <= 0: + raise ValueError("HLL_BACKEND_SQLITE_WRITER_TIMEOUT_SECONDS must be positive.") + return timeout_seconds + + +def get_sqlite_busy_timeout_ms() -> int: + """Return the SQLite busy_timeout shared by writer-capable storage layers.""" + configured_value = os.getenv( + "HLL_BACKEND_SQLITE_BUSY_TIMEOUT_MS", + str(DEFAULT_SQLITE_BUSY_TIMEOUT_MS), + ) + busy_timeout_ms = int(configured_value) + if busy_timeout_ms <= 0: + raise ValueError("HLL_BACKEND_SQLITE_BUSY_TIMEOUT_MS must be positive.") + return busy_timeout_ms + + +def get_writer_lock_timeout_seconds() -> float: + """Return how long writer jobs should wait for the shared backend writer lock.""" + configured_value = os.getenv( + "HLL_BACKEND_WRITER_LOCK_TIMEOUT_SECONDS", + str(DEFAULT_WRITER_LOCK_TIMEOUT_SECONDS), + ) + timeout_seconds = float(configured_value) + if timeout_seconds < 0: + raise ValueError("HLL_BACKEND_WRITER_LOCK_TIMEOUT_SECONDS must be zero or positive.") + return timeout_seconds + + +def get_writer_lock_poll_interval_seconds() -> float: + """Return how often writer jobs should poll the shared backend writer lock.""" + configured_value = os.getenv( + "HLL_BACKEND_WRITER_LOCK_POLL_INTERVAL_SECONDS", + str(DEFAULT_WRITER_LOCK_POLL_INTERVAL_SECONDS), + ) + poll_interval_seconds = float(configured_value) + if poll_interval_seconds <= 0: + raise ValueError( + "HLL_BACKEND_WRITER_LOCK_POLL_INTERVAL_SECONDS must be positive." + ) + return poll_interval_seconds + + +def get_refresh_interval_seconds() -> int: + """Return the default interval used by the local refresh loop.""" + configured_value = os.getenv( + "HLL_BACKEND_REFRESH_INTERVAL_SECONDS", + str(DEFAULT_REFRESH_INTERVAL_SECONDS), + ) + interval_seconds = int(configured_value) + if interval_seconds <= 0: + raise ValueError("HLL_BACKEND_REFRESH_INTERVAL_SECONDS must be positive.") + + return interval_seconds + + +def get_historical_crcon_page_size() -> int: + """Return the default page size used for CRCON historical ingestion.""" + configured_value = os.getenv( + "HLL_HISTORICAL_CRCON_PAGE_SIZE", + str(DEFAULT_HISTORICAL_CRCON_PAGE_SIZE), + ) + page_size = int(configured_value) + if page_size <= 0: + raise ValueError("HLL_HISTORICAL_CRCON_PAGE_SIZE must be positive.") + + return page_size + + +def get_historical_crcon_request_timeout_seconds() -> float: + """Return the timeout used for CRCON historical JSON requests.""" + configured_value = os.getenv( + "HLL_HISTORICAL_CRCON_TIMEOUT_SECONDS", + str(DEFAULT_HISTORICAL_CRCON_TIMEOUT_SECONDS), + ) + timeout_seconds = float(configured_value) + if timeout_seconds <= 0: + raise ValueError("HLL_HISTORICAL_CRCON_TIMEOUT_SECONDS must be positive.") + + return timeout_seconds + + +def get_historical_crcon_detail_workers() -> int: + """Return the worker count used for CRCON historical detail requests.""" + configured_value = os.getenv( + "HLL_HISTORICAL_CRCON_DETAIL_WORKERS", + str(DEFAULT_HISTORICAL_CRCON_DETAIL_WORKERS), + ) + worker_count = int(configured_value) + if worker_count <= 0: + raise ValueError("HLL_HISTORICAL_CRCON_DETAIL_WORKERS must be positive.") + + return worker_count + + +def get_historical_crcon_request_retries() -> int: + """Return the retry count used for CRCON historical JSON requests.""" + configured_value = os.getenv( + "HLL_HISTORICAL_CRCON_REQUEST_RETRIES", + str(DEFAULT_HISTORICAL_CRCON_REQUEST_RETRIES), + ) + retry_count = int(configured_value) + if retry_count <= 0: + raise ValueError("HLL_HISTORICAL_CRCON_REQUEST_RETRIES must be positive.") + + return retry_count + + +def get_historical_crcon_retry_delay_seconds() -> float: + """Return the base delay used between CRCON request retries.""" + configured_value = os.getenv( + "HLL_HISTORICAL_CRCON_RETRY_DELAY_SECONDS", + str(DEFAULT_HISTORICAL_CRCON_RETRY_DELAY_SECONDS), + ) + retry_delay_seconds = float(configured_value) + if retry_delay_seconds < 0: + raise ValueError( + "HLL_HISTORICAL_CRCON_RETRY_DELAY_SECONDS must be zero or positive." + ) + + return retry_delay_seconds + + +def get_historical_refresh_interval_seconds() -> int: + """Return the default interval used by the historical refresh loop.""" + return _read_int_env( + "HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS", + os.getenv( + "HLL_HISTORICAL_REFRESH_INTERVAL_SECONDS", + str(DEFAULT_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS), + ), + minimum=1, + ) + + +def _read_int_env(name: str, default_value: str, *, minimum: int) -> int: + """Read one integer env var and keep validation errors actionable.""" + configured_value = os.getenv(name, default_value) + try: + value = int(configured_value) + except (TypeError, ValueError) as error: + raise ValueError(f"{name} must be an integer.") from error + if value < minimum: + qualifier = "positive" if minimum == 1 else f"at least {minimum}" + raise ValueError(f"{name} must be {qualifier}.") + return value + + +def _read_float_env(name: str, default_value: str, *, minimum: float) -> float: + """Read one float env var and keep validation errors actionable.""" + configured_value = os.getenv(name, default_value) + try: + value = float(configured_value) + except (TypeError, ValueError) as error: + raise ValueError(f"{name} must be a number.") from error + if value < minimum: + qualifier = "zero or positive" if minimum == 0 else f"at least {minimum}" + raise ValueError(f"{name} must be {qualifier}.") + return value + + +def get_historical_refresh_overlap_hours() -> int: + """Return the overlap window used by incremental historical refreshes.""" + configured_value = os.getenv( + "HLL_HISTORICAL_REFRESH_OVERLAP_HOURS", + str(DEFAULT_HISTORICAL_REFRESH_OVERLAP_HOURS), + ) + overlap_hours = int(configured_value) + if overlap_hours < 0: + raise ValueError("HLL_HISTORICAL_REFRESH_OVERLAP_HOURS must be zero or positive.") + + return overlap_hours + + +def get_live_data_source_kind() -> str: + """Return the live provider kind selected for the current environment.""" + source_kind = os.getenv("HLL_BACKEND_LIVE_DATA_SOURCE", DEFAULT_LIVE_DATA_SOURCE).strip() + if source_kind not in {"a2s", "rcon"}: + raise ValueError("HLL_BACKEND_LIVE_DATA_SOURCE must be 'a2s' or 'rcon'.") + return source_kind + + +def get_historical_data_source_kind() -> str: + """Return the historical provider kind selected for the current environment.""" + source_kind = os.getenv( + "HLL_BACKEND_HISTORICAL_DATA_SOURCE", + DEFAULT_HISTORICAL_DATA_SOURCE, + ).strip() + if source_kind not in {"public-scoreboard", "rcon"}: + raise ValueError( + "HLL_BACKEND_HISTORICAL_DATA_SOURCE must be 'public-scoreboard' or 'rcon'." + ) + return source_kind + + +def get_rcon_request_timeout_seconds() -> float: + """Return the timeout used for HLL RCON TCP requests.""" + configured_value = os.getenv( + "HLL_BACKEND_RCON_TIMEOUT_SECONDS", + str(DEFAULT_RCON_TIMEOUT_SECONDS), + ) + timeout_seconds = float(configured_value) + if timeout_seconds <= 0: + raise ValueError("HLL_BACKEND_RCON_TIMEOUT_SECONDS must be positive.") + return timeout_seconds + + +def get_historical_refresh_max_retries() -> int: + """Return the retry count used by the historical refresh loop.""" + return _read_int_env( + "HLL_HISTORICAL_REFRESH_MAX_RETRIES", + str(DEFAULT_HISTORICAL_REFRESH_MAX_RETRIES), + minimum=0, + ) + + +def get_historical_refresh_retry_delay_seconds() -> float: + """Return the wait time between historical refresh retries.""" + return _read_float_env( + "HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS", + str(DEFAULT_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS), + minimum=0, + ) + + +def get_historical_full_snapshot_every_runs() -> int: + """Return how often the runner should rebuild the full snapshot matrix.""" + configured_value = os.getenv( + "HLL_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS", + str(DEFAULT_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS), + ) + run_count = int(configured_value) + if run_count <= 0: + raise ValueError("HLL_HISTORICAL_FULL_SNAPSHOT_EVERY_RUNS must be positive.") + + return run_count + + +def get_historical_elo_mmr_rebuild_interval_minutes() -> int: + """Return the minimum minutes between automatic Elo/MMR rebuilds.""" + configured_value = os.getenv( + "HLL_HISTORICAL_ELO_MMR_REBUILD_INTERVAL_MINUTES", + str(DEFAULT_HISTORICAL_ELO_MMR_REBUILD_INTERVAL_MINUTES), + ) + interval_minutes = int(configured_value) + if interval_minutes <= 0: + raise ValueError("HLL_HISTORICAL_ELO_MMR_REBUILD_INTERVAL_MINUTES must be positive.") + return interval_minutes + + +def get_historical_elo_mmr_min_new_samples() -> int: + """Return the minimum new RCON samples required for an automatic Elo/MMR rebuild.""" + configured_value = os.getenv( + "HLL_HISTORICAL_ELO_MMR_MIN_NEW_SAMPLES", + str(DEFAULT_HISTORICAL_ELO_MMR_MIN_NEW_SAMPLES), + ) + min_samples = int(configured_value) + if min_samples <= 0: + raise ValueError("HLL_HISTORICAL_ELO_MMR_MIN_NEW_SAMPLES must be positive.") + return min_samples + + +def get_historical_weekly_fallback_min_matches() -> int: + """Return the minimum closed matches required to trust the current week.""" + configured_value = os.getenv( + "HLL_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES", + str(DEFAULT_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES), + ) + min_matches = int(configured_value) + if min_matches <= 0: + raise ValueError("HLL_HISTORICAL_WEEKLY_FALLBACK_MIN_MATCHES must be positive.") + + return min_matches + + +def get_historical_weekly_fallback_max_weekday() -> int: + """Return the last weekday index where weekly fallback may still apply.""" + configured_value = os.getenv( + "HLL_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY", + str(DEFAULT_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY), + ) + max_weekday = int(configured_value) + if max_weekday < 0 or max_weekday > 6: + raise ValueError("HLL_HISTORICAL_WEEKLY_FALLBACK_MAX_WEEKDAY must be between 0 and 6.") + + return max_weekday + + +def get_player_event_refresh_interval_seconds() -> int: + """Return the default interval used by the player event refresh loop.""" + configured_value = os.getenv( + "HLL_PLAYER_EVENT_REFRESH_INTERVAL_SECONDS", + str(DEFAULT_PLAYER_EVENT_REFRESH_INTERVAL_SECONDS), + ) + interval_seconds = int(configured_value) + if interval_seconds <= 0: + raise ValueError("HLL_PLAYER_EVENT_REFRESH_INTERVAL_SECONDS must be positive.") + return interval_seconds + + +def get_player_event_refresh_overlap_hours() -> int: + """Return the overlap window used by player event refresh runs.""" + configured_value = os.getenv( + "HLL_PLAYER_EVENT_REFRESH_OVERLAP_HOURS", + str(DEFAULT_PLAYER_EVENT_REFRESH_OVERLAP_HOURS), + ) + overlap_hours = int(configured_value) + if overlap_hours < 0: + raise ValueError("HLL_PLAYER_EVENT_REFRESH_OVERLAP_HOURS must be zero or positive.") + return overlap_hours + + +def get_player_event_refresh_max_retries() -> int: + """Return the retry count used by the player event refresh loop.""" + configured_value = os.getenv( + "HLL_PLAYER_EVENT_REFRESH_MAX_RETRIES", + str(DEFAULT_PLAYER_EVENT_REFRESH_MAX_RETRIES), + ) + max_retries = int(configured_value) + if max_retries < 0: + raise ValueError("HLL_PLAYER_EVENT_REFRESH_MAX_RETRIES must be zero or positive.") + return max_retries + + +def get_player_event_refresh_retry_delay_seconds() -> int: + """Return the wait time between player event refresh retries.""" + configured_value = os.getenv( + "HLL_PLAYER_EVENT_REFRESH_RETRY_DELAY_SECONDS", + str(DEFAULT_PLAYER_EVENT_REFRESH_RETRY_DELAY_SECONDS), + ) + retry_delay_seconds = int(configured_value) + if retry_delay_seconds < 0: + raise ValueError( + "HLL_PLAYER_EVENT_REFRESH_RETRY_DELAY_SECONDS must be zero or positive." + ) + return retry_delay_seconds + + +def get_rcon_historical_capture_interval_seconds() -> int: + """Return the default interval used by the prospective RCON capture loop.""" + configured_value = os.getenv( + "HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS", + str(DEFAULT_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS), + ) + interval_seconds = int(configured_value) + if interval_seconds <= 0: + raise ValueError("HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS must be positive.") + return interval_seconds + + +def get_rcon_historical_capture_max_retries() -> int: + """Return the retry count used by the prospective RCON capture loop.""" + configured_value = os.getenv( + "HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES", + str(DEFAULT_RCON_HISTORICAL_CAPTURE_MAX_RETRIES), + ) + max_retries = int(configured_value) + if max_retries < 0: + raise ValueError("HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES must be zero or positive.") + return max_retries + + +def get_rcon_historical_capture_retry_delay_seconds() -> int: + """Return the wait time between failed prospective RCON capture attempts.""" + configured_value = os.getenv( + "HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS", + str(DEFAULT_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS), + ) + retry_delay_seconds = int(configured_value) + if retry_delay_seconds < 0: + raise ValueError( + "HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS must be zero or positive." + ) + return retry_delay_seconds + + +def get_rcon_backfill_chunk_hours() -> int: + """Return the AdminLog backfill chunk size in hours.""" + return _read_int_env( + "HLL_RCON_BACKFILL_CHUNK_HOURS", + str(DEFAULT_RCON_BACKFILL_CHUNK_HOURS), + minimum=1, + ) + + +def get_rcon_backfill_sleep_seconds() -> float: + """Return the delay between AdminLog backfill RCON requests.""" + return _read_float_env( + "HLL_RCON_BACKFILL_SLEEP_SECONDS", + str(DEFAULT_RCON_BACKFILL_SLEEP_SECONDS), + minimum=0, + ) + + +def get_rcon_backfill_max_days_back() -> int: + """Return the maximum AdminLog backfill lookback horizon in days.""" + return _read_int_env( + "HLL_RCON_BACKFILL_MAX_DAYS_BACK", + str(DEFAULT_RCON_BACKFILL_MAX_DAYS_BACK), + minimum=1, + ) + + +def get_recent_matches_keep() -> int: + """Return how many recent closed materialized matches maintenance must protect.""" + return _read_int_env( + "HLL_RECENT_MATCHES_KEEP", + str(DEFAULT_RECENT_MATCHES_KEEP), + minimum=1, + ) + + +def get_admin_log_noncritical_retention_days() -> int: + """Return retention days for non-critical AdminLog events.""" + return _read_int_env( + "HLL_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS", + str(DEFAULT_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS), + minimum=1, + ) + + +def get_admin_log_critical_retention_days() -> int: + """Return retention days for critical AdminLog events.""" + return _read_int_env( + "HLL_ADMIN_LOG_CRITICAL_RETENTION_DAYS", + str(DEFAULT_ADMIN_LOG_CRITICAL_RETENTION_DAYS), + minimum=1, + ) + + +def get_server_snapshot_retention_days() -> int: + """Return retention days for live server snapshots.""" + return _read_int_env( + "HLL_SERVER_SNAPSHOT_RETENTION_DAYS", + str(DEFAULT_SERVER_SNAPSHOT_RETENTION_DAYS), + minimum=1, + ) + + +def get_db_maintenance_batch_size() -> int: + """Return the delete batch size used by database maintenance.""" + return _read_int_env( + "HLL_DB_MAINTENANCE_BATCH_SIZE", + str(DEFAULT_DB_MAINTENANCE_BATCH_SIZE), + minimum=1, + ) + + +def get_db_maintenance_enabled() -> bool: + """Return whether scheduled database maintenance is enabled.""" + normalized = os.getenv( + "HLL_DB_MAINTENANCE_ENABLED", + "true" if DEFAULT_DB_MAINTENANCE_ENABLED else "false", + ).strip().lower() + return normalized in {"1", "true", "yes", "on"} + + +def get_db_maintenance_interval_seconds() -> int: + """Return the scheduled database maintenance interval in seconds.""" + return _read_int_env( + "HLL_DB_MAINTENANCE_INTERVAL_SECONDS", + str(DEFAULT_DB_MAINTENANCE_INTERVAL_SECONDS), + minimum=1, + ) + + +def get_a2s_targets_payload() -> str | None: + """Return the optional JSON payload that overrides local A2S targets.""" + raw_payload = os.getenv(DEFAULT_A2S_TARGETS_ENV_VAR) + if raw_payload is None: + return None + + normalized = raw_payload.strip() + return normalized or None + + +def get_rcon_targets_payload() -> str | None: + """Return the optional JSON payload that defines live RCON targets.""" + raw_payload = os.getenv(DEFAULT_RCON_TARGETS_ENV_VAR) + if raw_payload is None: + return None + + normalized = raw_payload.strip() + return normalized or None diff --git a/backend/app/data_sources.py b/backend/app/data_sources.py new file mode 100644 index 0000000..f8846b0 --- /dev/null +++ b/backend/app/data_sources.py @@ -0,0 +1,446 @@ +"""Data source selection and contracts for live and historical backend flows.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Protocol + +from .collector import collect_server_snapshots +from .config import get_historical_data_source_kind, get_live_data_source_kind +from .providers.public_scoreboard_provider import PublicScoreboardHistoricalDataSource +from .providers.rcon_provider import RconLiveDataSource +from .rcon_historical_read_model import ( + describe_rcon_historical_read_model, + list_rcon_historical_recent_activity, + list_rcon_historical_server_summaries, +) +from .server_targets import A2SServerTarget, load_a2s_targets + + +LIVE_SOURCE_A2S = "a2s" +SOURCE_KIND_PUBLIC_SCOREBOARD = "public-scoreboard" +SOURCE_KIND_RCON = "rcon" + + +class HistoricalDataSource(Protocol): + """Contract for historical providers used by ingestion flows.""" + + source_kind: str + + def fetch_public_info(self, *, base_url: str) -> dict[str, object]: + """Fetch provider metadata for one historical source.""" + + def fetch_match_page(self, *, base_url: str, page: int, limit: int) -> dict[str, object]: + """Fetch one page of historical matches.""" + + def fetch_match_details( + self, + *, + base_url: str, + match_ids: list[str], + max_workers: int, + ) -> list[dict[str, object]]: + """Fetch detailed payloads for one batch of matches.""" + + +class LiveDataSource(Protocol): + """Contract for live providers used by API payload builders.""" + + source_kind: str + + def collect_snapshots(self, *, persist: bool) -> dict[str, object]: + """Collect one live snapshot batch.""" + + def build_target_index(self) -> dict[str | None, object]: + """Return optional server connection metadata keyed by external id.""" + + +@dataclass(frozen=True, slots=True) +class A2SLiveDataSource: + """Live provider backed by the existing A2S collector flow.""" + + source_kind: str = LIVE_SOURCE_A2S + + def collect_snapshots(self, *, persist: bool) -> dict[str, object]: + return collect_server_snapshots( + source_mode="a2s", + allow_controlled_fallback=False, + persist=persist, + ) + + def build_target_index(self) -> dict[str | None, A2SServerTarget]: + return { + target.external_server_id: target + for target in load_a2s_targets() + if target.external_server_id + } + + +@dataclass(frozen=True, slots=True) +class RconFirstLiveDataSource: + """Live source arbitration with RCON as primary and A2S as controlled fallback.""" + + primary_source: RconLiveDataSource = RconLiveDataSource() + fallback_source: A2SLiveDataSource = A2SLiveDataSource() + source_kind: str = SOURCE_KIND_RCON + + def collect_snapshots(self, *, persist: bool) -> dict[str, object]: + attempts: list[dict[str, object]] = [] + fallback_reason: str | None = None + + try: + primary_payload = self.primary_source.collect_snapshots(persist=persist) + except Exception as error: # noqa: BLE001 - source arbitration keeps fallback controlled + attempts.append( + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="error", + reason="rcon-live-request-failed", + message=str(error), + ) + ) + fallback_reason = "rcon-live-request-failed" + else: + primary_success_count = int(primary_payload.get("success_count") or 0) + primary_snapshots = list(primary_payload.get("snapshots") or []) + if primary_success_count > 0 and primary_snapshots: + attempts.append( + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + ) + ) + return attach_source_policy( + primary_payload, + build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=SOURCE_KIND_RCON, + source_attempts=attempts, + ), + ) + + attempts.append( + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="empty", + reason="rcon-live-returned-no-usable-snapshots", + message=f"success_count={primary_success_count}", + ) + ) + fallback_reason = "rcon-live-returned-no-usable-snapshots" + + try: + fallback_payload = self.fallback_source.collect_snapshots(persist=persist) + except Exception as error: # noqa: BLE001 - keep combined failure explicit + attempts.append( + build_source_attempt( + source=LIVE_SOURCE_A2S, + role="fallback", + status="error", + reason="a2s-live-fallback-failed", + message=str(error), + ) + ) + raise RuntimeError( + "RCON-first live collection failed and A2S fallback also failed." + ) from error + + attempts.append( + build_source_attempt( + source=LIVE_SOURCE_A2S, + role="fallback", + status="success", + ) + ) + return attach_source_policy( + fallback_payload, + build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=LIVE_SOURCE_A2S, + fallback_used=True, + fallback_reason=fallback_reason, + source_attempts=attempts, + ), + ) + + def build_target_index(self) -> dict[str | None, object]: + target_index = dict(self.fallback_source.build_target_index()) + target_index.update(self.primary_source.build_target_index()) + return target_index + + +@dataclass(frozen=True, slots=True) +class RconHistoricalDataSource: + """Persisted RCON-backed historical read model over captured competitive windows.""" + + source_kind: str = SOURCE_KIND_RCON + + def fetch_public_info(self, *, base_url: str) -> dict[str, object]: + raise RuntimeError( + "RCON historical read mode does not support CRCON ingestion operations." + ) + + def fetch_match_page(self, *, base_url: str, page: int, limit: int) -> dict[str, object]: + raise RuntimeError( + "RCON historical read mode does not support CRCON ingestion operations." + ) + + def fetch_match_details( + self, + *, + base_url: str, + match_ids: list[str], + max_workers: int, + ) -> list[dict[str, object]]: + raise RuntimeError( + "RCON historical read mode does not support CRCON ingestion operations." + ) + + def list_server_summaries(self, *, server_key: str | None = None) -> list[dict[str, object]]: + """Return coverage and freshness from persisted RCON-backed competitive history.""" + return list_rcon_historical_server_summaries(server_key=server_key) + + def list_recent_activity( + self, + *, + server_key: str | None = None, + limit: int = 20, + ) -> list[dict[str, object]]: + """Return recent RCON-backed competitive history without on-demand network calls.""" + return list_rcon_historical_recent_activity(server_key=server_key, limit=limit) + + def has_server_summary_coverage(self, items: list[dict[str, object]]) -> bool: + """Return whether RCON summaries contain usable historical coverage.""" + for item in items: + coverage = item.get("coverage") if isinstance(item, dict) else None + if not isinstance(coverage, dict): + continue + if coverage.get("status") == "available": + return True + if int(coverage.get("sample_count") or 0) > 0: + return True + if int(coverage.get("window_count") or 0) > 0: + return True + if coverage.get("last_sample_at"): + return True + return False + + def has_recent_activity_coverage(self, items: list[dict[str, object]]) -> bool: + """Return whether RCON recent activity contains at least one usable item.""" + for item in items: + if not isinstance(item, dict): + continue + if item.get("closed_at") or item.get("ended_at") or item.get("started_at"): + return True + if int(item.get("sample_count") or 0) > 0: + return True + return False + + def describe_capabilities(self) -> dict[str, object]: + """Describe the supported RCON historical read surface.""" + return describe_rcon_historical_read_model() + + +def get_historical_data_source() -> HistoricalDataSource: + """Select the historical provider configured for the current environment.""" + source_kind = get_historical_data_source_kind() + if source_kind == SOURCE_KIND_PUBLIC_SCOREBOARD: + return PublicScoreboardHistoricalDataSource() + if source_kind == SOURCE_KIND_RCON: + return RconHistoricalDataSource() + raise ValueError(f"Unsupported historical data source: {source_kind}") + + +def get_live_data_source() -> LiveDataSource: + """Select the live provider configured for the current environment.""" + source_kind = get_live_data_source_kind() + if source_kind == LIVE_SOURCE_A2S: + return A2SLiveDataSource() + if source_kind == SOURCE_KIND_RCON: + return RconFirstLiveDataSource() + raise ValueError(f"Unsupported live data source: {source_kind}") + + +def get_rcon_historical_read_model() -> RconHistoricalDataSource | None: + """Return the persisted RCON-backed historical read model when selected.""" + if get_historical_data_source_kind() != SOURCE_KIND_RCON: + return None + return RconHistoricalDataSource() + + +def describe_historical_runtime_policy() -> dict[str, object]: + """Describe the effective historical runtime policy for the current environment.""" + if get_historical_data_source_kind() != SOURCE_KIND_RCON: + return { + "mode": "public-scoreboard-primary", + "primary_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "fallback_source": None, + "summary": "Historical runtime uses public-scoreboard directly.", + } + return { + "mode": "rcon-first-with-public-scoreboard-fallback", + "primary_source": SOURCE_KIND_RCON, + "fallback_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "summary": ( + "Historical runtime attempts the persisted RCON-backed competitive model first " + "and falls back to public-scoreboard when the requested operation is unsupported, has " + "no coverage yet, or the primary path fails." + ), + } + + +def build_historical_runtime_source_policy( + *, + operation: str, + rcon_status: str, + fallback_reason: str | None = None, + selected_source: str | None = None, + rcon_message: str | None = None, +) -> dict[str, object]: + """Build one normalized source-policy block for historical runtime reads.""" + configured_kind = get_historical_data_source_kind() + if configured_kind != SOURCE_KIND_RCON: + return build_source_policy( + primary_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + selected_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="primary", + status="success", + reason=f"{operation}-served-by-public-scoreboard", + ) + ], + ) + + if rcon_status == "success": + return build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=selected_source or SOURCE_KIND_RCON, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + reason=f"{operation}-served-by-rcon", + ) + ], + ) + + return build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=selected_source or SOURCE_KIND_PUBLIC_SCOREBOARD, + fallback_used=True, + fallback_reason=fallback_reason, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status=rcon_status, + reason=fallback_reason, + message=rcon_message, + ), + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="fallback", + status="success", + reason=f"{operation}-served-by-public-scoreboard-fallback", + ), + ], + ) + + +def resolve_historical_ingestion_data_source() -> tuple[HistoricalDataSource, dict[str, object]]: + """Resolve the fallback provider used when classic scoreboard import is required.""" + configured_kind = get_historical_data_source_kind() + if configured_kind in {SOURCE_KIND_PUBLIC_SCOREBOARD, SOURCE_KIND_RCON}: + primary_source = ( + SOURCE_KIND_PUBLIC_SCOREBOARD + if configured_kind == SOURCE_KIND_PUBLIC_SCOREBOARD + else SOURCE_KIND_RCON + ) + fallback_used = configured_kind == SOURCE_KIND_RCON + fallback_reason = ( + "classic-historical-import-requires-public-scoreboard-fallback" + if fallback_used + else None + ) + attempts = [] + if configured_kind == SOURCE_KIND_RCON: + attempts.append( + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="deferred", + reason="rcon-primary-writer-attempt-is-handled-by-historical-ingestion", + ) + ) + attempts.append( + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="fallback" if fallback_used else "primary", + status="ready", + reason="classic-historical-import-provider-ready", + ) + ) + return ( + PublicScoreboardHistoricalDataSource(), + build_source_policy( + primary_source=primary_source, + selected_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + fallback_used=fallback_used, + fallback_reason=fallback_reason, + source_attempts=attempts, + ), + ) + + raise ValueError(f"Unsupported historical data source: {configured_kind}") + + +def build_source_attempt( + *, + source: str, + role: str, + status: str, + reason: str | None = None, + message: str | None = None, +) -> dict[str, object]: + """Build one normalized trace entry for source arbitration.""" + return { + "source": source, + "role": role, + "status": status, + "reason": reason, + "message": message, + } + + +def build_source_policy( + *, + primary_source: str, + selected_source: str, + fallback_used: bool = False, + fallback_reason: str | None = None, + source_attempts: list[dict[str, object]] | None = None, +) -> dict[str, object]: + """Build one small source-policy block for API responses and worker output.""" + return { + "primary_source": primary_source, + "selected_source": selected_source, + "fallback_used": fallback_used, + "fallback_reason": fallback_reason, + "source_attempts": list(source_attempts or []), + } + + +def attach_source_policy( + payload: dict[str, object], + source_policy: dict[str, object], +) -> dict[str, object]: + """Attach normalized source-policy metadata to an existing payload.""" + enriched = dict(payload) + enriched.update(source_policy) + return enriched diff --git a/backend/app/database_maintenance.py b/backend/app/database_maintenance.py new file mode 100644 index 0000000..6cce252 --- /dev/null +++ b/backend/app/database_maintenance.py @@ -0,0 +1,638 @@ +"""Application-level database maintenance for bounded historical storage.""" + +from __future__ import annotations + +import argparse +import json +import sqlite3 +from contextlib import closing +from dataclasses import dataclass +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Any, Iterable, Sequence + +from .config import ( + get_admin_log_critical_retention_days, + get_admin_log_noncritical_retention_days, + get_database_url, + get_db_maintenance_batch_size, + get_historical_weekly_fallback_min_matches, + get_recent_matches_keep, + get_server_snapshot_retention_days, +) +from .rcon_admin_log_materialization import MATCH_RESULT_SOURCE +from .sqlite_utils import connect_sqlite_writer +from .writer_lock import backend_writer_lock, build_writer_lock_holder + +CRITICAL_ADMIN_LOG_EVENT_TYPES = frozenset({"kill", "match_start", "match_end"}) + + +@dataclass(frozen=True, slots=True) +class MaintenanceOptions: + apply: bool + recent_matches_keep: int + admin_log_noncritical_retention_days: int + admin_log_critical_retention_days: int + server_snapshot_retention_days: int + batch_size: int + vacuum_analyze: bool + now: datetime + + +def run_database_maintenance_cleanup( + *, + apply: bool = False, + recent_matches_keep: int | None = None, + admin_log_noncritical_retention_days: int | None = None, + admin_log_critical_retention_days: int | None = None, + server_snapshot_retention_days: int | None = None, + batch_size: int | None = None, + vacuum_analyze: bool = False, + now: str | datetime | None = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Plan or apply safe bounded cleanup for supported storage tables.""" + options = MaintenanceOptions( + apply=apply, + recent_matches_keep=recent_matches_keep or get_recent_matches_keep(), + admin_log_noncritical_retention_days=( + admin_log_noncritical_retention_days or get_admin_log_noncritical_retention_days() + ), + admin_log_critical_retention_days=( + admin_log_critical_retention_days or get_admin_log_critical_retention_days() + ), + server_snapshot_retention_days=( + server_snapshot_retention_days or get_server_snapshot_retention_days() + ), + batch_size=batch_size or get_db_maintenance_batch_size(), + vacuum_analyze=vacuum_analyze, + now=_resolve_now(now), + ) + _emit_json_log( + { + "event": "database-maintenance-started", + "mode": "apply" if options.apply else "dry-run", + "database_backend": _database_backend_name(db_path=db_path), + "database_url_configured": bool(get_database_url()) and db_path is None, + "db_path": str(db_path) if db_path is not None else None, + "recent_matches_keep": options.recent_matches_keep, + "admin_log_noncritical_retention_days": options.admin_log_noncritical_retention_days, + "admin_log_critical_retention_days": options.admin_log_critical_retention_days, + "server_snapshot_retention_days": options.server_snapshot_retention_days, + "batch_size": options.batch_size, + "vacuum_analyze": options.vacuum_analyze, + "now": _to_iso(options.now), + } + ) + + try: + if options.apply: + with backend_writer_lock( + holder=build_writer_lock_holder("app.database_maintenance cleanup"), + storage_path=db_path, + ): + payload = _run_cleanup(options=options, db_path=db_path) + else: + payload = _run_cleanup(options=options, db_path=db_path) + _emit_json_log( + { + "event": "database-maintenance-completed", + **payload, + } + ) + return payload + except Exception as exc: # noqa: BLE001 - CLI reports structured diagnostics + error_payload = { + "status": "error", + "mode": "apply" if options.apply else "dry-run", + "error_type": type(exc).__name__, + "error": str(exc), + } + _emit_json_log({"event": "database-maintenance-error", **error_payload}) + return error_payload + + +def _run_cleanup(*, options: MaintenanceOptions, db_path: Path | None) -> dict[str, object]: + with _connect_maintenance(db_path=db_path) as connection: + existing_tables = _existing_table_names(connection) + plan = _build_cleanup_plan(connection, existing_tables=existing_tables, options=options) + _emit_json_log( + { + "event": "database-maintenance-plan", + **plan["summary"], + } + ) + + deleted_counts = { + "rcon_match_player_stats": 0, + "rcon_materialized_matches": 0, + "rcon_admin_log_events": 0, + "server_snapshots": 0, + } + if options.apply: + deleted_counts["rcon_match_player_stats"] = _delete_match_player_stats( + connection, + matches=plan["candidate_matches"], + batch_size=options.batch_size, + ) + deleted_counts["rcon_materialized_matches"] = _delete_ids_in_batches( + connection, + table_name="rcon_materialized_matches", + ids=[int(row["id"]) for row in plan["candidate_matches"]], + batch_size=options.batch_size, + ) + deleted_counts["rcon_admin_log_events"] = _delete_ids_in_batches( + connection, + table_name="rcon_admin_log_events", + ids=plan["candidate_admin_log_ids"], + batch_size=options.batch_size, + ) + deleted_counts["server_snapshots"] = _delete_ids_in_batches( + connection, + table_name="server_snapshots", + ids=plan["candidate_server_snapshot_ids"], + batch_size=options.batch_size, + ) + if options.vacuum_analyze: + _run_vacuum_analyze(connection) + + return { + "status": "ok", + "mode": "apply" if options.apply else "dry-run", + "deleted_counts": deleted_counts, + "plan": plan["summary"], + } + + +def _build_cleanup_plan( + connection: sqlite3.Connection | Any, + *, + existing_tables: set[str], + options: MaintenanceOptions, +) -> dict[str, object]: + candidate_server_snapshot_ids: list[int] = [] + candidate_admin_log_ids: list[int] = [] + candidate_matches: list[dict[str, object]] = [] + protected_match_keys: list[str] = [] + skipped_tables: list[str] = [] + + if "server_snapshots" not in existing_tables: + skipped_tables.append("server_snapshots") + _emit_skip("server_snapshots", "table-missing") + else: + cutoff = options.now - timedelta(days=options.server_snapshot_retention_days) + for row in connection.execute( + "SELECT id, captured_at FROM server_snapshots ORDER BY id ASC" + ).fetchall(): + captured_at = _parse_datetime(row["captured_at"]) + if captured_at is None: + continue + if captured_at < cutoff: + candidate_server_snapshot_ids.append(int(row["id"])) + + protected_ranges: dict[str, list[tuple[int, int]]] = {} + if "rcon_materialized_matches" not in existing_tables: + skipped_tables.append("rcon_materialized_matches") + _emit_skip("rcon_materialized_matches", "table-missing") + else: + ( + candidate_matches, + protected_matches, + protected_ranges, + protection_summary, + ) = _plan_materialized_match_cleanup(connection, options=options) + protected_match_keys = [str(row["match_key"]) for row in protected_matches] + if "rcon_match_player_stats" not in existing_tables: + skipped_tables.append("rcon_match_player_stats") + _emit_skip("rcon_match_player_stats", "table-missing") + + if "rcon_admin_log_events" not in existing_tables: + skipped_tables.append("rcon_admin_log_events") + _emit_skip("rcon_admin_log_events", "table-missing") + else: + candidate_admin_log_ids = _plan_admin_log_cleanup( + connection, + options=options, + protected_ranges=protected_ranges, + ) + + candidate_player_stat_rows = 0 + if candidate_matches and "rcon_match_player_stats" in existing_tables: + candidate_player_stat_rows = _count_candidate_player_stats(connection, candidate_matches) + + summary = { + "status": "ok", + "protected_match_count": len(protected_match_keys), + "candidate_match_count": len(candidate_matches), + "candidate_match_player_stat_count": candidate_player_stat_rows, + "candidate_admin_log_event_count": len(candidate_admin_log_ids), + "candidate_server_snapshot_count": len(candidate_server_snapshot_ids), + "skipped_tables": skipped_tables, + "protected_match_keys_preview": protected_match_keys[:10], + } + if "protection_summary" in locals(): + summary["protection_summary"] = protection_summary + + return { + "candidate_server_snapshot_ids": candidate_server_snapshot_ids, + "candidate_admin_log_ids": candidate_admin_log_ids, + "candidate_matches": candidate_matches, + "summary": summary, + } + + +def _plan_materialized_match_cleanup( + connection: sqlite3.Connection | Any, + *, + options: MaintenanceOptions, +) -> tuple[list[dict[str, object]], list[dict[str, object]], dict[str, list[tuple[int, int]]], dict[str, object]]: + rows = [ + dict(row) + for row in connection.execute( + """ + SELECT id, target_key, match_key, started_at, ended_at, + started_server_time, ended_server_time, source_basis + FROM rcon_materialized_matches + WHERE source_basis = ? + """, + (MATCH_RESULT_SOURCE,), + ).fetchall() + ] + closed_rows: list[dict[str, object]] = [] + protected_rows: list[dict[str, object]] = [] + current_month_start = options.now.replace(day=1, hour=0, minute=0, second=0, microsecond=0) + previous_month_start = (current_month_start - timedelta(days=1)).replace(day=1) + current_week_start = (options.now - timedelta(days=options.now.weekday())).replace( + hour=0, + minute=0, + second=0, + microsecond=0, + ) + previous_week_start = current_week_start - timedelta(days=7) + + for row in rows: + closed_at = _parse_datetime(row.get("ended_at") or row.get("started_at")) + if closed_at is None: + row["_protect_reason"] = "unparseable-closed-at" + protected_rows.append(row) + continue + row["_closed_at"] = closed_at + closed_rows.append(row) + + closed_rows.sort( + key=lambda row: ( + row["_closed_at"], + _coerce_int(row.get("ended_server_time")) or _coerce_int(row.get("started_server_time")) or 0, + _coerce_int(row.get("id")) or 0, + ), + reverse=True, + ) + latest_ids = {int(row["id"]) for row in closed_rows[: options.recent_matches_keep]} + current_week_count = sum( + 1 for row in closed_rows if current_week_start <= row["_closed_at"] < options.now + ) + previous_week_count = sum( + 1 for row in closed_rows if previous_week_start <= row["_closed_at"] < current_week_start + ) + protect_previous_week = ( + current_week_count < get_historical_weekly_fallback_min_matches() + and previous_week_count > 0 + ) + protect_previous_month = options.now.day <= 7 + + candidate_rows: list[dict[str, object]] = [] + protected_ranges: dict[str, list[tuple[int, int]]] = {} + for row in closed_rows: + closed_at = row["_closed_at"] + should_protect = False + if int(row["id"]) in latest_ids: + should_protect = True + elif closed_at >= current_month_start: + should_protect = True + elif protect_previous_month and previous_month_start <= closed_at < current_month_start: + should_protect = True + elif closed_at >= current_week_start: + should_protect = True + elif protect_previous_week and previous_week_start <= closed_at < current_week_start: + should_protect = True + + if should_protect: + protected_rows.append(row) + lower = _coerce_int(row.get("started_server_time")) + upper = _coerce_int(row.get("ended_server_time")) + if lower is not None and upper is not None: + protected_ranges.setdefault(str(row["target_key"]), []).append((lower, upper)) + else: + candidate_rows.append(row) + + return ( + candidate_rows, + protected_rows, + protected_ranges, + { + "recent_matches_keep": options.recent_matches_keep, + "current_week_closed_matches": current_week_count, + "previous_week_closed_matches": previous_week_count, + "protect_previous_week": protect_previous_week, + "protect_previous_month": protect_previous_month, + "current_week_start": _to_iso(current_week_start), + "previous_week_start": _to_iso(previous_week_start), + "current_month_start": _to_iso(current_month_start), + "previous_month_start": _to_iso(previous_month_start), + }, + ) + + +def _plan_admin_log_cleanup( + connection: sqlite3.Connection | Any, + *, + options: MaintenanceOptions, + protected_ranges: dict[str, list[tuple[int, int]]], +) -> list[int]: + noncritical_cutoff = options.now - timedelta(days=options.admin_log_noncritical_retention_days) + critical_cutoff = options.now - timedelta(days=options.admin_log_critical_retention_days) + candidate_ids: list[int] = [] + rows = connection.execute( + """ + SELECT id, target_key, event_type, event_timestamp, server_time + FROM rcon_admin_log_events + ORDER BY id ASC + """ + ).fetchall() + for row in rows: + event_type = str(row["event_type"] or "").strip() + event_time = _parse_datetime(row["event_timestamp"]) + if event_time is None: + continue + if event_type in CRITICAL_ADMIN_LOG_EVENT_TYPES: + if event_time >= critical_cutoff: + continue + server_time = _coerce_int(row["server_time"]) + if server_time is None: + continue + if _server_time_is_protected( + target_key=str(row["target_key"] or ""), + server_time=server_time, + protected_ranges=protected_ranges, + ): + continue + candidate_ids.append(int(row["id"])) + continue + if event_time < noncritical_cutoff: + candidate_ids.append(int(row["id"])) + return candidate_ids + + +def _count_candidate_player_stats( + connection: sqlite3.Connection | Any, + matches: Sequence[dict[str, object]], +) -> int: + count = 0 + for batch in _chunked(list(matches), 250): + clause, params = _match_pair_clause(batch) + row = connection.execute( + f"SELECT COUNT(*) AS count FROM rcon_match_player_stats WHERE {clause}", + params, + ).fetchone() + count += int(row["count"] or 0) + return count + + +def _delete_match_player_stats( + connection: sqlite3.Connection | Any, + *, + matches: Sequence[dict[str, object]], + batch_size: int, +) -> int: + deleted = 0 + for batch in _chunked(list(matches), max(1, min(batch_size, 250))): + clause, params = _match_pair_clause(batch) + deleted_in_batch = int( + connection.execute( + f"DELETE FROM rcon_match_player_stats WHERE {clause}", + params, + ).rowcount + or 0 + ) + _commit(connection) + deleted += deleted_in_batch + _emit_json_log( + { + "event": "database-maintenance-delete-batch", + "table": "rcon_match_player_stats", + "deleted_rows": deleted_in_batch, + "batch_size": len(batch), + } + ) + return deleted + + +def _delete_ids_in_batches( + connection: sqlite3.Connection | Any, + *, + table_name: str, + ids: Sequence[int], + batch_size: int, +) -> int: + deleted = 0 + for batch in _chunked(list(ids), batch_size): + placeholders = ",".join("?" for _ in batch) + deleted_in_batch = int( + connection.execute( + f"DELETE FROM {table_name} WHERE id IN ({placeholders})", + batch, + ).rowcount + or 0 + ) + _commit(connection) + deleted += deleted_in_batch + _emit_json_log( + { + "event": "database-maintenance-delete-batch", + "table": table_name, + "deleted_rows": deleted_in_batch, + "batch_size": len(batch), + } + ) + return deleted + + +def _run_vacuum_analyze(connection: sqlite3.Connection | Any) -> None: + raw_connection = _raw_connection(connection) + if isinstance(raw_connection, sqlite3.Connection): + raw_connection.execute("VACUUM") + raw_connection.execute("ANALYZE") + raw_connection.commit() + return + raw_connection.commit() + raw_connection.autocommit = True + try: + raw_connection.execute("VACUUM ANALYZE") + finally: + raw_connection.autocommit = False + + +def _match_pair_clause(matches: Sequence[dict[str, object]]) -> tuple[str, list[object]]: + clauses: list[str] = [] + params: list[object] = [] + for row in matches: + clauses.append("(target_key = ? AND match_key = ?)") + params.extend([row["target_key"], row["match_key"]]) + return " OR ".join(clauses), params + + +def _existing_table_names(connection: sqlite3.Connection | Any) -> set[str]: + raw_connection = _raw_connection(connection) + if isinstance(raw_connection, sqlite3.Connection): + rows = connection.execute( + "SELECT name FROM sqlite_master WHERE type = 'table'" + ).fetchall() + return {str(row["name"]) for row in rows} + rows = raw_connection.execute( + """ + SELECT table_name + FROM information_schema.tables + WHERE table_schema = 'public' + """ + ).fetchall() + return {str(row["table_name"]) for row in rows} + + +def _emit_skip(table_name: str, reason: str) -> None: + _emit_json_log( + { + "event": "database-maintenance-table-skipped", + "table": table_name, + "reason": reason, + } + ) + + +def _server_time_is_protected( + *, + target_key: str, + server_time: int, + protected_ranges: dict[str, list[tuple[int, int]]], +) -> bool: + for lower, upper in protected_ranges.get(target_key, []): + if lower <= server_time <= upper: + return True + return False + + +def _connect_maintenance(*, db_path: Path | None): + if get_database_url() and db_path is None: + from .postgres_rcon_storage import connect_postgres_compat + + return connect_postgres_compat() + resolved_path = db_path or Path.cwd() / "backend" / "data" / "hll_vietnam_dev.sqlite3" + resolved_path.parent.mkdir(parents=True, exist_ok=True) + return closing(connect_sqlite_writer(resolved_path)) + + +def _commit(connection: sqlite3.Connection | Any) -> None: + _raw_connection(connection).commit() + + +def _raw_connection(connection: sqlite3.Connection | Any) -> sqlite3.Connection | Any: + return connection.connection if hasattr(connection, "connection") else connection + + +def _database_backend_name(*, db_path: Path | None) -> str: + return "postgres" if get_database_url() and db_path is None else "sqlite" + + +def _resolve_now(value: str | datetime | None) -> datetime: + if value is None: + return datetime.now(timezone.utc) + if isinstance(value, datetime): + return value.astimezone(timezone.utc) if value.tzinfo else value.replace(tzinfo=timezone.utc) + parsed = _parse_datetime(value) + if parsed is None: + raise ValueError("--now must be an ISO 8601 timestamp or date.") + return parsed + + +def _parse_datetime(value: object) -> datetime | None: + text = str(value or "").strip() + if not text: + return None + if len(text) == 10: + text = f"{text}T00:00:00+00:00" + try: + parsed = datetime.fromisoformat(text.replace("Z", "+00:00")) + except ValueError: + return None + return parsed.astimezone(timezone.utc) if parsed.tzinfo else parsed.replace(tzinfo=timezone.utc) + + +def _to_iso(value: datetime) -> str: + return value.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _coerce_int(value: object) -> int | None: + try: + return None if value is None else int(value) + except (TypeError, ValueError): + return None + + +def _chunked(values: Sequence[Any], size: int) -> Iterable[list[Any]]: + for index in range(0, len(values), size): + yield list(values[index : index + size]) + + +def _emit_json_log(payload: dict[str, object]) -> None: + print(json.dumps(payload, ensure_ascii=True, default=str), flush=True) + + +def build_arg_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description="Database maintenance for HLL Vietnam.") + subparsers = parser.add_subparsers(dest="command", required=True) + cleanup_parser = subparsers.add_parser("cleanup") + cleanup_parser.add_argument("--dry-run", action="store_true") + cleanup_parser.add_argument("--apply", action="store_true") + cleanup_parser.add_argument("--recent-matches-keep", type=int, default=get_recent_matches_keep()) + cleanup_parser.add_argument( + "--admin-log-noncritical-retention-days", + type=int, + default=get_admin_log_noncritical_retention_days(), + ) + cleanup_parser.add_argument( + "--admin-log-critical-retention-days", + type=int, + default=get_admin_log_critical_retention_days(), + ) + cleanup_parser.add_argument( + "--server-snapshot-retention-days", + type=int, + default=get_server_snapshot_retention_days(), + ) + cleanup_parser.add_argument("--batch-size", type=int, default=get_db_maintenance_batch_size()) + cleanup_parser.add_argument("--vacuum-analyze", action="store_true") + cleanup_parser.add_argument("--now", default=None) + return parser + + +def main(argv: Sequence[str] | None = None) -> int: + parser = build_arg_parser() + args = parser.parse_args(list(argv) if argv is not None else None) + if args.command != "cleanup": + raise ValueError("Unsupported command.") + if args.apply and args.dry_run: + raise ValueError("--apply and --dry-run are mutually exclusive.") + payload = run_database_maintenance_cleanup( + apply=bool(args.apply), + recent_matches_keep=args.recent_matches_keep, + admin_log_noncritical_retention_days=args.admin_log_noncritical_retention_days, + admin_log_critical_retention_days=args.admin_log_critical_retention_days, + server_snapshot_retention_days=args.server_snapshot_retention_days, + batch_size=args.batch_size, + vacuum_analyze=bool(args.vacuum_analyze), + now=args.now, + ) + return 0 if payload.get("status") == "ok" else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/elo_mmr_engine.py b/backend/app/elo_mmr_engine.py new file mode 100644 index 0000000..0a47a43 --- /dev/null +++ b/backend/app/elo_mmr_engine.py @@ -0,0 +1,1013 @@ +"""Core Elo/MMR rebuild engine backed by real historical signals.""" + +from __future__ import annotations + +import argparse +import json +from collections import defaultdict +from datetime import datetime, timezone +from statistics import pstdev +from typing import Iterable + +from .config import get_historical_data_source_kind +from .data_sources import ( + SOURCE_KIND_PUBLIC_SCOREBOARD, + SOURCE_KIND_RCON, + build_source_attempt, + build_source_policy, + get_rcon_historical_read_model, +) +from .elo_mmr_models import ( + CAPABILITY_APPROXIMATE, + CAPABILITY_EXACT, + CAPABILITY_UNAVAILABLE, + DEFAULT_BASE_MMR, + ELO_K_FACTOR, + FULL_QUALITY_DURATION_SECONDS, + FULL_QUALITY_PLAYER_COUNT, + MIN_VALID_MATCH_DURATION_SECONDS, + MIN_VALID_PLAYER_PARTICIPATION_RATIO, + MIN_VALID_PLAYER_PARTICIPATION_SECONDS, + MIN_VALID_MATCH_PLAYERS, + MONTHLY_ACTIVITY_TARGET_HOURS, + MONTHLY_ACTIVITY_TARGET_MATCHES, + MONTHLY_MIN_TIME_SECONDS, + MONTHLY_MIN_VALID_MATCHES, + build_signal, + summarize_accuracy, +) +from .elo_mmr_storage import ( + get_elo_mmr_player_profile, + initialize_elo_mmr_storage, + list_elo_mmr_monthly_rankings, + replace_elo_mmr_state, +) +from .historical_storage import ALL_SERVERS_SLUG, initialize_historical_storage +from .rcon_historical_read_model import get_rcon_historical_competitive_match_context +from .sqlite_utils import connect_sqlite_readonly +from .writer_lock import backend_writer_lock, build_writer_lock_holder + + +SCOPE_ALL_SERVERS = ALL_SERVERS_SLUG +QUALITY_BUCKET_HIGH = "high" +QUALITY_BUCKET_MEDIUM = "medium" +QUALITY_BUCKET_LOW = "low" +ROLE_BUCKET_SUPPORT = "support" +ROLE_BUCKET_OFFENSE = "offense" +ROLE_BUCKET_DEFENSE = "defense" +ROLE_BUCKET_COMBAT = "combat" +ROLE_BUCKET_GENERALIST = "generalist" +MONTHLY_MIN_AVG_PARTICIPATION_RATIO = 0.45 +MONTHLY_RANK_WEIGHT_COMPETITIVE_GAIN = 0.70 +MONTHLY_RANK_WEIGHT_MATCH_SCORE = 0.14 +MONTHLY_RANK_WEIGHT_STRENGTH_OF_SCHEDULE = 0.05 +MONTHLY_RANK_WEIGHT_CONSISTENCY = 0.04 +MONTHLY_RANK_WEIGHT_CONFIDENCE = 0.04 +MONTHLY_RANK_WEIGHT_ACTIVITY = 0.03 +EXACT_MODIFIER_K_SHARE = 0.06 +PROXY_MODIFIER_K_SHARE = 0.02 + +ROLE_WEIGHTS = { + ROLE_BUCKET_SUPPORT: {"combat": 0.18, "objective": 0.18, "utility": 0.42, "discipline": 0.22}, + ROLE_BUCKET_OFFENSE: {"combat": 0.38, "objective": 0.30, "utility": 0.10, "discipline": 0.22}, + ROLE_BUCKET_DEFENSE: {"combat": 0.26, "objective": 0.34, "utility": 0.16, "discipline": 0.24}, + ROLE_BUCKET_COMBAT: {"combat": 0.48, "objective": 0.14, "utility": 0.14, "discipline": 0.24}, + ROLE_BUCKET_GENERALIST: {"combat": 0.34, "objective": 0.22, "utility": 0.20, "discipline": 0.24}, +} + + +def rebuild_elo_mmr_models(*, db_path=None) -> dict[str, object]: + """Rebuild persistent player ratings and monthly rankings from scratch.""" + with backend_writer_lock(holder=build_writer_lock_holder("app.elo_mmr_engine rebuild")): + resolved_path = initialize_historical_storage(db_path=db_path) + initialize_elo_mmr_storage(db_path=resolved_path) + historical_source_policy = _build_historical_source_policy_for_elo() + rcon_read_model = get_rcon_historical_read_model() + match_rows = _load_closed_match_rows(db_path=resolved_path) + grouped_matches = _group_match_rows(match_rows) + rcon_match_context_cache: dict[tuple[str, str | None, str | None], dict[str, object] | None] = {} + + ratings_by_scope: dict[str, dict[str, dict[str, object]]] = {SCOPE_ALL_SERVERS: {}} + player_ratings: list[dict[str, object]] = [] + match_results: list[dict[str, object]] = [] + monthly_checkpoints: list[dict[str, object]] = [] + + for match_group in grouped_matches: + server_scope = match_group["server_slug"] + ratings_by_scope.setdefault(server_scope, {}) + rcon_match_context = None + if rcon_read_model is not None: + cache_key = ( + str(match_group["server_slug"]), + str(match_group.get("ended_at")) if match_group.get("ended_at") is not None else None, + str(match_group.get("map_pretty_name") or match_group.get("map_name") or "") + or None, + ) + if cache_key not in rcon_match_context_cache: + rcon_match_context_cache[cache_key] = get_rcon_historical_competitive_match_context( + server_key=str(match_group["server_slug"]), + ended_at=match_group.get("ended_at"), + map_name=match_group.get("map_pretty_name") or match_group.get("map_name"), + ) + rcon_match_context = rcon_match_context_cache[cache_key] + for scope_key in (server_scope, SCOPE_ALL_SERVERS): + match_results.extend( + _score_match_for_scope( + match_group=match_group, + scope_key=scope_key, + ratings_by_scope=ratings_by_scope[scope_key], + rcon_match_context=rcon_match_context, + ) + ) + + for scope_ratings in ratings_by_scope.values(): + player_ratings.extend(scope_ratings.values()) + + monthly_rankings = _build_monthly_rankings(match_results) + checkpoint_groups: dict[tuple[str, str], list[dict[str, object]]] = defaultdict(list) + for row in monthly_rankings: + checkpoint_groups[(row["scope_key"], row["month_key"])].append(row) + generated_at = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") + for (scope_key, month_key), rows in checkpoint_groups.items(): + eligible_count = sum(1 for row in rows if row["eligible"]) + exact_ratio = round( + sum(float(row["capabilities"]["exact_ratio"]) for row in rows) / max(1, len(rows)), + 3, + ) + approximate_ratio = round( + sum(float(row["capabilities"]["approximate_ratio"]) for row in rows) / max(1, len(rows)), + 3, + ) + unavailable_ratio = round( + sum(float(row["capabilities"]["unavailable_ratio"]) for row in rows) / max(1, len(rows)), + 3, + ) + partial_count = sum(1 for row in rows if row["accuracy_mode"] == "partial") + monthly_checkpoints.append( + { + "scope_key": scope_key, + "month_key": month_key, + "generated_at": generated_at, + "player_count": len(rows), + "eligible_player_count": eligible_count, + "source_policy": historical_source_policy, + "capabilities_summary": { + "accuracy_mode": "partial" if partial_count > 0 else "approximate" if approximate_ratio > 0 else "exact", + "exact_ratio": exact_ratio, + "approximate_ratio": approximate_ratio, + "unavailable_ratio": unavailable_ratio, + "partial_count": partial_count, + "notes": [ + "Outcome, combat, utility, match validity and player participation use real stored signals.", + "ObjectiveIndex, role bucket, discipline and strength of schedule rely partly on honest proxies.", + "LeadershipIndex is not available with the current repository telemetry.", + ], + }, + } + ) + + replace_elo_mmr_state( + player_ratings=player_ratings, + match_results=match_results, + monthly_rankings=monthly_rankings, + monthly_checkpoints=monthly_checkpoints, + db_path=resolved_path, + ) + latest_month_by_scope = { + checkpoint["scope_key"]: checkpoint["month_key"] for checkpoint in monthly_checkpoints + } + return { + "status": "ok", + "historical_source_policy": historical_source_policy, + "totals": { + "matches_scored": len({(row["scope_key"], row["external_match_id"]) for row in match_results}), + "player_ratings": len(player_ratings), + "match_results": len(match_results), + "monthly_rankings": len(monthly_rankings), + "monthly_checkpoints": len(monthly_checkpoints), + }, + "latest_month_by_scope": latest_month_by_scope, + } + + +def list_elo_mmr_leaderboard_payload(*, server_id: str | None, limit: int) -> dict[str, object]: + """Return the current monthly Elo/MMR leaderboard for one scope.""" + scope_key = _normalize_scope_key(server_id) + result = list_elo_mmr_monthly_rankings(scope_key=scope_key, limit=limit) + return { + "scope_key": scope_key, + "month_key": result["month_key"], + "found": result["found"], + "generated_at": result["generated_at"], + "items": result["items"], + "source_policy": result["source_policy"] or _build_historical_source_policy_for_elo(), + "capabilities_summary": result["capabilities_summary"], + } + + +def get_elo_mmr_player_payload(*, player_id: str, server_id: str | None) -> dict[str, object] | None: + """Return one Elo/MMR player profile.""" + return get_elo_mmr_player_profile( + player_id=player_id, + scope_key=_normalize_scope_key(server_id), + ) + + +def build_arg_parser() -> argparse.ArgumentParser: + """Build the CLI parser for Elo/MMR maintenance.""" + parser = argparse.ArgumentParser( + description="Rebuild or inspect the Elo/MMR monthly ranking system.", + ) + parser.add_argument( + "mode", + choices=("rebuild", "leaderboard", "player"), + help="rebuild recomputes all persisted Elo/MMR state; leaderboard and player inspect the read model", + ) + parser.add_argument("--server", dest="server_id", help="optional server scope") + parser.add_argument("--limit", type=int, default=10, help="max rows for leaderboard mode") + parser.add_argument("--player", dest="player_id", help="player id or steam id for player mode") + return parser + + +def main(argv: Iterable[str] | None = None) -> int: + """Run the Elo/MMR CLI.""" + parser = build_arg_parser() + args = parser.parse_args(list(argv) if argv is not None else None) + if args.mode == "rebuild": + print(json.dumps(rebuild_elo_mmr_models(), indent=2)) + return 0 + if args.mode == "leaderboard": + print(json.dumps(list_elo_mmr_leaderboard_payload(server_id=args.server_id, limit=args.limit), indent=2)) + return 0 + if not args.player_id: + parser.error("--player is required in player mode") + print(json.dumps(get_elo_mmr_player_payload(player_id=args.player_id, server_id=args.server_id), indent=2)) + return 0 + + +def _load_closed_match_rows(*, db_path) -> list[dict[str, object]]: + with connect_sqlite_readonly(db_path) as connection: + rows = connection.execute( + """ + SELECT + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + historical_matches.external_match_id, + historical_matches.started_at, + historical_matches.ended_at, + historical_matches.game_mode, + historical_matches.allied_score, + historical_matches.axis_score, + historical_players.stable_player_key, + historical_players.display_name AS player_name, + historical_players.steam_id, + historical_player_match_stats.team_side, + historical_player_match_stats.kills, + historical_player_match_stats.deaths, + historical_player_match_stats.teamkills, + historical_player_match_stats.time_seconds, + historical_player_match_stats.combat, + historical_player_match_stats.offense, + historical_player_match_stats.defense, + historical_player_match_stats.support + FROM historical_player_match_stats + INNER JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + WHERE historical_matches.ended_at IS NOT NULL + ORDER BY historical_matches.ended_at ASC, historical_matches.id ASC, historical_players.id ASC + """ + ).fetchall() + return [dict(row) for row in rows] + + +def _group_match_rows(rows: list[dict[str, object]]) -> list[dict[str, object]]: + grouped: dict[tuple[str, str], list[dict[str, object]]] = defaultdict(list) + for row in rows: + grouped[(str(row["server_slug"]), str(row["external_match_id"]))].append(row) + items: list[dict[str, object]] = [] + for (server_slug, match_id), players in grouped.items(): + first = players[0] + items.append( + { + "server_slug": server_slug, + "server_name": first["server_name"], + "external_match_id": match_id, + "started_at": first["started_at"], + "ended_at": first["ended_at"], + "game_mode": first["game_mode"], + "allied_score": _safe_int(first["allied_score"]), + "axis_score": _safe_int(first["axis_score"]), + "players": players, + } + ) + return items + + +def _score_match_for_scope( + *, + match_group: dict[str, object], + scope_key: str, + ratings_by_scope: dict[str, dict[str, object]], + rcon_match_context: dict[str, object] | None = None, +) -> list[dict[str, object]]: + players = list(match_group["players"]) + duration_seconds, duration_mode = _resolve_match_duration( + match_group, + players, + rcon_match_context=rcon_match_context, + ) + quality_factor = _build_quality_factor( + player_count=max(len(players), int(rcon_match_context.get("peak_players") or 0)) + if rcon_match_context is not None + else len(players), + duration_seconds=duration_seconds, + has_score=match_group.get("allied_score") is not None and match_group.get("axis_score") is not None, + ) + quality_bucket = _classify_quality_bucket(quality_factor) + match_valid = duration_seconds >= MIN_VALID_MATCH_DURATION_SECONDS and len(players) >= MIN_VALID_MATCH_PLAYERS + month_key = str(match_group["ended_at"])[:7] + max_kills = max(max(_safe_int(player.get("kills")), 0) for player in players) or 1 + max_support = max(max(_safe_int(player.get("support")), 0) for player in players) or 1 + max_combat = max(max(_safe_int(player.get("combat")), 0) for player in players) or 1 + max_objective = max( + max(_safe_int(player.get("offense")) + _safe_int(player.get("defense")), 0) + for player in players + ) or 1 + results: list[dict[str, object]] = [] + rating_before_by_player = { + str(player["stable_player_key"]): float( + ratings_by_scope.get(str(player["stable_player_key"]), {}).get("current_mmr", DEFAULT_BASE_MMR) + ) + for player in players + } + + for player in players: + stable_player_key = str(player["stable_player_key"]) + rating_row = ratings_by_scope.setdefault( + stable_player_key, + { + "scope_key": scope_key, + "stable_player_key": stable_player_key, + "player_name": player["player_name"], + "steam_id": player.get("steam_id"), + "current_mmr": DEFAULT_BASE_MMR, + "matches_processed": 0, + "wins": 0, + "draws": 0, + "losses": 0, + "last_match_id": None, + "last_match_ended_at": None, + "accuracy_mode": "partial", + "capabilities": summarize_accuracy([]), + }, + ) + signals: list[dict[str, object]] = [] + time_seconds = _safe_int(player.get("time_seconds")) + participation_ratio = _build_participation_ratio( + time_seconds=time_seconds, + duration_seconds=duration_seconds, + ) + player_match_valid = match_valid and _is_player_match_eligible( + time_seconds=time_seconds, + participation_ratio=participation_ratio, + ) + team_outcome = _resolve_team_outcome( + team_side=str(player.get("team_side") or ""), + allied_score=_safe_int(match_group.get("allied_score")), + axis_score=_safe_int(match_group.get("axis_score")), + ) + outcome_score = _build_outcome_score( + team_outcome=team_outcome, + allied_score=_safe_int(match_group.get("allied_score")), + axis_score=_safe_int(match_group.get("axis_score")), + ) + signals.append(build_signal("OutcomeScore", CAPABILITY_EXACT, "Derived from team side and final match score.")) + signals.append(build_signal("MatchValidity", CAPABILITY_EXACT, "Uses closed match state, duration and lobby size thresholds.")) + if duration_seconds > 0: + signals.append(build_signal("PlayerParticipation", CAPABILITY_EXACT, "Uses persisted player time_seconds relative to match duration.")) + + kills = _safe_int(player.get("kills")) + deaths = max(1, _safe_int(player.get("deaths"))) + combat_raw = _safe_int(player.get("combat")) + combat_index = round( + (40.0 * (kills / max_kills)) + + (35.0 * min(1.0, (kills / deaths) / 3.0)) + + (25.0 * (combat_raw / max_combat)), + 3, + ) + signals.append(build_signal("CombatIndex", CAPABILITY_EXACT, "Uses kills, KDA proxy and persisted combat score.")) + + support = _safe_int(player.get("support")) + utility_index = round(100.0 * (support / max_support), 3) if max_support > 0 else 0.0 + signals.append(build_signal("UtilityIndex", CAPABILITY_EXACT, "Uses persisted support points.")) + + objective_proxy = _safe_int(player.get("offense")) + _safe_int(player.get("defense")) + objective_index = round(100.0 * (objective_proxy / max_objective), 3) if max_objective > 0 else 0.0 + signals.append(build_signal("ObjectiveIndex", CAPABILITY_APPROXIMATE, "Approximated from offense and defense scoreboard points because no tactical event feed exists yet.")) + + teamkills = _safe_int(player.get("teamkills")) + completion_component = round(participation_ratio * 100.0, 3) + discipline_index = round( + max( + 0.0, + (88.0 - (teamkills * 18.0)) + (0.12 * completion_component), + ), + 3, + ) + signals.append(build_signal("DisciplineIndex", CAPABILITY_APPROXIMATE, "Uses exact teamkills plus participation as an honest proxy for leave or AFK risk because direct discipline telemetry is unavailable.")) + leadership_index = None + signals.append(build_signal("LeadershipIndex", CAPABILITY_UNAVAILABLE, "No leadership-specific telemetry is stored in the repository yet.")) + + role_bucket = _resolve_role_bucket(player) + signals.append(build_signal("role_bucket", CAPABILITY_APPROXIMATE, "Inferred from the dominant combat/offense/defense/support axis because literal player role is unavailable.")) + if duration_mode == CAPABILITY_EXACT: + signals.append(build_signal("quality_duration", CAPABILITY_EXACT, "Duration computed from match timestamps.")) + else: + signals.append(build_signal("quality_duration", CAPABILITY_APPROXIMATE, "Duration approximated from the maximum persisted player time.")) + if rcon_match_context is not None: + signals.append( + build_signal( + "RconCompetitiveWindow", + CAPABILITY_APPROXIMATE, + "Uses the closest RCON-backed competitive window for match duration and lobby density when coverage exists.", + ) + ) + + weights = ROLE_WEIGHTS.get(role_bucket, ROLE_WEIGHTS[ROLE_BUCKET_GENERALIST]) + impact_score = round( + sum( + { + "combat": combat_index, + "objective": objective_index, + "utility": utility_index, + "discipline": discipline_index, + }[key] + * weight + for key, weight in weights.items() + ), + 3, + ) + team_side = str(player.get("team_side") or "") + strength_of_schedule_match = _build_strength_of_schedule_match( + stable_player_key=stable_player_key, + team_side=team_side, + players=players, + rating_before_by_player=rating_before_by_player, + quality_factor=quality_factor, + ) + signals.append(build_signal("StrengthOfScheduleMatch", CAPABILITY_APPROXIMATE, "Approximated from opponent average MMR pressure plus match quality because no full roster graph is stored.")) + exact_modifier_index = _build_weighted_modifier_index( + left_value=combat_index, + right_value=utility_index, + left_weight=weights["combat"], + right_weight=weights["utility"], + ) + proxy_modifier_index = _build_weighted_modifier_index( + left_value=objective_index, + right_value=discipline_index, + left_weight=weights["objective"], + right_weight=weights["discipline"], + ) + effective_score = round( + ( + (0.60 * outcome_score) + + (0.25 * impact_score) + + (0.10 * strength_of_schedule_match) + + (0.05 * discipline_index) + ) + * participation_ratio, + 3, + ) + if not player_match_valid: + delta_mmr = 0.0 + match_score = 0.0 + expected_result = 0.0 + actual_result = 0.0 + elo_core_delta = 0.0 + performance_modifier_delta = 0.0 + proxy_modifier_delta = 0.0 + else: + expected_result = _build_expected_result( + player_rating=rating_before_by_player.get(stable_player_key, DEFAULT_BASE_MMR), + opponent_average_rating=_resolve_opponent_average_rating( + stable_player_key=stable_player_key, + team_side=team_side, + players=players, + rating_before_by_player=rating_before_by_player, + ), + ) + actual_result = _build_actual_result( + team_outcome=team_outcome, + allied_score=_safe_int(match_group.get("allied_score")), + axis_score=_safe_int(match_group.get("axis_score")), + participation_ratio=participation_ratio, + ) + exact_modifier_edge = _build_centered_modifier_edge( + exact_modifier_index, + participation_ratio=participation_ratio, + ) + proxy_modifier_edge = _build_centered_modifier_edge( + proxy_modifier_index, + participation_ratio=participation_ratio, + ) + elo_core_delta = round( + ELO_K_FACTOR * quality_factor * (actual_result - expected_result), + 3, + ) + exact_modifier_delta = round( + ELO_K_FACTOR * quality_factor * EXACT_MODIFIER_K_SHARE * exact_modifier_edge, + 3, + ) + proxy_modifier_delta = round( + ELO_K_FACTOR * quality_factor * PROXY_MODIFIER_K_SHARE * proxy_modifier_edge, + 3, + ) + performance_modifier_delta = round( + exact_modifier_delta + proxy_modifier_delta, + 3, + ) + delta_mmr = round(elo_core_delta + performance_modifier_delta, 3) + match_score = round(effective_score * quality_factor, 3) + signals.append(build_signal("DeltaMMR", CAPABILITY_APPROXIMATE, "Uses Elo-like expected-vs-actual movement plus bounded HLL performance modifiers and honest proxy boundaries.")) + signals.append(build_signal("MatchScore", CAPABILITY_APPROXIMATE, "Uses outcome-first competitive scoring with bounded HLL impact and schedule context, then scales by match quality.")) + capability_summary = summarize_accuracy(signals) + rating_before = float(rating_row["current_mmr"]) + rating_after = round(rating_before + delta_mmr, 3) + results.append( + { + "scope_key": scope_key, + "month_key": month_key, + "external_match_id": match_group["external_match_id"], + "stable_player_key": stable_player_key, + "player_name": player["player_name"], + "steam_id": player.get("steam_id"), + "server_slug": match_group["server_slug"], + "server_name": match_group["server_name"], + "match_ended_at": match_group["ended_at"], + "match_valid": player_match_valid, + "quality_factor": quality_factor, + "quality_bucket": quality_bucket, + "role_bucket": role_bucket, + "role_bucket_mode": CAPABILITY_APPROXIMATE, + "outcome_score": outcome_score, + "combat_index": combat_index, + "objective_index": objective_index, + "objective_index_mode": CAPABILITY_APPROXIMATE, + "utility_index": utility_index, + "utility_index_mode": CAPABILITY_EXACT, + "leadership_index": leadership_index, + "leadership_index_mode": CAPABILITY_UNAVAILABLE, + "discipline_index": discipline_index, + "discipline_index_mode": CAPABILITY_APPROXIMATE, + "impact_score": impact_score, + "delta_mmr": delta_mmr, + "mmr_before": rating_before, + "mmr_after": rating_after, + "match_score": match_score, + "penalty_points": round((teamkills * 2.0) + max(0.0, (0.5 - participation_ratio) * 8.0), 3), + "capabilities": capability_summary, + "time_seconds": time_seconds, + "participation_ratio": participation_ratio, + "strength_of_schedule_match": strength_of_schedule_match, + "team_outcome": team_outcome, + "expected_result": expected_result, + "actual_result": actual_result, + "elo_core_delta": elo_core_delta, + "performance_modifier_delta": performance_modifier_delta, + "proxy_modifier_delta": proxy_modifier_delta, + } + ) + rating_row["current_mmr"] = rating_after + rating_row["matches_processed"] = int(rating_row["matches_processed"]) + 1 + rating_row["last_match_id"] = match_group["external_match_id"] + rating_row["last_match_ended_at"] = match_group["ended_at"] + rating_row["accuracy_mode"] = capability_summary["accuracy_mode"] + rating_row["capabilities"] = capability_summary + if team_outcome == "win": + rating_row["wins"] = int(rating_row["wins"]) + 1 + elif team_outcome == "draw": + rating_row["draws"] = int(rating_row["draws"]) + 1 + else: + rating_row["losses"] = int(rating_row["losses"]) + 1 + return results + + +def _build_monthly_rankings(match_results: list[dict[str, object]]) -> list[dict[str, object]]: + grouped: dict[tuple[str, str, str], list[dict[str, object]]] = defaultdict(list) + for row in match_results: + grouped[(row["scope_key"], row["month_key"], row["stable_player_key"])].append(row) + + rankings: list[dict[str, object]] = [] + grouped_by_scope_month: dict[tuple[str, str], list[dict[str, object]]] = defaultdict(list) + for (scope_key, month_key, stable_player_key), rows in grouped.items(): + rows.sort(key=lambda item: (item["match_ended_at"], item["external_match_id"])) + valid_rows = [row for row in rows if row["match_valid"]] + total_time_seconds = sum(int(row["time_seconds"] or 0) for row in rows) + penalty_points = round(sum(float(row["penalty_points"]) for row in rows), 3) + capability_rows = [row["capabilities"] for row in rows] + exact_ratio = round(sum(float(item["exact_ratio"]) for item in capability_rows) / max(1, len(capability_rows)), 3) + approximate_ratio = round(sum(float(item["approximate_ratio"]) for item in capability_rows) / max(1, len(capability_rows)), 3) + unavailable_ratio = round(sum(float(item["unavailable_ratio"]) for item in capability_rows) / max(1, len(capability_rows)), 3) + accuracy_mode = "partial" if unavailable_ratio > 0 else "approximate" if approximate_ratio > 0 else "exact" + avg_match_score = round(sum(float(row["match_score"]) for row in valid_rows) / max(1, len(valid_rows)), 3) + baseline_mmr = round(float(rows[0]["mmr_before"]), 3) + current_mmr = round(float(rows[-1]["mmr_after"]), 3) + mmr_gain = round(current_mmr - baseline_mmr, 3) + elo_core_gain = round(sum(float(row.get("elo_core_delta") or 0.0) for row in rows), 3) + performance_modifier_gain = round( + sum(float(row.get("performance_modifier_delta") or 0.0) for row in rows), + 3, + ) + proxy_modifier_gain = round( + sum(float(row.get("proxy_modifier_delta") or 0.0) for row in rows), + 3, + ) + avg_participation_ratio = round( + sum(float(row.get("participation_ratio") or 0.0) for row in rows) / max(1, len(rows)), + 3, + ) + strength_of_schedule = round( + sum(float(row.get("strength_of_schedule_match") or 0.0) for row in valid_rows) / max(1, len(valid_rows)), + 3, + ) + consistency = _build_consistency_score(valid_rows) + activity = _build_activity_score(valid_rows, total_time_seconds) + confidence = round( + min( + 100.0, + (len(valid_rows) / MONTHLY_MIN_VALID_MATCHES) * 35.0 + + (total_time_seconds / MONTHLY_MIN_TIME_SECONDS) * 30.0 + + (avg_participation_ratio * 20.0) + + (exact_ratio * 15.0), + ), + 3, + ) + eligible = ( + len(valid_rows) >= MONTHLY_MIN_VALID_MATCHES + and total_time_seconds >= MONTHLY_MIN_TIME_SECONDS + and avg_participation_ratio >= MONTHLY_MIN_AVG_PARTICIPATION_RATIO + ) + eligibility_reason = _build_monthly_eligibility_reason( + valid_match_count=len(valid_rows), + total_time_seconds=total_time_seconds, + avg_participation_ratio=avg_participation_ratio, + ) + grouped_by_scope_month[(scope_key, month_key)].append( + { + "scope_key": scope_key, + "month_key": month_key, + "stable_player_key": stable_player_key, + "player_name": rows[-1]["player_name"], + "steam_id": rows[-1].get("steam_id"), + "current_mmr": current_mmr, + "baseline_mmr": baseline_mmr, + "mmr_gain": mmr_gain, + "avg_match_score": avg_match_score, + "strength_of_schedule": strength_of_schedule, + "consistency": consistency, + "activity": activity, + "confidence": confidence, + "penalty_points": penalty_points, + "monthly_rank_score": 0.0, + "valid_matches": len(valid_rows), + "total_matches": len(rows), + "total_time_seconds": total_time_seconds, + "avg_participation_ratio": avg_participation_ratio, + "eligible": eligible, + "eligibility_reason": eligibility_reason, + "accuracy_mode": accuracy_mode, + "capabilities": { + "accuracy_mode": accuracy_mode, + "exact_ratio": exact_ratio, + "approximate_ratio": approximate_ratio, + "unavailable_ratio": unavailable_ratio, + "signals": [ + build_signal("OutcomeScore", CAPABILITY_EXACT, "Uses final scores and team side."), + build_signal("CombatIndex", CAPABILITY_EXACT, "Uses historical player stats."), + build_signal("ObjectiveIndex", CAPABILITY_APPROXIMATE, "Uses offense and defense scores as a tactical proxy."), + build_signal("UtilityIndex", CAPABILITY_EXACT, "Uses support points."), + build_signal("LeadershipIndex", CAPABILITY_UNAVAILABLE, "No leadership telemetry exists yet."), + build_signal("DisciplineIndex", CAPABILITY_APPROXIMATE, "Uses teamkills exactly plus participation as a leave-risk proxy."), + build_signal("StrengthOfSchedule", CAPABILITY_APPROXIMATE, "Uses opponent average MMR pressure plus match quality, not a full roster graph."), + build_signal("MonthlyEligibility", CAPABILITY_EXACT, "Uses persisted valid-match count, playtime and participation thresholds."), + ], + }, + "component_scores": { + "model_version": "elo-v3-competitive", + "ranking_formula_version": "elo-v3-competitive-balanced-v1", + "avg_match_score": avg_match_score, + "mmr_gain_raw": mmr_gain, + "elo_core_gain": elo_core_gain, + "performance_modifier_gain": performance_modifier_gain, + "proxy_modifier_gain": proxy_modifier_gain, + "competitive_gain": round( + elo_core_gain + + (0.25 * performance_modifier_gain) + + (0.10 * proxy_modifier_gain), + 3, + ), + "strength_of_schedule": strength_of_schedule, + "consistency": consistency, + "activity": activity, + "confidence": confidence, + "avg_participation_ratio": avg_participation_ratio, + "penalty_points": penalty_points, + }, + } + ) + + for rows in grouped_by_scope_month.values(): + max_avg = max((row["avg_match_score"] for row in rows), default=1.0) or 1.0 + max_competitive_gain = max( + (max(0.0, float(row["component_scores"].get("competitive_gain") or 0.0)) for row in rows), + default=1.0, + ) or 1.0 + max_sos = max((row["strength_of_schedule"] for row in rows), default=1.0) or 1.0 + max_consistency = max((row["consistency"] for row in rows), default=1.0) or 1.0 + max_activity = max((row["activity"] for row in rows), default=1.0) or 1.0 + max_confidence = max((row["confidence"] for row in rows), default=1.0) or 1.0 + for row in rows: + competitive_gain = max(0.0, float(row["component_scores"].get("competitive_gain") or 0.0)) + normalized_gain = competitive_gain / max_competitive_gain if max_competitive_gain > 0 else 0.0 + row["component_scores"]["normalized_mmr_gain"] = round(normalized_gain * 100.0, 3) + row["monthly_rank_score"] = round( + (MONTHLY_RANK_WEIGHT_COMPETITIVE_GAIN * normalized_gain * 100.0) + + (MONTHLY_RANK_WEIGHT_MATCH_SCORE * (row["avg_match_score"] / max_avg) * 100.0) + + (MONTHLY_RANK_WEIGHT_STRENGTH_OF_SCHEDULE * (row["strength_of_schedule"] / max_sos) * 100.0) + + (MONTHLY_RANK_WEIGHT_CONSISTENCY * (row["consistency"] / max_consistency) * 100.0) + + (MONTHLY_RANK_WEIGHT_ACTIVITY * (row["activity"] / max_activity) * 100.0) + + (MONTHLY_RANK_WEIGHT_CONFIDENCE * (row["confidence"] / max_confidence) * 100.0) + - row["penalty_points"], + 3, + ) + rankings.append(row) + return rankings + + +def _build_historical_source_policy_for_elo() -> dict[str, object]: + if get_historical_data_source_kind() != SOURCE_KIND_RCON: + return build_source_policy( + primary_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + selected_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + source_attempts=[build_source_attempt(source=SOURCE_KIND_PUBLIC_SCOREBOARD, role="primary", status="success")], + ) + return build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source="hybrid-rcon-competitive-plus-public-scoreboard", + fallback_used=True, + fallback_reason="rcon-competitive-context-primary-but-player-stats-still-require-public-scoreboard-supplement", + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="partial", + reason="rcon-competitive-context-used-for-match-coverage-and-quality", + ), + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="supplemental-fallback", + status="success", + reason="public-scoreboard-still-provides-player-level-competitive-stats", + ), + ], + ) + + +def _resolve_match_duration( + match_group: dict[str, object], + players: list[dict[str, object]], + *, + rcon_match_context: dict[str, object] | None = None, +) -> tuple[int, str]: + if rcon_match_context and int(rcon_match_context.get("duration_seconds") or 0) > 0: + return int(rcon_match_context["duration_seconds"]), CAPABILITY_APPROXIMATE + started_at = _parse_optional_timestamp(match_group.get("started_at")) + ended_at = _parse_optional_timestamp(match_group.get("ended_at")) + if started_at and ended_at and ended_at >= started_at: + return int((ended_at - started_at).total_seconds()), CAPABILITY_EXACT + return max((_safe_int(player.get("time_seconds")) for player in players), default=0), CAPABILITY_APPROXIMATE + + +def _build_quality_factor(*, player_count: int, duration_seconds: int, has_score: bool) -> float: + player_component = min(1.0, player_count / FULL_QUALITY_PLAYER_COUNT) + duration_component = min(1.0, duration_seconds / FULL_QUALITY_DURATION_SECONDS) + score_component = 1.0 if has_score else 0.7 + return round((0.4 * player_component) + (0.4 * duration_component) + (0.2 * score_component), 3) + + +def _build_actual_result( + *, + team_outcome: str, + allied_score: int | None, + axis_score: int | None, + participation_ratio: float, +) -> float: + if team_outcome == "draw": + base_result = 0.5 + elif team_outcome == "win": + base_result = 1.0 + else: + base_result = 0.0 + if allied_score is None or axis_score is None: + margin_adjustment = 0.0 + else: + total_score = max(1, allied_score + axis_score) + margin_ratio = abs(allied_score - axis_score) / total_score + margin_adjustment = min(0.08, margin_ratio * 0.12) + if team_outcome == "win": + adjusted = min(1.0, base_result + margin_adjustment) + elif team_outcome == "loss": + adjusted = max(0.0, base_result - margin_adjustment) + else: + adjusted = base_result + return round(0.5 + ((adjusted - 0.5) * participation_ratio), 4) + + +def _build_weighted_modifier_index( + *, + left_value: float, + right_value: float, + left_weight: float, + right_weight: float, +) -> float: + total_weight = max(0.001, left_weight + right_weight) + return round(((left_value * left_weight) + (right_value * right_weight)) / total_weight, 3) + + +def _build_centered_modifier_edge(index_value: float, *, participation_ratio: float) -> float: + centered = (index_value - 50.0) / 50.0 + return round(max(-1.0, min(1.0, centered * participation_ratio)), 4) + + +def _build_participation_ratio(*, time_seconds: int, duration_seconds: int) -> float: + if duration_seconds <= 0: + return 0.0 + return round(min(1.0, max(0.0, time_seconds / duration_seconds)), 3) + + +def _is_player_match_eligible(*, time_seconds: int, participation_ratio: float) -> bool: + return ( + time_seconds >= MIN_VALID_PLAYER_PARTICIPATION_SECONDS + and participation_ratio >= MIN_VALID_PLAYER_PARTICIPATION_RATIO + ) + + +def _build_outcome_score(*, team_outcome: str, allied_score: int | None, axis_score: int | None) -> float: + if allied_score is None or axis_score is None: + return 50.0 if team_outcome == "draw" else 65.0 if team_outcome == "win" else 35.0 + total_score = max(1, allied_score + axis_score) + margin_ratio = abs(allied_score - axis_score) / total_score + if team_outcome == "draw": + return 50.0 + if team_outcome == "win": + return round(min(100.0, 68.0 + (margin_ratio * 32.0)), 3) + return round(max(0.0, 32.0 - (margin_ratio * 32.0)), 3) + + +def _resolve_opponent_average_rating( + *, + stable_player_key: str, + team_side: str, + players: list[dict[str, object]], + rating_before_by_player: dict[str, float], +) -> float: + normalized_team_side = str(team_side or "").strip().lower() + opponent_ratings = [ + rating_before_by_player.get(str(player["stable_player_key"]), DEFAULT_BASE_MMR) + for player in players + if str(player["stable_player_key"]) != stable_player_key + and _is_same_team(str(player.get("team_side") or ""), normalized_team_side) is False + ] + if not opponent_ratings: + return DEFAULT_BASE_MMR + return round(sum(opponent_ratings) / len(opponent_ratings), 3) + + +def _build_strength_of_schedule_match( + *, + stable_player_key: str, + team_side: str, + players: list[dict[str, object]], + rating_before_by_player: dict[str, float], + quality_factor: float, +) -> float: + opponent_average = _resolve_opponent_average_rating( + stable_player_key=stable_player_key, + team_side=team_side, + players=players, + rating_before_by_player=rating_before_by_player, + ) + mmr_pressure = 50.0 + ((opponent_average - DEFAULT_BASE_MMR) / 8.0) + quality_pressure = quality_factor * 35.0 + return round(min(100.0, max(0.0, mmr_pressure + quality_pressure)), 3) + + +def _build_expected_result(*, player_rating: float, opponent_average_rating: float) -> float: + exponent = (opponent_average_rating - player_rating) / 400.0 + return round(1.0 / (1.0 + (10.0**exponent)), 4) + + +def _build_monthly_eligibility_reason( + *, + valid_match_count: int, + total_time_seconds: int, + avg_participation_ratio: float, +) -> str | None: + if valid_match_count < MONTHLY_MIN_VALID_MATCHES: + return "minimum-valid-matches-not-met" + if total_time_seconds < MONTHLY_MIN_TIME_SECONDS: + return "minimum-playtime-not-met" + if avg_participation_ratio < MONTHLY_MIN_AVG_PARTICIPATION_RATIO: + return "minimum-participation-ratio-not-met" + return None + + +def _classify_quality_bucket(quality_factor: float) -> str: + if quality_factor >= 0.8: + return QUALITY_BUCKET_HIGH + if quality_factor >= 0.55: + return QUALITY_BUCKET_MEDIUM + return QUALITY_BUCKET_LOW + + +def _resolve_team_outcome(*, team_side: str, allied_score: int | None, axis_score: int | None) -> str: + if allied_score is None or axis_score is None or allied_score == axis_score: + return "draw" + normalized = team_side.strip().lower() + allied_won = allied_score > axis_score + if normalized.startswith("all"): + return "win" if allied_won else "loss" + if normalized.startswith("ax"): + return "win" if not allied_won else "loss" + return "draw" + + +def _is_same_team(team_side: str, normalized_team_side: str) -> bool: + candidate = team_side.strip().lower() + if normalized_team_side.startswith("all"): + return candidate.startswith("all") + if normalized_team_side.startswith("ax"): + return candidate.startswith("ax") + return candidate == normalized_team_side + + +def _resolve_role_bucket(player: dict[str, object]) -> str: + axes = { + ROLE_BUCKET_SUPPORT: _safe_int(player.get("support")), + ROLE_BUCKET_OFFENSE: _safe_int(player.get("offense")), + ROLE_BUCKET_DEFENSE: _safe_int(player.get("defense")), + ROLE_BUCKET_COMBAT: _safe_int(player.get("combat")), + } + top_bucket, top_value = max(axes.items(), key=lambda item: item[1]) + sorted_values = sorted(axes.values(), reverse=True) + if top_value <= 0 or (len(sorted_values) >= 2 and sorted_values[0] == sorted_values[1]): + return ROLE_BUCKET_GENERALIST + return top_bucket + + +def _build_consistency_score(rows: list[dict[str, object]]) -> float: + if len(rows) <= 1: + return 100.0 if rows else 0.0 + values = [float(row["match_score"]) for row in rows] + average = sum(values) / len(values) + if average <= 0: + return 0.0 + return round(100.0 * (1.0 - min(1.0, pstdev(values) / max(average, 1.0))), 3) + + +def _build_activity_score(rows: list[dict[str, object]], total_time_seconds: int) -> float: + match_component = min(1.0, len(rows) / MONTHLY_ACTIVITY_TARGET_MATCHES) + hour_component = min(1.0, (total_time_seconds / 3600.0) / MONTHLY_ACTIVITY_TARGET_HOURS) + return round(((0.6 * match_component) + (0.4 * hour_component)) * 100.0, 3) + + +def _normalize_scope_key(server_id: str | None) -> str: + normalized = str(server_id or SCOPE_ALL_SERVERS).strip() + return normalized or SCOPE_ALL_SERVERS + + +def _parse_optional_timestamp(value: object) -> datetime | None: + if not value: + return None + try: + parsed = datetime.fromisoformat(str(value).replace("Z", "+00:00")) + except ValueError: + return None + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _safe_int(value: object) -> int: + try: + return int(value or 0) + except (TypeError, ValueError): + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/elo_mmr_models.py b/backend/app/elo_mmr_models.py new file mode 100644 index 0000000..e07d2e3 --- /dev/null +++ b/backend/app/elo_mmr_models.py @@ -0,0 +1,74 @@ +"""Contracts and capability helpers for the Elo/MMR monthly ranking system.""" + +from __future__ import annotations + +from dataclasses import asdict, dataclass + + +CAPABILITY_EXACT = "exact" +CAPABILITY_APPROXIMATE = "approximate" +CAPABILITY_UNAVAILABLE = "not_available" + +ACCURACY_EXACT = "exact" +ACCURACY_APPROXIMATE = "approximate" +ACCURACY_PARTIAL = "partial" + +DEFAULT_BASE_MMR = 1000.0 +ELO_K_FACTOR = 60.0 +MIN_VALID_MATCH_DURATION_SECONDS = 900 +MIN_VALID_MATCH_PLAYERS = 20 +MIN_VALID_PLAYER_PARTICIPATION_SECONDS = 900 +MIN_VALID_PLAYER_PARTICIPATION_RATIO = 0.45 +FULL_QUALITY_PLAYER_COUNT = 70 +FULL_QUALITY_DURATION_SECONDS = 3600 +MONTHLY_MIN_VALID_MATCHES = 5 +MONTHLY_MIN_TIME_SECONDS = 21600 +MONTHLY_ACTIVITY_TARGET_MATCHES = 12 +MONTHLY_ACTIVITY_TARGET_HOURS = 20.0 +DEFAULT_MONTHLY_SCOREBOARD_MIN_MATCHES = 3 + + +@dataclass(frozen=True, slots=True) +class EloSignalAvailability: + """Normalized availability state for one scoring input.""" + + name: str + status: str + detail: str + + def to_dict(self) -> dict[str, object]: + """Return the availability entry as a serializable mapping.""" + return asdict(self) + + +def build_signal(name: str, status: str, detail: str) -> dict[str, object]: + """Create a normalized availability block for one signal.""" + return EloSignalAvailability(name=name, status=status, detail=detail).to_dict() + + +def summarize_accuracy(signals: list[dict[str, object]]) -> dict[str, object]: + """Summarize exact, approximate and unavailable signals for one calculation.""" + exact_count = sum(1 for signal in signals if signal.get("status") == CAPABILITY_EXACT) + approximate_count = sum( + 1 for signal in signals if signal.get("status") == CAPABILITY_APPROXIMATE + ) + unavailable_count = sum( + 1 for signal in signals if signal.get("status") == CAPABILITY_UNAVAILABLE + ) + if unavailable_count > 0: + accuracy_mode = ACCURACY_PARTIAL + elif approximate_count > 0: + accuracy_mode = ACCURACY_APPROXIMATE + else: + accuracy_mode = ACCURACY_EXACT + total = max(1, len(signals)) + return { + "accuracy_mode": accuracy_mode, + "exact_count": exact_count, + "approximate_count": approximate_count, + "unavailable_count": unavailable_count, + "exact_ratio": round(exact_count / total, 3), + "approximate_ratio": round(approximate_count / total, 3), + "unavailable_ratio": round(unavailable_count / total, 3), + "signals": list(signals), + } diff --git a/backend/app/elo_mmr_storage.py b/backend/app/elo_mmr_storage.py new file mode 100644 index 0000000..4f3a4f0 --- /dev/null +++ b/backend/app/elo_mmr_storage.py @@ -0,0 +1,578 @@ +"""SQLite storage for persistent Elo/MMR and monthly ranking results.""" + +from __future__ import annotations + +import json +import sqlite3 +from datetime import datetime +from pathlib import Path + +from .config import get_storage_path +from .sqlite_utils import connect_sqlite_readonly, connect_sqlite_writer + + +def initialize_elo_mmr_storage(*, db_path: Path | None = None) -> Path: + """Create the Elo/MMR persistence tables in the shared backend SQLite.""" + resolved_path = _resolve_db_path(db_path) + resolved_path.parent.mkdir(parents=True, exist_ok=True) + with _connect_writer(resolved_path) as connection: + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS elo_mmr_player_ratings ( + scope_key TEXT NOT NULL, + stable_player_key TEXT NOT NULL, + player_name TEXT NOT NULL, + steam_id TEXT, + current_mmr REAL NOT NULL, + matches_processed INTEGER NOT NULL DEFAULT 0, + wins INTEGER NOT NULL DEFAULT 0, + draws INTEGER NOT NULL DEFAULT 0, + losses INTEGER NOT NULL DEFAULT 0, + last_match_id TEXT, + last_match_ended_at TEXT, + accuracy_mode TEXT NOT NULL, + capabilities_json TEXT NOT NULL, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (scope_key, stable_player_key) + ); + + CREATE TABLE IF NOT EXISTS elo_mmr_match_results ( + scope_key TEXT NOT NULL, + month_key TEXT NOT NULL, + external_match_id TEXT NOT NULL, + stable_player_key TEXT NOT NULL, + player_name TEXT NOT NULL, + steam_id TEXT, + server_slug TEXT NOT NULL, + server_name TEXT NOT NULL, + match_ended_at TEXT NOT NULL, + match_valid INTEGER NOT NULL, + quality_factor REAL NOT NULL, + quality_bucket TEXT NOT NULL, + role_bucket TEXT NOT NULL, + role_bucket_mode TEXT NOT NULL, + outcome_score REAL NOT NULL, + combat_index REAL NOT NULL, + objective_index REAL, + objective_index_mode TEXT NOT NULL, + utility_index REAL, + utility_index_mode TEXT NOT NULL, + leadership_index REAL, + leadership_index_mode TEXT NOT NULL, + discipline_index REAL, + discipline_index_mode TEXT NOT NULL, + impact_score REAL NOT NULL, + delta_mmr REAL NOT NULL, + mmr_before REAL NOT NULL, + mmr_after REAL NOT NULL, + match_score REAL NOT NULL, + penalty_points REAL NOT NULL, + capabilities_json TEXT NOT NULL, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (scope_key, external_match_id, stable_player_key) + ); + + CREATE TABLE IF NOT EXISTS elo_mmr_monthly_rankings ( + scope_key TEXT NOT NULL, + month_key TEXT NOT NULL, + stable_player_key TEXT NOT NULL, + player_name TEXT NOT NULL, + steam_id TEXT, + current_mmr REAL NOT NULL, + baseline_mmr REAL NOT NULL, + mmr_gain REAL NOT NULL, + avg_match_score REAL NOT NULL, + strength_of_schedule REAL NOT NULL, + consistency REAL NOT NULL, + activity REAL NOT NULL, + confidence REAL NOT NULL, + penalty_points REAL NOT NULL, + monthly_rank_score REAL NOT NULL, + valid_matches INTEGER NOT NULL, + total_matches INTEGER NOT NULL, + total_time_seconds INTEGER NOT NULL, + eligible INTEGER NOT NULL, + eligibility_reason TEXT, + accuracy_mode TEXT NOT NULL, + capabilities_json TEXT NOT NULL, + component_scores_json TEXT NOT NULL, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (scope_key, month_key, stable_player_key) + ); + + CREATE TABLE IF NOT EXISTS elo_mmr_monthly_checkpoints ( + scope_key TEXT NOT NULL, + month_key TEXT NOT NULL, + generated_at TEXT NOT NULL, + player_count INTEGER NOT NULL, + eligible_player_count INTEGER NOT NULL, + source_policy_json TEXT NOT NULL, + capabilities_summary_json TEXT NOT NULL, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (scope_key, month_key) + ); + + CREATE INDEX IF NOT EXISTS idx_elo_mmr_monthly_rankings_scope_month + ON elo_mmr_monthly_rankings(scope_key, month_key, eligible, monthly_rank_score DESC); + + CREATE INDEX IF NOT EXISTS idx_elo_mmr_player_ratings_scope + ON elo_mmr_player_ratings(scope_key, current_mmr DESC); + """ + ) + return resolved_path + + +def replace_elo_mmr_state( + *, + player_ratings: list[dict[str, object]], + match_results: list[dict[str, object]], + monthly_rankings: list[dict[str, object]], + monthly_checkpoints: list[dict[str, object]], + db_path: Path | None = None, +) -> Path: + """Replace the persisted Elo/MMR state with a freshly rebuilt dataset.""" + resolved_path = initialize_elo_mmr_storage(db_path=db_path) + with _connect_writer(resolved_path) as connection: + connection.execute("DELETE FROM elo_mmr_monthly_checkpoints") + connection.execute("DELETE FROM elo_mmr_monthly_rankings") + connection.execute("DELETE FROM elo_mmr_match_results") + connection.execute("DELETE FROM elo_mmr_player_ratings") + + connection.executemany( + """ + INSERT INTO elo_mmr_player_ratings ( + scope_key, + stable_player_key, + player_name, + steam_id, + current_mmr, + matches_processed, + wins, + draws, + losses, + last_match_id, + last_match_ended_at, + accuracy_mode, + capabilities_json + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + [ + ( + row["scope_key"], + row["stable_player_key"], + row["player_name"], + row.get("steam_id"), + row["current_mmr"], + row["matches_processed"], + row["wins"], + row["draws"], + row["losses"], + row.get("last_match_id"), + row.get("last_match_ended_at"), + row["accuracy_mode"], + json.dumps(row["capabilities"], ensure_ascii=True, separators=(",", ":")), + ) + for row in player_ratings + ], + ) + + connection.executemany( + """ + INSERT INTO elo_mmr_match_results ( + scope_key, + month_key, + external_match_id, + stable_player_key, + player_name, + steam_id, + server_slug, + server_name, + match_ended_at, + match_valid, + quality_factor, + quality_bucket, + role_bucket, + role_bucket_mode, + outcome_score, + combat_index, + objective_index, + objective_index_mode, + utility_index, + utility_index_mode, + leadership_index, + leadership_index_mode, + discipline_index, + discipline_index_mode, + impact_score, + delta_mmr, + mmr_before, + mmr_after, + match_score, + penalty_points, + capabilities_json + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + [ + ( + row["scope_key"], + row["month_key"], + row["external_match_id"], + row["stable_player_key"], + row["player_name"], + row.get("steam_id"), + row["server_slug"], + row["server_name"], + row["match_ended_at"], + 1 if row["match_valid"] else 0, + row["quality_factor"], + row["quality_bucket"], + row["role_bucket"], + row["role_bucket_mode"], + row["outcome_score"], + row["combat_index"], + row.get("objective_index"), + row["objective_index_mode"], + row.get("utility_index"), + row["utility_index_mode"], + row.get("leadership_index"), + row["leadership_index_mode"], + row.get("discipline_index"), + row["discipline_index_mode"], + row["impact_score"], + row["delta_mmr"], + row["mmr_before"], + row["mmr_after"], + row["match_score"], + row["penalty_points"], + json.dumps(row["capabilities"], ensure_ascii=True, separators=(",", ":")), + ) + for row in match_results + ], + ) + + connection.executemany( + """ + INSERT INTO elo_mmr_monthly_rankings ( + scope_key, + month_key, + stable_player_key, + player_name, + steam_id, + current_mmr, + baseline_mmr, + mmr_gain, + avg_match_score, + strength_of_schedule, + consistency, + activity, + confidence, + penalty_points, + monthly_rank_score, + valid_matches, + total_matches, + total_time_seconds, + eligible, + eligibility_reason, + accuracy_mode, + capabilities_json, + component_scores_json + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + [ + ( + row["scope_key"], + row["month_key"], + row["stable_player_key"], + row["player_name"], + row.get("steam_id"), + row["current_mmr"], + row["baseline_mmr"], + row["mmr_gain"], + row["avg_match_score"], + row["strength_of_schedule"], + row["consistency"], + row["activity"], + row["confidence"], + row["penalty_points"], + row["monthly_rank_score"], + row["valid_matches"], + row["total_matches"], + row["total_time_seconds"], + 1 if row["eligible"] else 0, + row.get("eligibility_reason"), + row["accuracy_mode"], + json.dumps(row["capabilities"], ensure_ascii=True, separators=(",", ":")), + json.dumps(row["component_scores"], ensure_ascii=True, separators=(",", ":")), + ) + for row in monthly_rankings + ], + ) + + connection.executemany( + """ + INSERT INTO elo_mmr_monthly_checkpoints ( + scope_key, + month_key, + generated_at, + player_count, + eligible_player_count, + source_policy_json, + capabilities_summary_json + ) VALUES (?, ?, ?, ?, ?, ?, ?) + """, + [ + ( + row["scope_key"], + row["month_key"], + row["generated_at"], + row["player_count"], + row["eligible_player_count"], + json.dumps(row["source_policy"], ensure_ascii=True, separators=(",", ":")), + json.dumps( + row["capabilities_summary"], + ensure_ascii=True, + separators=(",", ":"), + ), + ) + for row in monthly_checkpoints + ], + ) + return resolved_path + + +def list_elo_mmr_monthly_rankings( + *, + scope_key: str, + limit: int = 10, + month_key: str | None = None, + eligible_only: bool = True, + db_path: Path | None = None, +) -> dict[str, object]: + """Return the persisted monthly Elo/MMR leaderboard for one scope.""" + resolved_path = _resolve_db_path(db_path) + resolved_month_key = month_key or get_latest_elo_mmr_month_key(scope_key=scope_key, db_path=resolved_path) + if not resolved_month_key: + return { + "month_key": None, + "found": False, + "generated_at": None, + "items": [], + "source_policy": None, + "capabilities_summary": None, + } + + where_clauses = ["scope_key = ?", "month_key = ?"] + params: list[object] = [scope_key, resolved_month_key] + if eligible_only: + where_clauses.append("eligible = 1") + params.append(limit) + try: + with _connect_readonly(resolved_path) as connection: + checkpoint_row = connection.execute( + """ + SELECT generated_at, source_policy_json, capabilities_summary_json + FROM elo_mmr_monthly_checkpoints + WHERE scope_key = ? AND month_key = ? + """, + (scope_key, resolved_month_key), + ).fetchone() + rows = connection.execute( + f""" + SELECT * + FROM elo_mmr_monthly_rankings + WHERE {" AND ".join(where_clauses)} + ORDER BY monthly_rank_score DESC, current_mmr DESC, player_name COLLATE NOCASE ASC + LIMIT ? + """, + params, + ).fetchall() + except sqlite3.OperationalError: + return { + "month_key": None, + "found": False, + "generated_at": None, + "items": [], + "source_policy": None, + "capabilities_summary": None, + } + items = [] + for index, row in enumerate(rows, start=1): + items.append( + { + "ranking_position": index, + "player": { + "stable_player_key": row["stable_player_key"], + "name": row["player_name"], + "steam_id": row["steam_id"], + }, + "persistent_rating": { + "mmr": round(float(row["current_mmr"] or 0.0), 3), + "baseline_mmr": round(float(row["baseline_mmr"] or 0.0), 3), + "mmr_gain": round(float(row["mmr_gain"] or 0.0), 3), + }, + "monthly_rank_score": round(float(row["monthly_rank_score"] or 0.0), 3), + "components": json.loads(row["component_scores_json"]), + "valid_matches": int(row["valid_matches"] or 0), + "total_matches": int(row["total_matches"] or 0), + "total_time_seconds": int(row["total_time_seconds"] or 0), + "eligible": bool(row["eligible"]), + "eligibility_reason": row["eligibility_reason"], + "accuracy_mode": row["accuracy_mode"], + "capabilities": json.loads(row["capabilities_json"]), + } + ) + return { + "month_key": resolved_month_key, + "found": bool(items), + "generated_at": checkpoint_row["generated_at"] if checkpoint_row else None, + "items": items, + "source_policy": json.loads(checkpoint_row["source_policy_json"]) + if checkpoint_row + else None, + "capabilities_summary": json.loads(checkpoint_row["capabilities_summary_json"]) + if checkpoint_row + else None, + } + + +def get_elo_mmr_player_profile( + *, + player_id: str, + scope_key: str, + month_key: str | None = None, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return the persisted rating and monthly ranking profile for one player.""" + resolved_player_id = player_id.strip() + if not resolved_player_id: + return None + resolved_path = _resolve_db_path(db_path) + resolved_month_key = month_key or get_latest_elo_mmr_month_key(scope_key=scope_key, db_path=resolved_path) + try: + with _connect_readonly(resolved_path) as connection: + rating_row = connection.execute( + """ + SELECT * + FROM elo_mmr_player_ratings + WHERE scope_key = ? + AND (stable_player_key = ? OR steam_id = ?) + ORDER BY updated_at DESC + LIMIT 1 + """, + (scope_key, resolved_player_id, resolved_player_id), + ).fetchone() + monthly_row = None + if resolved_month_key: + monthly_row = connection.execute( + """ + SELECT * + FROM elo_mmr_monthly_rankings + WHERE scope_key = ? + AND month_key = ? + AND (stable_player_key = ? OR steam_id = ?) + ORDER BY updated_at DESC + LIMIT 1 + """, + (scope_key, resolved_month_key, resolved_player_id, resolved_player_id), + ).fetchone() + except sqlite3.OperationalError: + return None + if rating_row is None and monthly_row is None: + return None + return { + "scope_key": scope_key, + "month_key": resolved_month_key, + "player": { + "stable_player_key": ( + rating_row["stable_player_key"] if rating_row else monthly_row["stable_player_key"] + ), + "name": rating_row["player_name"] if rating_row else monthly_row["player_name"], + "steam_id": rating_row["steam_id"] if rating_row else monthly_row["steam_id"], + }, + "persistent_rating": ( + { + "mmr": round(float(rating_row["current_mmr"] or 0.0), 3), + "matches_processed": int(rating_row["matches_processed"] or 0), + "wins": int(rating_row["wins"] or 0), + "draws": int(rating_row["draws"] or 0), + "losses": int(rating_row["losses"] or 0), + "last_match_id": rating_row["last_match_id"], + "last_match_ended_at": rating_row["last_match_ended_at"], + "accuracy_mode": rating_row["accuracy_mode"], + "capabilities": json.loads(rating_row["capabilities_json"]), + } + if rating_row + else None + ), + "monthly_ranking": ( + { + "monthly_rank_score": round(float(monthly_row["monthly_rank_score"] or 0.0), 3), + "current_mmr": round(float(monthly_row["current_mmr"] or 0.0), 3), + "baseline_mmr": round(float(monthly_row["baseline_mmr"] or 0.0), 3), + "mmr_gain": round(float(monthly_row["mmr_gain"] or 0.0), 3), + "valid_matches": int(monthly_row["valid_matches"] or 0), + "total_matches": int(monthly_row["total_matches"] or 0), + "total_time_seconds": int(monthly_row["total_time_seconds"] or 0), + "eligible": bool(monthly_row["eligible"]), + "eligibility_reason": monthly_row["eligibility_reason"], + "accuracy_mode": monthly_row["accuracy_mode"], + "components": json.loads(monthly_row["component_scores_json"]), + "capabilities": json.loads(monthly_row["capabilities_json"]), + } + if monthly_row + else None + ), + } + + +def get_latest_elo_mmr_month_key( + *, + scope_key: str, + db_path: Path | None = None, +) -> str | None: + """Return the latest month key available for one Elo/MMR scope.""" + resolved_path = _resolve_db_path(db_path) + try: + with _connect_readonly(resolved_path) as connection: + row = connection.execute( + """ + SELECT MAX(month_key) AS latest_month_key + FROM elo_mmr_monthly_checkpoints + WHERE scope_key = ? + """, + (scope_key,), + ).fetchone() + except sqlite3.OperationalError: + return None + return str(row["latest_month_key"]) if row and row["latest_month_key"] else None + + +def get_latest_elo_mmr_generated_at(*, db_path: Path | None = None) -> datetime | None: + """Return the latest persisted Elo/MMR checkpoint generation time, if any.""" + resolved_path = _resolve_db_path(db_path) + try: + with _connect_readonly(resolved_path) as connection: + row = connection.execute( + """ + SELECT MAX(generated_at) AS latest_generated_at + FROM elo_mmr_monthly_checkpoints + """ + ).fetchone() + except sqlite3.OperationalError: + return None + latest_generated_at = str(row["latest_generated_at"] or "").strip() if row else "" + if not latest_generated_at: + return None + return datetime.fromisoformat(latest_generated_at.replace("Z", "+00:00")) + + +def _connect_writer(db_path: Path): + return connect_sqlite_writer(db_path) + + +def _connect_readonly(db_path: Path): + return connect_sqlite_readonly(db_path) + + +def _resolve_db_path(db_path: Path | None) -> Path: + return db_path or get_storage_path() diff --git a/backend/app/historical_ingestion.py b/backend/app/historical_ingestion.py new file mode 100644 index 0000000..7598173 --- /dev/null +++ b/backend/app/historical_ingestion.py @@ -0,0 +1,714 @@ +"""Historical CRCON ingestion bootstrap and incremental refresh.""" + +from __future__ import annotations + +import argparse +import json +from dataclasses import dataclass +from typing import Callable, Iterable + +from .config import ( + get_historical_crcon_detail_workers, + get_historical_crcon_page_size, + get_historical_data_source_kind, + get_historical_refresh_overlap_hours, +) +from .data_sources import ( + SOURCE_KIND_PUBLIC_SCOREBOARD, + SOURCE_KIND_RCON, + HistoricalDataSource, + build_historical_runtime_source_policy, + resolve_historical_ingestion_data_source, +) +from .elo_mmr_engine import rebuild_elo_mmr_models +from .historical_snapshots import generate_and_persist_historical_snapshots +from .historical_storage import ( + finalize_backfill_progress, + finalize_ingestion_run, + get_backfill_resume_page, + get_refresh_cutoff_for_server, + initialize_historical_storage, + list_historical_coverage_report, + list_historical_servers, + mark_backfill_progress_page_completed, + mark_backfill_progress_started, + start_ingestion_run, + upsert_historical_match, +) +from .rcon_historical_worker import run_rcon_historical_capture_unlocked +from .writer_lock import backend_writer_lock, build_writer_lock_holder + + +ProgressCallback = Callable[[dict[str, object]], None] + + +@dataclass(slots=True) +class IngestionStats: + """Mutable counters for one ingestion execution.""" + + pages_processed: int = 0 + matches_seen: int = 0 + matches_inserted: int = 0 + matches_updated: int = 0 + player_rows_inserted: int = 0 + player_rows_updated: int = 0 + + def apply(self, delta: dict[str, int]) -> None: + self.matches_inserted += delta.get("matches_inserted", 0) + self.matches_updated += delta.get("matches_updated", 0) + self.player_rows_inserted += delta.get("player_rows_inserted", 0) + self.player_rows_updated += delta.get("player_rows_updated", 0) + + +def run_bootstrap( + *, + server_slug: str | None = None, + max_pages: int | None = None, + page_size: int | None = None, + start_page: int | None = None, + detail_workers: int | None = None, + rebuild_snapshots: bool = True, + progress_callback: ProgressCallback | None = None, +) -> dict[str, object]: + """Run a first full historical import against one or all configured servers.""" + with backend_writer_lock( + holder=build_writer_lock_holder( + f"app.historical_ingestion bootstrap:{server_slug or 'all-servers'}" + ) + ): + return _run_ingestion( + mode="bootstrap", + server_slug=server_slug, + max_pages=max_pages, + page_size=page_size, + start_page=start_page, + detail_workers=detail_workers, + overlap_hours=None, + incremental=False, + rebuild_snapshots=rebuild_snapshots, + progress_callback=progress_callback, + ) + + +def run_incremental_refresh( + *, + server_slug: str | None = None, + max_pages: int | None = None, + page_size: int | None = None, + start_page: int | None = None, + detail_workers: int | None = None, + overlap_hours: int | None = None, + rebuild_snapshots: bool = True, + progress_callback: ProgressCallback | None = None, +) -> dict[str, object]: + """Refresh recent historical pages without replaying the whole archive.""" + with backend_writer_lock( + holder=build_writer_lock_holder( + f"app.historical_ingestion refresh:{server_slug or 'all-servers'}" + ) + ): + return _run_ingestion( + mode="incremental", + server_slug=server_slug, + max_pages=max_pages, + page_size=page_size, + start_page=start_page, + detail_workers=detail_workers, + overlap_hours=overlap_hours, + incremental=True, + rebuild_snapshots=rebuild_snapshots, + progress_callback=progress_callback, + ) + + +def _run_ingestion( + *, + mode: str, + server_slug: str | None, + max_pages: int | None, + page_size: int | None, + start_page: int | None, + detail_workers: int | None, + overlap_hours: int | None, + incremental: bool, + rebuild_snapshots: bool, + progress_callback: ProgressCallback | None, +) -> dict[str, object]: + initialize_historical_storage() + stats = IngestionStats() + fallback_data_source, fallback_source_policy = resolve_historical_ingestion_data_source() + selected_servers = _select_servers(server_slug) + processed_servers: list[dict[str, object]] = [] + active_runs: dict[str, int] = {} + resolved_overlap_hours = ( + get_historical_refresh_overlap_hours() + if overlap_hours is None + else overlap_hours + ) + if resolved_overlap_hours < 0: + raise ValueError("--overlap-hours must be zero or positive.") + + primary_writer_result = _attempt_primary_rcon_writer( + mode=mode, + server_slug=server_slug, + selected_servers=selected_servers, + progress_callback=progress_callback, + ) + source_policy = _resolve_ingestion_source_policy( + fallback_source_policy=fallback_source_policy, + primary_writer_result=primary_writer_result, + ) + use_classic_fallback = _should_use_classic_fallback(primary_writer_result) + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-source-selected", + "mode": mode, + "primary_source": source_policy.get("primary_source"), + "selected_source": source_policy.get("selected_source"), + "fallback_used": bool(source_policy.get("fallback_used")), + "fallback_reason": source_policy.get("fallback_reason"), + }, + ) + + try: + if use_classic_fallback: + for server in selected_servers: + run_id = start_ingestion_run(mode=mode, target_server_slug=str(server["slug"])) + active_runs[str(server["slug"])] = run_id + mark_backfill_progress_started( + server_slug=str(server["slug"]), + mode=mode, + run_id=run_id, + ) + cutoff = ( + get_refresh_cutoff_for_server( + str(server["slug"]), + overlap_hours=resolved_overlap_hours, + ) + if incremental + else None + ) + resolved_start_page = _resolve_start_page( + start_page=start_page, + server_slug=str(server["slug"]), + mode=mode, + ) + server_stats = _ingest_server( + server=server, + mode=mode, + run_id=run_id, + stats=stats, + data_source=fallback_data_source, + max_pages=max_pages, + page_size=page_size, + start_page=resolved_start_page, + detail_workers=detail_workers, + cutoff=cutoff, + progress_callback=progress_callback, + source_policy=source_policy, + ) + processed_servers.append(server_stats) + finalize_ingestion_run( + run_id, + status="success", + pages_processed=server_stats["pages_processed"], + matches_seen=server_stats["matches_seen"], + matches_inserted=server_stats["matches_inserted"], + matches_updated=server_stats["matches_updated"], + player_rows_inserted=server_stats["player_rows_inserted"], + player_rows_updated=server_stats["player_rows_updated"], + notes=f"public_name={server_stats['public_name']}", + ) + finalize_backfill_progress( + server_slug=str(server["slug"]), + mode=mode, + run_id=run_id, + status="success", + archive_exhausted=bool(server_stats["archive_exhausted"]), + ) + active_runs.pop(str(server["slug"]), None) + if rebuild_snapshots: + snapshot_result = generate_and_persist_historical_snapshots(server_key=server_slug) + elo_mmr_result = rebuild_elo_mmr_models() + else: + snapshot_result = { + "status": "skipped", + "reason": "snapshot-rebuild-disabled", + "generation_policy": "handled-by-caller", + } + elo_mmr_result = { + "status": "skipped", + "reason": "snapshot-rebuild-disabled", + } + except Exception as exc: + for active_server_slug, run_id in active_runs.items(): + finalize_ingestion_run( + run_id, + status="failed", + pages_processed=stats.pages_processed, + matches_seen=stats.matches_seen, + matches_inserted=stats.matches_inserted, + matches_updated=stats.matches_updated, + player_rows_inserted=stats.player_rows_inserted, + player_rows_updated=stats.player_rows_updated, + notes=str(exc), + ) + finalize_backfill_progress( + server_slug=active_server_slug, + mode=mode, + run_id=run_id, + status="failed", + error_message=str(exc), + ) + raise + + return { + "status": "ok", + "mode": mode, + "source_provider": source_policy.get("selected_source"), + "source_policy": source_policy, + "primary_writer_result": primary_writer_result, + "page_size": page_size or get_historical_crcon_page_size(), + "start_page": start_page, + "detail_workers": detail_workers or get_historical_crcon_detail_workers(), + "overlap_hours": resolved_overlap_hours if incremental else None, + "servers": processed_servers, + "coverage": list_historical_coverage_report(server_slug=server_slug), + "snapshot_result": snapshot_result, + "elo_mmr_result": elo_mmr_result, + "totals": { + "pages_processed": stats.pages_processed, + "matches_seen": stats.matches_seen, + "matches_inserted": stats.matches_inserted, + "matches_updated": stats.matches_updated, + "player_rows_inserted": stats.player_rows_inserted, + "player_rows_updated": stats.player_rows_updated, + }, + } + + +def _ingest_server( + *, + server: dict[str, object], + mode: str, + run_id: int, + stats: IngestionStats, + data_source: HistoricalDataSource, + max_pages: int | None, + page_size: int | None, + start_page: int, + detail_workers: int | None, + cutoff: str | None, + progress_callback: ProgressCallback | None, + source_policy: dict[str, object], +) -> dict[str, object]: + resolved_page_size = page_size or get_historical_crcon_page_size() + resolved_detail_workers = detail_workers or get_historical_crcon_detail_workers() + page_limit = max_pages or 1000000 + start_page = max(1, start_page) + local_stats = IngestionStats() + public_info = data_source.fetch_public_info(base_url=str(server["scoreboard_base_url"])) + discovered_total_matches: int | None = None + last_page_processed: int | None = None + archive_exhausted = False + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-server-started", + "mode": mode, + "server_slug": server["slug"], + "selected_source": source_policy.get("selected_source"), + "fallback_used": bool(source_policy.get("fallback_used")), + "start_page": start_page, + "cutoff": cutoff, + }, + ) + + for page_number in range(start_page, start_page + page_limit): + payload = data_source.fetch_match_page( + base_url=str(server["scoreboard_base_url"]), + page=page_number, + limit=resolved_page_size, + ) + if discovered_total_matches is None: + discovered_total_matches = _coerce_int(payload.get("total")) + page_matches = _coerce_match_list(payload.get("maps")) + if not page_matches: + archive_exhausted = True + break + + local_stats.pages_processed += 1 + stats.pages_processed += 1 + last_page_processed = page_number + stop_after_page = False + match_ids_to_fetch: list[str] = [] + + for match_summary in page_matches: + local_stats.matches_seen += 1 + stats.matches_seen += 1 + + reference_timestamp = _pick_match_timestamp(match_summary) + if cutoff and reference_timestamp and reference_timestamp < cutoff: + stop_after_page = True + continue + + match_id = _stringify(match_summary.get("id")) + if match_id: + match_ids_to_fetch.append(match_id) + + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-page-loaded", + "mode": mode, + "server_slug": server["slug"], + "page": page_number, + "selected_source": source_policy.get("selected_source"), + "match_ids_to_detail": len(match_ids_to_fetch), + "page_matches": len(page_matches), + "cutoff_reached": stop_after_page, + }, + ) + + for detail_payload in data_source.fetch_match_details( + base_url=str(server["scoreboard_base_url"]), + match_ids=match_ids_to_fetch, + max_workers=resolved_detail_workers, + ): + delta = upsert_historical_match( + server_slug=str(server["slug"]), + match_payload=detail_payload, + ) + local_stats.apply(delta) + stats.apply(delta) + + mark_backfill_progress_page_completed( + server_slug=str(server["slug"]), + mode=mode, + page_number=page_number, + page_size=resolved_page_size, + run_id=run_id, + discovered_total_matches=discovered_total_matches, + ) + + if stop_after_page: + break + + return { + "server_slug": server["slug"], + "public_name": _extract_public_name(public_info), + "server_number": public_info.get("server_number") or server.get("server_number"), + "source_provider": data_source.source_kind, + "pages_processed": local_stats.pages_processed, + "matches_seen": local_stats.matches_seen, + "discovered_total_matches": discovered_total_matches, + "matches_inserted": local_stats.matches_inserted, + "matches_updated": local_stats.matches_updated, + "player_rows_inserted": local_stats.player_rows_inserted, + "player_rows_updated": local_stats.player_rows_updated, + "start_page": start_page, + "last_page_processed": last_page_processed, + "cutoff": cutoff, + "archive_exhausted": archive_exhausted, + } + + +def _resolve_start_page( + *, + start_page: int | None, + server_slug: str, + mode: str, +) -> int: + if start_page is not None: + return max(1, start_page) + if mode != "bootstrap": + return 1 + return get_backfill_resume_page(server_slug, mode=mode) + + +def _attempt_primary_rcon_writer( + *, + mode: str, + server_slug: str | None, + selected_servers: list[dict[str, object]], + progress_callback: ProgressCallback | None, +) -> dict[str, object]: + configured_kind = get_historical_data_source_kind() + if configured_kind != SOURCE_KIND_RCON: + result = { + "attempted": False, + "status": "skipped", + "primary_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "selected_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "fallback_used": False, + "fallback_reason": None, + "source_attempts": [], + } + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-rcon-primary-skipped", + "mode": mode, + "reason": "historical-data-source-configured-for-public-scoreboard", + }, + ) + return result + + target_scope = server_slug or "all-configured-rcon-targets" + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-rcon-primary-started", + "mode": mode, + "target_scope": target_scope, + "servers": [str(server["slug"]) for server in selected_servers], + }, + ) + try: + capture_result = run_rcon_historical_capture_unlocked(target_key=server_slug) + except Exception as exc: # noqa: BLE001 - fallback remains explicit and controlled + result = { + "attempted": True, + "status": "error", + "primary_source": SOURCE_KIND_RCON, + "selected_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "fallback_used": True, + "fallback_reason": "rcon-historical-writer-request-failed", + "message": str(exc), + } + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-rcon-primary-failed", + "mode": mode, + "target_scope": target_scope, + "message": str(exc), + }, + ) + return result + + capture_run_status = str(capture_result.get("run_status") or capture_result.get("status") or "unknown") + targets = list(capture_result.get("targets") or []) + errors = list(capture_result.get("errors") or []) + if targets: + result = { + "attempted": True, + "status": "partial", + "primary_source": SOURCE_KIND_RCON, + "selected_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "fallback_used": True, + "fallback_reason": "rcon-primary-writer-succeeded-but-classic-match-archive-still-needs-fallback", + "capture_result": capture_result, + } + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-rcon-primary-succeeded", + "mode": mode, + "target_scope": target_scope, + "captured_targets": len(targets), + "run_status": capture_run_status, + "next_step": "classic-public-scoreboard-fallback-required", + }, + ) + return result + + result = { + "attempted": True, + "status": "empty", + "primary_source": SOURCE_KIND_RCON, + "selected_source": SOURCE_KIND_PUBLIC_SCOREBOARD, + "fallback_used": True, + "fallback_reason": "rcon-historical-writer-returned-no-usable-samples", + "capture_result": capture_result, + "message": json.dumps(errors, separators=(",", ":")) if errors else None, + } + _emit_progress( + progress_callback, + { + "event": "historical-ingestion-rcon-primary-empty", + "mode": mode, + "target_scope": target_scope, + "run_status": capture_run_status, + "errors": len(errors), + }, + ) + return result + + +def _should_use_classic_fallback(primary_writer_result: dict[str, object]) -> bool: + selected_source = str(primary_writer_result.get("selected_source") or "") + return selected_source == SOURCE_KIND_PUBLIC_SCOREBOARD + + +def _resolve_ingestion_source_policy( + *, + fallback_source_policy: dict[str, object], + primary_writer_result: dict[str, object], +) -> dict[str, object]: + configured_kind = get_historical_data_source_kind() + if configured_kind != SOURCE_KIND_RCON: + return fallback_source_policy + + status = str(primary_writer_result.get("status") or "error") + selected_source = str( + primary_writer_result.get("selected_source") or SOURCE_KIND_PUBLIC_SCOREBOARD + ) + fallback_reason = primary_writer_result.get("fallback_reason") + message = primary_writer_result.get("message") + if ( + fallback_reason + == "rcon-primary-writer-succeeded-but-classic-match-archive-still-needs-fallback" + ): + message = ( + "RCON prospective capture succeeded first, but the classic historical_* " + "archive still requires public-scoreboard for match-page import." + ) + return build_historical_runtime_source_policy( + operation="historical-ingestion", + rcon_status=status, + fallback_reason=str(fallback_reason) if fallback_reason else None, + selected_source=selected_source, + rcon_message=message if isinstance(message, str) else None, + ) + + +def _emit_progress( + callback: ProgressCallback | None, + payload: dict[str, object], +) -> None: + if callback is None: + return + callback(payload) + + +def _select_servers(server_slug: str | None) -> list[dict[str, object]]: + servers = list_historical_servers() + if server_slug is None: + return servers + + normalized = server_slug.strip() + selected = [server for server in servers if server["slug"] == normalized] + if not selected: + raise ValueError(f"Unknown historical server slug: {server_slug}") + return selected + + +def _coerce_match_list(payload: object) -> list[dict[str, object]]: + if not isinstance(payload, list): + return [] + return [item for item in payload if isinstance(item, dict)] + + +def _pick_match_timestamp(match_payload: dict[str, object]) -> str | None: + for key in ("end", "start", "creation_time"): + value = match_payload.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + return None + + +def _extract_public_name(public_info: dict[str, object]) -> str | None: + name_value = public_info.get("name") + if isinstance(name_value, str): + return name_value + if isinstance(name_value, dict): + raw_name = name_value.get("name") + return raw_name.strip() if isinstance(raw_name, str) and raw_name.strip() else None + return None + + +def _stringify(value: object) -> str | None: + if value is None: + return None + text = str(value).strip() + return text or None + + +def _coerce_int(value: object) -> int | None: + if value in (None, ""): + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def build_arg_parser() -> argparse.ArgumentParser: + """Create the CLI parser for manual historical ingestion runs.""" + parser = argparse.ArgumentParser( + description="Historical CRCON ingestion for HLL Vietnam.", + ) + parser.add_argument( + "mode", + choices=("bootstrap", "refresh"), + help="bootstrap imports the archive, refresh only recent pages", + ) + parser.add_argument( + "--server", + dest="server_slug", + help="optional historical server slug", + ) + parser.add_argument( + "--max-pages", + type=int, + help="optional page cap for local validation", + ) + parser.add_argument( + "--page-size", + type=int, + help="override CRCON page size", + ) + parser.add_argument( + "--start-page", + type=int, + help="override the resume page; bootstrap uses persisted progress when omitted", + ) + parser.add_argument( + "--detail-workers", + type=int, + help="parallel worker count for per-match detail requests", + ) + parser.add_argument( + "--overlap-hours", + type=int, + help="override the incremental overlap window in hours", + ) + return parser + + +def main(argv: Iterable[str] | None = None) -> int: + """Run the historical ingestion CLI.""" + parser = build_arg_parser() + args = parser.parse_args(list(argv) if argv is not None else None) + + def _print_progress(payload: dict[str, object]) -> None: + print(json.dumps(payload, ensure_ascii=True)) + + if args.mode == "bootstrap": + result = run_bootstrap( + server_slug=args.server_slug, + max_pages=args.max_pages, + page_size=args.page_size, + start_page=args.start_page, + detail_workers=args.detail_workers, + progress_callback=_print_progress, + ) + else: + result = run_incremental_refresh( + server_slug=args.server_slug, + max_pages=args.max_pages, + page_size=args.page_size, + start_page=args.start_page, + detail_workers=args.detail_workers, + overlap_hours=args.overlap_hours, + progress_callback=_print_progress, + ) + + print(json.dumps(result, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/historical_models.py b/backend/app/historical_models.py new file mode 100644 index 0000000..8566f82 --- /dev/null +++ b/backend/app/historical_models.py @@ -0,0 +1,126 @@ +"""Historical domain models for persisted CRCON scoreboard data.""" + +from __future__ import annotations + +from dataclasses import dataclass +from datetime import datetime + + +@dataclass(frozen=True, slots=True) +class HistoricalServerDefinition: + """Stable identity for one historical CRCON source.""" + + slug: str + display_name: str + scoreboard_base_url: str + server_number: int | None + source_kind: str = "crcon-scoreboard-json" + + +@dataclass(frozen=True, slots=True) +class HistoricalMapRecord: + """Normalized map metadata reused across historical matches.""" + + external_map_id: str | None + map_name: str | None + pretty_name: str | None + game_mode: str | None + image_name: str | None + + +@dataclass(frozen=True, slots=True) +class HistoricalMatchRecord: + """Normalized match identity and summary.""" + + external_match_id: str + server_slug: str + created_at: datetime | None + started_at: datetime | None + ended_at: datetime | None + map_name: str | None + map_pretty_name: str | None + map_external_id: str | None + game_mode: str | None + image_name: str | None + allied_score: int | None + axis_score: int | None + + +@dataclass(frozen=True, slots=True) +class HistoricalPlayerIdentity: + """Stable player identity across historical match stats.""" + + stable_player_key: str + display_name: str + steam_id: str | None + source_player_id: str | None + + +@dataclass(frozen=True, slots=True) +class HistoricalPlayerMatchStats: + """Metrics persisted per player and match.""" + + stable_player_key: str + match_player_ref: str | None + team_side: str | None + level: int | None + kills: int | None + deaths: int | None + teamkills: int | None + time_seconds: int | None + kills_per_minute: float | None + deaths_per_minute: float | None + kill_death_ratio: float | None + combat: int | None + offense: int | None + defense: int | None + support: int | None + + +@dataclass(frozen=True, slots=True) +class HistoricalIngestionRunSummary: + """Outcome metadata recorded for one ingestion execution.""" + + mode: str + started_at: datetime + completed_at: datetime | None + status: str + pages_processed: int + matches_seen: int + matches_inserted: int + matches_updated: int + player_rows_inserted: int + player_rows_updated: int + + +@dataclass(frozen=True, slots=True) +class HistoricalBackfillProgressSummary: + """Persisted resume checkpoint and last attempt metadata per server.""" + + server_slug: str + mode: str + next_page: int + last_completed_page: int | None + discovered_total_matches: int | None + discovered_total_pages: int | None + archive_exhausted: bool + last_run_id: int | None + last_run_status: str | None + last_run_started_at: datetime | None + last_run_completed_at: datetime | None + last_error: str | None + + +@dataclass(frozen=True, slots=True) +class HistoricalSnapshotRecord: + """Persisted precomputed historical snapshot ready for lightweight reads.""" + + server_key: str + snapshot_type: str + metric: str | None + window: str | None + payload_json: str + generated_at: datetime + source_range_start: datetime | None + source_range_end: datetime | None + is_stale: bool diff --git a/backend/app/historical_runner.py b/backend/app/historical_runner.py new file mode 100644 index 0000000..10edced --- /dev/null +++ b/backend/app/historical_runner.py @@ -0,0 +1,529 @@ +"""Local development loop for periodic historical CRCON refreshes.""" + +from __future__ import annotations + +import argparse +import json +import time +import traceback +from datetime import datetime, timezone +from typing import Any + +from .config import ( + DEFAULT_DB_MAINTENANCE_INTERVAL_SECONDS, + get_db_maintenance_enabled, + get_db_maintenance_interval_seconds, + get_historical_full_snapshot_every_runs, + get_historical_elo_mmr_min_new_samples, + get_historical_elo_mmr_rebuild_interval_minutes, + get_historical_refresh_interval_seconds, + get_historical_refresh_max_retries, + get_historical_refresh_retry_delay_seconds, + get_historical_data_source_kind, +) +from .database_maintenance import run_database_maintenance_cleanup +from .elo_mmr_engine import rebuild_elo_mmr_models +from .elo_mmr_storage import get_latest_elo_mmr_generated_at +from .historical_ingestion import run_incremental_refresh +from .historical_snapshots import ( + generate_and_persist_historical_snapshots, + generate_and_persist_priority_historical_snapshots, +) +from .rcon_historical_storage import count_rcon_historical_samples_since +from .rcon_historical_worker import run_rcon_historical_capture +from .writer_lock import backend_writer_lock, build_writer_lock_holder + +HOURLY_INTERVAL_SECONDS = 3600 +DEFAULT_HISTORICAL_SERVER_SCOPE = ( + "comunidad-hispana-01", + "comunidad-hispana-02", +) +_LAST_DATABASE_MAINTENANCE_RUN_AT: datetime | None = None + + +def run_periodic_historical_refresh( + *, + interval_seconds: int, + max_retries: int, + retry_delay_seconds: float, + server_slug: str | None = None, + max_pages: int | None = None, + page_size: int | None = None, + max_runs: int | None = None, +) -> None: + """Run periodic historical refreshes and rebuild persisted snapshots.""" + completed_runs = 0 + print( + json.dumps( + { + "event": "historical-refresh-loop-started", + "interval_seconds": interval_seconds, + "max_retries": max_retries, + "retry_delay_seconds": retry_delay_seconds, + "server_scope": _describe_refresh_scope(server_slug), + "snapshot_scope": _describe_snapshot_scope(server_slug), + }, + indent=2, + ) + ) + print("Press Ctrl+C to stop.") + + try: + while max_runs is None or completed_runs < max_runs: + completed_runs += 1 + payload = _run_refresh_with_retries( + max_retries=max_retries, + retry_delay_seconds=retry_delay_seconds, + server_slug=server_slug, + max_pages=max_pages, + page_size=page_size, + run_number=completed_runs, + ) + _emit_json_log({"run": completed_runs, **payload}) + + if max_runs is not None and completed_runs >= max_runs: + break + + time.sleep(interval_seconds) + except KeyboardInterrupt: + print("\nHistorical refresh loop stopped by user.") + + +def _run_refresh_with_retries( + *, + max_retries: int, + retry_delay_seconds: float, + server_slug: str | None, + max_pages: int | None, + page_size: int | None, + run_number: int, +) -> dict[str, Any]: + attempt = 0 + while True: + attempt += 1 + try: + with backend_writer_lock( + holder=build_writer_lock_holder( + f"app.historical_runner refresh:{server_slug or 'all-servers'}" + ) + ): + rcon_capture_result = _run_primary_rcon_capture() + should_run_classic_fallback, classic_fallback_reason = ( + _resolve_classic_fallback_policy( + server_slug=server_slug, + run_number=run_number, + rcon_capture_result=rcon_capture_result, + ) + ) + if should_run_classic_fallback: + refresh_result = run_incremental_refresh( + server_slug=server_slug, + max_pages=max_pages, + page_size=page_size, + rebuild_snapshots=False, + ) + snapshot_result = generate_historical_snapshots( + server_slug=server_slug, + run_number=run_number, + ) + elo_mmr_result = rebuild_elo_mmr_models() + else: + should_generate_snapshots = _rcon_capture_has_new_useful_data( + rcon_capture_result + ) + refresh_result = { + "status": "skipped", + "reason": "rcon-primary-cycle-no-classic-fallback-needed", + } + if should_generate_snapshots: + snapshot_result = generate_historical_snapshots( + server_slug=server_slug, + run_number=run_number, + ) + snapshot_result = { + **snapshot_result, + "generation_policy": "rcon-primary-useful-cycle", + "reason": "rcon-primary-cycle-produced-new-useful-coverage", + } + elo_policy = _build_elo_mmr_rebuild_policy( + rcon_capture_result=rcon_capture_result + ) + if bool(elo_policy["due"]): + elo_mmr_result = { + **rebuild_elo_mmr_models(), + "generation_policy": "rcon-primary-useful-cycle-elo-rebuild-due", + "reason": "rcon-primary-useful-cycle-met-elo-rebuild-threshold", + **elo_policy, + } + else: + elo_mmr_result = { + "status": "skipped", + "reason": "rcon-primary-useful-cycle-elo-rebuild-throttled", + "generation_policy": "rcon-primary-useful-cycle-elo-rebuild-throttled", + **elo_policy, + } + else: + snapshot_result = { + "status": "skipped", + "reason": "rcon-primary-cycle-had-no-new-useful-data", + "generation_policy": "rcon-primary-no-new-useful-data", + } + elo_mmr_result = { + "status": "skipped", + "reason": "rcon-primary-cycle-had-no-new-useful-data", + "generation_policy": "rcon-primary-no-new-useful-data", + **_build_elo_mmr_rebuild_policy( + rcon_capture_result=rcon_capture_result + ), + } + maintenance_result = _maybe_run_database_maintenance() + return { + "status": "ok", + "attempts_used": attempt, + "max_retries": max_retries, + "rcon_capture_result": rcon_capture_result, + "classic_fallback_used": should_run_classic_fallback, + "classic_fallback_reason": classic_fallback_reason, + "refresh_result": refresh_result, + "snapshot_result": snapshot_result, + "elo_mmr_result": elo_mmr_result, + "database_maintenance_result": maintenance_result, + } + except Exception as exc: + failure_payload = { + "event": "historical-refresh-attempt-failed", + "attempt": attempt, + "max_retries": max_retries, + "server_scope": _describe_refresh_scope(server_slug), + "snapshot_scope": _describe_snapshot_scope(server_slug), + "error_type": type(exc).__name__, + "error": str(exc), + "traceback": traceback.format_exc(), + } + _emit_json_log(failure_payload) + if attempt > max_retries: + return { + "status": "error", + "attempts_used": attempt, + "max_retries": max_retries, + "error_type": type(exc).__name__, + "error": str(exc), + "traceback": failure_payload["traceback"], + } + if retry_delay_seconds > 0: + time.sleep(retry_delay_seconds) + + +def generate_historical_snapshots( + *, + server_slug: str | None = None, + run_number: int = 1, +) -> dict[str, Any]: + """Build priority prewarm snapshots on every run and the full matrix on cadence.""" + generated_at = datetime.now(timezone.utc) + full_snapshot_every_runs = get_historical_full_snapshot_every_runs() + should_run_full_refresh = bool(server_slug) or run_number % full_snapshot_every_runs == 0 + _emit_json_log( + { + "event": "historical-snapshot-refresh-started", + "run_number": run_number, + "snapshot_step": "full-matrix" if should_run_full_refresh else "priority-prewarm", + "server_slug": server_slug, + "snapshot_scope": _describe_snapshot_scope(server_slug), + } + ) + if should_run_full_refresh: + result = generate_and_persist_historical_snapshots( + server_key=server_slug, + generated_at=generated_at, + ) + else: + result = generate_and_persist_priority_historical_snapshots( + generated_at=generated_at, + ) + return { + **result, + "run_number": run_number, + "full_snapshot_every_runs": full_snapshot_every_runs, + "prewarm_only": not should_run_full_refresh, + "refresh_interval_seconds": get_historical_refresh_interval_seconds(), + "includes_monthly_mvp_v2": True, + } + + +def _emit_json_log(payload: dict[str, Any]) -> None: + """Print JSON logs that remain safe for Compose and log collectors.""" + print(json.dumps(payload, ensure_ascii=True, default=str), flush=True) + + +def _maybe_run_database_maintenance(*, now: datetime | None = None) -> dict[str, Any]: + """Optionally run scheduled database maintenance without crashing the runner.""" + global _LAST_DATABASE_MAINTENANCE_RUN_AT + + anchor = now.astimezone(timezone.utc) if now else datetime.now(timezone.utc) + if not get_db_maintenance_enabled(): + result = {"status": "skipped", "reason": "disabled", "enabled": False} + _emit_json_log({"event": "database-maintenance-scheduler-skipped-disabled", **result}) + return result + + interval_seconds, interval_source = _resolve_db_maintenance_interval_seconds() + if _LAST_DATABASE_MAINTENANCE_RUN_AT is not None: + elapsed_seconds = max( + 0, + int((anchor - _LAST_DATABASE_MAINTENANCE_RUN_AT).total_seconds()), + ) + if elapsed_seconds < interval_seconds: + result = { + "status": "skipped", + "reason": "not-due", + "enabled": True, + "interval_seconds": interval_seconds, + "interval_source": interval_source, + "elapsed_seconds": elapsed_seconds, + "last_run_at": _LAST_DATABASE_MAINTENANCE_RUN_AT.isoformat().replace( + "+00:00", "Z" + ), + } + _emit_json_log({"event": "database-maintenance-scheduler-skipped-not-due", **result}) + return result + + _emit_json_log( + { + "event": "database-maintenance-scheduler-started", + "enabled": True, + "interval_seconds": interval_seconds, + "interval_source": interval_source, + "scheduled_at": anchor.isoformat().replace("+00:00", "Z"), + } + ) + try: + result = run_database_maintenance_cleanup(apply=True, now=anchor) + except Exception as exc: # noqa: BLE001 - scheduler must not crash the runner + result = { + "status": "error", + "error_type": type(exc).__name__, + "error": str(exc), + "enabled": True, + "interval_seconds": interval_seconds, + "interval_source": interval_source, + } + _emit_json_log({"event": "database-maintenance-scheduler-failed", **result}) + return result + + if result.get("status") == "ok": + _LAST_DATABASE_MAINTENANCE_RUN_AT = anchor + _emit_json_log( + { + "event": "database-maintenance-scheduler-completed", + "enabled": True, + "interval_seconds": interval_seconds, + "interval_source": interval_source, + "result": result, + } + ) + return result + + failed_result = { + "enabled": True, + "interval_seconds": interval_seconds, + "interval_source": interval_source, + "result": result, + } + _emit_json_log({"event": "database-maintenance-scheduler-failed", **failed_result}) + return result + + +def _resolve_db_maintenance_interval_seconds() -> tuple[int, str]: + """Return a safe maintenance interval even if env configuration is invalid.""" + try: + return get_db_maintenance_interval_seconds(), "env" + except ValueError: + return DEFAULT_DB_MAINTENANCE_INTERVAL_SECONDS, "default-invalid-env-fallback" + + +def _describe_refresh_scope(server_slug: str | None) -> list[str]: + if server_slug: + return [server_slug] + return list(DEFAULT_HISTORICAL_SERVER_SCOPE) + + +def _describe_snapshot_scope(server_slug: str | None) -> list[str]: + if server_slug: + return [server_slug, "all-servers"] + return [*DEFAULT_HISTORICAL_SERVER_SCOPE, "all-servers"] + + +def _run_primary_rcon_capture() -> dict[str, Any]: + if get_historical_data_source_kind() != "rcon": + return { + "status": "skipped", + "reason": "historical-data-source-configured-without-rcon-primary", + } + return run_rcon_historical_capture() + + +def _resolve_classic_fallback_policy( + *, + server_slug: str | None, + run_number: int, + rcon_capture_result: dict[str, Any], +) -> tuple[bool, str]: + if get_historical_data_source_kind() != "rcon": + return True, "public-scoreboard-configured-as-primary-historical-source" + + if not _rcon_capture_has_usable_results(rcon_capture_result): + return True, "rcon-historical-capture-failed-or-returned-no-usable-targets" + + if server_slug: + return True, "manual-server-scope-still-needs-classic-historical-fallback" + + if run_number % get_historical_full_snapshot_every_runs() == 0: + return True, "periodic-classic-fallback-for-competitive-historical-coverage" + + return False, "rcon-primary-cycle-succeeded-without-needing-classic-fallback" + + +def _rcon_capture_has_usable_results(rcon_capture_result: dict[str, Any]) -> bool: + if rcon_capture_result.get("status") != "ok": + return False + targets = rcon_capture_result.get("targets") + return isinstance(targets, list) and len(targets) > 0 + + +def _rcon_capture_has_new_useful_data(rcon_capture_result: dict[str, Any]) -> bool: + if rcon_capture_result.get("status") != "ok": + return False + totals = rcon_capture_result.get("totals") + if isinstance(totals, dict) and int(totals.get("samples_inserted") or 0) > 0: + return True + if isinstance(totals, dict) and int(totals.get("admin_log_events_inserted") or 0) > 0: + return True + if isinstance(totals, dict) and int(totals.get("materialized_matches_inserted") or 0) > 0: + return True + targets = rcon_capture_result.get("targets") + if not isinstance(targets, list): + return False + return any(bool(target.get("sample_inserted")) for target in targets if isinstance(target, dict)) + + +def _build_elo_mmr_rebuild_policy( + *, + rcon_capture_result: dict[str, Any], +) -> dict[str, Any]: + interval_minutes = get_historical_elo_mmr_rebuild_interval_minutes() + min_new_samples = get_historical_elo_mmr_min_new_samples() + last_generated_at = get_latest_elo_mmr_generated_at() + last_generated_at_iso = ( + last_generated_at.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + if last_generated_at is not None + else None + ) + minutes_since_last_rebuild = None + if last_generated_at is not None: + minutes_since_last_rebuild = int( + max( + 0, + ( + datetime.now(timezone.utc) - last_generated_at.astimezone(timezone.utc) + ).total_seconds() // 60, + ) + ) + samples_since_last_rebuild = count_rcon_historical_samples_since(last_generated_at_iso) + due = ( + _rcon_capture_has_new_useful_data(rcon_capture_result) + and samples_since_last_rebuild >= min_new_samples + and ( + last_generated_at is None + or minutes_since_last_rebuild is None + or minutes_since_last_rebuild >= interval_minutes + ) + ) + return { + "policy": "min-new-rcon-samples-and-minutes-since-last-successful-rebuild", + "due": due, + "last_generated_at": last_generated_at_iso, + "samples_since_last_rebuild": samples_since_last_rebuild, + "minutes_since_last_rebuild": minutes_since_last_rebuild, + "rebuild_interval_minutes": interval_minutes, + "min_new_samples": min_new_samples, + } + + +def main() -> None: + """Allow local scheduled historical refresh execution without external infra.""" + parser = argparse.ArgumentParser( + description="Run periodic historical refreshes and regenerate snapshots for HLL Vietnam.", + ) + parser.add_argument( + "--interval", + type=int, + default=get_historical_refresh_interval_seconds(), + help="Seconds to wait between refresh-plus-snapshot runs.", + ) + parser.add_argument( + "--hourly", + action="store_true", + help="Shortcut for running the refresh loop every 3600 seconds.", + ) + parser.add_argument( + "--retries", + type=int, + default=get_historical_refresh_max_retries(), + help="Retry attempts after a failed incremental refresh.", + ) + parser.add_argument( + "--retry-delay", + type=float, + default=get_historical_refresh_retry_delay_seconds(), + help="Seconds to wait between failed attempts.", + ) + parser.add_argument( + "--server", + dest="server_slug", + help="Optional historical server slug.", + ) + parser.add_argument( + "--max-pages", + type=int, + default=None, + help="Optional page cap for local validation.", + ) + parser.add_argument( + "--page-size", + type=int, + default=None, + help="Optional override for CRCON page size.", + ) + parser.add_argument( + "--max-runs", + type=int, + default=None, + help="Optional safety limit for the number of refresh cycles to execute.", + ) + args = parser.parse_args() + + if args.hourly: + args.interval = HOURLY_INTERVAL_SECONDS + + if args.interval <= 0: + raise ValueError("--interval must be a positive integer.") + if args.retries < 0: + raise ValueError("--retries must be zero or positive.") + if args.retry_delay < 0: + raise ValueError("--retry-delay must be zero or positive.") + if args.max_runs is not None and args.max_runs <= 0: + raise ValueError("--max-runs must be positive when provided.") + + run_periodic_historical_refresh( + interval_seconds=args.interval, + max_retries=args.retries, + retry_delay_seconds=args.retry_delay, + server_slug=args.server_slug, + max_pages=args.max_pages, + page_size=args.page_size, + max_runs=args.max_runs, + ) + + +if __name__ == "__main__": + main() diff --git a/backend/app/historical_snapshot_storage.py b/backend/app/historical_snapshot_storage.py new file mode 100644 index 0000000..d81706c --- /dev/null +++ b/backend/app/historical_snapshot_storage.py @@ -0,0 +1,370 @@ +"""File-based persistence for precomputed historical snapshots.""" + +from __future__ import annotations + +import json +from datetime import datetime, timezone +from pathlib import Path + +from .config import get_storage_path, use_postgres_rcon_storage +from .historical_models import HistoricalSnapshotRecord +from .historical_snapshots import validate_snapshot_identity + + +SNAPSHOT_DIRECTORY_NAME = "snapshots" + + +def resolve_historical_snapshot_storage_path(*, db_path: Path | None = None) -> Path: + """Resolve the snapshot directory location without touching SQLite state.""" + resolved_db_path = db_path or get_storage_path() + return resolved_db_path.parent / SNAPSHOT_DIRECTORY_NAME + + +def initialize_historical_snapshot_storage(*, db_path: Path | None = None) -> Path: + """Create the snapshot directory used by precomputed historical payloads.""" + snapshots_root = resolve_historical_snapshot_storage_path(db_path=db_path) + snapshots_root.mkdir(parents=True, exist_ok=True) + return snapshots_root + + +def persist_historical_snapshot( + *, + server_key: str, + snapshot_type: str, + payload: dict[str, object] | list[object], + metric: str | None = None, + window: str | None = None, + generated_at: datetime | None = None, + source_range_start: datetime | None = None, + source_range_end: datetime | None = None, + is_stale: bool = False, + db_path: Path | None = None, +) -> HistoricalSnapshotRecord: + """Insert or replace one persisted historical snapshot JSON file.""" + normalized_server_key = server_key.strip() + if not normalized_server_key: + raise ValueError("server_key is required for historical snapshots.") + + validate_snapshot_identity(snapshot_type=snapshot_type, metric=metric) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import persist_snapshot_record + + return persist_snapshot_record( + { + "server_key": normalized_server_key, + "snapshot_type": snapshot_type, + "metric": metric, + "window": window, + "generated_at": generated_at or datetime.now(timezone.utc), + "source_range_start": source_range_start, + "source_range_end": source_range_end, + "is_stale": is_stale, + "payload": payload, + } + ) + snapshots_root = initialize_historical_snapshot_storage(db_path=db_path) + generated_at_value = _as_utc(generated_at or datetime.now(timezone.utc)) + payload_json = json.dumps(payload, ensure_ascii=True) + snapshot_path = _build_snapshot_path( + snapshots_root=snapshots_root, + server_key=normalized_server_key, + snapshot_type=snapshot_type, + metric=metric, + ) + snapshot_path.parent.mkdir(parents=True, exist_ok=True) + existing_document = _read_snapshot_document(snapshot_path) + + if _should_preserve_existing_snapshot( + incoming_payload=payload, + snapshot_type=snapshot_type, + existing_document=existing_document, + ): + preserved_payload = existing_document.get("payload") if existing_document else payload + return HistoricalSnapshotRecord( + server_key=normalized_server_key, + snapshot_type=snapshot_type, + metric=metric, + window=window, + payload_json=json.dumps(preserved_payload, ensure_ascii=True), + generated_at=_parse_optional_datetime(existing_document.get("generated_at")) + if existing_document + else generated_at_value, + source_range_start=_parse_optional_datetime( + existing_document.get("source_range_start") + ) + if existing_document + else _as_utc(source_range_start), + source_range_end=_parse_optional_datetime(existing_document.get("source_range_end")) + if existing_document + else _as_utc(source_range_end), + is_stale=bool(existing_document.get("is_stale", False)) if existing_document else is_stale, + ) + + snapshot_document = { + "server_key": normalized_server_key, + "snapshot_type": snapshot_type, + "metric": metric, + "window": window, + "generated_at": _to_iso(generated_at_value), + "source_range_start": _to_iso(source_range_start), + "source_range_end": _to_iso(source_range_end), + "is_stale": is_stale, + "payload": payload, + } + snapshot_path.write_text( + json.dumps(snapshot_document, ensure_ascii=True, indent=2) + "\n", + encoding="utf-8", + ) + + return HistoricalSnapshotRecord( + server_key=normalized_server_key, + snapshot_type=snapshot_type, + metric=metric, + window=window, + payload_json=payload_json, + generated_at=generated_at_value, + source_range_start=_as_utc(source_range_start), + source_range_end=_as_utc(source_range_end), + is_stale=is_stale, + ) + + +def persist_historical_snapshot_batch( + snapshots: list[dict[str, object]], + *, + db_path: Path | None = None, +) -> list[HistoricalSnapshotRecord]: + """Persist a batch of snapshots generated in one runner cycle.""" + records: list[HistoricalSnapshotRecord] = [] + for snapshot in snapshots: + records.append( + persist_historical_snapshot( + server_key=str(snapshot["server_key"]), + snapshot_type=str(snapshot["snapshot_type"]), + payload=snapshot["payload"], + metric=snapshot.get("metric"), + window=snapshot.get("window"), + generated_at=snapshot.get("generated_at"), + source_range_start=snapshot.get("source_range_start"), + source_range_end=snapshot.get("source_range_end"), + is_stale=bool(snapshot.get("is_stale", False)), + db_path=db_path, + ) + ) + return records + + +def get_historical_snapshot( + *, + server_key: str, + snapshot_type: str, + metric: str | None = None, + window: str | None = None, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return one persisted snapshot and decoded payload, if present.""" + validate_snapshot_identity(snapshot_type=snapshot_type, metric=metric) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import get_snapshot + + return get_snapshot( + server_key=server_key, + snapshot_type=snapshot_type, + metric=metric, + window=window, + ) + snapshots_root = resolve_historical_snapshot_storage_path(db_path=db_path) + snapshot_path = _build_snapshot_path( + snapshots_root=snapshots_root, + server_key=server_key, + snapshot_type=snapshot_type, + metric=metric, + ) + if not snapshot_path.exists(): + return None + + document = json.loads(snapshot_path.read_text(encoding="utf-8")) + return { + "server_key": document.get("server_key"), + "snapshot_type": document.get("snapshot_type"), + "metric": document.get("metric"), + "window": document.get("window"), + "generated_at": document.get("generated_at"), + "source_range_start": document.get("source_range_start"), + "source_range_end": document.get("source_range_end"), + "is_stale": bool(document.get("is_stale", False)), + "payload": document.get("payload"), + } + + +def list_historical_snapshots( + *, + server_key: str | None = None, + snapshot_type: str | None = None, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """List persisted snapshots for validation and operational inspection.""" + snapshots_root = resolve_historical_snapshot_storage_path(db_path=db_path) + if not snapshots_root.exists(): + return [] + if snapshot_type: + validate_snapshot_identity(snapshot_type=snapshot_type) + + rows: list[dict[str, object]] = [] + for snapshot_path in snapshots_root.glob("*/*.json"): + try: + document = json.loads(snapshot_path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + continue + + if server_key and document.get("server_key") != server_key: + continue + if snapshot_type and document.get("snapshot_type") != snapshot_type: + continue + + rows.append( + { + "server_key": document.get("server_key"), + "snapshot_type": document.get("snapshot_type"), + "metric": document.get("metric"), + "window": document.get("window"), + "generated_at": document.get("generated_at"), + "source_range_start": document.get("source_range_start"), + "source_range_end": document.get("source_range_end"), + "is_stale": bool(document.get("is_stale", False)), + } + ) + + return sorted( + rows, + key=lambda item: ( + str(item.get("server_key") or ""), + str(item.get("snapshot_type") or ""), + str(item.get("metric") or ""), + str(item.get("generated_at") or ""), + ), + ) + + +def _should_preserve_existing_snapshot( + *, + incoming_payload: dict[str, object] | list[object], + snapshot_type: str, + existing_document: dict[str, object] | None, +) -> bool: + if not _is_effectively_empty_snapshot_payload(snapshot_type, incoming_payload): + return False + if existing_document and not _is_effectively_empty_snapshot_payload( + snapshot_type, + existing_document.get("payload"), + ): + return True + return False + + +def _is_effectively_empty_snapshot_payload( + snapshot_type: str, + payload: object, +) -> bool: + if not isinstance(payload, dict): + return not payload + + if snapshot_type == "server-summary": + item = payload.get("item") + if not isinstance(item, dict): + return True + matches_count = item.get("imported_matches_count", item.get("matches_count", 0)) + return int(matches_count or 0) <= 0 + + if snapshot_type == "recent-matches": + items = payload.get("items") + return not isinstance(items, list) or len(items) == 0 + + if snapshot_type in { + "weekly-leaderboard", + "monthly-leaderboard", + "monthly-mvp", + "monthly-mvp-v2", + }: + items = payload.get("items") + return not isinstance(items, list) or len(items) == 0 + + return False +def _read_snapshot_document(snapshot_path: Path) -> dict[str, object] | None: + if not snapshot_path.exists(): + return None + try: + return json.loads(snapshot_path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + return None + + +def _build_snapshot_path( + *, + snapshots_root: Path, + server_key: str, + snapshot_type: str, + metric: str | None, +) -> Path: + return snapshots_root / server_key / _build_snapshot_filename( + snapshot_type=snapshot_type, + metric=metric, + ) + + +def _build_snapshot_filename(*, snapshot_type: str, metric: str | None) -> str: + if snapshot_type == "server-summary": + return "server-summary.json" + if snapshot_type == "recent-matches": + return "recent-matches.json" + if snapshot_type == "monthly-mvp-v2": + return "monthly-mvp-v2.json" + if snapshot_type == "player-event-most-killed": + return "player-events-most-killed.json" + if snapshot_type == "player-event-death-by": + return "player-events-death-by.json" + if snapshot_type == "player-event-duels": + return "player-events-duels.json" + if snapshot_type == "player-event-weapon-kills": + return "player-events-weapon-kills.json" + if snapshot_type == "player-event-teamkills": + return "player-events-teamkills.json" + if snapshot_type == "weekly-leaderboard": + metric_suffix = "matches-over-100-kills" if metric == "matches_over_100_kills" else _slugify(metric or "unknown") + return f"weekly-{metric_suffix}.json" + if snapshot_type == "monthly-leaderboard": + metric_suffix = "matches-over-100-kills" if metric == "matches_over_100_kills" else _slugify(metric or "unknown") + return f"monthly-{metric_suffix}.json" + if snapshot_type == "monthly-mvp": + return "monthly-mvp.json" + metric_suffix = _slugify(metric or "") + base_name = _slugify(snapshot_type) + return f"{base_name}-{metric_suffix}.json" if metric_suffix else f"{base_name}.json" + + +def _slugify(value: str) -> str: + return value.strip().replace("_", "-").replace(" ", "-").lower() + + +def _to_iso(value: datetime | None) -> str | None: + if value is None: + return None + return _as_utc(value).isoformat().replace("+00:00", "Z") + + +def _as_utc(value: datetime | None) -> datetime | None: + if value is None: + return None + if value.tzinfo is None: + return value.replace(tzinfo=timezone.utc) + return value.astimezone(timezone.utc) + + +def _parse_optional_datetime(value: object) -> datetime | None: + if not isinstance(value, str) or not value.strip(): + return None + normalized = value.strip().replace("Z", "+00:00") + parsed = datetime.fromisoformat(normalized) + if parsed.tzinfo is None: + return parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) diff --git a/backend/app/historical_snapshots.py b/backend/app/historical_snapshots.py new file mode 100644 index 0000000..f54c0dd --- /dev/null +++ b/backend/app/historical_snapshots.py @@ -0,0 +1,842 @@ +"""Definitions for persisted precomputed historical snapshots.""" + +from __future__ import annotations + +import json +import sqlite3 +from datetime import datetime, timezone +from pathlib import Path + +from .config import get_database_url, get_historical_data_source_kind +from .data_sources import SOURCE_KIND_RCON, get_rcon_historical_read_model +from .historical_storage import ( + ALL_SERVERS_SLUG, + list_historical_server_summaries, + list_historical_servers, + list_monthly_leaderboard, + list_monthly_mvp_ranking, + list_monthly_mvp_v2_ranking, + list_recent_historical_matches, + list_weekly_leaderboard, +) +from .player_event_aggregates import ( + list_death_by, + list_most_killed, + list_net_duel_summaries, + list_teamkill_summaries, + list_weapon_kills, +) +from .player_event_storage import initialize_player_event_storage + +SNAPSHOT_TYPE_SERVER_SUMMARY = "server-summary" +SNAPSHOT_TYPE_WEEKLY_LEADERBOARD = "weekly-leaderboard" +SNAPSHOT_TYPE_MONTHLY_LEADERBOARD = "monthly-leaderboard" +SNAPSHOT_TYPE_MONTHLY_MVP = "monthly-mvp" +SNAPSHOT_TYPE_MONTHLY_MVP_V2 = "monthly-mvp-v2" +SNAPSHOT_TYPE_RECENT_MATCHES = "recent-matches" +SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED = "player-event-most-killed" +SNAPSHOT_TYPE_PLAYER_EVENT_DEATH_BY = "player-event-death-by" +SNAPSHOT_TYPE_PLAYER_EVENT_DUELS = "player-event-duels" +SNAPSHOT_TYPE_PLAYER_EVENT_WEAPON_KILLS = "player-event-weapon-kills" +SNAPSHOT_TYPE_PLAYER_EVENT_TEAMKILLS = "player-event-teamkills" + +SUPPORTED_SNAPSHOT_TYPES = frozenset( + { + SNAPSHOT_TYPE_SERVER_SUMMARY, + SNAPSHOT_TYPE_WEEKLY_LEADERBOARD, + SNAPSHOT_TYPE_MONTHLY_LEADERBOARD, + SNAPSHOT_TYPE_MONTHLY_MVP, + SNAPSHOT_TYPE_MONTHLY_MVP_V2, + SNAPSHOT_TYPE_RECENT_MATCHES, + SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED, + SNAPSHOT_TYPE_PLAYER_EVENT_DEATH_BY, + SNAPSHOT_TYPE_PLAYER_EVENT_DUELS, + SNAPSHOT_TYPE_PLAYER_EVENT_WEAPON_KILLS, + SNAPSHOT_TYPE_PLAYER_EVENT_TEAMKILLS, + } +) + +SUPPORTED_LEADERBOARD_METRICS = frozenset( + { + "kills", + "deaths", + "support", + "matches_over_100_kills", + } +) +PREWARM_SNAPSHOT_SERVER_KEYS = ( + "comunidad-hispana-01", + "comunidad-hispana-02", + ALL_SERVERS_SLUG, +) +PREWARM_LEADERBOARD_METRICS = ("kills",) +SNAPSHOT_LEADERBOARD_METRICS = ( + "kills", + "deaths", + "matches_over_100_kills", + "support", +) +PLAYER_EVENT_SNAPSHOT_TYPES = ( + SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED, + SNAPSHOT_TYPE_PLAYER_EVENT_DEATH_BY, + SNAPSHOT_TYPE_PLAYER_EVENT_DUELS, + SNAPSHOT_TYPE_PLAYER_EVENT_WEAPON_KILLS, + SNAPSHOT_TYPE_PLAYER_EVENT_TEAMKILLS, +) + +DEFAULT_SNAPSHOT_WINDOW = "all-time" +DEFAULT_WEEKLY_SNAPSHOT_WINDOW = "7d" +DEFAULT_MONTHLY_SNAPSHOT_WINDOW = "month" +DEFAULT_WEEKLY_LEADERBOARD_LIMIT = 10 +DEFAULT_RECENT_MATCHES_LIMIT = 20 + + +def validate_snapshot_identity( + *, + snapshot_type: str, + metric: str | None = None, +) -> None: + """Validate the persisted snapshot selectors accepted by the storage layer.""" + if snapshot_type not in SUPPORTED_SNAPSHOT_TYPES: + raise ValueError(f"Unsupported historical snapshot type: {snapshot_type}") + + if snapshot_type in { + SNAPSHOT_TYPE_WEEKLY_LEADERBOARD, + SNAPSHOT_TYPE_MONTHLY_LEADERBOARD, + }: + if metric not in SUPPORTED_LEADERBOARD_METRICS: + raise ValueError(f"Unsupported historical snapshot metric: {metric}") + return + + if metric is not None: + raise ValueError( + "Metric is only supported for weekly-leaderboard and monthly-leaderboard." + ) + + +def list_snapshot_server_keys(*, db_path: Path | None = None) -> list[str]: + """Return the historical server slugs that should receive persisted snapshots.""" + server_keys = [ + str(item["slug"]) + for item in list_historical_servers(db_path=db_path) + if item.get("slug") + ] + server_keys.append(ALL_SERVERS_SLUG) + return server_keys + + +def build_historical_server_snapshots( + *, + server_key: str, + generated_at: datetime | None = None, + leaderboard_limit: int = DEFAULT_WEEKLY_LEADERBOARD_LIMIT, + recent_matches_limit: int = DEFAULT_RECENT_MATCHES_LIMIT, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Build all precomputed historical snapshots required for one server.""" + generated_at_value = _as_utc(generated_at or datetime.now(timezone.utc)) + leaderboard_limit = _normalize_snapshot_limit("leaderboard_limit", leaderboard_limit) + recent_matches_limit = _normalize_snapshot_limit( + "recent_matches_limit", + recent_matches_limit, + ) + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_SERVER_SUMMARY) + snapshots = [_build_server_summary_snapshot(server_key, generated_at_value, db_path=db_path)] + + for metric in SNAPSHOT_LEADERBOARD_METRICS: + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_WEEKLY_LEADERBOARD, metric=metric) + snapshots.append( + _build_weekly_leaderboard_snapshot( + server_key, + metric, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_MONTHLY_LEADERBOARD, metric=metric) + snapshots.append( + _build_monthly_leaderboard_snapshot( + server_key, + metric, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_MONTHLY_MVP) + snapshots.append( + _build_monthly_mvp_snapshot( + server_key, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_MONTHLY_MVP_V2) + snapshots.append( + _build_monthly_mvp_v2_snapshot( + server_key, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + for snapshot_type in PLAYER_EVENT_SNAPSHOT_TYPES: + _log_snapshot_build_started(server_key, snapshot_type) + snapshots.append( + _build_player_event_snapshot( + server_key, + snapshot_type, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_RECENT_MATCHES) + snapshots.append( + _build_recent_matches_snapshot( + server_key, + generated_at_value, + limit=recent_matches_limit, + db_path=db_path, + ) + ) + return snapshots + + +def build_priority_historical_snapshots( + *, + server_keys: tuple[str, ...] = PREWARM_SNAPSHOT_SERVER_KEYS, + generated_at: datetime | None = None, + leaderboard_limit: int = DEFAULT_WEEKLY_LEADERBOARD_LIMIT, + recent_matches_limit: int = DEFAULT_RECENT_MATCHES_LIMIT, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Build the minimum warm snapshot set required by the historical UI.""" + generated_at_value = _as_utc(generated_at or datetime.now(timezone.utc)) + leaderboard_limit = _normalize_snapshot_limit("leaderboard_limit", leaderboard_limit) + recent_matches_limit = _normalize_snapshot_limit( + "recent_matches_limit", + recent_matches_limit, + ) + snapshots: list[dict[str, object]] = [] + for server_key in server_keys: + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_SERVER_SUMMARY) + snapshots.append( + _build_server_summary_snapshot(server_key, generated_at_value, db_path=db_path) + ) + for metric in PREWARM_LEADERBOARD_METRICS: + _log_snapshot_build_started( + server_key, + SNAPSHOT_TYPE_WEEKLY_LEADERBOARD, + metric=metric, + ) + snapshots.append( + _build_weekly_leaderboard_snapshot( + server_key, + metric, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + _log_snapshot_build_started( + server_key, + SNAPSHOT_TYPE_MONTHLY_LEADERBOARD, + metric=metric, + ) + snapshots.append( + _build_monthly_leaderboard_snapshot( + server_key, + metric, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_MONTHLY_MVP) + snapshots.append( + _build_monthly_mvp_snapshot( + server_key, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_MONTHLY_MVP_V2) + snapshots.append( + _build_monthly_mvp_v2_snapshot( + server_key, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + for snapshot_type in PLAYER_EVENT_SNAPSHOT_TYPES: + _log_snapshot_build_started(server_key, snapshot_type) + snapshots.append( + _build_player_event_snapshot( + server_key, + snapshot_type, + generated_at_value, + limit=leaderboard_limit, + db_path=db_path, + ) + ) + _log_snapshot_build_started(server_key, SNAPSHOT_TYPE_RECENT_MATCHES) + snapshots.append( + _build_recent_matches_snapshot( + server_key, + generated_at_value, + limit=recent_matches_limit, + db_path=db_path, + ) + ) + return snapshots + + +def build_all_historical_snapshots( + *, + server_key: str | None = None, + generated_at: datetime | None = None, + leaderboard_limit: int = DEFAULT_WEEKLY_LEADERBOARD_LIMIT, + recent_matches_limit: int = DEFAULT_RECENT_MATCHES_LIMIT, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Build the full snapshot set for one server or for all configured servers.""" + target_server_keys = _resolve_snapshot_target_keys(server_key=server_key, db_path=db_path) + snapshots: list[dict[str, object]] = [] + for target_server_key in target_server_keys: + snapshots.extend( + build_historical_server_snapshots( + server_key=target_server_key, + generated_at=generated_at, + leaderboard_limit=leaderboard_limit, + recent_matches_limit=recent_matches_limit, + db_path=db_path, + ) + ) + return snapshots + + +def generate_and_persist_historical_snapshots( + *, + server_key: str | None = None, + generated_at: datetime | None = None, + leaderboard_limit: int = DEFAULT_WEEKLY_LEADERBOARD_LIMIT, + recent_matches_limit: int = DEFAULT_RECENT_MATCHES_LIMIT, + db_path: Path | None = None, +) -> dict[str, object]: + """Build and persist precomputed snapshots for one server or all servers.""" + from .historical_snapshot_storage import persist_historical_snapshot_batch + + generated_at_value = _as_utc(generated_at or datetime.now(timezone.utc)) + snapshots = build_all_historical_snapshots( + server_key=server_key, + generated_at=generated_at_value, + leaderboard_limit=leaderboard_limit, + recent_matches_limit=recent_matches_limit, + db_path=db_path, + ) + persisted_records = persist_historical_snapshot_batch(snapshots, db_path=db_path) + snapshots_by_server: dict[str, int] = {} + for record in persisted_records: + snapshots_by_server.setdefault(record.server_key, 0) + snapshots_by_server[record.server_key] += 1 + + return { + "generated_at": _to_iso(generated_at_value), + "server_slug": server_key, + "snapshot_policy": "full-matrix", + "snapshot_count": len(persisted_records), + "servers_processed": len(snapshots_by_server), + "snapshots_by_server": snapshots_by_server, + } + + +def generate_and_persist_priority_historical_snapshots( + *, + generated_at: datetime | None = None, + leaderboard_limit: int = DEFAULT_WEEKLY_LEADERBOARD_LIMIT, + recent_matches_limit: int = DEFAULT_RECENT_MATCHES_LIMIT, + db_path: Path | None = None, +) -> dict[str, object]: + """Build and persist the priority snapshot set used for prewarm.""" + from .historical_snapshot_storage import persist_historical_snapshot_batch + + generated_at_value = _as_utc(generated_at or datetime.now(timezone.utc)) + snapshots = build_priority_historical_snapshots( + generated_at=generated_at_value, + leaderboard_limit=leaderboard_limit, + recent_matches_limit=recent_matches_limit, + db_path=db_path, + ) + persisted_records = persist_historical_snapshot_batch(snapshots, db_path=db_path) + snapshots_by_server: dict[str, int] = {} + for record in persisted_records: + snapshots_by_server.setdefault(record.server_key, 0) + snapshots_by_server[record.server_key] += 1 + + return { + "generated_at": _to_iso(generated_at_value), + "server_slug": None, + "snapshot_policy": "priority-prewarm", + "prewarm_server_keys": list(PREWARM_SNAPSHOT_SERVER_KEYS), + "prewarm_metrics": list(PREWARM_LEADERBOARD_METRICS), + "snapshot_count": len(persisted_records), + "servers_processed": len(snapshots_by_server), + "snapshots_by_server": snapshots_by_server, + } + + +def _build_server_summary_snapshot( + server_key: str, + generated_at: datetime, + *, + db_path: Path | None = None, +) -> dict[str, object]: + if get_historical_data_source_kind() == SOURCE_KIND_RCON: + data_source = get_rcon_historical_read_model() + summary_items = ( + data_source.list_server_summaries(server_key=server_key) + if data_source is not None + else [] + ) + else: + summary_items = list_historical_server_summaries(server_slug=server_key, db_path=db_path) + summary_item = summary_items[0] if summary_items else {} + time_range = summary_item.get("time_range") if isinstance(summary_item, dict) else {} + return { + "server_key": server_key, + "snapshot_type": SNAPSHOT_TYPE_SERVER_SUMMARY, + "metric": None, + "window": DEFAULT_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": _parse_optional_timestamp(time_range.get("start")), + "source_range_end": _parse_optional_timestamp(time_range.get("end")), + "is_stale": False, + "payload": { + "server_key": server_key, + "generated_at": _to_iso(generated_at), + "item": summary_item, + }, + } + + +def _build_weekly_leaderboard_snapshot( + server_key: str, + metric: str, + generated_at: datetime, + *, + limit: int, + db_path: Path | None = None, +) -> dict[str, object]: + if get_historical_data_source_kind() == SOURCE_KIND_RCON: + from .rcon_historical_leaderboards import list_rcon_materialized_leaderboard + + leaderboard_result = list_rcon_materialized_leaderboard( + limit=limit, + server_key=server_key, + metric=metric, + timeframe="weekly", + db_path=db_path, + now=generated_at, + ) + else: + leaderboard_result = list_weekly_leaderboard( + limit=limit, + server_id=server_key, + metric=metric, + db_path=db_path, + ) + return { + "server_key": server_key, + "snapshot_type": SNAPSHOT_TYPE_WEEKLY_LEADERBOARD, + "metric": metric, + "window": DEFAULT_WEEKLY_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": _parse_optional_timestamp(leaderboard_result.get("window_start")), + "source_range_end": _parse_optional_timestamp(leaderboard_result.get("window_end")), + "is_stale": False, + "payload": { + "server_key": server_key, + "metric": metric, + "limit": limit, + "generated_at": _to_iso(generated_at), + **leaderboard_result, + }, + } + + +def _build_monthly_leaderboard_snapshot( + server_key: str, + metric: str, + generated_at: datetime, + *, + limit: int, + db_path: Path | None = None, +) -> dict[str, object]: + if get_historical_data_source_kind() == SOURCE_KIND_RCON: + from .rcon_historical_leaderboards import list_rcon_materialized_leaderboard + + leaderboard_result = list_rcon_materialized_leaderboard( + limit=limit, + server_key=server_key, + metric=metric, + timeframe="monthly", + db_path=db_path, + now=generated_at, + ) + else: + leaderboard_result = list_monthly_leaderboard( + limit=limit, + server_id=server_key, + metric=metric, + db_path=db_path, + ) + return { + "server_key": server_key, + "snapshot_type": SNAPSHOT_TYPE_MONTHLY_LEADERBOARD, + "metric": metric, + "window": DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": _parse_optional_timestamp(leaderboard_result.get("window_start")), + "source_range_end": _parse_optional_timestamp(leaderboard_result.get("window_end")), + "is_stale": False, + "payload": { + "server_key": server_key, + "metric": metric, + "limit": limit, + "generated_at": _to_iso(generated_at), + **leaderboard_result, + }, + } + + +def _build_recent_matches_snapshot( + server_key: str, + generated_at: datetime, + *, + limit: int, + db_path: Path | None = None, +) -> dict[str, object]: + if get_historical_data_source_kind() == SOURCE_KIND_RCON: + data_source = get_rcon_historical_read_model() + items = ( + data_source.list_recent_activity(server_key=server_key, limit=limit) + if data_source is not None + else [] + ) + else: + items = list_recent_historical_matches( + limit=limit, + server_slug=server_key, + db_path=db_path, + ) + closed_points = [ + _parse_optional_timestamp(item.get("closed_at")) + for item in items + if isinstance(item, dict) and item.get("closed_at") + ] + return { + "server_key": server_key, + "snapshot_type": SNAPSHOT_TYPE_RECENT_MATCHES, + "metric": None, + "window": DEFAULT_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": min(closed_points) if closed_points else None, + "source_range_end": max(closed_points) if closed_points else None, + "is_stale": False, + "payload": { + "server_key": server_key, + "limit": limit, + "generated_at": _to_iso(generated_at), + "items": items, + }, + } + + +def _build_player_event_snapshot( + server_key: str, + snapshot_type: str, + generated_at: datetime, + *, + limit: int, + db_path: Path | None = None, +) -> dict[str, object]: + month_key = _get_latest_player_event_month_key(server_key=server_key, db_path=db_path) + source_range_start = None + source_range_end = None + items: list[dict[str, object]] = [] + found = False + + if month_key: + source_range_start, source_range_end = _get_player_event_source_range( + server_key=server_key, + month_key=month_key, + db_path=db_path, + ) + items = _list_player_event_snapshot_items( + snapshot_type=snapshot_type, + server_key=server_key, + month_key=month_key, + limit=limit, + db_path=db_path, + ) + found = bool(items or source_range_start or source_range_end) + + return { + "server_key": server_key, + "snapshot_type": snapshot_type, + "metric": None, + "window": DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": source_range_start, + "source_range_end": source_range_end, + "is_stale": False, + "payload": { + "server_key": server_key, + "period": "monthly", + "month_key": month_key, + "limit": limit, + "found": found, + "generated_at": _to_iso(generated_at), + "source_range_start": _to_iso(source_range_start) if source_range_start else None, + "source_range_end": _to_iso(source_range_end) if source_range_end else None, + "items": items, + }, + } + + +def _build_monthly_mvp_snapshot( + server_key: str, + generated_at: datetime, + *, + limit: int, + db_path: Path | None = None, +) -> dict[str, object]: + ranking_result = list_monthly_mvp_ranking( + limit=limit, + server_id=server_key, + db_path=db_path, + ) + month_key = str(ranking_result.get("window_start") or "")[:7] or None + return { + "server_key": server_key, + "snapshot_type": SNAPSHOT_TYPE_MONTHLY_MVP, + "metric": None, + "window": DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": _parse_optional_timestamp(ranking_result.get("window_start")), + "source_range_end": _parse_optional_timestamp(ranking_result.get("window_end")), + "is_stale": False, + "payload": { + "server_key": server_key, + "limit": limit, + "month_key": month_key, + "generated_at": _to_iso(generated_at), + **ranking_result, + }, + } + + +def _build_monthly_mvp_v2_snapshot( + server_key: str, + generated_at: datetime, + *, + limit: int, + db_path: Path | None = None, +) -> dict[str, object]: + ranking_result = list_monthly_mvp_v2_ranking( + limit=limit, + server_id=server_key, + db_path=db_path, + ) + month_key = str(ranking_result.get("window_start") or "")[:7] or None + event_coverage = ranking_result.get("event_coverage") + source_range_start = None + source_range_end = None + if isinstance(event_coverage, dict): + source_range_start = _parse_optional_timestamp(event_coverage.get("source_range_start")) + source_range_end = _parse_optional_timestamp(event_coverage.get("source_range_end")) + return { + "server_key": server_key, + "snapshot_type": SNAPSHOT_TYPE_MONTHLY_MVP_V2, + "metric": None, + "window": DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + "generated_at": generated_at, + "source_range_start": source_range_start, + "source_range_end": source_range_end, + "is_stale": False, + "payload": { + "server_key": server_key, + "limit": limit, + "month_key": month_key, + "found": bool(event_coverage.get("ready")) if isinstance(event_coverage, dict) else False, + "generated_at": _to_iso(generated_at), + **ranking_result, + }, + } + + +def _resolve_snapshot_target_keys( + *, + server_key: str | None, + db_path: Path | None = None, +) -> list[str]: + """Expand targeted rebuilds so the logical global aggregate stays in sync.""" + if not server_key: + return list_snapshot_server_keys(db_path=db_path) + + normalized_server_key = server_key.strip() + if not normalized_server_key: + return list_snapshot_server_keys(db_path=db_path) + if normalized_server_key == ALL_SERVERS_SLUG: + return [ALL_SERVERS_SLUG] + + return [normalized_server_key, ALL_SERVERS_SLUG] + + +def _list_player_event_snapshot_items( + *, + snapshot_type: str, + server_key: str, + month_key: str, + limit: int, + db_path: Path | None, +) -> list[dict[str, object]]: + aggregator_by_snapshot_type = { + SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED: list_most_killed, + SNAPSHOT_TYPE_PLAYER_EVENT_DEATH_BY: list_death_by, + SNAPSHOT_TYPE_PLAYER_EVENT_DUELS: list_net_duel_summaries, + SNAPSHOT_TYPE_PLAYER_EVENT_WEAPON_KILLS: list_weapon_kills, + SNAPSHOT_TYPE_PLAYER_EVENT_TEAMKILLS: list_teamkill_summaries, + } + aggregator = aggregator_by_snapshot_type[snapshot_type] + return aggregator( + server_slug=server_key, + month=month_key, + limit=limit, + db_path=db_path, + ) + + +def _get_latest_player_event_month_key( + *, + server_key: str, + db_path: Path | None = None, +) -> str | None: + resolved_path = initialize_player_event_storage(db_path=db_path) + where_sql, params = _build_player_event_scope_where(server_key=server_key) + with _connect(resolved_path) as connection: + row = connection.execute( + f""" + SELECT MAX(substr(CAST(occurred_at AS TEXT), 1, 7)) AS latest_month + FROM player_event_raw_ledger + WHERE occurred_at IS NOT NULL + AND {where_sql} + """, + params, + ).fetchone() + if not row or not row["latest_month"]: + return None + return str(row["latest_month"]) + + +def _get_player_event_source_range( + *, + server_key: str, + month_key: str, + db_path: Path | None = None, +) -> tuple[datetime | None, datetime | None]: + resolved_path = initialize_player_event_storage(db_path=db_path) + where_sql, params = _build_player_event_scope_where(server_key=server_key) + with _connect(resolved_path) as connection: + row = connection.execute( + f""" + SELECT + MIN(occurred_at) AS source_range_start, + MAX(occurred_at) AS source_range_end + FROM player_event_raw_ledger + WHERE occurred_at IS NOT NULL + AND substr(CAST(occurred_at AS TEXT), 1, 7) = ? + AND {where_sql} + """, + [month_key, *params], + ).fetchone() + if not row: + return None, None + return ( + _parse_optional_timestamp(row["source_range_start"]), + _parse_optional_timestamp(row["source_range_end"]), + ) + + +def _build_player_event_scope_where(*, server_key: str) -> tuple[str, list[object]]: + if server_key == ALL_SERVERS_SLUG: + return "1 = 1", [] + return "server_slug = ?", [server_key] + + +def _connect(db_path: Path) -> sqlite3.Connection: + if get_database_url(): + from .postgres_display_storage import connect_postgres_compat + + return connect_postgres_compat() + connection = sqlite3.connect(db_path) + connection.row_factory = sqlite3.Row + return connection + + +def _parse_optional_timestamp(value: object) -> datetime | None: + if not isinstance(value, str) or not value.strip(): + return None + normalized = value.strip().replace("Z", "+00:00") + parsed = datetime.fromisoformat(normalized) + if parsed.tzinfo is None: + return parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _as_utc(value: datetime) -> datetime: + if value.tzinfo is None: + return value.replace(tzinfo=timezone.utc) + return value.astimezone(timezone.utc) + + +def _to_iso(value: datetime) -> str: + return _as_utc(value).isoformat().replace("+00:00", "Z") + + +def _normalize_snapshot_limit(name: str, value: object) -> int: + try: + limit = int(value) + except (TypeError, ValueError) as error: + raise ValueError(f"{name} must be a positive integer.") from error + if limit <= 0: + raise ValueError(f"{name} must be a positive integer.") + return limit + + +def _log_snapshot_build_started( + server_key: str, + snapshot_type: str, + *, + metric: str | None = None, +) -> None: + print( + json.dumps( + { + "event": "historical-snapshot-build-started", + "server_key": server_key, + "snapshot_type": snapshot_type, + "metric": metric, + }, + ensure_ascii=True, + default=str, + ), + flush=True, + ) diff --git a/backend/app/historical_storage.py b/backend/app/historical_storage.py new file mode 100644 index 0000000..db7dd57 --- /dev/null +++ b/backend/app/historical_storage.py @@ -0,0 +1,3325 @@ +"""SQLite persistence for historical CRCON scoreboard data.""" + +from __future__ import annotations + +import sqlite3 +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Mapping + +from .config import ( + get_historical_refresh_overlap_hours, + get_historical_weekly_fallback_max_weekday, + get_historical_weekly_fallback_min_matches, + get_storage_path, + use_postgres_rcon_storage, +) +from .historical_models import HistoricalServerDefinition +from .monthly_mvp import build_monthly_mvp_rankings +from .monthly_mvp_v2 import build_monthly_mvp_v2_rankings +from .player_external_profiles import build_external_player_profile_fields +from .scoreboard_origins import ( + list_trusted_public_scoreboard_origins, + resolve_trusted_scoreboard_match_url, +) +from .sqlite_utils import connect_sqlite_writer + + +DEFAULT_HISTORICAL_SERVERS = tuple( + HistoricalServerDefinition( + slug=origin.slug, + display_name=origin.display_name, + scoreboard_base_url=origin.base_url, + server_number=origin.server_number, + source_kind=origin.source_kind, + ) + for origin in list_trusted_public_scoreboard_origins() +) +ALL_SERVERS_SLUG = "all-servers" +ALL_SERVERS_DISPLAY_NAME = "Todos" +DEFAULT_WEEKLY_WINDOW_DAYS = 7 +SUPPORTED_WEEKLY_LEADERBOARD_METRICS = frozenset( + { + "kills", + "deaths", + "support", + "matches_over_100_kills", + } +) +SUPPORTED_MONTHLY_LEADERBOARD_METRICS = SUPPORTED_WEEKLY_LEADERBOARD_METRICS + + +def initialize_historical_storage(*, db_path: Path | None = None) -> Path: + """Create or migrate the local SQLite schema for historical data.""" + resolved_path = db_path or get_storage_path() + resolved_path.parent.mkdir(parents=True, exist_ok=True) + + with _connect(resolved_path) as connection: + legacy_historical_schema = _has_legacy_historical_schema(connection) + if legacy_historical_schema: + _rename_legacy_historical_tables(connection) + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS historical_servers ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + slug TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + scoreboard_base_url TEXT NOT NULL UNIQUE, + server_number INTEGER, + source_kind TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS historical_maps ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + external_map_id TEXT UNIQUE, + map_name TEXT, + pretty_name TEXT, + game_mode TEXT, + image_name TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS historical_matches ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + historical_server_id INTEGER NOT NULL, + external_match_id TEXT NOT NULL, + historical_map_id INTEGER, + created_at_source TEXT, + started_at TEXT, + ended_at TEXT, + map_name TEXT, + map_pretty_name TEXT, + game_mode TEXT, + image_name TEXT, + allied_score INTEGER, + axis_score INTEGER, + last_seen_at TEXT NOT NULL, + raw_payload_ref TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(historical_server_id, external_match_id), + FOREIGN KEY (historical_server_id) REFERENCES historical_servers(id), + FOREIGN KEY (historical_map_id) REFERENCES historical_maps(id) + ); + + CREATE TABLE IF NOT EXISTS historical_players ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + stable_player_key TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + steam_id TEXT, + source_player_id TEXT, + first_seen_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS historical_player_match_stats ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + historical_match_id INTEGER NOT NULL, + historical_player_id INTEGER NOT NULL, + match_player_ref TEXT, + team_side TEXT, + level INTEGER, + kills INTEGER, + deaths INTEGER, + teamkills INTEGER, + time_seconds INTEGER, + kills_per_minute REAL, + deaths_per_minute REAL, + kill_death_ratio REAL, + combat INTEGER, + offense INTEGER, + defense INTEGER, + support INTEGER, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(historical_match_id, historical_player_id), + FOREIGN KEY (historical_match_id) REFERENCES historical_matches(id), + FOREIGN KEY (historical_player_id) REFERENCES historical_players(id) + ); + + CREATE TABLE IF NOT EXISTS historical_ingestion_runs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + mode TEXT NOT NULL, + status TEXT NOT NULL, + started_at TEXT NOT NULL, + completed_at TEXT, + target_server_slug TEXT, + pages_processed INTEGER NOT NULL DEFAULT 0, + matches_seen INTEGER NOT NULL DEFAULT 0, + matches_inserted INTEGER NOT NULL DEFAULT 0, + matches_updated INTEGER NOT NULL DEFAULT 0, + player_rows_inserted INTEGER NOT NULL DEFAULT 0, + player_rows_updated INTEGER NOT NULL DEFAULT 0, + notes TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS historical_backfill_progress ( + historical_server_id INTEGER NOT NULL, + mode TEXT NOT NULL, + next_page INTEGER NOT NULL DEFAULT 1, + last_completed_page INTEGER, + discovered_total_matches INTEGER, + discovered_total_pages INTEGER, + archive_exhausted INTEGER NOT NULL DEFAULT 0, + last_run_id INTEGER, + last_run_status TEXT, + last_run_started_at TEXT, + last_run_completed_at TEXT, + last_error TEXT, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (historical_server_id, mode), + FOREIGN KEY (historical_server_id) REFERENCES historical_servers(id) + ); + + CREATE INDEX IF NOT EXISTS idx_historical_matches_server_end + ON historical_matches(historical_server_id, ended_at DESC, started_at DESC); + + CREATE INDEX IF NOT EXISTS idx_historical_player_stats_match + ON historical_player_match_stats(historical_match_id); + + CREATE INDEX IF NOT EXISTS idx_historical_players_steam + ON historical_players(steam_id); + + CREATE INDEX IF NOT EXISTS idx_historical_backfill_progress_run + ON historical_backfill_progress(last_run_id); + """ + ) + _seed_default_historical_servers(connection) + if legacy_historical_schema: + _migrate_legacy_historical_data(connection) + _normalize_historical_player_identities(connection) + _normalize_historical_match_identities(connection) + + return resolved_path + + +def list_historical_servers(*, db_path: Path | None = None) -> list[dict[str, object]]: + """Return configured CRCON historical sources.""" + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + rows = connection.execute( + """ + SELECT slug, display_name, scoreboard_base_url, server_number, source_kind + FROM historical_servers + ORDER BY slug ASC + """ + ).fetchall() + return [dict(row) for row in rows] + + +def start_ingestion_run( + *, + mode: str, + target_server_slug: str | None = None, + db_path: Path | None = None, +) -> int: + """Create a row tracking one ingestion execution.""" + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + cursor = connection.execute( + """ + INSERT INTO historical_ingestion_runs ( + mode, + status, + started_at, + target_server_slug + ) VALUES (?, 'running', ?, ?) + """, + (mode, _utc_now_iso(), target_server_slug), + ) + return int(cursor.lastrowid) + + +def finalize_ingestion_run( + run_id: int, + *, + status: str, + pages_processed: int, + matches_seen: int, + matches_inserted: int, + matches_updated: int, + player_rows_inserted: int, + player_rows_updated: int, + notes: str | None = None, + db_path: Path | None = None, +) -> None: + """Update an ingestion run row with outcome metrics.""" + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + connection.execute( + """ + UPDATE historical_ingestion_runs + SET status = ?, + completed_at = ?, + pages_processed = ?, + matches_seen = ?, + matches_inserted = ?, + matches_updated = ?, + player_rows_inserted = ?, + player_rows_updated = ?, + notes = ? + WHERE id = ? + """, + ( + status, + _utc_now_iso(), + pages_processed, + matches_seen, + matches_inserted, + matches_updated, + player_rows_inserted, + player_rows_updated, + notes, + run_id, + ), + ) + + +def mark_backfill_progress_started( + *, + server_slug: str, + mode: str, + run_id: int, + db_path: Path | None = None, +) -> None: + """Persist the start of one resumable historical backfill attempt.""" + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + server_row = _resolve_historical_server(connection, server_slug) + connection.execute( + """ + INSERT INTO historical_backfill_progress ( + historical_server_id, + mode, + next_page, + archive_exhausted, + last_run_id, + last_run_status, + last_run_started_at, + last_run_completed_at, + last_error + ) VALUES (?, ?, 1, 0, ?, 'running', ?, NULL, NULL) + ON CONFLICT(historical_server_id, mode) DO UPDATE SET + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_run_started_at = excluded.last_run_started_at, + last_run_completed_at = NULL, + last_error = NULL, + archive_exhausted = CASE + WHEN excluded.mode = 'bootstrap' THEN 0 + ELSE historical_backfill_progress.archive_exhausted + END, + updated_at = CURRENT_TIMESTAMP + """, + (server_row["id"], mode, run_id, _utc_now_iso()), + ) + + +def mark_backfill_progress_page_completed( + *, + server_slug: str, + mode: str, + page_number: int, + page_size: int, + run_id: int, + discovered_total_matches: int | None, + db_path: Path | None = None, +) -> None: + """Persist the latest completed page so bootstraps can resume safely.""" + resolved_path = initialize_historical_storage(db_path=db_path) + discovered_total_pages = None + if discovered_total_matches and page_size > 0: + discovered_total_pages = (discovered_total_matches + page_size - 1) // page_size + + with _connect(resolved_path) as connection: + server_row = _resolve_historical_server(connection, server_slug) + connection.execute( + """ + INSERT INTO historical_backfill_progress ( + historical_server_id, + mode, + next_page, + last_completed_page, + discovered_total_matches, + discovered_total_pages, + archive_exhausted, + last_run_id, + last_run_status, + last_run_started_at, + last_run_completed_at, + last_error + ) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, NULL, NULL) + ON CONFLICT(historical_server_id, mode) DO UPDATE SET + next_page = excluded.next_page, + last_completed_page = excluded.last_completed_page, + discovered_total_matches = COALESCE( + excluded.discovered_total_matches, + historical_backfill_progress.discovered_total_matches + ), + discovered_total_pages = COALESCE( + excluded.discovered_total_pages, + historical_backfill_progress.discovered_total_pages + ), + archive_exhausted = 0, + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_run_started_at = excluded.last_run_started_at, + last_run_completed_at = NULL, + last_error = NULL, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_row["id"], + mode, + page_number + 1, + page_number, + discovered_total_matches, + discovered_total_pages, + run_id, + "running", + _utc_now_iso(), + ), + ) + + +def finalize_backfill_progress( + *, + server_slug: str, + mode: str, + run_id: int, + status: str, + archive_exhausted: bool = False, + error_message: str | None = None, + db_path: Path | None = None, +) -> None: + """Persist the final state of one resumable historical backfill attempt.""" + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + server_row = _resolve_historical_server(connection, server_slug) + connection.execute( + """ + INSERT INTO historical_backfill_progress ( + historical_server_id, + mode, + next_page, + archive_exhausted, + last_run_id, + last_run_status, + last_run_started_at, + last_run_completed_at, + last_error + ) VALUES (?, ?, 1, ?, ?, ?, ?, ?, ?) + ON CONFLICT(historical_server_id, mode) DO UPDATE SET + archive_exhausted = CASE + WHEN excluded.last_run_status = 'success' AND excluded.archive_exhausted = 1 + THEN 1 + WHEN excluded.last_run_status = 'success' + THEN historical_backfill_progress.archive_exhausted + ELSE historical_backfill_progress.archive_exhausted + END, + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_run_started_at = COALESCE( + historical_backfill_progress.last_run_started_at, + excluded.last_run_started_at + ), + last_run_completed_at = excluded.last_run_completed_at, + last_error = excluded.last_error, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_row["id"], + mode, + 1 if archive_exhausted else 0, + run_id, + status, + _utc_now_iso(), + _utc_now_iso(), + error_message, + ), + ) + + +def get_backfill_resume_page( + server_slug: str, + *, + mode: str = "bootstrap", + db_path: Path | None = None, +) -> int: + """Return the next page recorded for one resumable historical backfill.""" + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + server_row = _resolve_historical_server(connection, server_slug) + row = connection.execute( + """ + SELECT next_page + FROM historical_backfill_progress + WHERE historical_server_id = ? AND mode = ? + """, + (server_row["id"], mode), + ).fetchone() + return max(1, int(row["next_page"])) if row and row["next_page"] else 1 + + +def list_historical_backfill_progress( + *, + server_slug: str | None = None, + mode: str = "bootstrap", + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return persisted resume checkpoints and last run state per server.""" + resolved_path = initialize_historical_storage(db_path=db_path) + where_clause = "" + params: list[object] = [mode] + if server_slug: + where_clause = "WHERE historical_servers.slug = ?" + params.append(server_slug) + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + progress.mode AS mode, + progress.next_page AS next_page, + progress.last_completed_page AS last_completed_page, + progress.discovered_total_matches AS discovered_total_matches, + progress.discovered_total_pages AS discovered_total_pages, + progress.archive_exhausted AS archive_exhausted, + progress.last_run_id AS last_run_id, + progress.last_run_status AS last_run_status, + progress.last_run_started_at AS last_run_started_at, + progress.last_run_completed_at AS last_run_completed_at, + progress.last_error AS last_error + FROM historical_servers + LEFT JOIN historical_backfill_progress AS progress + ON progress.historical_server_id = historical_servers.id + AND progress.mode = ? + {where_clause} + ORDER BY historical_servers.server_number ASC, historical_servers.slug ASC + """, + params, + ).fetchall() + + items: list[dict[str, object]] = [] + for row in rows: + items.append( + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "mode": row["mode"] or mode, + "next_page": int(row["next_page"] or 1), + "last_completed_page": _coerce_int(row["last_completed_page"]), + "discovered_total_matches": _coerce_int(row["discovered_total_matches"]), + "discovered_total_pages": _coerce_int(row["discovered_total_pages"]), + "archive_exhausted": bool(row["archive_exhausted"]), + "last_run": { + "run_id": _coerce_int(row["last_run_id"]), + "status": _stringify(row["last_run_status"]), + "started_at": _stringify(row["last_run_started_at"]), + "completed_at": _stringify(row["last_run_completed_at"]), + "error": _stringify(row["last_error"]), + }, + } + ) + return items + + +def upsert_historical_match( + *, + server_slug: str, + match_payload: Mapping[str, object], + db_path: Path | None = None, +) -> dict[str, int]: + """Persist one historical match and its player stats idempotently.""" + resolved_path = initialize_historical_storage(db_path=db_path) + match_external_id = _stringify(match_payload.get("id")) + if not match_external_id: + raise ValueError("Historical match payload is missing a stable id.") + + with _connect(resolved_path) as connection: + server_row = _resolve_historical_server(connection, server_slug) + map_id = _upsert_historical_map(connection, match_payload) + match_row = connection.execute( + """ + SELECT id + FROM historical_matches + WHERE historical_server_id = ? AND external_match_id = ? + """, + (server_row["id"], match_external_id), + ).fetchone() + match_exists = match_row is not None + + connection.execute( + """ + INSERT INTO historical_matches ( + historical_server_id, + external_match_id, + historical_map_id, + created_at_source, + started_at, + ended_at, + map_name, + map_pretty_name, + game_mode, + image_name, + allied_score, + axis_score, + last_seen_at, + raw_payload_ref + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(historical_server_id, external_match_id) DO UPDATE SET + historical_map_id = excluded.historical_map_id, + created_at_source = excluded.created_at_source, + started_at = excluded.started_at, + ended_at = excluded.ended_at, + map_name = excluded.map_name, + map_pretty_name = excluded.map_pretty_name, + game_mode = excluded.game_mode, + image_name = excluded.image_name, + allied_score = excluded.allied_score, + axis_score = excluded.axis_score, + last_seen_at = excluded.last_seen_at, + raw_payload_ref = excluded.raw_payload_ref, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_row["id"], + match_external_id, + map_id, + _normalize_timestamp(match_payload.get("creation_time")), + _normalize_timestamp(match_payload.get("start")), + _normalize_timestamp(match_payload.get("end")), + _extract_map_name(match_payload), + _extract_map_pretty_name(match_payload), + _extract_map_game_mode(match_payload), + _extract_map_image_name(match_payload), + _coerce_int(_get_nested(match_payload, "result", "allied")), + _coerce_int(_get_nested(match_payload, "result", "axis")), + _utc_now_iso(), + f"{server_row['scoreboard_base_url']}/games/{match_external_id}", + ), + ) + match_id_row = connection.execute( + """ + SELECT id + FROM historical_matches + WHERE historical_server_id = ? AND external_match_id = ? + """, + (server_row["id"], match_external_id), + ).fetchone() + if match_id_row is None: + raise RuntimeError("Failed to persist historical match.") + + player_rows_inserted = 0 + player_rows_updated = 0 + for player_payload in _coerce_list(match_payload.get("player_stats")): + player_id = _upsert_historical_player(connection, player_payload) + stat_exists = connection.execute( + """ + SELECT id + FROM historical_player_match_stats + WHERE historical_match_id = ? AND historical_player_id = ? + """, + (match_id_row["id"], player_id), + ).fetchone() + connection.execute( + """ + INSERT INTO historical_player_match_stats ( + historical_match_id, + historical_player_id, + match_player_ref, + team_side, + level, + kills, + deaths, + teamkills, + time_seconds, + kills_per_minute, + deaths_per_minute, + kill_death_ratio, + combat, + offense, + defense, + support + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(historical_match_id, historical_player_id) DO UPDATE SET + match_player_ref = excluded.match_player_ref, + team_side = excluded.team_side, + level = excluded.level, + kills = excluded.kills, + deaths = excluded.deaths, + teamkills = excluded.teamkills, + time_seconds = excluded.time_seconds, + kills_per_minute = excluded.kills_per_minute, + deaths_per_minute = excluded.deaths_per_minute, + kill_death_ratio = excluded.kill_death_ratio, + combat = excluded.combat, + offense = excluded.offense, + defense = excluded.defense, + support = excluded.support, + updated_at = CURRENT_TIMESTAMP + """, + ( + match_id_row["id"], + player_id, + _stringify(player_payload.get("id")), + _stringify(_get_nested(player_payload, "team", "side")), + _coerce_int(player_payload.get("level")), + _coerce_int(player_payload.get("kills")), + _coerce_int(player_payload.get("deaths")), + _coerce_int(player_payload.get("teamkills")), + _coerce_int(player_payload.get("time_seconds")), + _coerce_float(player_payload.get("kills_per_minute")), + _coerce_float(player_payload.get("deaths_per_minute")), + _coerce_float(player_payload.get("kill_death_ratio")), + _coerce_int(player_payload.get("combat")), + _coerce_int(player_payload.get("offense")), + _coerce_int(player_payload.get("defense")), + _coerce_int(player_payload.get("support")), + ), + ) + if stat_exists is None: + player_rows_inserted += 1 + else: + player_rows_updated += 1 + + return { + "matches_inserted": 0 if match_exists else 1, + "matches_updated": 1 if match_exists else 0, + "player_rows_inserted": player_rows_inserted, + "player_rows_updated": player_rows_updated, + } + + +def get_refresh_cutoff_for_server( + server_slug: str, + *, + overlap_hours: int | None = None, + db_path: Path | None = None, +) -> str | None: + """Return the timestamp used to stop incremental scans once older pages appear.""" + resolved_overlap_hours = ( + get_historical_refresh_overlap_hours() + if overlap_hours is None + else overlap_hours + ) + if resolved_overlap_hours < 0: + raise ValueError("overlap_hours must be zero or positive.") + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + server_row = _resolve_historical_server(connection, server_slug) + row = connection.execute( + """ + SELECT COALESCE(MAX(ended_at), MAX(started_at), MAX(created_at_source)) AS latest_seen_at + FROM historical_matches + WHERE historical_server_id = ? + """, + (server_row["id"],), + ).fetchone() + latest_seen_at = _stringify(row["latest_seen_at"] if row else None) + if not latest_seen_at: + return None + + cutoff = _parse_timestamp(latest_seen_at) - timedelta(hours=resolved_overlap_hours) + return cutoff.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +def list_recent_historical_matches( + *, + server_slug: str | None = None, + limit: int = 20, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return recent persisted matches grouped for the historical API layer.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_recent_scoreboard_matches + + return list_recent_scoreboard_matches(server_slug=server_slug, limit=limit) + resolved_path = initialize_historical_storage(db_path=db_path) + where_clause = "" + params: list[object] = [] + if server_slug and not _is_all_servers_selector(server_slug): + where_clause = "WHERE historical_servers.slug = ?" + params.append(server_slug) + params.append(limit) + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + historical_matches.external_match_id, + historical_matches.started_at, + historical_matches.ended_at, + historical_matches.map_pretty_name, + historical_matches.map_name, + historical_matches.allied_score, + historical_matches.axis_score, + historical_matches.raw_payload_ref, + historical_servers.slug, + historical_servers.scoreboard_base_url, + COUNT(historical_player_match_stats.id) AS player_count + FROM historical_matches + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + {where_clause} + GROUP BY historical_matches.id + ORDER BY COALESCE(historical_matches.ended_at, historical_matches.started_at) DESC + LIMIT ? + """, + params, + ).fetchall() + items: list[dict[str, object]] = [] + for row in rows: + items.append( + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "match_id": row["external_match_id"], + "started_at": row["started_at"], + "ended_at": row["ended_at"], + "closed_at": row["ended_at"] or row["started_at"], + "map": { + "name": row["map_name"], + "pretty_name": row["map_pretty_name"] or row["map_name"], + }, + "result": { + "allied_score": _coerce_int(row["allied_score"]), + "axis_score": _coerce_int(row["axis_score"]), + "winner": _resolve_match_winner( + row["allied_score"], + row["axis_score"], + ), + }, + "player_count": int(row["player_count"] or 0), + "match_url": _resolve_safe_match_url( + row["raw_payload_ref"], + row["server_slug"], + ), + } + ) + return items + + +def get_historical_match_detail( + *, + server_slug: str, + match_id: str, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return one persisted public-scoreboard match detail for the historical API layer.""" + normalized_server_slug = _stringify(server_slug) + normalized_match_id = _stringify(match_id) + if not normalized_server_slug or not normalized_match_id: + return None + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import get_scoreboard_match_detail + + return get_scoreboard_match_detail( + server_slug=normalized_server_slug, + match_id=normalized_match_id, + ) + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + row = connection.execute( + """ + SELECT + historical_matches.id AS match_pk, + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + historical_matches.external_match_id, + historical_matches.started_at, + historical_matches.ended_at, + historical_matches.map_pretty_name, + historical_matches.map_name, + historical_matches.allied_score, + historical_matches.axis_score, + historical_matches.raw_payload_ref, + historical_servers.slug, + historical_servers.scoreboard_base_url, + COUNT(historical_player_match_stats.id) AS player_count, + SUM(COALESCE(historical_player_match_stats.time_seconds, 0)) AS total_time_seconds + FROM historical_matches + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + WHERE historical_servers.slug = ? + AND historical_matches.external_match_id = ? + GROUP BY historical_matches.id + LIMIT 1 + """, + (normalized_server_slug, normalized_match_id), + ).fetchone() + player_rows = [] + if row is not None: + player_rows = connection.execute( + """ + SELECT + historical_players.display_name, + historical_players.stable_player_key, + historical_players.steam_id, + historical_player_match_stats.team_side, + historical_player_match_stats.level, + historical_player_match_stats.kills, + historical_player_match_stats.deaths, + historical_player_match_stats.teamkills, + historical_player_match_stats.combat, + historical_player_match_stats.offense, + historical_player_match_stats.defense, + historical_player_match_stats.support, + historical_player_match_stats.time_seconds + FROM historical_player_match_stats + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + WHERE historical_player_match_stats.historical_match_id = ? + ORDER BY + COALESCE(historical_player_match_stats.kills, 0) DESC, + historical_players.display_name ASC + """, + (row["match_pk"],), + ).fetchall() + if row is None: + return None + started_at = row["started_at"] + ended_at = row["ended_at"] + return { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "match_id": row["external_match_id"], + "started_at": started_at, + "ended_at": ended_at, + "closed_at": ended_at or started_at, + "duration_seconds": _calculate_match_duration_seconds(started_at, ended_at), + "map": { + "name": row["map_name"], + "pretty_name": row["map_pretty_name"] or row["map_name"], + }, + "result": { + "allied_score": _coerce_int(row["allied_score"]), + "axis_score": _coerce_int(row["axis_score"]), + "winner": _resolve_match_winner( + row["allied_score"], + row["axis_score"], + ), + }, + "player_count": int(row["player_count"] or 0), + "total_time_seconds": _coerce_int(row["total_time_seconds"]), + "players": [ + { + "name": player_row["display_name"], + "stable_player_key": player_row["stable_player_key"], + "team_side": player_row["team_side"], + **build_external_player_profile_fields(steam_id=player_row["steam_id"]), + "level": _coerce_int(player_row["level"]), + "kills": _coerce_int(player_row["kills"]), + "deaths": _coerce_int(player_row["deaths"]), + "teamkills": _coerce_int(player_row["teamkills"]), + "combat": _coerce_int(player_row["combat"]), + "offense": _coerce_int(player_row["offense"]), + "defense": _coerce_int(player_row["defense"]), + "support": _coerce_int(player_row["support"]), + "time_seconds": _coerce_int(player_row["time_seconds"]), + } + for player_row in player_rows + ], + "capture_basis": "public-scoreboard-match", + "match_url": _resolve_safe_match_url( + row["raw_payload_ref"], + row["server_slug"], + ), + } + + +def list_historical_server_summaries( + *, + server_slug: str | None = None, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return aggregate historical metrics per server.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_scoreboard_server_summaries + + return list_scoreboard_server_summaries(server_slug=server_slug) + resolved_path = initialize_historical_storage(db_path=db_path) + if _is_all_servers_selector(server_slug): + return [_build_all_servers_summary(db_path=resolved_path)] + + where_clause = "" + params: list[object] = [] + if server_slug: + where_clause = "WHERE historical_servers.slug = ?" + params.append(server_slug) + + with _connect(resolved_path) as connection: + summary_rows = connection.execute( + f""" + SELECT + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + COUNT(DISTINCT historical_matches.id) AS matches_count, + COUNT(DISTINCT historical_players.id) AS unique_players, + COALESCE(SUM(historical_player_match_stats.kills), 0) AS total_kills, + COUNT(DISTINCT COALESCE(historical_matches.map_pretty_name, historical_matches.map_name)) AS map_count, + MIN(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS first_match_at, + MAX(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS last_match_at + FROM historical_servers + LEFT JOIN historical_matches + ON historical_matches.historical_server_id = historical_servers.id + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + LEFT JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + {where_clause} + GROUP BY historical_servers.id + ORDER BY historical_servers.server_number ASC, historical_servers.slug ASC + """, + params, + ).fetchall() + + map_rows = connection.execute( + f""" + SELECT + historical_servers.slug AS server_slug, + COALESCE(historical_matches.map_pretty_name, historical_matches.map_name, 'Mapa no disponible') AS map_name, + COUNT(*) AS matches_count + FROM historical_matches + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + {where_clause} + GROUP BY historical_servers.slug, COALESCE(historical_matches.map_pretty_name, historical_matches.map_name, 'Mapa no disponible') + ORDER BY historical_servers.slug ASC, matches_count DESC, map_name ASC + """, + params, + ).fetchall() + + progress_by_server = { + item["server"]["slug"]: item + for item in list_historical_backfill_progress( + server_slug=server_slug, + db_path=resolved_path, + ) + } + top_maps_by_server: dict[str, list[dict[str, object]]] = {} + for row in map_rows: + server_key = str(row["server_slug"]) + top_maps_by_server.setdefault(server_key, []) + if len(top_maps_by_server[server_key]) >= 3: + continue + top_maps_by_server[server_key].append( + { + "map_name": row["map_name"], + "matches_count": int(row["matches_count"] or 0), + } + ) + + items: list[dict[str, object]] = [] + for row in summary_rows: + matches_count = int(row["matches_count"] or 0) + first_match_at = _stringify(row["first_match_at"]) + last_match_at = _stringify(row["last_match_at"]) + coverage_days = _calculate_coverage_days(first_match_at, last_match_at) + progress = progress_by_server.get(str(row["server_slug"]), {}) + discovered_total_matches = _coerce_int(progress.get("discovered_total_matches")) + items.append( + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "matches_count": matches_count, + "imported_matches_count": matches_count, + "unique_players": int(row["unique_players"] or 0), + "total_kills": int(row["total_kills"] or 0), + "map_count": int(row["map_count"] or 0), + "top_maps": top_maps_by_server.get(str(row["server_slug"]), []), + "coverage": { + "basis": "persisted-import", + "status": _classify_coverage_status(matches_count, coverage_days), + "imported_matches_count": matches_count, + "discovered_total_matches": discovered_total_matches, + "first_match_at": first_match_at, + "last_match_at": last_match_at, + "coverage_days": coverage_days, + }, + "backfill": { + "mode": progress.get("mode", "bootstrap"), + "next_page": _coerce_int(progress.get("next_page")) or 1, + "last_completed_page": _coerce_int(progress.get("last_completed_page")), + "discovered_total_matches": discovered_total_matches, + "discovered_total_pages": _coerce_int(progress.get("discovered_total_pages")), + "remaining_matches_estimate": ( + max(discovered_total_matches - matches_count, 0) + if discovered_total_matches is not None + else None + ), + "archive_exhausted": bool(progress.get("archive_exhausted")), + "last_run": progress.get("last_run"), + }, + "time_range": { + "start": first_match_at, + "end": last_match_at, + }, + } + ) + return items + + +def list_historical_coverage_report( + *, + server_slug: str | None = None, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return persisted coverage metrics used to validate historical bootstrap depth.""" + resolved_path = initialize_historical_storage(db_path=db_path) + where_clause = "" + params: list[object] = [] + if server_slug: + where_clause = "WHERE historical_servers.slug = ?" + params.append(server_slug) + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + historical_servers.scoreboard_base_url AS scoreboard_base_url, + historical_servers.server_number AS server_number, + COUNT(DISTINCT historical_matches.id) AS imported_matches_count, + COUNT(DISTINCT historical_players.id) AS unique_players, + COUNT(DISTINCT historical_player_match_stats.id) AS player_stat_rows, + MIN(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS first_match_at, + MAX(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS last_match_at + FROM historical_servers + LEFT JOIN historical_matches + ON historical_matches.historical_server_id = historical_servers.id + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + LEFT JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + {where_clause} + GROUP BY historical_servers.id + ORDER BY historical_servers.server_number ASC, historical_servers.slug ASC + """, + params, + ).fetchall() + + items: list[dict[str, object]] = [] + progress_by_server = { + item["server"]["slug"]: item + for item in list_historical_backfill_progress( + server_slug=server_slug, + db_path=resolved_path, + ) + } + for row in rows: + first_match_at = _stringify(row["first_match_at"]) + last_match_at = _stringify(row["last_match_at"]) + progress = progress_by_server.get(str(row["server_slug"]), {}) + items.append( + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + "server_number": row["server_number"], + "scoreboard_base_url": row["scoreboard_base_url"], + }, + "imported_matches_count": int(row["imported_matches_count"] or 0), + "unique_players": int(row["unique_players"] or 0), + "player_stat_rows": int(row["player_stat_rows"] or 0), + "first_match_at": first_match_at, + "last_match_at": last_match_at, + "coverage_days": _calculate_coverage_days(first_match_at, last_match_at), + "backfill": { + "next_page": _coerce_int(progress.get("next_page")) or 1, + "last_completed_page": _coerce_int(progress.get("last_completed_page")), + "discovered_total_matches": _coerce_int( + progress.get("discovered_total_matches") + ), + "discovered_total_pages": _coerce_int( + progress.get("discovered_total_pages") + ), + "archive_exhausted": bool(progress.get("archive_exhausted")), + "last_run": progress.get("last_run"), + }, + } + ) + return items + + +def get_historical_player_profile( + player_id: str, + *, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return aggregate historical metrics for one player identity.""" + resolved_player_id = player_id.strip() + if not resolved_player_id: + return None + + resolved_path = initialize_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + player_row = connection.execute( + """ + SELECT + historical_players.id, + historical_players.stable_player_key, + historical_players.display_name, + historical_players.steam_id, + historical_players.source_player_id, + COUNT(DISTINCT historical_matches.id) AS matches_count, + COALESCE(SUM(historical_player_match_stats.kills), 0) AS total_kills, + MIN(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS first_match_at, + MAX(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS last_match_at + FROM historical_players + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_player_id = historical_players.id + LEFT JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + WHERE historical_players.stable_player_key = ? + OR historical_players.steam_id = ? + OR historical_players.source_player_id = ? + GROUP BY historical_players.id + ORDER BY historical_players.display_name ASC + LIMIT 1 + """, + (resolved_player_id, resolved_player_id, resolved_player_id), + ).fetchone() + if player_row is None: + return None + + server_rows = connection.execute( + """ + SELECT + historical_servers.slug AS server_slug, + historical_servers.display_name AS server_name, + COUNT(DISTINCT historical_matches.id) AS matches_count, + COALESCE(SUM(historical_player_match_stats.kills), 0) AS total_kills, + MIN(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS first_match_at, + MAX(COALESCE(historical_matches.ended_at, historical_matches.started_at, historical_matches.created_at_source)) AS last_match_at + FROM historical_player_match_stats + INNER JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + WHERE historical_player_match_stats.historical_player_id = ? + GROUP BY historical_servers.id + ORDER BY total_kills DESC, historical_servers.server_number ASC, historical_servers.slug ASC + """, + (player_row["id"],), + ).fetchall() + + return { + "player": { + "stable_player_key": player_row["stable_player_key"], + "name": player_row["display_name"], + "steam_id": player_row["steam_id"], + "source_player_id": player_row["source_player_id"], + }, + "matches_count": int(player_row["matches_count"] or 0), + "total_kills": int(player_row["total_kills"] or 0), + "time_range": { + "start": player_row["first_match_at"], + "end": player_row["last_match_at"], + }, + "servers": [ + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "matches_count": int(row["matches_count"] or 0), + "total_kills": int(row["total_kills"] or 0), + "time_range": { + "start": row["first_match_at"], + "end": row["last_match_at"], + }, + } + for row in server_rows + ], + } + + +def list_weekly_leaderboard( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", + db_path: Path | None = None, +) -> dict[str, object]: + """Return ranked weekly leaderboard totals from persisted historical match stats.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_scoreboard_leaderboard + + return list_scoreboard_leaderboard( + timeframe="weekly", + metric=metric, + server_id=server_id, + limit=limit, + ) + resolved_path = initialize_historical_storage(db_path=db_path) + aggregate_all_servers = _is_all_servers_selector(server_id) + current_time = datetime.now(timezone.utc) + current_week_start = _start_of_week(current_time) + previous_week_start = current_week_start - timedelta(days=DEFAULT_WEEKLY_WINDOW_DAYS) + normalized_metric = metric.strip() if isinstance(metric, str) else "" + if normalized_metric not in SUPPORTED_WEEKLY_LEADERBOARD_METRICS: + raise ValueError(f"Unsupported weekly leaderboard metric: {metric}") + + weekly_window = _select_weekly_window( + server_id=server_id, + current_time=current_time, + current_week_start=current_week_start, + previous_week_start=previous_week_start, + db_path=resolved_path, + ) + window_start = weekly_window["window_start"] + window_end = weekly_window["window_end"] + where_clauses = [ + "historical_matches.ended_at IS NOT NULL", + "historical_matches.ended_at >= ?", + "historical_matches.ended_at < ?", + ] + params: list[object] = [ + window_start.isoformat().replace("+00:00", "Z"), + window_end.isoformat().replace("+00:00", "Z"), + ] + if server_id and not aggregate_all_servers: + normalized_server_id = server_id.strip() + where_clauses.append( + "(historical_servers.slug = ? OR CAST(historical_servers.server_number AS TEXT) = ?)" + ) + params.extend([normalized_server_id, normalized_server_id]) + + server_slug_expression = ( + f"'{ALL_SERVERS_SLUG}'" + if aggregate_all_servers + else "historical_servers.slug" + ) + server_name_expression = ( + f"'{ALL_SERVERS_DISPLAY_NAME}'" + if aggregate_all_servers + else "historical_servers.display_name" + ) + partition_expression = ( + f"'{ALL_SERVERS_SLUG}'" + if aggregate_all_servers + else "historical_servers.slug" + ) + group_by_expression = ( + "historical_players.id" + if aggregate_all_servers + else "historical_servers.slug, historical_players.id" + ) + + metric_sum_expression = { + "kills": "COALESCE(SUM(historical_player_match_stats.kills), 0)", + "deaths": "COALESCE(SUM(historical_player_match_stats.deaths), 0)", + "support": "COALESCE(SUM(historical_player_match_stats.support), 0)", + "matches_over_100_kills": ( + "COALESCE(SUM(CASE WHEN COALESCE(historical_player_match_stats.kills, 0) >= 100 " + "THEN 1 ELSE 0 END), 0)" + ), + }[normalized_metric] + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + WITH ranked_players AS ( + SELECT + {server_slug_expression} AS server_slug, + {server_name_expression} AS server_name, + historical_players.stable_player_key, + historical_players.display_name AS player_name, + historical_players.steam_id, + COUNT(DISTINCT historical_matches.id) AS matches_count, + {metric_sum_expression} AS metric_value, + ROW_NUMBER() OVER ( + PARTITION BY {partition_expression} + ORDER BY + {metric_sum_expression} DESC, + COUNT(DISTINCT historical_matches.id) ASC, + historical_players.display_name ASC + ) AS ranking_position + FROM historical_player_match_stats + INNER JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + WHERE {" AND ".join(where_clauses)} + GROUP BY {group_by_expression} + ) + SELECT * + FROM ranked_players + WHERE ranking_position <= ? + ORDER BY server_slug ASC, ranking_position ASC + """, + [*params, limit], + ).fetchall() + + items: list[dict[str, object]] = [] + for row in rows: + items.append( + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "time_range": { + "start": window_start.isoformat().replace("+00:00", "Z"), + "end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": DEFAULT_WEEKLY_WINDOW_DAYS, + }, + "player": { + "stable_player_key": row["stable_player_key"], + "name": row["player_name"], + "steam_id": row["steam_id"], + }, + "metric": normalized_metric, + "ranking_position": int(row["ranking_position"]), + "metric_value": int(row["metric_value"] or 0), + "matches_considered": int(row["matches_count"] or 0), + } + ) + + return { + "metric": normalized_metric, + "window_start": window_start.isoformat().replace("+00:00", "Z"), + "window_end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": DEFAULT_WEEKLY_WINDOW_DAYS, + "window_kind": weekly_window["window_kind"], + "window_label": weekly_window["window_label"], + "uses_fallback": weekly_window["uses_fallback"], + "selection_reason": weekly_window["selection_reason"], + "current_week_start": current_week_start.isoformat().replace("+00:00", "Z"), + "current_week_closed_matches": weekly_window["current_week_closed_matches"], + "previous_week_closed_matches": weekly_window["previous_week_closed_matches"], + "sufficient_sample": { + "minimum_closed_matches": weekly_window["minimum_closed_matches"], + "current_week_closed_matches": weekly_window["current_week_closed_matches"], + "current_week_has_sufficient_sample": weekly_window["current_week_has_sufficient_sample"], + "is_early_week": weekly_window["is_early_week"], + "fallback_max_weekday": weekly_window["fallback_max_weekday"], + }, + "items": items, + } + + +def list_weekly_top_kills( + *, + limit: int = 10, + server_id: str | None = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Return ranked weekly kill totals from persisted historical match stats.""" + result = list_weekly_leaderboard( + limit=limit, + server_id=server_id, + metric="kills", + db_path=db_path, + ) + items = [] + for item in result["items"]: + legacy_item = dict(item) + legacy_item["weekly_kills"] = legacy_item["metric_value"] + items.append(legacy_item) + + return { + "metric": "kills", + "window_start": result["window_start"], + "window_end": result["window_end"], + "items": items, + } + + +def list_monthly_leaderboard( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", + db_path: Path | None = None, +) -> dict[str, object]: + """Return ranked monthly leaderboard totals from persisted historical match stats.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_scoreboard_leaderboard + + return list_scoreboard_leaderboard( + timeframe="monthly", + metric=metric, + server_id=server_id, + limit=limit, + ) + resolved_path = initialize_historical_storage(db_path=db_path) + aggregate_all_servers = _is_all_servers_selector(server_id) + current_time = datetime.now(timezone.utc) + current_month_start = _start_of_month(current_time) + previous_month_start = _start_of_previous_month(current_month_start) + normalized_metric = metric.strip() if isinstance(metric, str) else "" + if normalized_metric not in SUPPORTED_MONTHLY_LEADERBOARD_METRICS: + raise ValueError(f"Unsupported monthly leaderboard metric: {metric}") + + monthly_window = _select_monthly_window( + server_id=server_id, + current_time=current_time, + current_month_start=current_month_start, + previous_month_start=previous_month_start, + db_path=resolved_path, + ) + window_start = monthly_window["window_start"] + window_end = monthly_window["window_end"] + where_clauses = [ + "historical_matches.ended_at IS NOT NULL", + "historical_matches.ended_at >= ?", + "historical_matches.ended_at < ?", + ] + params: list[object] = [ + window_start.isoformat().replace("+00:00", "Z"), + window_end.isoformat().replace("+00:00", "Z"), + ] + if server_id and not aggregate_all_servers: + normalized_server_id = server_id.strip() + where_clauses.append( + "(historical_servers.slug = ? OR CAST(historical_servers.server_number AS TEXT) = ?)" + ) + params.extend([normalized_server_id, normalized_server_id]) + + server_slug_expression = ( + f"'{ALL_SERVERS_SLUG}'" + if aggregate_all_servers + else "historical_servers.slug" + ) + server_name_expression = ( + f"'{ALL_SERVERS_DISPLAY_NAME}'" + if aggregate_all_servers + else "historical_servers.display_name" + ) + partition_expression = ( + f"'{ALL_SERVERS_SLUG}'" + if aggregate_all_servers + else "historical_servers.slug" + ) + group_by_expression = ( + "historical_players.id" + if aggregate_all_servers + else "historical_servers.slug, historical_players.id" + ) + + metric_sum_expression = { + "kills": "COALESCE(SUM(historical_player_match_stats.kills), 0)", + "deaths": "COALESCE(SUM(historical_player_match_stats.deaths), 0)", + "support": "COALESCE(SUM(historical_player_match_stats.support), 0)", + "matches_over_100_kills": ( + "COALESCE(SUM(CASE WHEN COALESCE(historical_player_match_stats.kills, 0) >= 100 " + "THEN 1 ELSE 0 END), 0)" + ), + }[normalized_metric] + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + WITH ranked_players AS ( + SELECT + {server_slug_expression} AS server_slug, + {server_name_expression} AS server_name, + historical_players.stable_player_key, + historical_players.display_name AS player_name, + historical_players.steam_id, + COUNT(DISTINCT historical_matches.id) AS matches_count, + {metric_sum_expression} AS metric_value, + ROW_NUMBER() OVER ( + PARTITION BY {partition_expression} + ORDER BY + {metric_sum_expression} DESC, + COUNT(DISTINCT historical_matches.id) ASC, + historical_players.display_name ASC + ) AS ranking_position + FROM historical_player_match_stats + INNER JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + WHERE {" AND ".join(where_clauses)} + GROUP BY {group_by_expression} + ) + SELECT * + FROM ranked_players + WHERE ranking_position <= ? + ORDER BY server_slug ASC, ranking_position ASC + """, + [*params, limit], + ).fetchall() + + window_days = _calculate_window_days(window_start=window_start, window_end=window_end) + items: list[dict[str, object]] = [] + for row in rows: + items.append( + { + "server": { + "slug": row["server_slug"], + "name": row["server_name"], + }, + "time_range": { + "start": window_start.isoformat().replace("+00:00", "Z"), + "end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": window_days, + }, + "player": { + "stable_player_key": row["stable_player_key"], + "name": row["player_name"], + "steam_id": row["steam_id"], + }, + "metric": normalized_metric, + "ranking_position": int(row["ranking_position"]), + "metric_value": int(row["metric_value"] or 0), + "matches_considered": int(row["matches_count"] or 0), + } + ) + + return { + "timeframe": "monthly", + "metric": normalized_metric, + "window_start": window_start.isoformat().replace("+00:00", "Z"), + "window_end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": window_days, + "window_kind": monthly_window["window_kind"], + "window_label": monthly_window["window_label"], + "uses_fallback": monthly_window["uses_fallback"], + "selection_reason": monthly_window["selection_reason"], + "current_month_start": current_month_start.isoformat().replace("+00:00", "Z"), + "current_month_closed_matches": monthly_window["current_month_closed_matches"], + "previous_month_closed_matches": monthly_window["previous_month_closed_matches"], + "sufficient_sample": { + "minimum_closed_matches": monthly_window["minimum_closed_matches"], + "current_month_closed_matches": monthly_window["current_month_closed_matches"], + "current_month_has_sufficient_sample": monthly_window["current_month_has_sufficient_sample"], + "is_early_month": monthly_window["is_early_month"], + }, + "items": items, + } + + +def list_monthly_mvp_ranking( + *, + limit: int = 10, + server_id: str | None = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Return the monthly MVP V1 ranking built from persisted historical totals.""" + resolved_path = initialize_historical_storage(db_path=db_path) + aggregate_all_servers = _is_all_servers_selector(server_id) + current_time = datetime.now(timezone.utc) + current_month_start = _start_of_month(current_time) + previous_month_start = _start_of_previous_month(current_month_start) + monthly_window = _select_monthly_window( + server_id=server_id, + current_time=current_time, + current_month_start=current_month_start, + previous_month_start=previous_month_start, + db_path=resolved_path, + ) + window_start = monthly_window["window_start"] + window_end = monthly_window["window_end"] + where_clauses = [ + "historical_matches.ended_at IS NOT NULL", + "historical_matches.ended_at >= ?", + "historical_matches.ended_at < ?", + ] + params: list[object] = [ + window_start.isoformat().replace("+00:00", "Z"), + window_end.isoformat().replace("+00:00", "Z"), + ] + if server_id and not aggregate_all_servers: + normalized_server_id = server_id.strip() + where_clauses.append( + "(historical_servers.slug = ? OR CAST(historical_servers.server_number AS TEXT) = ?)" + ) + params.extend([normalized_server_id, normalized_server_id]) + + server_slug_expression = ( + f"'{ALL_SERVERS_SLUG}'" + if aggregate_all_servers + else "historical_servers.slug" + ) + server_name_expression = ( + f"'{ALL_SERVERS_DISPLAY_NAME}'" + if aggregate_all_servers + else "historical_servers.display_name" + ) + group_by_expression = ( + "historical_players.id" + if aggregate_all_servers + else "historical_servers.slug, historical_players.id" + ) + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + {server_slug_expression} AS server_slug, + {server_name_expression} AS server_name, + historical_players.stable_player_key, + historical_players.display_name AS player_name, + historical_players.steam_id, + COUNT(DISTINCT historical_matches.id) AS matches_count, + COALESCE(SUM(historical_player_match_stats.kills), 0) AS total_kills, + COALESCE(SUM(historical_player_match_stats.deaths), 0) AS total_deaths, + COALESCE(SUM(historical_player_match_stats.support), 0) AS total_support, + COALESCE(SUM(historical_player_match_stats.teamkills), 0) AS total_teamkills, + COALESCE(SUM(historical_player_match_stats.time_seconds), 0) AS total_time_seconds + FROM historical_player_match_stats + INNER JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + WHERE {" AND ".join(where_clauses)} + GROUP BY {group_by_expression} + """, + params, + ).fetchall() + + ranking_result = build_monthly_mvp_rankings( + [dict(row) for row in rows], + limit=limit, + ) + window_days = _calculate_window_days(window_start=window_start, window_end=window_end) + for item in ranking_result["items"]: + item["time_range"] = { + "start": window_start.isoformat().replace("+00:00", "Z"), + "end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": window_days, + } + + return { + "timeframe": "monthly", + "metric": "mvp", + "ranking_version": ranking_result["ranking_version"], + "window_start": window_start.isoformat().replace("+00:00", "Z"), + "window_end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": window_days, + "window_kind": monthly_window["window_kind"], + "window_label": monthly_window["window_label"], + "uses_fallback": monthly_window["uses_fallback"], + "selection_reason": monthly_window["selection_reason"], + "current_month_start": current_month_start.isoformat().replace("+00:00", "Z"), + "current_month_closed_matches": monthly_window["current_month_closed_matches"], + "previous_month_closed_matches": monthly_window["previous_month_closed_matches"], + "sufficient_sample": { + "minimum_closed_matches": monthly_window["minimum_closed_matches"], + "current_month_closed_matches": monthly_window["current_month_closed_matches"], + "current_month_has_sufficient_sample": monthly_window["current_month_has_sufficient_sample"], + "is_early_month": monthly_window["is_early_month"], + }, + "eligibility": ranking_result["eligibility"], + "eligible_players_count": ranking_result["eligible_players_count"], + "items": ranking_result["items"], + } + + +def list_monthly_mvp_v2_ranking( + *, + limit: int = 10, + server_id: str | None = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Return the monthly MVP V2 ranking built from monthly totals plus V2 signals.""" + resolved_path = initialize_historical_storage(db_path=db_path) + aggregate_all_servers = _is_all_servers_selector(server_id) + current_time = datetime.now(timezone.utc) + current_month_start = _start_of_month(current_time) + previous_month_start = _start_of_previous_month(current_month_start) + monthly_window = _select_monthly_window( + server_id=server_id, + current_time=current_time, + current_month_start=current_month_start, + previous_month_start=previous_month_start, + db_path=resolved_path, + ) + window_start = monthly_window["window_start"] + window_end = monthly_window["window_end"] + month_key = window_start.strftime("%Y-%m") + event_coverage = _get_monthly_player_event_coverage( + server_id=server_id, + month_key=month_key, + db_path=resolved_path, + ) + window_days = _calculate_window_days(window_start=window_start, window_end=window_end) + + empty_result = { + "timeframe": "monthly", + "metric": "mvp-v2", + "ranking_version": "v2", + "window_start": window_start.isoformat().replace("+00:00", "Z"), + "window_end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": window_days, + "window_kind": monthly_window["window_kind"], + "window_label": monthly_window["window_label"], + "uses_fallback": monthly_window["uses_fallback"], + "selection_reason": monthly_window["selection_reason"], + "current_month_start": current_month_start.isoformat().replace("+00:00", "Z"), + "current_month_closed_matches": monthly_window["current_month_closed_matches"], + "previous_month_closed_matches": monthly_window["previous_month_closed_matches"], + "sufficient_sample": { + "minimum_closed_matches": monthly_window["minimum_closed_matches"], + "current_month_closed_matches": monthly_window["current_month_closed_matches"], + "current_month_has_sufficient_sample": monthly_window["current_month_has_sufficient_sample"], + "is_early_month": monthly_window["is_early_month"], + }, + "event_coverage": event_coverage, + } + if not bool(event_coverage["ready"]): + return { + **empty_result, + "eligibility": None, + "eligible_players_count": 0, + "items": [], + } + + where_clauses = [ + "historical_matches.ended_at IS NOT NULL", + "historical_matches.ended_at >= ?", + "historical_matches.ended_at < ?", + ] + params: list[object] = [ + window_start.isoformat().replace("+00:00", "Z"), + window_end.isoformat().replace("+00:00", "Z"), + ] + if server_id and not aggregate_all_servers: + normalized_server_id = server_id.strip() + where_clauses.append( + "(historical_servers.slug = ? OR CAST(historical_servers.server_number AS TEXT) = ?)" + ) + params.extend([normalized_server_id, normalized_server_id]) + + event_scope_sql, event_scope_params = _build_player_event_scope_sql(server_id) + server_slug_expression = ( + f"'{ALL_SERVERS_SLUG}'" + if aggregate_all_servers + else "historical_servers.slug" + ) + server_name_expression = ( + f"'{ALL_SERVERS_DISPLAY_NAME}'" + if aggregate_all_servers + else "historical_servers.display_name" + ) + group_by_expression = ( + "historical_players.id" + if aggregate_all_servers + else "historical_servers.slug, historical_players.id" + ) + + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + WITH most_killed_pairs AS ( + SELECT + killer_player_key AS stable_player_key, + victim_player_key, + COALESCE(SUM(event_value), 0) AS total_kills + FROM player_event_raw_ledger + WHERE event_type = 'player_kill_summary' + AND occurred_at IS NOT NULL + AND substr(CAST(occurred_at AS TEXT), 1, 7) = ? + AND {event_scope_sql} + AND killer_player_key IS NOT NULL + AND victim_player_key IS NOT NULL + GROUP BY killer_player_key, victim_player_key + ), + most_killed_by_player AS ( + SELECT + stable_player_key, + MAX(total_kills) AS most_killed_count + FROM most_killed_pairs + GROUP BY stable_player_key + ), + death_by_pairs AS ( + SELECT + victim_player_key AS stable_player_key, + killer_player_key, + COALESCE(SUM(event_value), 0) AS total_kills + FROM player_event_raw_ledger + WHERE event_type = 'player_death_summary' + AND occurred_at IS NOT NULL + AND substr(CAST(occurred_at AS TEXT), 1, 7) = ? + AND {event_scope_sql} + AND killer_player_key IS NOT NULL + AND victim_player_key IS NOT NULL + GROUP BY victim_player_key, killer_player_key + ), + death_by_player AS ( + SELECT + stable_player_key, + MAX(total_kills) AS death_by_count + FROM death_by_pairs + GROUP BY stable_player_key + ), + duel_pairs AS ( + SELECT + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN killer_player_key + ELSE victim_player_key + END AS player_a_key, + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN victim_player_key + ELSE killer_player_key + END AS player_b_key, + COALESCE( + SUM( + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN event_value + ELSE -event_value + END + ), + 0 + ) AS net_duel_value + FROM player_event_raw_ledger + WHERE event_type = 'player_kill_summary' + AND occurred_at IS NOT NULL + AND substr(CAST(occurred_at AS TEXT), 1, 7) = ? + AND {event_scope_sql} + AND killer_player_key IS NOT NULL + AND victim_player_key IS NOT NULL + GROUP BY + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN killer_player_key + ELSE victim_player_key + END, + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN victim_player_key + ELSE killer_player_key + END + ), + duel_player_values AS ( + SELECT + player_a_key AS stable_player_key, + CASE WHEN net_duel_value > 0 THEN net_duel_value ELSE 0 END AS positive_duel_value + FROM duel_pairs + UNION ALL + SELECT + player_b_key AS stable_player_key, + CASE WHEN net_duel_value < 0 THEN -net_duel_value ELSE 0 END AS positive_duel_value + FROM duel_pairs + ), + ranked_duel_values AS ( + SELECT + stable_player_key, + positive_duel_value, + ROW_NUMBER() OVER ( + PARTITION BY stable_player_key + ORDER BY positive_duel_value DESC + ) AS duel_rank + FROM duel_player_values + WHERE stable_player_key IS NOT NULL + AND positive_duel_value > 0 + ), + duel_control_by_player AS ( + SELECT + stable_player_key, + COALESCE(SUM(positive_duel_value), 0) AS duel_control_raw + FROM ranked_duel_values + WHERE duel_rank <= 3 + GROUP BY stable_player_key + ) + SELECT + {server_slug_expression} AS server_slug, + {server_name_expression} AS server_name, + historical_players.stable_player_key, + historical_players.display_name AS player_name, + historical_players.steam_id, + COUNT(DISTINCT historical_matches.id) AS matches_count, + COALESCE(SUM(historical_player_match_stats.kills), 0) AS total_kills, + COALESCE(SUM(historical_player_match_stats.deaths), 0) AS total_deaths, + COALESCE(SUM(historical_player_match_stats.support), 0) AS total_support, + COALESCE(SUM(historical_player_match_stats.teamkills), 0) AS total_teamkills, + COALESCE(SUM(historical_player_match_stats.time_seconds), 0) AS total_time_seconds, + COALESCE(MAX(most_killed_by_player.most_killed_count), 0) AS most_killed_count, + COALESCE(MAX(death_by_player.death_by_count), 0) AS death_by_count, + COALESCE(MAX(duel_control_by_player.duel_control_raw), 0) AS duel_control_raw + FROM historical_player_match_stats + INNER JOIN historical_matches + ON historical_matches.id = historical_player_match_stats.historical_match_id + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + LEFT JOIN most_killed_by_player + ON most_killed_by_player.stable_player_key = historical_players.stable_player_key + LEFT JOIN death_by_player + ON death_by_player.stable_player_key = historical_players.stable_player_key + LEFT JOIN duel_control_by_player + ON duel_control_by_player.stable_player_key = historical_players.stable_player_key + WHERE {" AND ".join(where_clauses)} + GROUP BY {group_by_expression} + """, + [ + month_key, + *event_scope_params, + month_key, + *event_scope_params, + month_key, + *event_scope_params, + *params, + ], + ).fetchall() + + ranking_result = build_monthly_mvp_v2_rankings( + [dict(row) for row in rows], + limit=limit, + ) + for item in ranking_result["items"]: + item["time_range"] = { + "start": window_start.isoformat().replace("+00:00", "Z"), + "end": window_end.isoformat().replace("+00:00", "Z"), + "window_days": window_days, + } + + return { + **empty_result, + "ranking_version": ranking_result["ranking_version"], + "eligibility": ranking_result["eligibility"], + "eligible_players_count": ranking_result["eligible_players_count"], + "items": ranking_result["items"], + } + + +def _get_monthly_player_event_coverage( + *, + server_id: str | None, + month_key: str, + db_path: Path, +) -> dict[str, object]: + scope_sql, scope_params = _build_player_event_scope_sql(server_id) + with _connect(db_path) as connection: + latest_row = connection.execute( + f""" + SELECT MAX(substr(CAST(occurred_at AS TEXT), 1, 7)) AS latest_month_key + FROM player_event_raw_ledger + WHERE occurred_at IS NOT NULL + AND {scope_sql} + """, + scope_params, + ).fetchone() + month_row = connection.execute( + f""" + SELECT + COUNT(*) AS event_count, + MIN(occurred_at) AS source_range_start, + MAX(occurred_at) AS source_range_end + FROM player_event_raw_ledger + WHERE occurred_at IS NOT NULL + AND substr(CAST(occurred_at AS TEXT), 1, 7) = ? + AND {scope_sql} + """, + [month_key, *scope_params], + ).fetchone() + latest_month_key = str(latest_row["latest_month_key"]) if latest_row and latest_row["latest_month_key"] else None + event_count = int(month_row["event_count"] or 0) if month_row else 0 + return { + "month_key": month_key, + "latest_month_key": latest_month_key, + "ready": bool(event_count > 0 and latest_month_key == month_key), + "event_count": event_count, + "source_range_start": month_row["source_range_start"] if month_row else None, + "source_range_end": month_row["source_range_end"] if month_row else None, + "selection_reason": ( + "month-key-aligned" + if event_count > 0 and latest_month_key == month_key + else "player-event-month-mismatch-or-missing" + ), + } + + +def _build_player_event_scope_sql(server_id: str | None) -> tuple[str, list[object]]: + if not server_id or _is_all_servers_selector(server_id): + return "1 = 1", [] + normalized_server_id = server_id.strip() + return "server_slug = ?", [normalized_server_id] + + +def _connect(db_path: Path) -> sqlite3.Connection: + return connect_sqlite_writer(db_path) + + +def _resolve_match_winner(allied_score: object, axis_score: object) -> str | None: + allied = _coerce_int(allied_score) + axis = _coerce_int(axis_score) + if allied is None or axis is None: + return None + if allied > axis: + return "allies" + if axis > allied: + return "axis" + return "draw" + + +def _has_legacy_historical_schema(connection: sqlite3.Connection) -> bool: + columns = { + str(row["name"]) + for row in connection.execute("PRAGMA table_info(historical_matches)").fetchall() + } + return bool(columns) and "historical_server_id" not in columns + + +def _rename_legacy_historical_tables(connection: sqlite3.Connection) -> None: + rename_plan = ( + ("historical_player_match_stats", "historical_player_match_stats_legacy"), + ("historical_players", "historical_players_legacy"), + ("historical_matches", "historical_matches_legacy"), + ) + for current_name, legacy_name in rename_plan: + table_exists = connection.execute( + """ + SELECT 1 + FROM sqlite_master + WHERE type = 'table' AND name = ? + """, + (current_name,), + ).fetchone() + if not table_exists: + continue + + legacy_exists = connection.execute( + """ + SELECT 1 + FROM sqlite_master + WHERE type = 'table' AND name = ? + """, + (legacy_name,), + ).fetchone() + if legacy_exists: + continue + + connection.execute(f"ALTER TABLE {current_name} RENAME TO {legacy_name}") + + +def _migrate_legacy_historical_data(connection: sqlite3.Connection) -> None: + matches_table = connection.execute( + """ + SELECT 1 + FROM sqlite_master + WHERE type = 'table' AND name = 'historical_matches_legacy' + """ + ).fetchone() + if not matches_table: + return + + player_map: dict[int, int] = {} + for row in connection.execute( + """ + SELECT id, source_player_ref, canonical_name, last_seen_name + FROM historical_players_legacy + ORDER BY id ASC + """ + ).fetchall(): + stable_player_key = _stringify(row["source_player_ref"]) or f"legacy-player:{row['id']}" + display_name = _stringify(row["last_seen_name"]) or _stringify(row["canonical_name"]) or "Unknown player" + now = _utc_now_iso() + connection.execute( + """ + INSERT INTO historical_players ( + stable_player_key, + display_name, + steam_id, + source_player_id, + first_seen_at, + last_seen_at + ) VALUES (?, ?, NULL, NULL, ?, ?) + ON CONFLICT(stable_player_key) DO UPDATE SET + display_name = excluded.display_name, + last_seen_at = excluded.last_seen_at, + updated_at = CURRENT_TIMESTAMP + """, + (stable_player_key, display_name, now, now), + ) + new_row = connection.execute( + "SELECT id FROM historical_players WHERE stable_player_key = ?", + (stable_player_key,), + ).fetchone() + if new_row is not None: + player_map[int(row["id"])] = int(new_row["id"]) + + match_map: dict[int, int] = {} + for row in connection.execute( + """ + SELECT * + FROM historical_matches_legacy + ORDER BY id ASC + """ + ).fetchall(): + server_slug = _stringify(row["external_server_id"]) or "comunidad-hispana-01" + server_row = _resolve_historical_server(connection, server_slug) + connection.execute( + """ + INSERT INTO historical_matches ( + historical_server_id, + external_match_id, + historical_map_id, + created_at_source, + started_at, + ended_at, + map_name, + map_pretty_name, + game_mode, + image_name, + allied_score, + axis_score, + last_seen_at, + raw_payload_ref + ) VALUES (?, ?, NULL, ?, ?, ?, ?, ?, ?, NULL, NULL, NULL, ?, ?) + ON CONFLICT(historical_server_id, external_match_id) DO UPDATE SET + started_at = excluded.started_at, + ended_at = excluded.ended_at, + map_name = excluded.map_name, + map_pretty_name = excluded.map_pretty_name, + game_mode = excluded.game_mode, + last_seen_at = excluded.last_seen_at, + raw_payload_ref = excluded.raw_payload_ref, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_row["id"], + _stringify(row["source_match_ref"]) or f"legacy-match:{row['id']}", + _stringify(row["created_at"]), + _stringify(row["started_at"]), + _stringify(row["ended_at"]), + _stringify(row["map_name"]), + _stringify(row["map_name"]), + _stringify(row["mode_name"]), + _utc_now_iso(), + _stringify(row["source_url"]), + ), + ) + new_row = connection.execute( + """ + SELECT id + FROM historical_matches + WHERE historical_server_id = ? AND external_match_id = ? + """, + ( + server_row["id"], + _stringify(row["source_match_ref"]) or f"legacy-match:{row['id']}", + ), + ).fetchone() + if new_row is not None: + match_map[int(row["id"])] = int(new_row["id"]) + + for row in connection.execute( + """ + SELECT * + FROM historical_player_match_stats_legacy + ORDER BY id ASC + """ + ).fetchall(): + new_match_id = match_map.get(int(row["match_id"])) + new_player_id = player_map.get(int(row["player_id"])) + if new_match_id is None or new_player_id is None: + continue + + connection.execute( + """ + INSERT INTO historical_player_match_stats ( + historical_match_id, + historical_player_id, + match_player_ref, + team_side, + level, + kills, + deaths, + teamkills, + time_seconds, + kills_per_minute, + deaths_per_minute, + kill_death_ratio, + combat, + offense, + defense, + support + ) VALUES (?, ?, NULL, NULL, NULL, ?, ?, NULL, ?, NULL, NULL, NULL, NULL, NULL, NULL, NULL) + ON CONFLICT(historical_match_id, historical_player_id) DO UPDATE SET + kills = excluded.kills, + deaths = excluded.deaths, + time_seconds = excluded.time_seconds, + updated_at = CURRENT_TIMESTAMP + """, + ( + new_match_id, + new_player_id, + _coerce_int(row["kills"]), + _coerce_int(row["deaths"]), + _coerce_int(row["time_seconds"]), + ), + ) + + +def _normalize_historical_player_identities(connection: sqlite3.Connection) -> None: + rows = connection.execute( + """ + SELECT id, stable_player_key, display_name, steam_id, source_player_id + FROM historical_players + ORDER BY id ASC + """ + ).fetchall() + for row in rows: + player_id = int(row["id"]) + canonical_key, steam_id, source_player_id, display_name = _canonicalize_stored_player_row(row) + existing = connection.execute( + """ + SELECT id + FROM historical_players + WHERE stable_player_key = ? + """, + (canonical_key,), + ).fetchone() + if existing is not None and int(existing["id"]) != player_id: + _merge_historical_player_rows( + connection, + source_player_id=player_id, + target_player_id=int(existing["id"]), + display_name=display_name, + steam_id=steam_id, + source_ref=source_player_id, + ) + continue + + connection.execute( + """ + UPDATE historical_players + SET stable_player_key = ?, + display_name = ?, + steam_id = ?, + source_player_id = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + (canonical_key, display_name, steam_id, source_player_id, player_id), + ) + + +def _normalize_historical_match_identities(connection: sqlite3.Connection) -> None: + rows = connection.execute( + """ + SELECT + historical_matches.id, + historical_matches.historical_server_id, + historical_matches.external_match_id, + historical_matches.started_at, + historical_matches.ended_at, + historical_matches.created_at_source, + historical_matches.map_name, + historical_matches.map_pretty_name, + COUNT(historical_player_match_stats.id) AS player_count + FROM historical_matches + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + WHERE historical_matches.started_at IS NOT NULL + GROUP BY historical_matches.id + ORDER BY historical_matches.historical_server_id ASC, historical_matches.started_at ASC, historical_matches.id ASC + """ + ).fetchall() + + grouped_matches: dict[tuple[int, str, str], list[sqlite3.Row]] = {} + for row in rows: + group_key = ( + int(row["historical_server_id"]), + str(row["started_at"]), + _normalize_match_identity_label(row["map_pretty_name"] or row["map_name"]), + ) + grouped_matches.setdefault(group_key, []).append(row) + + for grouped_rows in grouped_matches.values(): + if len(grouped_rows) < 2: + continue + target_row = max(grouped_rows, key=_match_identity_preference) + for source_row in grouped_rows: + if int(source_row["id"]) == int(target_row["id"]): + continue + _merge_historical_match_rows( + connection, + source_match_id=int(source_row["id"]), + target_match_id=int(target_row["id"]), + ) + + +def _seed_default_historical_servers(connection: sqlite3.Connection) -> None: + for server in DEFAULT_HISTORICAL_SERVERS: + connection.execute( + """ + INSERT INTO historical_servers ( + slug, + display_name, + scoreboard_base_url, + server_number, + source_kind + ) VALUES (?, ?, ?, ?, ?) + ON CONFLICT(slug) DO UPDATE SET + display_name = excluded.display_name, + scoreboard_base_url = excluded.scoreboard_base_url, + server_number = excluded.server_number, + source_kind = excluded.source_kind, + updated_at = CURRENT_TIMESTAMP + """, + ( + server.slug, + server.display_name, + server.scoreboard_base_url, + server.server_number, + server.source_kind, + ), + ) + + +def _resolve_historical_server( + connection: sqlite3.Connection, + server_slug: str, +) -> sqlite3.Row: + row = connection.execute( + """ + SELECT id, slug, scoreboard_base_url + FROM historical_servers + WHERE slug = ? + """, + (server_slug,), + ).fetchone() + if row is None: + raise ValueError(f"Unknown historical server slug: {server_slug}") + return row + + +def _upsert_historical_map( + connection: sqlite3.Connection, + match_payload: Mapping[str, object], +) -> int | None: + external_map_id = _stringify(_get_nested(match_payload, "map", "id")) + if not external_map_id: + return None + + connection.execute( + """ + INSERT INTO historical_maps ( + external_map_id, + map_name, + pretty_name, + game_mode, + image_name + ) VALUES (?, ?, ?, ?, ?) + ON CONFLICT(external_map_id) DO UPDATE SET + map_name = excluded.map_name, + pretty_name = excluded.pretty_name, + game_mode = excluded.game_mode, + image_name = excluded.image_name, + updated_at = CURRENT_TIMESTAMP + """, + ( + external_map_id, + _extract_map_name(match_payload), + _extract_map_pretty_name(match_payload), + _extract_map_game_mode(match_payload), + _extract_map_image_name(match_payload), + ), + ) + row = connection.execute( + "SELECT id FROM historical_maps WHERE external_map_id = ?", + (external_map_id,), + ).fetchone() + return int(row["id"]) if row is not None else None + + +def _upsert_historical_player( + connection: sqlite3.Connection, + player_payload: Mapping[str, object], +) -> int: + stable_player_key, steam_id, source_player_id = _derive_player_identity(player_payload) + display_name = _normalize_player_display_name(player_payload.get("player")) or "Unknown player" + seen_at = _utc_now_iso() + + connection.execute( + """ + INSERT INTO historical_players ( + stable_player_key, + display_name, + steam_id, + source_player_id, + first_seen_at, + last_seen_at + ) VALUES (?, ?, ?, ?, ?, ?) + ON CONFLICT(stable_player_key) DO UPDATE SET + display_name = excluded.display_name, + steam_id = COALESCE(excluded.steam_id, historical_players.steam_id), + source_player_id = COALESCE(excluded.source_player_id, historical_players.source_player_id), + last_seen_at = excluded.last_seen_at, + updated_at = CURRENT_TIMESTAMP + """, + ( + stable_player_key, + display_name, + steam_id, + source_player_id, + seen_at, + seen_at, + ), + ) + row = connection.execute( + "SELECT id FROM historical_players WHERE stable_player_key = ?", + (stable_player_key,), + ).fetchone() + if row is None: + raise RuntimeError("Failed to persist historical player identity.") + return int(row["id"]) + + +def _build_stable_player_key(player_payload: Mapping[str, object]) -> str: + stable_player_key, _, _ = _derive_player_identity(player_payload) + return stable_player_key + + +def _derive_player_identity(player_payload: Mapping[str, object]) -> tuple[str, str | None, str | None]: + steam_id = _stringify(_get_nested(player_payload, "steaminfo", "profile", "steamid")) + source_player_id = _stringify(player_payload.get("player_id")) + steaminfo_id = _stringify(_get_nested(player_payload, "steaminfo", "id")) + + if steam_id: + return f"steam:{steam_id}", steam_id, source_player_id + if _is_probable_steam_id(source_player_id): + return f"steam:{source_player_id}", source_player_id, source_player_id + if source_player_id: + return f"crcon-player:{source_player_id}", None, source_player_id + if steaminfo_id: + return f"steaminfo:{steaminfo_id}", None, None + + player_name = _normalize_player_display_name(player_payload.get("player")) or "unknown-player" + return f"name:{_normalize_name_key(player_name)}", None, None + + +def _extract_map_name(match_payload: Mapping[str, object]) -> str | None: + return _stringify(match_payload.get("map_name")) or _stringify(_get_nested(match_payload, "map", "name")) + + +def _extract_map_pretty_name(match_payload: Mapping[str, object]) -> str | None: + return _stringify(_get_nested(match_payload, "map", "pretty_name")) or _extract_map_name(match_payload) + + +def _extract_map_game_mode(match_payload: Mapping[str, object]) -> str | None: + return _stringify(_get_nested(match_payload, "map", "game_mode")) + + +def _extract_map_image_name(match_payload: Mapping[str, object]) -> str | None: + return _stringify(_get_nested(match_payload, "map", "image_name")) + + +def _coerce_list(value: object) -> list[Mapping[str, object]]: + if not isinstance(value, list): + return [] + return [item for item in value if isinstance(item, Mapping)] + + +def _coerce_int(value: object) -> int | None: + if value in (None, ""): + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _coerce_float(value: object) -> float | None: + if value in (None, ""): + return None + try: + return float(value) + except (TypeError, ValueError): + return None + + +def _stringify(value: object) -> str | None: + if value is None: + return None + text = str(value).strip() + return text or None + + +def _normalize_player_display_name(value: object) -> str | None: + text = _stringify(value) + if not text: + return None + return " ".join(text.split()) + + +def _normalize_name_key(player_name: str) -> str: + normalized_name = "".join( + character.lower() if character.isalnum() else "-" + for character in player_name + ) + compact_name = "-".join(part for part in normalized_name.split("-") if part) + return compact_name or "unknown-player" + + +def _is_probable_steam_id(value: object) -> bool: + text = _stringify(value) + return bool(text and text.isdigit() and len(text) >= 16) + + +def _canonicalize_stored_player_row( + row: sqlite3.Row, +) -> tuple[str, str | None, str | None, str]: + stable_player_key = _stringify(row["stable_player_key"]) + display_name = _normalize_player_display_name(row["display_name"]) or "Unknown player" + steam_id = _stringify(row["steam_id"]) + source_player_id = _stringify(row["source_player_id"]) + + if _is_probable_steam_id(steam_id): + return f"steam:{steam_id}", steam_id, source_player_id, display_name + if _is_probable_steam_id(source_player_id): + return f"steam:{source_player_id}", source_player_id, source_player_id, display_name + if source_player_id: + return f"crcon-player:{source_player_id}", None, source_player_id, display_name + if stable_player_key and stable_player_key.startswith("steaminfo:"): + return stable_player_key, None, None, display_name + if stable_player_key and stable_player_key.startswith("name:"): + return stable_player_key, None, None, display_name + if stable_player_key and stable_player_key.startswith("steam:"): + return stable_player_key, steam_id, source_player_id, display_name + if stable_player_key and stable_player_key.startswith("crcon-player:"): + source_ref = stable_player_key.removeprefix("crcon-player:") + return stable_player_key, None, source_player_id or source_ref, display_name + if stable_player_key: + if _is_probable_steam_id(stable_player_key): + return f"steam:{stable_player_key}", stable_player_key, source_player_id, display_name + return f"crcon-player:{stable_player_key}", None, source_player_id or stable_player_key, display_name + return f"name:{_normalize_name_key(display_name)}", None, None, display_name + + +def _merge_historical_player_rows( + connection: sqlite3.Connection, + *, + source_player_id: int, + target_player_id: int, + display_name: str, + steam_id: str | None, + source_ref: str | None, +) -> None: + target_row = connection.execute( + """ + SELECT display_name, steam_id, source_player_id, first_seen_at, last_seen_at + FROM historical_players + WHERE id = ? + """, + (target_player_id,), + ).fetchone() + if target_row is None: + return + + connection.execute( + """ + UPDATE historical_players + SET display_name = ?, + steam_id = ?, + source_player_id = ?, + first_seen_at = MIN(first_seen_at, ?), + last_seen_at = MAX(last_seen_at, ?), + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + ( + _pick_preferred_display_name(target_row["display_name"], display_name), + _pick_preferred_steam_id(target_row["steam_id"], steam_id), + _pick_preferred_source_player_id(target_row["source_player_id"], source_ref), + connection.execute( + "SELECT first_seen_at FROM historical_players WHERE id = ?", + (source_player_id,), + ).fetchone()["first_seen_at"], + connection.execute( + "SELECT last_seen_at FROM historical_players WHERE id = ?", + (source_player_id,), + ).fetchone()["last_seen_at"], + target_player_id, + ), + ) + + stats_rows = connection.execute( + """ + SELECT * + FROM historical_player_match_stats + WHERE historical_player_id = ? + ORDER BY id ASC + """, + (source_player_id,), + ).fetchall() + for stat_row in stats_rows: + existing = connection.execute( + """ + SELECT * + FROM historical_player_match_stats + WHERE historical_match_id = ? AND historical_player_id = ? + """, + (stat_row["historical_match_id"], target_player_id), + ).fetchone() + if existing is None: + connection.execute( + """ + UPDATE historical_player_match_stats + SET historical_player_id = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + (target_player_id, stat_row["id"]), + ) + continue + + _merge_player_match_stats_row(connection, existing["id"], stat_row) + connection.execute( + "DELETE FROM historical_player_match_stats WHERE id = ?", + (stat_row["id"],), + ) + + connection.execute( + "DELETE FROM historical_players WHERE id = ?", + (source_player_id,), + ) + + +def _normalize_match_identity_label(value: object) -> str: + text = _stringify(value) or "unknown-map" + return " ".join(text.lower().split()) + + +def _match_identity_preference(row: sqlite3.Row) -> tuple[int, int, int, str, int]: + return ( + 1 if _stringify(row["ended_at"]) else 0, + 1 if (_stringify(row["external_match_id"]) or "").isdigit() else 0, + int(row["player_count"] or 0), + _stringify(row["created_at_source"]) or "", + int(row["id"]), + ) + + +def _merge_historical_match_rows( + connection: sqlite3.Connection, + *, + source_match_id: int, + target_match_id: int, +) -> None: + source_row = connection.execute( + "SELECT * FROM historical_matches WHERE id = ?", + (source_match_id,), + ).fetchone() + target_row = connection.execute( + "SELECT * FROM historical_matches WHERE id = ?", + (target_match_id,), + ).fetchone() + if source_row is None or target_row is None: + return + + connection.execute( + """ + UPDATE historical_matches + SET historical_map_id = COALESCE(historical_map_id, ?), + created_at_source = COALESCE(created_at_source, ?), + started_at = COALESCE(started_at, ?), + ended_at = COALESCE(ended_at, ?), + map_name = COALESCE(map_name, ?), + map_pretty_name = COALESCE(map_pretty_name, ?), + game_mode = COALESCE(game_mode, ?), + image_name = COALESCE(image_name, ?), + allied_score = COALESCE(allied_score, ?), + axis_score = COALESCE(axis_score, ?), + raw_payload_ref = COALESCE(raw_payload_ref, ?), + last_seen_at = MAX(last_seen_at, ?), + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + ( + source_row["historical_map_id"], + source_row["created_at_source"], + source_row["started_at"], + source_row["ended_at"], + source_row["map_name"], + source_row["map_pretty_name"], + source_row["game_mode"], + source_row["image_name"], + source_row["allied_score"], + source_row["axis_score"], + source_row["raw_payload_ref"], + source_row["last_seen_at"], + target_match_id, + ), + ) + + stats_rows = connection.execute( + """ + SELECT * + FROM historical_player_match_stats + WHERE historical_match_id = ? + ORDER BY id ASC + """, + (source_match_id,), + ).fetchall() + for stat_row in stats_rows: + existing = connection.execute( + """ + SELECT * + FROM historical_player_match_stats + WHERE historical_match_id = ? AND historical_player_id = ? + """, + (target_match_id, stat_row["historical_player_id"]), + ).fetchone() + if existing is None: + connection.execute( + """ + UPDATE historical_player_match_stats + SET historical_match_id = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + (target_match_id, stat_row["id"]), + ) + continue + + _merge_player_match_stats_row(connection, existing["id"], stat_row) + connection.execute( + "DELETE FROM historical_player_match_stats WHERE id = ?", + (stat_row["id"],), + ) + + connection.execute( + "DELETE FROM historical_matches WHERE id = ?", + (source_match_id,), + ) + + +def _merge_player_match_stats_row( + connection: sqlite3.Connection, + target_stat_id: int, + source_row: sqlite3.Row, +) -> None: + target_row = connection.execute( + "SELECT * FROM historical_player_match_stats WHERE id = ?", + (target_stat_id,), + ).fetchone() + if target_row is None: + return + + connection.execute( + """ + UPDATE historical_player_match_stats + SET match_player_ref = COALESCE(match_player_ref, ?), + team_side = COALESCE(team_side, ?), + level = ?, + kills = ?, + deaths = ?, + teamkills = ?, + time_seconds = ?, + kills_per_minute = ?, + deaths_per_minute = ?, + kill_death_ratio = ?, + combat = ?, + offense = ?, + defense = ?, + support = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + ( + source_row["match_player_ref"], + source_row["team_side"], + _max_int_value(target_row["level"], source_row["level"]), + _max_int_value(target_row["kills"], source_row["kills"]), + _max_int_value(target_row["deaths"], source_row["deaths"]), + _max_int_value(target_row["teamkills"], source_row["teamkills"]), + _max_int_value(target_row["time_seconds"], source_row["time_seconds"]), + _max_float_value(target_row["kills_per_minute"], source_row["kills_per_minute"]), + _max_float_value(target_row["deaths_per_minute"], source_row["deaths_per_minute"]), + _max_float_value(target_row["kill_death_ratio"], source_row["kill_death_ratio"]), + _max_int_value(target_row["combat"], source_row["combat"]), + _max_int_value(target_row["offense"], source_row["offense"]), + _max_int_value(target_row["defense"], source_row["defense"]), + _max_int_value(target_row["support"], source_row["support"]), + target_stat_id, + ), + ) + + +def _pick_preferred_display_name(current_value: object, incoming_value: object) -> str: + current_name = _normalize_player_display_name(current_value) + incoming_name = _normalize_player_display_name(incoming_value) + if not current_name: + return incoming_name or "Unknown player" + if not incoming_name: + return current_name + if len(incoming_name) > len(current_name): + return incoming_name + return current_name + + +def _pick_preferred_steam_id(current_value: object, incoming_value: object) -> str | None: + current_id = _stringify(current_value) + incoming_id = _stringify(incoming_value) + if _is_probable_steam_id(current_id): + return current_id + if _is_probable_steam_id(incoming_id): + return incoming_id + return None + + +def _pick_preferred_source_player_id(current_value: object, incoming_value: object) -> str | None: + current_id = _stringify(current_value) + incoming_id = _stringify(incoming_value) + if current_id: + return current_id + return incoming_id + + +def _max_int_value(current_value: object, incoming_value: object) -> int | None: + current_number = _coerce_int(current_value) + incoming_number = _coerce_int(incoming_value) + if current_number is None: + return incoming_number + if incoming_number is None: + return current_number + return max(current_number, incoming_number) + + +def _max_float_value(current_value: object, incoming_value: object) -> float | None: + current_number = _coerce_float(current_value) + incoming_number = _coerce_float(incoming_value) + if current_number is None: + return incoming_number + if incoming_number is None: + return current_number + return max(current_number, incoming_number) + + +def _normalize_timestamp(value: object) -> str | None: + text = _stringify(value) + if not text: + return None + try: + return _parse_timestamp(text).astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + except ValueError: + return text + + +def _parse_timestamp(value: str) -> datetime: + normalized = value.strip().replace("Z", "+00:00") + parsed = datetime.fromisoformat(normalized) + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed + + +def _calculate_coverage_days( + first_match_at: str | None, + last_match_at: str | None, +) -> float | None: + if not first_match_at or not last_match_at: + return None + try: + delta = _parse_timestamp(last_match_at) - _parse_timestamp(first_match_at) + except ValueError: + return None + return round(delta.total_seconds() / 86400, 2) + + +def _select_weekly_window( + *, + server_id: str | None, + current_time: datetime, + current_week_start: datetime, + previous_week_start: datetime, + db_path: Path, +) -> dict[str, object]: + fallback_max_weekday = get_historical_weekly_fallback_max_weekday() + current_week_closed_matches = _count_valid_matches_with_stats_in_window( + server_id=server_id, + window_start=current_week_start, + window_end=current_time, + db_path=db_path, + ) + previous_week_closed_matches = _count_valid_matches_with_stats_in_window( + server_id=server_id, + window_start=previous_week_start, + window_end=current_week_start, + db_path=db_path, + ) + is_early_week = current_time.weekday() <= fallback_max_weekday + min_matches = 1 + current_week_has_sufficient_sample = current_week_closed_matches >= min_matches + uses_fallback = ( + not current_week_has_sufficient_sample + and previous_week_closed_matches > 0 + ) + + if uses_fallback: + return { + "window_start": previous_week_start, + "window_end": current_week_start, + "window_kind": "previous-closed-week-fallback", + "window_label": "Semana cerrada anterior", + "uses_fallback": True, + "selection_reason": "insufficient-current-week-sample", + "minimum_closed_matches": min_matches, + "current_week_closed_matches": current_week_closed_matches, + "previous_week_closed_matches": previous_week_closed_matches, + "current_week_has_sufficient_sample": False, + "is_early_week": is_early_week, + "fallback_max_weekday": fallback_max_weekday, + } + + return { + "window_start": current_week_start, + "window_end": current_time, + "window_kind": "current-week", + "window_label": "Semana actual", + "uses_fallback": False, + "selection_reason": "current-week", + "minimum_closed_matches": min_matches, + "current_week_closed_matches": current_week_closed_matches, + "previous_week_closed_matches": previous_week_closed_matches, + "current_week_has_sufficient_sample": current_week_has_sufficient_sample, + "is_early_week": is_early_week, + "fallback_max_weekday": fallback_max_weekday, + } + + +def _select_monthly_window( + *, + server_id: str | None, + current_time: datetime, + current_month_start: datetime, + previous_month_start: datetime, + db_path: Path, +) -> dict[str, object]: + current_month_closed_matches = _count_closed_matches_in_window( + server_id=server_id, + window_start=current_month_start, + window_end=current_time, + db_path=db_path, + ) + previous_month_closed_matches = _count_closed_matches_in_window( + server_id=server_id, + window_start=previous_month_start, + window_end=current_month_start, + db_path=db_path, + ) + is_early_month = current_time.day <= 3 + uses_fallback = current_month_closed_matches <= 0 and previous_month_closed_matches > 0 + + if uses_fallback: + return { + "window_start": previous_month_start, + "window_end": current_month_start, + "window_kind": "previous-closed-month-fallback", + "window_label": "Mes cerrado anterior", + "uses_fallback": True, + "selection_reason": "no-current-month-matches", + "minimum_closed_matches": 1, + "current_month_closed_matches": current_month_closed_matches, + "previous_month_closed_matches": previous_month_closed_matches, + "current_month_has_sufficient_sample": False, + "is_early_month": is_early_month, + } + + return { + "window_start": current_month_start, + "window_end": current_time, + "window_kind": "current-month", + "window_label": "Mes actual", + "uses_fallback": False, + "selection_reason": "current-month", + "minimum_closed_matches": 1, + "current_month_closed_matches": current_month_closed_matches, + "previous_month_closed_matches": previous_month_closed_matches, + "current_month_has_sufficient_sample": current_month_closed_matches > 0, + "is_early_month": is_early_month, + } + + +def _count_closed_matches_in_window( + *, + server_id: str | None, + window_start: datetime, + window_end: datetime, + db_path: Path, +) -> int: + where_clauses = [ + "historical_matches.ended_at IS NOT NULL", + "historical_matches.ended_at >= ?", + "historical_matches.ended_at < ?", + ] + params: list[object] = [ + window_start.isoformat().replace("+00:00", "Z"), + window_end.isoformat().replace("+00:00", "Z"), + ] + if server_id and not _is_all_servers_selector(server_id): + normalized_server_id = server_id.strip() + where_clauses.append( + "(historical_servers.slug = ? OR CAST(historical_servers.server_number AS TEXT) = ?)" + ) + params.extend([normalized_server_id, normalized_server_id]) + + with _connect(db_path) as connection: + row = connection.execute( + f""" + SELECT COUNT(DISTINCT historical_matches.id) AS matches_count + FROM historical_matches + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + WHERE {" AND ".join(where_clauses)} + """, + params, + ).fetchone() + return int(row["matches_count"] or 0) if row is not None else 0 + + +def _count_valid_matches_with_stats_in_window( + *, + server_id: str | None, + window_start: datetime, + window_end: datetime, + db_path: Path, +) -> int: + where_clauses = [ + "historical_matches.ended_at IS NOT NULL", + "historical_matches.ended_at >= ?", + "historical_matches.ended_at < ?", + "(" + "COALESCE(historical_player_match_stats.kills, 0) > 0 " + "OR COALESCE(historical_player_match_stats.deaths, 0) > 0 " + "OR COALESCE(historical_player_match_stats.support, 0) > 0 " + "OR COALESCE(historical_player_match_stats.combat, 0) > 0 " + "OR COALESCE(historical_player_match_stats.offense, 0) > 0 " + "OR COALESCE(historical_player_match_stats.defense, 0) > 0 " + "OR COALESCE(historical_player_match_stats.time_seconds, 0) > 0" + ")", + ] + params: list[object] = [ + window_start.isoformat().replace("+00:00", "Z"), + window_end.isoformat().replace("+00:00", "Z"), + ] + if server_id and not _is_all_servers_selector(server_id): + normalized_server_id = server_id.strip() + where_clauses.append( + "(historical_servers.slug = ? OR CAST(historical_servers.server_number AS TEXT) = ?)" + ) + params.extend([normalized_server_id, normalized_server_id]) + + with _connect(db_path) as connection: + row = connection.execute( + f""" + SELECT COUNT(DISTINCT historical_matches.id) AS matches_count + FROM historical_matches + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + INNER JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + WHERE {" AND ".join(where_clauses)} + """, + params, + ).fetchone() + return int(row["matches_count"] or 0) if row is not None else 0 + + +def _classify_coverage_status( + matches_count: int, + coverage_days: float | None, +) -> str: + if matches_count <= 0: + return "empty" + if coverage_days is None: + return "range-unknown" + if coverage_days < DEFAULT_WEEKLY_WINDOW_DAYS: + return "under-week" + return "week-plus" + + +def _build_all_servers_summary(*, db_path: Path) -> dict[str, object]: + per_server_items = list_historical_server_summaries(db_path=db_path) + imported_matches_count = sum(int(item.get("matches_count") or 0) for item in per_server_items) + unique_players = _count_all_servers_unique_players(db_path=db_path) + total_kills = sum(int(item.get("total_kills") or 0) for item in per_server_items) + discovered_total_matches = sum( + _coerce_int(item.get("backfill", {}).get("discovered_total_matches")) or 0 + for item in per_server_items + ) + first_points = [ + item.get("coverage", {}).get("first_match_at") + for item in per_server_items + if item.get("coverage", {}).get("first_match_at") + ] + last_points = [ + item.get("coverage", {}).get("last_match_at") + for item in per_server_items + if item.get("coverage", {}).get("last_match_at") + ] + first_match_at = min(first_points) if first_points else None + last_match_at = max(last_points) if last_points else None + coverage_days = _calculate_coverage_days(first_match_at, last_match_at) + + return { + "server": { + "slug": ALL_SERVERS_SLUG, + "name": ALL_SERVERS_DISPLAY_NAME, + }, + "matches_count": imported_matches_count, + "imported_matches_count": imported_matches_count, + "unique_players": unique_players, + "total_kills": total_kills, + "map_count": _count_all_servers_maps(db_path=db_path), + "top_maps": _list_all_servers_top_maps(db_path=db_path, limit=3), + "coverage": { + "basis": "persisted-import-aggregate", + "status": _classify_coverage_status(imported_matches_count, coverage_days), + "imported_matches_count": imported_matches_count, + "discovered_total_matches": discovered_total_matches or None, + "first_match_at": first_match_at, + "last_match_at": last_match_at, + "coverage_days": coverage_days, + }, + "backfill": { + "mode": "aggregate", + "server_count": len(per_server_items), + "discovered_total_matches": discovered_total_matches or None, + "remaining_matches_estimate": ( + max(discovered_total_matches - imported_matches_count, 0) + if discovered_total_matches + else None + ), + "archive_exhausted": all( + bool(item.get("backfill", {}).get("archive_exhausted")) + for item in per_server_items + ), + "last_run": None, + }, + "time_range": { + "start": first_match_at, + "end": last_match_at, + }, + } + + +def _count_all_servers_unique_players(*, db_path: Path) -> int: + with _connect(db_path) as connection: + row = connection.execute( + """ + SELECT COUNT(DISTINCT historical_players.id) AS unique_players + FROM historical_player_match_stats + INNER JOIN historical_players + ON historical_players.id = historical_player_match_stats.historical_player_id + """ + ).fetchone() + return int(row["unique_players"] or 0) if row is not None else 0 + + +def _count_all_servers_maps(*, db_path: Path) -> int: + with _connect(db_path) as connection: + row = connection.execute( + """ + SELECT COUNT(DISTINCT COALESCE(map_pretty_name, map_name)) AS map_count + FROM historical_matches + """ + ).fetchone() + return int(row["map_count"] or 0) if row is not None else 0 + + +def _list_all_servers_top_maps(*, db_path: Path, limit: int) -> list[dict[str, object]]: + with _connect(db_path) as connection: + rows = connection.execute( + """ + SELECT + COALESCE(map_pretty_name, map_name, 'Mapa no disponible') AS map_name, + COUNT(*) AS matches_count + FROM historical_matches + GROUP BY COALESCE(map_pretty_name, map_name, 'Mapa no disponible') + ORDER BY matches_count DESC, map_name ASC + LIMIT ? + """, + (limit,), + ).fetchall() + return [ + { + "map_name": row["map_name"], + "matches_count": int(row["matches_count"] or 0), + } + for row in rows + ] + + +def _is_all_servers_selector(value: str | None) -> bool: + return isinstance(value, str) and value.strip() == ALL_SERVERS_SLUG + + +def _resolve_safe_match_url(raw_payload_ref: object, server_slug: object) -> str | None: + return resolve_trusted_scoreboard_match_url(raw_payload_ref, server_slug) + + +def _calculate_match_duration_seconds(started_at: object, ended_at: object) -> int | None: + start_text = _stringify(started_at) + end_text = _stringify(ended_at) + if not start_text or not end_text: + return None + try: + duration = _parse_timestamp(end_text) - _parse_timestamp(start_text) + except ValueError: + return None + return max(0, int(duration.total_seconds())) + + +def _start_of_week(value: datetime) -> datetime: + normalized = value.astimezone(timezone.utc) + midnight = normalized.replace(hour=0, minute=0, second=0, microsecond=0) + return midnight - timedelta(days=midnight.weekday()) + + +def _start_of_month(value: datetime) -> datetime: + normalized = value.astimezone(timezone.utc) + return normalized.replace(day=1, hour=0, minute=0, second=0, microsecond=0) + + +def _start_of_previous_month(value: datetime) -> datetime: + previous_day = value - timedelta(days=1) + return _start_of_month(previous_day) + + +def _calculate_window_days(*, window_start: datetime, window_end: datetime) -> int: + delta = window_end - window_start + return max(1, int((delta.total_seconds() + 86399) // 86400)) + + +def _get_nested(payload: Mapping[str, object], *path: str) -> object: + current: object = payload + for key in path: + if not isinstance(current, Mapping): + return None + current = current.get(key) + return current + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..262e592 --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,90 @@ +"""Minimal HTTP entrypoint for the HLL Vietnam backend bootstrap.""" + +from __future__ import annotations + +import json +from datetime import date, datetime +from http import HTTPStatus +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer + +from .config import get_allowed_origins, get_bind_address +from .payloads import build_error_payload +from .routes import resolve_get_payload + + +class HealthHandler(BaseHTTPRequestHandler): + """Serve the minimal routes required for the backend bootstrap.""" + + server_version = "HLLVietnamBackend/0.1" + + def do_OPTIONS(self) -> None: # noqa: N802 - BaseHTTPRequestHandler interface + self.send_response(HTTPStatus.NO_CONTENT) + self._send_default_headers() + self.send_header("Access-Control-Allow-Methods", "GET, OPTIONS") + self.send_header("Access-Control-Allow-Headers", "Content-Type") + self.end_headers() + + def do_GET(self) -> None: # noqa: N802 - BaseHTTPRequestHandler interface + try: + status, payload = resolve_get_payload(self.path) + except Exception: # noqa: BLE001 - preserve HTTP/CORS response on route failures + self._write_json( + HTTPStatus.INTERNAL_SERVER_ERROR, + build_error_payload("Unexpected backend error"), + ) + return + + if status is None: + self._write_json( + HTTPStatus.NOT_FOUND, + {"status": "error", "message": "Route not found"}, + ) + return + + self._write_json(status, payload) + + def log_message(self, format: str, *args: object) -> None: + # Keep local startup output clean unless future tasks need request logging. + return + + def _write_json(self, status: HTTPStatus, payload: dict[str, object]) -> None: + body = json.dumps(payload, default=_json_default).encode("utf-8") + self.send_response(status) + self._send_default_headers(content_length=len(body)) + self.end_headers() + self.wfile.write(body) + + def _send_default_headers(self, content_length: int | None = None) -> None: + origin = self.headers.get("Origin") + if origin in get_allowed_origins(): + self.send_header("Access-Control-Allow-Origin", origin) + self.send_header("Vary", "Origin") + + self.send_header("Content-Type", "application/json; charset=utf-8") + if content_length is not None: + self.send_header("Content-Length", str(content_length)) + + +def create_server() -> ThreadingHTTPServer: + """Build the HTTP server using the package-supported handler and bind settings.""" + host, port = get_bind_address() + return ThreadingHTTPServer((host, port), HealthHandler) + + +def _json_default(value: object) -> str: + """Serialize PostgreSQL date/time values before they can abort an HTTP response.""" + if isinstance(value, (date, datetime)): + return value.isoformat() + raise TypeError(f"Object of type {type(value).__name__} is not JSON serializable") + + +def run() -> None: + """Start the local bootstrap server.""" + host, port = get_bind_address() + server = create_server() + print(f"HLL Vietnam backend bootstrap listening on http://{host}:{port}") + server.serve_forever() + + +if __name__ == "__main__": + run() diff --git a/backend/app/monthly_mvp.py b/backend/app/monthly_mvp.py new file mode 100644 index 0000000..d58681b --- /dev/null +++ b/backend/app/monthly_mvp.py @@ -0,0 +1,163 @@ +"""Monthly MVP V1 scoring helpers.""" + +from __future__ import annotations + +import math +from typing import Mapping + + +MONTHLY_MVP_VERSION = "v1" +MONTHLY_MVP_MIN_MATCHES = 6 +MONTHLY_MVP_MIN_TIME_SECONDS = 21600 +MONTHLY_MVP_FULL_PARTICIPATION_SECONDS = 28800 +MONTHLY_MVP_TEAMKILL_PENALTY_CAP = 6.0 +MONTHLY_MVP_TEAMKILL_PENALTY_PER_KILL = 0.5 + + +def build_monthly_mvp_rankings( + aggregated_rows: list[Mapping[str, object]], + *, + limit: int, +) -> dict[str, object]: + """Transform aggregated monthly totals into ranked MVP V1 items.""" + eligible_rows = [ + _build_eligible_player_summary(row) + for row in aggregated_rows + if _is_eligible_player_row(row) + ] + + if not eligible_rows: + return { + "ranking_version": MONTHLY_MVP_VERSION, + "eligibility": _build_eligibility_metadata(), + "items": [], + "eligible_players_count": 0, + } + + max_total_kills = max(item["totals"]["kills"] for item in eligible_rows) + max_total_support = max(item["totals"]["support"] for item in eligible_rows) + max_kpm = max(item["derived"]["kpm"] for item in eligible_rows) + max_kda = max(item["derived"]["kda"] for item in eligible_rows) + + for item in eligible_rows: + component_scores = { + "kills_score": _log_normalized_score(item["totals"]["kills"], max_total_kills), + "support_score": _log_normalized_score(item["totals"]["support"], max_total_support), + "kpm_score": _log_normalized_score(item["derived"]["kpm"], max_kpm), + "kda_score": _log_normalized_score(item["derived"]["kda"], max_kda), + "participation_score": round( + 100 + * min( + 1.0, + item["totals"]["time_seconds"] / MONTHLY_MVP_FULL_PARTICIPATION_SECONDS, + ), + 3, + ), + } + teamkill_penalty = round( + min( + MONTHLY_MVP_TEAMKILL_PENALTY_CAP, + item["totals"]["teamkills"] * MONTHLY_MVP_TEAMKILL_PENALTY_PER_KILL, + ), + 3, + ) + item["component_scores"] = component_scores + item["teamkill_penalty"] = teamkill_penalty + item["mvp_score"] = round( + (0.35 * component_scores["kills_score"]) + + (0.20 * component_scores["support_score"]) + + (0.20 * component_scores["kpm_score"]) + + (0.15 * component_scores["kda_score"]) + + (0.10 * component_scores["participation_score"]) + - teamkill_penalty, + 3, + ) + + ranked_items = sorted( + eligible_rows, + key=lambda item: ( + -item["mvp_score"], + -item["component_scores"]["participation_score"], + -item["component_scores"]["kills_score"], + -item["component_scores"]["support_score"], + item["totals"]["teamkills"], + str(item["player"]["name"]).casefold(), + str(item["player"]["stable_player_key"]), + ), + ) + for position, item in enumerate(ranked_items[:limit], start=1): + item["ranking_position"] = position + + return { + "ranking_version": MONTHLY_MVP_VERSION, + "eligibility": _build_eligibility_metadata(), + "eligible_players_count": len(eligible_rows), + "items": ranked_items[:limit], + } + + +def _is_eligible_player_row(row: Mapping[str, object]) -> bool: + matches_count = int(row.get("matches_count") or 0) + time_seconds = int(row.get("total_time_seconds") or 0) + has_required_fields = all( + row.get(field_name) is not None + for field_name in ("total_kills", "total_deaths", "total_support", "total_time_seconds") + ) + return ( + has_required_fields + and matches_count >= MONTHLY_MVP_MIN_MATCHES + and time_seconds >= MONTHLY_MVP_MIN_TIME_SECONDS + ) + + +def _build_eligible_player_summary(row: Mapping[str, object]) -> dict[str, object]: + total_kills = int(row.get("total_kills") or 0) + total_deaths = int(row.get("total_deaths") or 0) + total_support = int(row.get("total_support") or 0) + total_teamkills = int(row.get("total_teamkills") or 0) + total_time_seconds = int(row.get("total_time_seconds") or 0) + total_time_minutes = max(total_time_seconds / 60.0, 1.0) + kpm = round(total_kills / total_time_minutes, 6) + kda = round(total_kills / max(total_deaths, 1), 6) + return { + "server": { + "slug": row.get("server_slug"), + "name": row.get("server_name"), + }, + "player": { + "stable_player_key": row.get("stable_player_key"), + "name": row.get("player_name"), + "steam_id": row.get("steam_id"), + }, + "matches_considered": int(row.get("matches_count") or 0), + "totals": { + "kills": total_kills, + "deaths": total_deaths, + "support": total_support, + "teamkills": total_teamkills, + "time_seconds": total_time_seconds, + "time_minutes": round(total_time_seconds / 60.0, 2), + }, + "derived": { + "kpm": kpm, + "kda": kda, + }, + } + + +def _log_normalized_score(value: float | int, max_value: float | int) -> float: + if value <= 0 or max_value <= 0: + return 0.0 + return round((100 * math.log1p(value)) / math.log1p(max_value), 3) + + +def _build_eligibility_metadata() -> dict[str, object]: + return { + "minimum_matches": MONTHLY_MVP_MIN_MATCHES, + "minimum_time_seconds": MONTHLY_MVP_MIN_TIME_SECONDS, + "minimum_time_hours": round(MONTHLY_MVP_MIN_TIME_SECONDS / 3600, 1), + "full_participation_seconds": MONTHLY_MVP_FULL_PARTICIPATION_SECONDS, + "full_participation_hours": round(MONTHLY_MVP_FULL_PARTICIPATION_SECONDS / 3600, 1), + "teamkill_penalty_per_kill": MONTHLY_MVP_TEAMKILL_PENALTY_PER_KILL, + "teamkill_penalty_cap": MONTHLY_MVP_TEAMKILL_PENALTY_CAP, + } diff --git a/backend/app/monthly_mvp_v2.py b/backend/app/monthly_mvp_v2.py new file mode 100644 index 0000000..5c83272 --- /dev/null +++ b/backend/app/monthly_mvp_v2.py @@ -0,0 +1,201 @@ +"""Monthly MVP V2 scoring helpers.""" + +from __future__ import annotations + +import math +from typing import Mapping + + +MONTHLY_MVP_V2_VERSION = "v2" +MONTHLY_MVP_V2_MIN_MATCHES = 6 +MONTHLY_MVP_V2_MIN_TIME_SECONDS = 21600 +MONTHLY_MVP_V2_FULL_PARTICIPATION_SECONDS = 28800 +MONTHLY_MVP_V2_ADVANCED_CONFIDENCE_KILLS = 35 +MONTHLY_MVP_V2_TEAMKILL_PENALTY_CAP = 8.0 +MONTHLY_MVP_V2_TEAMKILL_PENALTY_PER_KILL = 0.75 + + +def build_monthly_mvp_v2_rankings( + aggregated_rows: list[Mapping[str, object]], + *, + limit: int, +) -> dict[str, object]: + """Transform aggregated monthly totals plus V2 event signals into rankings.""" + eligible_rows = [ + _build_eligible_player_summary(row) + for row in aggregated_rows + if _is_eligible_player_row(row) + ] + + if not eligible_rows: + return { + "ranking_version": MONTHLY_MVP_V2_VERSION, + "eligibility": _build_eligibility_metadata(), + "eligible_players_count": 0, + "items": [], + } + + max_total_kills = max(item["totals"]["kills"] for item in eligible_rows) + max_total_support = max(item["totals"]["support"] for item in eligible_rows) + max_kpm = max(item["derived"]["kpm"] for item in eligible_rows) + max_kda = max(item["derived"]["kda"] for item in eligible_rows) + max_rivalry_edge = max(item["advanced"]["rivalry_edge_raw"] for item in eligible_rows) + max_duel_control = max(item["advanced"]["duel_control_raw"] for item in eligible_rows) + + for item in eligible_rows: + component_scores = { + "kills_score": _log_normalized_score(item["totals"]["kills"], max_total_kills), + "support_score": _log_normalized_score(item["totals"]["support"], max_total_support), + "kpm_score": _log_normalized_score(item["derived"]["kpm"], max_kpm), + "kda_score": _log_normalized_score(item["derived"]["kda"], max_kda), + "participation_score": round( + 100 + * min( + 1.0, + item["totals"]["time_seconds"] / MONTHLY_MVP_V2_FULL_PARTICIPATION_SECONDS, + ), + 3, + ), + "rivalry_edge_score": _log_normalized_score( + item["advanced"]["rivalry_edge_raw"], + max_rivalry_edge, + ), + "duel_control_score": _log_normalized_score( + item["advanced"]["duel_control_raw"], + max_duel_control, + ), + } + advanced_confidence = round( + min( + 1.0, + item["totals"]["kills"] / MONTHLY_MVP_V2_ADVANCED_CONFIDENCE_KILLS, + ), + 3, + ) + teamkill_penalty_v2 = round( + min( + MONTHLY_MVP_V2_TEAMKILL_PENALTY_CAP, + item["totals"]["teamkills"] * MONTHLY_MVP_V2_TEAMKILL_PENALTY_PER_KILL, + ), + 3, + ) + item["component_scores"] = component_scores + item["advanced_confidence"] = advanced_confidence + item["teamkill_penalty_v2"] = teamkill_penalty_v2 + item["mvp_v2_score"] = round( + (0.30 * component_scores["kills_score"]) + + (0.18 * component_scores["support_score"]) + + (0.18 * component_scores["kpm_score"]) + + (0.12 * component_scores["kda_score"]) + + (0.10 * component_scores["participation_score"]) + + advanced_confidence + * ( + (0.07 * component_scores["rivalry_edge_score"]) + + (0.05 * component_scores["duel_control_score"]) + ) + - teamkill_penalty_v2, + 3, + ) + + ranked_items = sorted( + eligible_rows, + key=lambda item: ( + -item["mvp_v2_score"], + -item["advanced_confidence"], + -item["component_scores"]["participation_score"], + -item["component_scores"]["kills_score"], + -item["component_scores"]["rivalry_edge_score"], + item["totals"]["teamkills"], + str(item["player"]["name"]).casefold(), + str(item["player"]["stable_player_key"]), + ), + ) + for position, item in enumerate(ranked_items[:limit], start=1): + item["ranking_position"] = position + + return { + "ranking_version": MONTHLY_MVP_V2_VERSION, + "eligibility": _build_eligibility_metadata(), + "eligible_players_count": len(eligible_rows), + "items": ranked_items[:limit], + } + + +def _is_eligible_player_row(row: Mapping[str, object]) -> bool: + matches_count = int(row.get("matches_count") or 0) + time_seconds = int(row.get("total_time_seconds") or 0) + has_required_fields = all( + row.get(field_name) is not None + for field_name in ("total_kills", "total_deaths", "total_support", "total_time_seconds") + ) + return ( + has_required_fields + and matches_count >= MONTHLY_MVP_V2_MIN_MATCHES + and time_seconds >= MONTHLY_MVP_V2_MIN_TIME_SECONDS + ) + + +def _build_eligible_player_summary(row: Mapping[str, object]) -> dict[str, object]: + total_kills = int(row.get("total_kills") or 0) + total_deaths = int(row.get("total_deaths") or 0) + total_support = int(row.get("total_support") or 0) + total_teamkills = int(row.get("total_teamkills") or 0) + total_time_seconds = int(row.get("total_time_seconds") or 0) + total_time_minutes = max(total_time_seconds / 60.0, 1.0) + most_killed_count = int(row.get("most_killed_count") or 0) + death_by_count = int(row.get("death_by_count") or 0) + duel_control_raw = int(row.get("duel_control_raw") or 0) + kpm = round(total_kills / total_time_minutes, 6) + kda = round(total_kills / max(total_deaths, 1), 6) + return { + "server": { + "slug": row.get("server_slug"), + "name": row.get("server_name"), + }, + "player": { + "stable_player_key": row.get("stable_player_key"), + "name": row.get("player_name"), + "steam_id": row.get("steam_id"), + }, + "matches_considered": int(row.get("matches_count") or 0), + "totals": { + "kills": total_kills, + "deaths": total_deaths, + "support": total_support, + "teamkills": total_teamkills, + "time_seconds": total_time_seconds, + "time_minutes": round(total_time_seconds / 60.0, 2), + }, + "derived": { + "kpm": kpm, + "kda": kda, + }, + "advanced": { + "most_killed_count": most_killed_count, + "death_by_count": death_by_count, + "rivalry_edge_raw": max(0, most_killed_count - death_by_count), + "duel_control_raw": duel_control_raw, + }, + } + + +def _log_normalized_score(value: float | int, max_value: float | int) -> float: + if value <= 0 or max_value <= 0: + return 0.0 + return round((100 * math.log1p(value)) / math.log1p(max_value), 3) + + +def _build_eligibility_metadata() -> dict[str, object]: + return { + "minimum_matches": MONTHLY_MVP_V2_MIN_MATCHES, + "minimum_time_seconds": MONTHLY_MVP_V2_MIN_TIME_SECONDS, + "minimum_time_hours": round(MONTHLY_MVP_V2_MIN_TIME_SECONDS / 3600, 1), + "full_participation_seconds": MONTHLY_MVP_V2_FULL_PARTICIPATION_SECONDS, + "full_participation_hours": round( + MONTHLY_MVP_V2_FULL_PARTICIPATION_SECONDS / 3600, + 1, + ), + "advanced_confidence_kills": MONTHLY_MVP_V2_ADVANCED_CONFIDENCE_KILLS, + "teamkill_penalty_per_kill": MONTHLY_MVP_V2_TEAMKILL_PENALTY_PER_KILL, + "teamkill_penalty_cap": MONTHLY_MVP_V2_TEAMKILL_PENALTY_CAP, + } diff --git a/backend/app/normalizers.py b/backend/app/normalizers.py new file mode 100644 index 0000000..d35d14a --- /dev/null +++ b/backend/app/normalizers.py @@ -0,0 +1,164 @@ +"""Normalization helpers for provisional server collection flows.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING +from typing import Mapping + +if TYPE_CHECKING: + from .a2s_client import A2SServerInfo + + +MAP_NAME_ALIASES = { + "stmarie": "St. Marie Du Mont", + "stmariedumont": "St. Marie Du Mont", + "saintemariedumont": "St. Marie Du Mont", + "saintemariedumontwarfare": "St. Marie Du Mont", + "saintemariedumontoffensiveus": "St. Marie Du Mont", + "saintemariedumontoffensiveger": "St. Marie Du Mont", + "saintemariedumontnight": "St. Marie Du Mont", + "saintemariedumontovercast": "St. Marie Du Mont", + "sainte-mariedumont": "St. Marie Du Mont", + "sainte-marie-du-mont": "St. Marie Du Mont", + "stmereeglise": "St. Mere Eglise", + "stmereeglisewarfare": "St. Mere Eglise", + "stmereegliseoffensiveus": "St. Mere Eglise", + "stmereegliseoffensiveger": "St. Mere Eglise", + "saintemereeglise": "St. Mere Eglise", + "sainte-mere-eglise": "St. Mere Eglise", + "purpleheartlane": "Purple Heart Lane", + "utahbeach": "Utah Beach", + "omahabeach": "Omaha Beach", + "hurtgenforest": "Hurtgen Forest", + "hill400": "Hill 400", + "foy": "Foy", + "kursk": "Kursk", + "kharkov": "Kharkov", + "kharkiv": "Kharkiv", + "stalingrad": "Stalingrad", + "remagen": "Remagen", + "driel": "Driel", + "elalamein": "El Alamein", + "mortain": "Mortain", + "carentan": "Carentan", + "devn": "Elsenborn Ridge", + "elsenbornridge": "Elsenborn Ridge", + "elsenborn": "Elsenborn Ridge", + "smolensk": "Smolensk", + "smolenskwarfare": "Smolensk", + "smolenskoffensiverus": "Smolensk", + "smolenskoffensiveger": "Smolensk", + "developertestmap": "Smolensk", + "devq": "Smolensk", +} + + +def normalize_server_record( + raw_record: Mapping[str, object], + *, + source_name: str, +) -> dict[str, object]: + """Normalize a raw server record into the collector's internal shape.""" + external_server_id = _string_or_none(raw_record.get("external_server_id")) + return { + "external_server_id": external_server_id, + "server_name": _string_or_default(raw_record.get("server_name"), "Unknown server"), + "status": _normalize_status(raw_record.get("status")), + "players": _coerce_int(raw_record.get("players")), + "max_players": _coerce_int(raw_record.get("max_players")), + "current_map": normalize_map_name(raw_record.get("current_map")), + "region": _string_or_none(raw_record.get("region")), + "source_name": source_name, + "snapshot_origin": "controlled-fallback", + "source_ref": external_server_id or source_name, + } + + +def normalize_a2s_server_info( + server_info: "A2SServerInfo", + *, + source_name: str, + external_server_id: str | None = None, + region: str | None = None, +) -> dict[str, object]: + """Normalize a probed A2S payload into the collector's internal shape.""" + resolved_external_id = external_server_id or ( + f"a2s:{server_info.host}:{server_info.query_port}" + ) + return { + "external_server_id": resolved_external_id, + "server_name": server_info.server_name or "Unknown server", + "status": "online", + "players": server_info.players, + "max_players": server_info.max_players, + "current_map": normalize_map_name(server_info.map_name), + "region": region, + "source_name": source_name, + "snapshot_origin": "real-a2s", + "source_ref": f"a2s://{server_info.host}:{server_info.query_port}", + } + + +def normalize_map_name(value: object) -> str | None: + """Normalize internal or abbreviated HLL map labels into a stable display name.""" + normalized = _string_or_none(value) + if normalized is None: + return None + + alias_key = "".join(character.lower() for character in normalized if character.isalnum()) + alias_match = MAP_NAME_ALIASES.get(alias_key) + if alias_match: + return alias_match + + for candidate_key, candidate_label in MAP_NAME_ALIASES.items(): + if alias_key.startswith(candidate_key): + return candidate_label + + prettified = _prettify_map_name(normalized) + return prettified or normalized + + +def _normalize_status(value: object) -> str: + if not isinstance(value, str): + return "unknown" + + normalized = value.strip().lower() + if normalized in {"online", "offline", "unknown"}: + return normalized + + return "unknown" + + +def _coerce_int(value: object) -> int | None: + if value is None: + return None + + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _string_or_none(value: object) -> str | None: + if not isinstance(value, str): + return None + + stripped = value.strip() + return stripped or None + + +def _string_or_default(value: object, default: str) -> str: + normalized = _string_or_none(value) + return normalized or default + + +def _prettify_map_name(value: str) -> str: + text = value.replace("_", " ").replace("-", " ").strip() + compact_text = " ".join(text.split()) + if not compact_text: + return value + + return " ".join( + word.upper() if word.isdigit() else word.capitalize() + for word in compact_text.split(" ") + ) diff --git a/backend/app/payloads.py b/backend/app/payloads.py new file mode 100644 index 0000000..69efea5 --- /dev/null +++ b/backend/app/payloads.py @@ -0,0 +1,2187 @@ +"""Payload builders for the HLL Vietnam backend.""" + +from __future__ import annotations + +from datetime import datetime, timezone +import re + +from .config import ( + get_historical_data_source_kind, + get_live_data_source_kind, + get_refresh_interval_seconds, +) +from .data_sources import ( + LIVE_SOURCE_A2S, + SOURCE_KIND_PUBLIC_SCOREBOARD, + SOURCE_KIND_RCON, + build_source_attempt, + build_source_policy, + build_historical_runtime_source_policy, + describe_historical_runtime_policy, + get_live_data_source, + get_rcon_historical_read_model, +) +from .historical_snapshot_storage import get_historical_snapshot +from .historical_snapshots import ( + DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + DEFAULT_SNAPSHOT_WINDOW, + DEFAULT_WEEKLY_SNAPSHOT_WINDOW, + SNAPSHOT_TYPE_MONTHLY_LEADERBOARD, + SNAPSHOT_TYPE_MONTHLY_MVP, + SNAPSHOT_TYPE_MONTHLY_MVP_V2, + SNAPSHOT_TYPE_PLAYER_EVENT_DEATH_BY, + SNAPSHOT_TYPE_PLAYER_EVENT_DUELS, + SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED, + SNAPSHOT_TYPE_PLAYER_EVENT_TEAMKILLS, + SNAPSHOT_TYPE_PLAYER_EVENT_WEAPON_KILLS, + SNAPSHOT_TYPE_RECENT_MATCHES, + SNAPSHOT_TYPE_SERVER_SUMMARY, + SNAPSHOT_TYPE_WEEKLY_LEADERBOARD, +) +from .historical_storage import ( + ALL_SERVERS_SLUG, + get_historical_match_detail, + get_historical_player_profile, + list_historical_server_summaries, + list_monthly_leaderboard, + list_recent_historical_matches, + list_weekly_leaderboard, + list_weekly_top_kills, +) +from .rcon_historical_read_model import get_rcon_historical_match_detail +from .normalizers import normalize_map_name +from .rcon_client import load_rcon_targets, query_live_server_sample +from .rcon_admin_log_storage import list_current_match_kill_feed, list_current_match_player_stats +from .scoreboard_origins import get_trusted_public_scoreboard_origin +from .storage import list_latest_snapshots, list_server_history, list_snapshot_history + + +def build_health_payload() -> dict[str, str]: + """Return a small status payload without committing to business contracts.""" + return { + "status": "ok", + "service": "hll-vietnam-backend", + "phase": "bootstrap", + "live_data_source": get_live_data_source_kind(), + "historical_data_source": get_historical_data_source_kind(), + "historical_runtime_policy": describe_historical_runtime_policy()["mode"], + "live_runtime_policy": ( + "rcon-first-with-a2s-fallback" + if get_live_data_source_kind() == SOURCE_KIND_RCON + else "a2s-primary" + ), + } + + +def build_community_payload() -> dict[str, object]: + """Return placeholder community content aligned with the documented contract.""" + return { + "status": "ok", + "data": { + "title": "Comunidad Hispana HLL Vietnam", + "summary": "Punto de encuentro para jugadores, escuadras y comunidad.", + "discord_invite_url": "https://discord.com/invite/PedEqZ2Xsa", + }, + } + + +def build_trailer_payload() -> dict[str, object]: + """Return placeholder trailer metadata for future frontend consumption.""" + return { + "status": "ok", + "data": { + "video_url": "https://www.youtube.com/embed/JzYzYNVWZ_A", + "title": "Trailer HLL Vietnam", + "provider": "youtube", + }, + } + + +def build_discord_payload() -> dict[str, object]: + """Return public Discord placeholder data without real integration.""" + return { + "status": "ok", + "data": { + "invite_url": "https://discord.com/invite/PedEqZ2Xsa", + "label": "Unirse al Discord", + "availability": "manual", + }, + } + + +def build_servers_payload() -> dict[str, object]: + """Return current server status, refreshing stale snapshots before responding.""" + max_snapshot_age_seconds = get_refresh_interval_seconds() + persisted_items = _select_primary_snapshot_items( + _enrich_server_items(list_latest_snapshots()) + ) + persisted_snapshot_at = _resolve_last_snapshot_at(persisted_items) + persisted_snapshot_age_seconds = _calculate_snapshot_age_seconds(persisted_snapshot_at) + + refresh_attempted = _should_refresh_snapshot( + persisted_items, + persisted_snapshot_age_seconds, + max_snapshot_age_seconds, + ) + refresh_errors: list[dict[str, object]] = [] + refresh_source_policy = build_source_policy( + primary_source=get_live_data_source_kind(), + selected_source="none", + fallback_reason=None, + source_attempts=[], + ) + + if refresh_attempted: + refreshed_items, refresh_errors, refresh_source_policy = _try_collect_real_time_snapshot() + if refreshed_items: + refreshed_snapshot_at = _resolve_last_snapshot_at(refreshed_items) + refreshed_snapshot_age_seconds = _calculate_snapshot_age_seconds(refreshed_snapshot_at) + return _build_servers_response( + items=refreshed_items, + response_source=_build_live_response_source(refresh_source_policy), + last_snapshot_at=refreshed_snapshot_at, + snapshot_age_seconds=refreshed_snapshot_age_seconds, + max_snapshot_age_seconds=max_snapshot_age_seconds, + refresh_attempted=True, + refresh_status="success", + refresh_errors=refresh_errors, + source_policy=refresh_source_policy, + ) + + if persisted_items: + refresh_status = "failed" if refresh_attempted else "not-needed" + response_source = ( + "persisted-stale-snapshot" if refresh_attempted else "persisted-fresh-snapshot" + ) + return _build_servers_response( + items=persisted_items, + response_source=response_source, + last_snapshot_at=persisted_snapshot_at, + snapshot_age_seconds=persisted_snapshot_age_seconds, + max_snapshot_age_seconds=max_snapshot_age_seconds, + refresh_attempted=refresh_attempted, + refresh_status=refresh_status, + refresh_errors=refresh_errors, + source_policy=_infer_live_source_policy_from_items( + persisted_items, + refresh_attempted=refresh_attempted, + refresh_errors=refresh_errors, + ), + ) + + return { + "status": "ok", + "data": { + "title": "Estado actual de servidores", + "context": "current-hll-status", + "source": "no-snapshot-available", + "last_snapshot_at": None, + "snapshot_age_seconds": None, + "snapshot_age_minutes": None, + "max_snapshot_age_seconds": max_snapshot_age_seconds, + "is_stale": True, + "freshness": "stale", + "refresh_attempted": refresh_attempted, + "refresh_status": "failed" if refresh_attempted else "not-needed", + "refresh_errors": refresh_errors, + **refresh_source_policy, + "items": [], + }, + } + + +def build_server_latest_payload() -> dict[str, object]: + """Return the latest persisted snapshot for each known server.""" + items = _enrich_server_items(list_latest_snapshots()) + return { + "status": "ok", + "data": { + "title": "Ultimo estado conocido de servidores", + "context": "current-hll-history", + "source": "local-snapshot-storage", + "summary_window_size": 6, + "items": items, + }, + } + + +def build_server_history_payload(*, limit: int = 20) -> dict[str, object]: + """Return recent persisted snapshots across all known servers.""" + items = _enrich_server_items(list_snapshot_history(limit=limit)) + return { + "status": "ok", + "data": { + "title": "Historial reciente de servidores", + "context": "current-hll-history", + "source": "local-snapshot-storage", + "limit": limit, + "items": items, + }, + } + + +def build_server_detail_history_payload( + server_id: str, + *, + limit: int = 20, +) -> dict[str, object]: + """Return recent persisted snapshots for one server.""" + items = _enrich_server_items(list_server_history(server_id, limit=limit)) + return { + "status": "ok", + "data": { + "title": "Historial por servidor", + "context": "current-hll-history", + "source": "local-snapshot-storage", + "server_id": server_id, + "limit": limit, + "items": items, + }, + } + + +def build_current_match_payload(*, server_slug: str) -> dict[str, object]: + """Return the live page projection for one trusted active server.""" + origin = get_trusted_public_scoreboard_origin(server_slug) + if origin is None: + raise ValueError("Unsupported current match server.") + + sample = _query_current_match_rcon_sample(origin.slug) + if sample is not None: + normalized = sample["normalized"] + raw_session = sample["raw_session"] + captured_at = _utc_timestamp_now() + map_id = raw_session.get("mapId") or normalized.get("current_map") + map_name = raw_session.get("mapName") or map_id + map_pretty_name = normalize_map_name(map_name) + return { + "status": "ok", + "data": { + "found": True, + "server_slug": origin.slug, + "server_name": normalized.get("server_name") or origin.display_name, + "status": normalized.get("status") or "unavailable", + "map": map_pretty_name, + "map_id": map_id, + "map_pretty_name": map_pretty_name, + "game_mode": normalized.get("game_mode"), + "started_at": None, + "allied_score": normalized.get("allied_score"), + "axis_score": normalized.get("axis_score"), + "allied_players": normalized.get("allied_players"), + "axis_players": normalized.get("axis_players"), + "players": normalized.get("players"), + "max_players": normalized.get("max_players"), + # RCA: getSession currently reports 0 while the public scoreboard + # can show players, so session population is exposed but unverified. + "player_count_quality": ( + "rcon-session-unverified" + if normalized.get("players") is not None + else None + ), + "player_count_source": _source_when_present( + normalized.get("players"), + source="rcon-session", + ), + "score_source": _source_when_present( + normalized.get("allied_score"), + normalized.get("axis_score"), + source="rcon-session", + ), + "map_source": _source_when_present(map_id, map_name, source="rcon-session"), + "match_time_seconds": normalized.get("match_time_seconds"), + "remaining_match_time_seconds": normalized.get( + "remaining_match_time_seconds" + ), + "captured_at": captured_at, + "updated_at": captured_at, + "public_scoreboard_url": origin.base_url, + }, + } + + # The generic live server snapshot is a fallback only. It intentionally + # drops richer RCON session fields such as game mode and current scores. + server_payload = build_servers_payload() + server_data = server_payload["data"] + item = _find_current_match_snapshot_item(server_data.get("items", []), origin) + return { + "status": "ok", + "data": { + "found": item is not None, + "server_slug": origin.slug, + "server_name": item.get("server_name") if item else origin.display_name, + "status": item.get("status") if item else "unavailable", + "map": item.get("current_map") if item else None, + "map_id": None, + "map_pretty_name": item.get("current_map") if item else None, + "game_mode": item.get("game_mode") if item else None, + "started_at": item.get("started_at") if item else None, + "allied_score": item.get("allied_score") if item else None, + "axis_score": item.get("axis_score") if item else None, + "allied_players": item.get("allied_players") if item else None, + "axis_players": item.get("axis_players") if item else None, + "players": item.get("players") if item else None, + "max_players": item.get("max_players") if item else None, + "player_count_quality": _snapshot_player_count_quality(item), + "player_count_source": _snapshot_player_count_source(item), + "score_source": _source_when_present( + item.get("allied_score") if item else None, + item.get("axis_score") if item else None, + source="live-server-snapshot", + ), + "map_source": _source_when_present( + item.get("current_map") if item else None, + source="live-server-snapshot", + ), + "match_time_seconds": item.get("match_time_seconds") if item else None, + "remaining_match_time_seconds": ( + item.get("remaining_match_time_seconds") if item else None + ), + "captured_at": item.get("captured_at") if item else None, + "updated_at": server_data.get("last_snapshot_at"), + "public_scoreboard_url": origin.base_url, + }, + } + + +def _find_current_match_snapshot_item( + items: list[dict[str, object]], + origin: object, +) -> dict[str, object] | None: + """Resolve one trusted live snapshot for the current-match fallback.""" + origin_slug = str(getattr(origin, "slug", "") or "").strip() + source_markers = { + "comunidad-hispana-01": ("152.114.195.174", ":7779"), + "comunidad-hispana-02": ("152.114.195.150", ":7879"), + }.get(origin_slug) + server_number = getattr(origin, "server_number", None) + + for item in items: + if any( + str(item.get(field) or "").strip() == origin_slug + for field in ( + "external_server_id", + "server_slug", + "target_key", + "slug", + "community_slug", + ) + ): + return item + + server_label = str(item.get("server_name") or item.get("name") or "") + if _current_match_server_name_matches(server_label, server_number): + return item + + source_identity = " ".join( + str(item.get(field) or "") for field in ("external_server_id", "source_ref") + ) + if source_markers and any(marker in source_identity for marker in source_markers): + return item + + return None + + +def _current_match_server_name_matches(server_label: str, server_number: object) -> bool: + if not isinstance(server_number, int): + return False + + normalized_label = server_label.strip().casefold() + if not normalized_label: + return False + + numbered_marker = re.compile(rf"(? dict[str, object]: + """Return normalized AdminLog kill rows for one trusted current-match page.""" + origin = get_trusted_public_scoreboard_origin(server_slug) + if origin is None: + raise ValueError("Unsupported current match server.") + feed = list_current_match_kill_feed( + server_key=origin.slug, + limit=limit, + since_event_id=since_event_id, + ) + return { + "status": "ok", + "data": { + "server_slug": origin.slug, + "server_name": origin.display_name, + **feed, + }, + } + + +def build_current_match_player_stats_payload(*, server_slug: str) -> dict[str, object]: + """Return current player stats only when safe AdminLog evidence exists.""" + origin = get_trusted_public_scoreboard_origin(server_slug) + if origin is None: + raise ValueError("Unsupported current match server.") + stats = list_current_match_player_stats(server_key=origin.slug) + return { + "status": "ok", + "data": { + "server_slug": origin.slug, + "server_name": origin.display_name, + **stats, + }, + } + + +def _query_current_match_rcon_sample(server_slug: str) -> dict[str, object] | None: + """Read one configured trusted RCON target for the current-match view.""" + try: + targets = load_rcon_targets() + except (RuntimeError, ValueError): + return None + target = next( + (candidate for candidate in targets if candidate.external_server_id == server_slug), + None, + ) + if target is None: + return None + try: + return query_live_server_sample(target) + except Exception: # noqa: BLE001 - fall back to the existing live snapshot read + return None + + +def _utc_timestamp_now() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _source_when_present(*values: object, source: str) -> str | None: + return source if any(value is not None for value in values) else None + + +def _snapshot_player_count_quality(item: dict[str, object] | None) -> str | None: + if item is None or item.get("players") is None: + return None + if item.get("snapshot_origin") == "real-rcon": + return "rcon-session-unverified" + if item.get("snapshot_origin") == "real-a2s": + return "a2s-query" + return "snapshot-unverified" + + +def _snapshot_player_count_source(item: dict[str, object] | None) -> str | None: + if item is None or item.get("players") is None: + return None + if item.get("snapshot_origin") == "real-rcon": + return "rcon-session" + if item.get("snapshot_origin") == "real-a2s": + return "a2s" + return "live-server-snapshot" + + +def build_error_payload(message: str) -> dict[str, str]: + """Return the shared error payload shape used by the backend bootstrap.""" + return { + "status": "error", + "message": message, + } + + +def build_weekly_top_kills_payload( + *, + limit: int = 10, + server_id: str | None = None, +) -> dict[str, object]: + """Return weekly top kills grouped by real community server.""" + result = list_weekly_top_kills(limit=limit, server_id=server_id) + return { + "status": "ok", + "data": { + "title": "Top kills semanales por servidor", + "context": "historical-top-kills", + "metric": "kills", + "summary_basis": "closed-matches-last-7-days", + "window_days": 7, + "window_start": result["window_start"], + "window_end": result["window_end"], + "limit": limit, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-weekly-top-kills", + ), + "items": result["items"], + }, + } + + +def build_historical_leaderboard_payload( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", + timeframe: str = "weekly", +) -> dict[str, object]: + """Return one historical leaderboard for the requested timeframe and metric.""" + normalized_timeframe = timeframe.strip().lower() if isinstance(timeframe, str) else "weekly" + if normalized_timeframe == "monthly": + result = list_monthly_leaderboard(limit=limit, server_id=server_id, metric=metric) + summary_basis = "closed-matches-calendar-month" + context = "historical-monthly-leaderboard" + else: + normalized_timeframe = "weekly" + result = list_weekly_leaderboard(limit=limit, server_id=server_id, metric=metric) + summary_basis = "closed-matches-calendar-week" + context = "historical-weekly-leaderboard" + + is_all_servers = server_id == ALL_SERVERS_SLUG + return { + "status": "ok", + "data": { + "title": _build_leaderboard_title( + metric=metric, + timeframe=normalized_timeframe, + is_all_servers=is_all_servers, + ), + "context": context, + "timeframe": normalized_timeframe, + "metric": metric, + "summary_basis": summary_basis, + "window_days": result.get("window_days", 7), + "window_start": result["window_start"], + "window_end": result["window_end"], + "window_kind": result.get("window_kind"), + "window_label": result.get("window_label"), + "uses_fallback": bool(result.get("uses_fallback")), + "selection_reason": result.get("selection_reason"), + "current_week_start": result.get("current_week_start"), + "current_week_closed_matches": result.get("current_week_closed_matches"), + "previous_week_closed_matches": result.get("previous_week_closed_matches"), + "current_month_start": result.get("current_month_start"), + "current_month_closed_matches": result.get("current_month_closed_matches"), + "previous_month_closed_matches": result.get("previous_month_closed_matches"), + "sufficient_sample": result.get("sufficient_sample"), + "limit": limit, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-competitive-leaderboards", + ), + "items": result["items"], + }, + } + + +def build_weekly_leaderboard_payload( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", +) -> dict[str, object]: + """Return one weekly historical leaderboard for the requested metric.""" + return build_historical_leaderboard_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe="weekly", + ) + + +def build_monthly_leaderboard_payload( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", +) -> dict[str, object]: + """Return one monthly historical leaderboard for the requested metric.""" + return build_historical_leaderboard_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe="monthly", + ) + + +def build_recent_historical_matches_payload( + *, + limit: int = 20, + server_slug: str | None = None, +) -> dict[str, object]: + """Return recent historical matches from persisted CRCON data.""" + if get_historical_data_source_kind() == "rcon": + data_source = get_rcon_historical_read_model() + if data_source is not None: + capabilities = data_source.describe_capabilities() + try: + items = data_source.list_recent_activity(server_key=server_slug, limit=limit) + except Exception as error: # noqa: BLE001 - explicit runtime fallback boundary + items = [] + rcon_source_policy = build_historical_runtime_source_policy( + operation="historical-recent-matches", + rcon_status="error", + fallback_reason="rcon-historical-read-model-request-failed", + rcon_message=str(error), + ) + else: + rcon_source_policy = build_historical_runtime_source_policy( + operation="historical-recent-matches", + rcon_status=( + "success" + if data_source.has_recent_activity_coverage(items) + else "empty" + ), + fallback_reason="rcon-historical-read-model-has-no-recent-activity", + ) + + if not bool(rcon_source_policy.get("fallback_used")): + if 0 < len(items) < limit and not _recent_items_include_rcon_results(items): + fallback_items = [ + _with_recent_result_source(item, "public-scoreboard-fallback") + for item in list_recent_historical_matches( + limit=limit, + server_slug=server_slug, + ) + ] + merged_items = _merge_recent_match_items( + primary_items=items, + fallback_items=fallback_items, + limit=limit, + ) + if len(merged_items) > len(items): + return { + "status": "ok", + "data": { + "title": "Actividad competitiva reciente capturada por RCON", + "context": "historical-recent-matches", + "source": "hybrid-rcon-plus-public-scoreboard", + "historical_data_source": "rcon", + "supported": True, + "coverage_basis": "rcon-competitive-windows-plus-public-scoreboard-fallback", + "limit": limit, + "server_slug": server_slug, + **build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source="hybrid-rcon-plus-public-scoreboard", + fallback_used=True, + fallback_reason=( + "rcon-historical-recent-matches-did-not-reach-requested-limit" + ), + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + reason="historical-recent-matches-served-by-rcon", + ), + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="fallback", + status="success", + reason="historical-recent-matches-completed-from-public-scoreboard", + message=( + f"RCON returned {len(items)} items, completed to " + f"{len(merged_items)} of requested {limit}." + ), + ), + ], + ), + "items": merged_items, + "capabilities": capabilities, + }, + } + return { + "status": "ok", + "data": { + "title": "Actividad competitiva reciente capturada por RCON", + "context": "historical-recent-matches", + "source": "rcon-historical-competitive-read-model", + "historical_data_source": "rcon", + "supported": True, + "coverage_basis": "rcon-competitive-windows", + "limit": limit, + "server_slug": server_slug, + **rcon_source_policy, + "items": items, + "capabilities": capabilities, + }, + } + items = [ + _with_recent_result_source(item, "public-scoreboard-fallback") + for item in list_recent_historical_matches(limit=limit, server_slug=server_slug) + ] + return { + "status": "ok", + "data": { + "title": "Partidas recientes por servidor", + "context": "historical-recent-matches", + "source": "historical-crcon-storage", + "limit": limit, + "server_slug": server_slug, + **( + rcon_source_policy + if get_historical_data_source_kind() == "rcon" + and "rcon_source_policy" in locals() + else _resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-has-no-recent-activity", + ) + ), + "items": items, + }, + } + + +def build_historical_match_detail_payload( + *, + server_slug: str, + match_id: str, +) -> dict[str, object]: + """Return available detail for one historical match without inventing external URLs.""" + if get_historical_data_source_kind() == SOURCE_KIND_RCON: + item = get_rcon_historical_match_detail( + server_key=server_slug, + match_id=match_id, + ) + if item is not None: + return { + "status": "ok", + "data": { + "title": "Detalle de partida historica", + "context": "historical-match-detail", + "source": "rcon-historical-competitive-read-model", + "found": True, + **build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=SOURCE_KIND_RCON, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + reason="historical-match-detail-served-by-rcon", + ) + ], + ), + "item": item, + }, + } + + item = get_historical_match_detail(server_slug=server_slug, match_id=match_id) + return { + "status": "ok", + "data": { + "title": "Detalle de partida historica", + "context": "historical-match-detail", + "source": "historical-crcon-storage", + "found": item is not None, + **( + _resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-has-no-match-detail" + ) + if get_historical_data_source_kind() == SOURCE_KIND_RCON + else build_source_policy( + primary_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + selected_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="primary", + status="success" if item is not None else "empty", + reason="historical-match-detail-served-by-public-scoreboard", + ) + ], + ) + ), + "item": item, + }, + } + + +def build_monthly_mvp_payload( + *, + limit: int = 10, + server_id: str | None = None, +) -> dict[str, object]: + """Return the precomputed monthly MVP payload through the stable API surface.""" + snapshot_payload = build_monthly_mvp_snapshot_payload( + limit=limit, + server_id=server_id, + ) + data = snapshot_payload["data"] + return { + "status": "ok", + "data": { + **data, + "title": _build_monthly_mvp_title( + is_all_servers=server_id == ALL_SERVERS_SLUG, + snapshot=False, + ), + "context": "historical-monthly-mvp", + "source": "historical-precomputed-snapshots", + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-monthly-mvp-yet", + ), + }, + } + + +def build_player_event_payload( + *, + limit: int = 10, + server_id: str | None = None, + view: str = "most-killed", +) -> dict[str, object]: + """Return one V2 player-event payload through the stable API surface.""" + snapshot_payload = build_player_event_snapshot_payload( + limit=limit, + server_id=server_id, + view=view, + ) + data = snapshot_payload["data"] + return { + "status": "ok", + "data": { + **data, + "title": _build_player_event_title( + view=view, + is_all_servers=server_id == ALL_SERVERS_SLUG, + snapshot=False, + ), + "context": "historical-player-events", + "source": "historical-precomputed-player-event-snapshots", + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-player-events-yet", + ), + }, + } + + +def build_monthly_mvp_v2_payload( + *, + limit: int = 10, + server_id: str | None = None, +) -> dict[str, object]: + """Return the precomputed monthly MVP V2 payload through the stable API surface.""" + snapshot_payload = build_monthly_mvp_v2_snapshot_payload( + limit=limit, + server_id=server_id, + ) + data = snapshot_payload["data"] + return { + "status": "ok", + "data": { + **data, + "title": _build_monthly_mvp_v2_title( + is_all_servers=server_id == ALL_SERVERS_SLUG, + snapshot=False, + ), + "context": "historical-monthly-mvp-v2", + "source": "historical-precomputed-snapshots", + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-monthly-mvp-v2-yet", + ), + }, + } + + +def build_historical_server_summary_snapshot_payload( + *, + server_slug: str | None = None, +) -> dict[str, object]: + """Return one precomputed summary snapshot without recalculating aggregates.""" + snapshot = _get_historical_snapshot_record( + server_key=server_slug, + snapshot_type=SNAPSHOT_TYPE_SERVER_SUMMARY, + window=DEFAULT_SNAPSHOT_WINDOW, + ) + payload = snapshot.get("payload") if snapshot else {} + item = payload.get("item") if isinstance(payload, dict) else None + return { + "status": "ok", + "data": { + "title": "Snapshot historico de resumen por servidor", + "context": "historical-server-summary-snapshot", + "source": "historical-precomputed-snapshots", + "server_slug": server_slug, + "found": snapshot is not None and isinstance(item, dict), + **( + build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=SOURCE_KIND_RCON, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + reason="server-summary-snapshot-served-by-rcon-competitive-model", + ) + ], + ) + if get_historical_data_source_kind() == SOURCE_KIND_RCON and isinstance(item, dict) + else _resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-historical-snapshots-yet", + ) + ), + **_build_historical_snapshot_metadata(snapshot), + "item": item if isinstance(item, dict) else None, + }, + } + + +def build_leaderboard_snapshot_payload( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", + timeframe: str = "weekly", +) -> dict[str, object]: + """Return one precomputed leaderboard snapshot for the requested timeframe.""" + normalized_timeframe = timeframe.strip().lower() if isinstance(timeframe, str) else "weekly" + if normalized_timeframe == "monthly": + snapshot_type = SNAPSHOT_TYPE_MONTHLY_LEADERBOARD + window = DEFAULT_MONTHLY_SNAPSHOT_WINDOW + context = "historical-monthly-leaderboard-snapshot" + else: + normalized_timeframe = "weekly" + snapshot_type = SNAPSHOT_TYPE_WEEKLY_LEADERBOARD + window = DEFAULT_WEEKLY_SNAPSHOT_WINDOW + context = "historical-weekly-leaderboard-snapshot" + + snapshot = _get_historical_snapshot_record( + server_key=server_id, + snapshot_type=snapshot_type, + metric=metric, + window=window, + ) + payload = snapshot.get("payload") if snapshot else {} + items = payload.get("items") if isinstance(payload, dict) else None + sliced_items = list(items[:limit]) if isinstance(items, list) else [] + runtime_enrichment_applied = False + if _leaderboard_snapshot_items_need_playtime_enrichment(sliced_items): + runtime_items = _load_runtime_leaderboard_items( + limit=limit, + server_id=server_id, + metric=metric, + timeframe=normalized_timeframe, + ) + if runtime_items: + sliced_items = runtime_items[:limit] + runtime_enrichment_applied = True + is_all_servers = server_id == ALL_SERVERS_SLUG + return { + "status": "ok", + "data": { + "title": _build_leaderboard_title( + metric=metric, + timeframe=normalized_timeframe, + is_all_servers=is_all_servers, + snapshot=True, + ), + "context": context, + "source": "historical-precomputed-snapshots", + "server_slug": server_id, + "timeframe": normalized_timeframe, + "metric": metric, + "found": snapshot is not None, + **_build_historical_snapshot_metadata(snapshot), + "window_days": payload.get("window_days") if isinstance(payload, dict) else 7, + "window_start": payload.get("window_start") if isinstance(payload, dict) else None, + "window_end": payload.get("window_end") if isinstance(payload, dict) else None, + "window_kind": payload.get("window_kind") if isinstance(payload, dict) else None, + "window_label": payload.get("window_label") if isinstance(payload, dict) else None, + "uses_fallback": bool(payload.get("uses_fallback")) if isinstance(payload, dict) else False, + "selection_reason": payload.get("selection_reason") if isinstance(payload, dict) else None, + "current_week_start": payload.get("current_week_start") if isinstance(payload, dict) else None, + "current_week_closed_matches": ( + payload.get("current_week_closed_matches") if isinstance(payload, dict) else None + ), + "previous_week_closed_matches": ( + payload.get("previous_week_closed_matches") if isinstance(payload, dict) else None + ), + "current_month_start": payload.get("current_month_start") if isinstance(payload, dict) else None, + "current_month_closed_matches": ( + payload.get("current_month_closed_matches") if isinstance(payload, dict) else None + ), + "previous_month_closed_matches": ( + payload.get("previous_month_closed_matches") if isinstance(payload, dict) else None + ), + "sufficient_sample": payload.get("sufficient_sample") if isinstance(payload, dict) else None, + "snapshot_limit": payload.get("limit") if isinstance(payload, dict) else None, + "limit": limit, + "runtime_enrichment": { + "applied": runtime_enrichment_applied, + "reason": ( + "snapshot-items-missing-total-time-seconds" + if runtime_enrichment_applied + else None + ), + }, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-historical-snapshots-yet", + ), + "items": sliced_items, + }, + } + + +def build_weekly_leaderboard_snapshot_payload( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", +) -> dict[str, object]: + """Return one precomputed weekly leaderboard snapshot.""" + return build_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe="weekly", + ) + + +def build_monthly_leaderboard_snapshot_payload( + *, + limit: int = 10, + server_id: str | None = None, + metric: str = "kills", +) -> dict[str, object]: + """Return one precomputed monthly leaderboard snapshot.""" + return build_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe="monthly", + ) + + +def build_recent_historical_matches_snapshot_payload( + *, + limit: int = 20, + server_slug: str | None = None, +) -> dict[str, object]: + """Return one precomputed recent-matches snapshot.""" + snapshot = _get_historical_snapshot_record( + server_key=server_slug, + snapshot_type=SNAPSHOT_TYPE_RECENT_MATCHES, + window=DEFAULT_SNAPSHOT_WINDOW, + ) + payload = snapshot.get("payload") if snapshot else {} + items = payload.get("items") if isinstance(payload, dict) else None + sliced_items = list(items[:limit]) if isinstance(items, list) else [] + if ( + get_historical_data_source_kind() == SOURCE_KIND_RCON + and 0 < len(sliced_items) < limit + ): + fallback_items = list_recent_historical_matches(limit=limit, server_slug=server_slug) + merged_items = _merge_recent_match_items( + primary_items=sliced_items, + fallback_items=fallback_items, + limit=limit, + ) + if len(merged_items) > len(sliced_items): + return { + "status": "ok", + "data": { + "title": "Snapshot historico de partidas recientes por servidor", + "context": "historical-recent-matches-snapshot", + "source": "historical-precomputed-snapshots", + "server_slug": server_slug, + "found": snapshot is not None, + **_build_historical_snapshot_metadata(snapshot), + "snapshot_limit": payload.get("limit") if isinstance(payload, dict) else None, + "limit": limit, + **build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source="hybrid-rcon-plus-public-scoreboard", + fallback_used=True, + fallback_reason="rcon-historical-recent-matches-did-not-reach-requested-limit", + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + reason="recent-matches-snapshot-served-by-rcon-competitive-model", + ), + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="fallback", + status="success", + reason="recent-matches-snapshot-completed-from-public-scoreboard", + message=( + f"RCON snapshot returned {len(sliced_items)} items, completed to " + f"{len(merged_items)} of requested {limit}." + ), + ), + ], + ), + "items": merged_items, + }, + } + return { + "status": "ok", + "data": { + "title": "Snapshot historico de partidas recientes por servidor", + "context": "historical-recent-matches-snapshot", + "source": "historical-precomputed-snapshots", + "server_slug": server_slug, + "found": snapshot is not None, + **_build_historical_snapshot_metadata(snapshot), + "snapshot_limit": payload.get("limit") if isinstance(payload, dict) else None, + "limit": limit, + **( + build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source=SOURCE_KIND_RCON, + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="success", + reason="recent-matches-snapshot-served-by-rcon-competitive-model", + ) + ], + ) + if get_historical_data_source_kind() == SOURCE_KIND_RCON and sliced_items + else _resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-historical-snapshots-yet", + ) + ), + "items": sliced_items, + }, + } + + +def build_monthly_mvp_snapshot_payload( + *, + limit: int = 10, + server_id: str | None = None, +) -> dict[str, object]: + """Return one precomputed monthly MVP snapshot.""" + snapshot = _get_historical_snapshot_record( + server_key=server_id, + snapshot_type=SNAPSHOT_TYPE_MONTHLY_MVP, + window=DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + ) + payload = snapshot.get("payload") if snapshot else {} + items = payload.get("items") if isinstance(payload, dict) else None + sliced_items = list(items[:limit]) if isinstance(items, list) else [] + return { + "status": "ok", + "data": { + "title": _build_monthly_mvp_title( + is_all_servers=server_id == ALL_SERVERS_SLUG, + snapshot=True, + ), + "context": "historical-monthly-mvp-snapshot", + "source": "historical-precomputed-snapshots", + "server_slug": server_id, + "timeframe": "monthly", + "metric": "mvp", + "found": snapshot is not None, + **_build_historical_snapshot_metadata(snapshot), + "month_key": payload.get("month_key") if isinstance(payload, dict) else None, + "window_days": payload.get("window_days") if isinstance(payload, dict) else None, + "window_start": payload.get("window_start") if isinstance(payload, dict) else None, + "window_end": payload.get("window_end") if isinstance(payload, dict) else None, + "window_kind": payload.get("window_kind") if isinstance(payload, dict) else None, + "window_label": payload.get("window_label") if isinstance(payload, dict) else None, + "uses_fallback": bool(payload.get("uses_fallback")) if isinstance(payload, dict) else False, + "selection_reason": payload.get("selection_reason") if isinstance(payload, dict) else None, + "current_month_start": payload.get("current_month_start") if isinstance(payload, dict) else None, + "current_month_closed_matches": ( + payload.get("current_month_closed_matches") if isinstance(payload, dict) else None + ), + "previous_month_closed_matches": ( + payload.get("previous_month_closed_matches") if isinstance(payload, dict) else None + ), + "sufficient_sample": payload.get("sufficient_sample") if isinstance(payload, dict) else None, + "eligibility": payload.get("eligibility") if isinstance(payload, dict) else None, + "ranking_version": payload.get("ranking_version") if isinstance(payload, dict) else None, + "eligible_players_count": ( + payload.get("eligible_players_count") if isinstance(payload, dict) else 0 + ), + "snapshot_limit": payload.get("limit") if isinstance(payload, dict) else None, + "limit": limit, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-historical-snapshots-yet", + ), + "items": sliced_items, + }, + } + + +def build_monthly_mvp_v2_snapshot_payload( + *, + limit: int = 10, + server_id: str | None = None, +) -> dict[str, object]: + """Return one precomputed monthly MVP V2 snapshot.""" + snapshot = _get_historical_snapshot_record( + server_key=server_id, + snapshot_type=SNAPSHOT_TYPE_MONTHLY_MVP_V2, + window=DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + ) + payload = snapshot.get("payload") if snapshot else {} + items = payload.get("items") if isinstance(payload, dict) else None + sliced_items = list(items[:limit]) if isinstance(items, list) else [] + found = bool(payload.get("found")) if isinstance(payload, dict) else False + return { + "status": "ok", + "data": { + "title": _build_monthly_mvp_v2_title( + is_all_servers=server_id == ALL_SERVERS_SLUG, + snapshot=True, + ), + "context": "historical-monthly-mvp-v2-snapshot", + "source": "historical-precomputed-snapshots", + "server_slug": server_id, + "timeframe": "monthly", + "metric": "mvp-v2", + "found": snapshot is not None and found, + **_build_historical_snapshot_metadata(snapshot), + "month_key": payload.get("month_key") if isinstance(payload, dict) else None, + "window_days": payload.get("window_days") if isinstance(payload, dict) else None, + "window_start": payload.get("window_start") if isinstance(payload, dict) else None, + "window_end": payload.get("window_end") if isinstance(payload, dict) else None, + "window_kind": payload.get("window_kind") if isinstance(payload, dict) else None, + "window_label": payload.get("window_label") if isinstance(payload, dict) else None, + "uses_fallback": bool(payload.get("uses_fallback")) if isinstance(payload, dict) else False, + "selection_reason": payload.get("selection_reason") if isinstance(payload, dict) else None, + "current_month_start": payload.get("current_month_start") if isinstance(payload, dict) else None, + "current_month_closed_matches": ( + payload.get("current_month_closed_matches") if isinstance(payload, dict) else None + ), + "previous_month_closed_matches": ( + payload.get("previous_month_closed_matches") if isinstance(payload, dict) else None + ), + "sufficient_sample": payload.get("sufficient_sample") if isinstance(payload, dict) else None, + "eligibility": payload.get("eligibility") if isinstance(payload, dict) else None, + "ranking_version": payload.get("ranking_version") if isinstance(payload, dict) else None, + "event_coverage": payload.get("event_coverage") if isinstance(payload, dict) else None, + "eligible_players_count": ( + payload.get("eligible_players_count") if isinstance(payload, dict) else 0 + ), + "snapshot_limit": payload.get("limit") if isinstance(payload, dict) else None, + "limit": limit, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-historical-snapshots-yet", + ), + "items": sliced_items, + }, + } + + +def build_player_event_snapshot_payload( + *, + limit: int = 10, + server_id: str | None = None, + view: str = "most-killed", +) -> dict[str, object]: + """Return one precomputed V2 player-event snapshot.""" + snapshot_type = _resolve_player_event_snapshot_type(view) + snapshot = _get_historical_snapshot_record( + server_key=server_id, + snapshot_type=snapshot_type, + window=DEFAULT_MONTHLY_SNAPSHOT_WINDOW, + ) + payload = snapshot.get("payload") if snapshot else {} + items = payload.get("items") if isinstance(payload, dict) else None + sliced_items = list(items[:limit]) if isinstance(items, list) else [] + found = bool(payload.get("found")) if isinstance(payload, dict) else False + return { + "status": "ok", + "data": { + "title": _build_player_event_title( + view=view, + is_all_servers=server_id == ALL_SERVERS_SLUG, + snapshot=True, + ), + "context": "historical-player-events-snapshot", + "source": "historical-precomputed-player-event-snapshots", + "server_slug": server_id, + "timeframe": "monthly", + "metric": view, + "found": snapshot is not None and found, + **_build_historical_snapshot_metadata(snapshot), + "period": payload.get("period") if isinstance(payload, dict) else "monthly", + "month_key": payload.get("month_key") if isinstance(payload, dict) else None, + "snapshot_limit": payload.get("limit") if isinstance(payload, dict) else None, + "limit": limit, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-historical-snapshots-yet", + ), + "items": sliced_items, + }, + } + + +def build_historical_server_summary_payload( + *, + server_slug: str | None = None, +) -> dict[str, object]: + """Return aggregated historical metrics per server.""" + if get_historical_data_source_kind() == "rcon": + data_source = get_rcon_historical_read_model() + if data_source is not None: + capabilities = data_source.describe_capabilities() + try: + items = data_source.list_server_summaries(server_key=server_slug) + except Exception as error: # noqa: BLE001 - explicit runtime fallback boundary + items = [] + rcon_source_policy = build_historical_runtime_source_policy( + operation="historical-server-summary", + rcon_status="error", + fallback_reason="rcon-historical-read-model-request-failed", + rcon_message=str(error), + ) + else: + rcon_source_policy = build_historical_runtime_source_policy( + operation="historical-server-summary", + rcon_status=( + "success" + if data_source.has_server_summary_coverage(items) + else "empty" + ), + fallback_reason="rcon-historical-read-model-has-no-summary-coverage", + ) + + if not bool(rcon_source_policy.get("fallback_used")): + return { + "status": "ok", + "data": { + "title": ( + "Cobertura historica minima por RCON" + if server_slug != ALL_SERVERS_SLUG + else "Cobertura historica minima RCON agregada" + ), + "context": "historical-server-summary", + "source": "rcon-historical-competitive-read-model", + "historical_data_source": "rcon", + "summary_basis": "rcon-competitive-windows", + "server_slug": server_slug, + "supported": True, + **rcon_source_policy, + "items": items, + "capabilities": capabilities, + }, + } + items = list_historical_server_summaries(server_slug=server_slug) + return { + "status": "ok", + "data": { + "title": ( + "Cobertura historica agregada de todos los servidores" + if server_slug == ALL_SERVERS_SLUG + else "Cobertura historica importada por servidor" + ), + "context": "historical-server-summary", + "source": "historical-crcon-storage", + "summary_basis": "persisted-import", + "weekly_ranking_window_days": 7, + "server_slug": server_slug, + **( + rcon_source_policy + if get_historical_data_source_kind() == "rcon" + and "rcon_source_policy" in locals() + else _resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-has-no-summary-coverage", + ) + ), + "items": items, + }, + } + + +def build_historical_player_profile_payload(player_id: str) -> dict[str, object]: + """Return aggregate historical metrics for one player identity.""" + profile = get_historical_player_profile(player_id) + return { + "status": "ok", + "data": { + "title": "Perfil historico de jugador", + "context": "historical-player-profile", + "source": "historical-crcon-storage", + "player_id": player_id, + "found": profile is not None, + **_resolve_historical_fallback_policy( + fallback_reason="rcon-historical-read-model-does-not-support-player-profile-yet", + ), + "profile": profile, + }, + } + + +def build_elo_mmr_leaderboard_payload( + *, + limit: int = 10, + server_id: str | None = None, +) -> dict[str, object]: + """Return the current Elo/MMR monthly leaderboard.""" + engine = _load_elo_mmr_engine() + if engine is None: + return _build_elo_mmr_unavailable_payload( + context="historical-elo-mmr-leaderboard", + title=( + "Leaderboard mensual Elo/MMR global" + if server_id == ALL_SERVERS_SLUG + else "Leaderboard mensual Elo/MMR por servidor" + ), + server_id=server_id, + limit=limit, + extra={"items": []}, + operation="elo-mmr-leaderboard", + ) + + list_elo_mmr_leaderboard_payload = engine[1] + payload = list_elo_mmr_leaderboard_payload(server_id=server_id, limit=limit) + is_all_servers = server_id == ALL_SERVERS_SLUG + accuracy_contract = _build_elo_accuracy_contract(payload.get("capabilities_summary")) + return { + "status": "ok", + "data": { + "title": ( + "Leaderboard mensual Elo/MMR global" + if is_all_servers + else "Leaderboard mensual Elo/MMR por servidor" + ), + "context": "historical-elo-mmr-leaderboard", + "source": "elo-mmr-persisted-read-model", + "server_slug": server_id, + "month_key": payload.get("month_key"), + "found": bool(payload.get("found")), + "generated_at": payload.get("generated_at"), + "limit": limit, + **(payload.get("source_policy") or _resolve_historical_fallback_policy( + operation="elo-mmr-leaderboard", + fallback_reason="elo-mmr-source-policy-missing", + )), + "capabilities_summary": payload.get("capabilities_summary"), + "accuracy_contract": accuracy_contract, + "model_contract": _build_elo_model_contract(accuracy_contract), + "items": [ + _enrich_elo_leaderboard_item(item, accuracy_contract=accuracy_contract) + for item in (payload.get("items") or []) + if isinstance(item, dict) + ], + }, + } + + +def build_elo_mmr_player_payload( + *, + player_id: str, + server_id: str | None = None, +) -> dict[str, object]: + """Return one Elo/MMR player profile.""" + engine = _load_elo_mmr_engine() + if engine is None: + return _build_elo_mmr_unavailable_payload( + context="historical-elo-mmr-player", + title="Perfil Elo/MMR de jugador", + server_id=server_id, + extra={ + "player_id": player_id, + "found": False, + "profile": None, + }, + operation="elo-mmr-player", + ) + + get_elo_mmr_player_payload, list_elo_mmr_leaderboard_payload = engine + profile = get_elo_mmr_player_payload(player_id=player_id, server_id=server_id) + source_policy = list_elo_mmr_leaderboard_payload(server_id=server_id, limit=1).get("source_policy") + accuracy_contract = _build_elo_player_accuracy_contract(profile) + return { + "status": "ok", + "data": { + "title": "Perfil Elo/MMR de jugador", + "context": "historical-elo-mmr-player", + "source": "elo-mmr-persisted-read-model", + "player_id": player_id, + "server_slug": server_id, + "found": profile is not None, + **(source_policy or _resolve_historical_fallback_policy( + operation="elo-mmr-player", + fallback_reason="elo-mmr-player-source-policy-missing", + )), + "accuracy_contract": accuracy_contract, + "model_contract": _build_elo_model_contract(accuracy_contract), + "profile": _enrich_elo_profile(profile, accuracy_contract=accuracy_contract), + }, + } + + +def _load_elo_mmr_engine(): + try: + from .elo_mmr_engine import ( # noqa: PLC0415 - lazy boundary for paused Elo/MMR + get_elo_mmr_player_payload, + list_elo_mmr_leaderboard_payload, + ) + except ImportError: + return None + return get_elo_mmr_player_payload, list_elo_mmr_leaderboard_payload + + +def _build_elo_mmr_unavailable_payload( + *, + context: str, + title: str, + server_id: str | None, + operation: str, + limit: int | None = None, + extra: dict[str, object] | None = None, +) -> dict[str, object]: + accuracy_contract = _build_elo_accuracy_contract(None) + data = { + "title": title, + "context": context, + "source": "elo-mmr-paused", + "server_slug": server_id, + "available": False, + "unavailable_reason": "elo-mmr-engine-import-unavailable", + **_resolve_historical_fallback_policy( + operation=operation, + fallback_reason="elo-mmr-operationally-paused", + ), + "capabilities_summary": None, + "accuracy_contract": accuracy_contract, + "model_contract": _build_elo_model_contract(accuracy_contract), + } + if limit is not None: + data["limit"] = limit + if extra: + data.update(extra) + return { + "status": "ok", + "data": data, + } + + +def _build_elo_player_accuracy_contract(profile: dict[str, object] | None) -> dict[str, object]: + if not isinstance(profile, dict): + return _build_elo_accuracy_contract(None) + monthly_ranking = profile.get("monthly_ranking") + if isinstance(monthly_ranking, dict) and isinstance(monthly_ranking.get("capabilities"), dict): + return _build_elo_accuracy_contract(monthly_ranking.get("capabilities")) + persistent_rating = profile.get("persistent_rating") + if isinstance(persistent_rating, dict) and isinstance(persistent_rating.get("capabilities"), dict): + return _build_elo_accuracy_contract(persistent_rating.get("capabilities")) + return _build_elo_accuracy_contract(None) + + +def _build_elo_accuracy_contract(summary: dict[str, object] | None) -> dict[str, object]: + capabilities = summary if isinstance(summary, dict) else {} + signals = capabilities.get("signals") + normalized_signals = [signal for signal in signals if isinstance(signal, dict)] if isinstance(signals, list) else [] + component_status = { + str(signal.get("name") or "").strip(): signal.get("status") + for signal in normalized_signals + if str(signal.get("name") or "").strip() + } + return { + "accuracy_mode": capabilities.get("accuracy_mode") or "unknown", + "exact_ratio": capabilities.get("exact_ratio"), + "approximate_ratio": capabilities.get("approximate_ratio"), + "not_available_ratio": capabilities.get("unavailable_ratio"), + "component_status": component_status, + "blocked_components": [ + name for name, status in component_status.items() if status == "not_available" + ], + "explanation": { + "exact": "computed from persisted repository signals without proxy substitution", + "approximate": "computed with explicit proxies because the ideal telemetry is not stored yet", + "not_available": "not computable yet with the current repository telemetry", + }, + } + + +def _build_elo_model_contract(accuracy_contract: dict[str, object]) -> dict[str, object]: + blocked_components = accuracy_contract.get("blocked_components") + return { + "persistent_rating": { + "meaning": "long-lived competitive rating rebuilt from persisted matches for the selected scope", + "primary_field": "persistent_rating.mmr", + }, + "monthly_rank_score": { + "meaning": "monthly leaderboard ordering score that combines rating movement, match quality, activity and confidence", + "primary_field": "monthly_rank_score", + }, + "elo_core": { + "meaning": "competitive rating movement driven by expected-vs-actual outcome against opponent rating pressure", + "fields": ["components.elo_core_gain"], + }, + "performance_modifiers": { + "meaning": "bounded HLL-specific adjustments layered on top of the competitive Elo core", + "fields": [ + "components.performance_modifier_gain", + "components.proxy_modifier_gain", + ], + }, + "proxy_boundary": { + "meaning": "subset of modifier logic that still depends on approximate signals such as role, objective, schedule or discipline proxies", + "blocked_by_telemetry": blocked_components if isinstance(blocked_components, list) else [], + }, + } + + +def _enrich_elo_leaderboard_item( + item: dict[str, object], + *, + accuracy_contract: dict[str, object], +) -> dict[str, object]: + enriched = dict(item) + components = item.get("components") if isinstance(item.get("components"), dict) else {} + persistent_rating = item.get("persistent_rating") if isinstance(item.get("persistent_rating"), dict) else {} + delta_breakdown = _resolve_elo_delta_sources( + components, + persistent_rating=persistent_rating, + ) + enriched["rating_breakdown"] = { + "persistent_rating": { + "mmr": persistent_rating.get("mmr"), + "baseline_mmr": persistent_rating.get("baseline_mmr"), + "net_mmr_gain": persistent_rating.get("mmr_gain"), + }, + "monthly_ranking": { + "score": item.get("monthly_rank_score"), + "valid_matches": item.get("valid_matches"), + "confidence": components.get("confidence"), + }, + "delta_sources": delta_breakdown["values"], + "materialization": delta_breakdown["materialization"], + "telemetry_boundary": { + "approximate_ratio": accuracy_contract.get("approximate_ratio"), + "blocked_components": accuracy_contract.get("blocked_components") or [], + }, + } + return enriched + + +def _enrich_elo_profile( + profile: dict[str, object] | None, + *, + accuracy_contract: dict[str, object], +) -> dict[str, object] | None: + if not isinstance(profile, dict): + return profile + enriched = dict(profile) + monthly_ranking = dict(profile.get("monthly_ranking")) if isinstance(profile.get("monthly_ranking"), dict) else None + if monthly_ranking is not None: + components = monthly_ranking.get("components") if isinstance(monthly_ranking.get("components"), dict) else {} + delta_breakdown = _resolve_elo_delta_sources( + components, + persistent_rating={ + "mmr_gain": monthly_ranking.get("mmr_gain"), + "baseline_mmr": monthly_ranking.get("baseline_mmr"), + "mmr": monthly_ranking.get("current_mmr"), + }, + ) + monthly_ranking["rating_breakdown"] = { + "monthly_rank_score": monthly_ranking.get("monthly_rank_score"), + "current_mmr": monthly_ranking.get("current_mmr"), + "baseline_mmr": monthly_ranking.get("baseline_mmr"), + "net_mmr_gain": monthly_ranking.get("mmr_gain"), + "elo_core_gain": delta_breakdown["values"]["elo_core_gain"], + "performance_modifier_gain": delta_breakdown["values"]["performance_modifier_gain"], + "proxy_modifier_gain": delta_breakdown["values"]["proxy_modifier_gain"], + "confidence": components.get("confidence"), + "avg_participation_ratio": components.get("avg_participation_ratio"), + "materialization": delta_breakdown["materialization"], + } + enriched["monthly_ranking"] = monthly_ranking + persistent_rating = dict(profile.get("persistent_rating")) if isinstance(profile.get("persistent_rating"), dict) else None + if persistent_rating is not None: + persistent_rating["meaning"] = "persistent competitive rating for the selected scope" + enriched["persistent_rating"] = persistent_rating + enriched["telemetry_boundary"] = { + "accuracy_mode": accuracy_contract.get("accuracy_mode"), + "blocked_components": accuracy_contract.get("blocked_components") or [], + } + return enriched + + +def _resolve_elo_delta_sources( + components: dict[str, object], + *, + persistent_rating: dict[str, object] | None, +) -> dict[str, object]: + elo_core_gain = _coerce_optional_float(components.get("elo_core_gain")) + performance_modifier_gain = _coerce_optional_float(components.get("performance_modifier_gain")) + proxy_modifier_gain = _coerce_optional_float(components.get("proxy_modifier_gain")) + if ( + elo_core_gain is not None + or performance_modifier_gain is not None + or proxy_modifier_gain is not None + ): + return { + "values": { + "elo_core_gain": elo_core_gain, + "performance_modifier_gain": performance_modifier_gain, + "proxy_modifier_gain": proxy_modifier_gain, + }, + "materialization": { + "status": "v3-materialized", + "reason": "persisted-monthly-ranking-includes-v3-delta-sources", + "delta_sources_accuracy": "exact-or-proxy-as-persisted", + }, + } + + legacy_net_gain = _coerce_optional_float(components.get("mmr_gain_raw")) + if legacy_net_gain is None and isinstance(persistent_rating, dict): + legacy_net_gain = _coerce_optional_float(persistent_rating.get("mmr_gain")) + if legacy_net_gain is None: + return { + "values": { + "elo_core_gain": None, + "performance_modifier_gain": None, + "proxy_modifier_gain": None, + }, + "materialization": { + "status": "v3-delta-sources-unavailable", + "reason": ( + "persisted-monthly-ranking-predates-v3-delta-split-and-has-no-compatible-net-gain" + ), + "delta_sources_accuracy": "not_available", + }, + } + + return { + "values": { + "elo_core_gain": legacy_net_gain, + "performance_modifier_gain": 0.0, + "proxy_modifier_gain": 0.0, + }, + "materialization": { + "status": "legacy-compatibility-approximation", + "reason": ( + "persisted-monthly-ranking-predates-v3-delta-split-api-approximates-delta-sources-" + "from-legacy-net-mmr-gain" + ), + "delta_sources_accuracy": "approximate", + }, + } + + +def _coerce_optional_float(value: object) -> float | None: + if value is None: + return None + try: + return round(float(value), 3) + except (TypeError, ValueError): + return None + + +def _leaderboard_snapshot_items_need_playtime_enrichment(items: list[object]) -> bool: + normalized_items = [item for item in items if isinstance(item, dict)] + if not normalized_items: + return False + return any("total_time_seconds" not in item for item in normalized_items) + + +def _load_runtime_leaderboard_items( + *, + limit: int, + server_id: str | None, + metric: str, + timeframe: str, +) -> list[dict[str, object]]: + if timeframe == "monthly": + result = list_monthly_leaderboard(limit=limit, server_id=server_id, metric=metric) + else: + result = list_weekly_leaderboard(limit=limit, server_id=server_id, metric=metric) + items = result.get("items") if isinstance(result, dict) else None + return [item for item in items if isinstance(item, dict)] if isinstance(items, list) else [] + + +def _get_historical_snapshot_record( + *, + server_key: str | None, + snapshot_type: str, + metric: str | None = None, + window: str | None = None, +) -> dict[str, object] | None: + if not server_key: + return None + return get_historical_snapshot( + server_key=server_key, + snapshot_type=snapshot_type, + metric=metric, + window=window, + ) + + +def _build_historical_snapshot_metadata(snapshot: dict[str, object] | None) -> dict[str, object]: + if snapshot is None: + return { + "snapshot_status": "missing", + "missing_reason": "snapshot-not-generated", + "request_path_policy": "read-only-fast-path", + "generation_policy": "out-of-band-refresh-only", + "generated_at": None, + "source_range_start": None, + "source_range_end": None, + "is_stale": True, + "freshness": "stale", + } + is_stale = bool(snapshot.get("is_stale", False)) + return { + "snapshot_status": "ready", + "missing_reason": None, + "request_path_policy": "read-only-fast-path", + "generation_policy": "out-of-band-refresh-only", + "generated_at": snapshot.get("generated_at"), + "source_range_start": snapshot.get("source_range_start"), + "source_range_end": snapshot.get("source_range_end"), + "is_stale": is_stale, + "freshness": "stale" if is_stale else "fresh", + } + + +def _build_leaderboard_title( + *, + metric: str, + timeframe: str, + is_all_servers: bool, + snapshot: bool = False, +) -> str: + timeframe_label = "mensual" if timeframe == "monthly" else "semanal" + scope_label = "totales" if is_all_servers else "por servidor" + prefix = "Snapshot " if snapshot else "" + title_by_metric = { + "kills": f"{prefix}Top kills {timeframe_label} {scope_label}", + "deaths": f"{prefix}Top muertes {timeframe_label} {scope_label}", + "support": f"{prefix}Top puntos de soporte {timeframe_label} {scope_label}", + "matches_over_100_kills": f"{prefix}Top partidas de 100+ kills {timeframe_label} {scope_label}", + } + fallback_label = f"{prefix}Ranking {timeframe_label} por servidor".strip() + return title_by_metric.get(metric, fallback_label) + + +def _build_monthly_mvp_title(*, is_all_servers: bool, snapshot: bool = False) -> str: + prefix = "Snapshot " if snapshot else "" + scope_label = "global" if is_all_servers else "por servidor" + return f"{prefix}Top MVP mensual {scope_label}" + + +def _build_monthly_mvp_v2_title(*, is_all_servers: bool, snapshot: bool = False) -> str: + prefix = "Snapshot " if snapshot else "" + scope_label = "global" if is_all_servers else "por servidor" + return f"{prefix}Top MVP mensual V2 {scope_label}" + + +def _build_player_event_title( + *, + view: str, + is_all_servers: bool, + snapshot: bool = False, +) -> str: + prefix = "Snapshot " if snapshot else "" + scope_label = "global" if is_all_servers else "por servidor" + title_by_view = { + "most-killed": f"{prefix}Most killed mensual {scope_label}", + "death-by": f"{prefix}Death by mensual {scope_label}", + "duels": f"{prefix}Duelos netos mensuales {scope_label}", + "weapon-kills": f"{prefix}Kills por arma mensuales {scope_label}", + "teamkills": f"{prefix}Teamkills mensuales {scope_label}", + } + return title_by_view.get(view, f"{prefix}Metricas V2 mensuales {scope_label}") + + +def _resolve_player_event_snapshot_type(view: str) -> str: + normalized_view = view.strip().lower() if isinstance(view, str) else "most-killed" + snapshot_type_by_view = { + "most-killed": SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED, + "death-by": SNAPSHOT_TYPE_PLAYER_EVENT_DEATH_BY, + "duels": SNAPSHOT_TYPE_PLAYER_EVENT_DUELS, + "weapon-kills": SNAPSHOT_TYPE_PLAYER_EVENT_WEAPON_KILLS, + "teamkills": SNAPSHOT_TYPE_PLAYER_EVENT_TEAMKILLS, + } + return snapshot_type_by_view.get(normalized_view, SNAPSHOT_TYPE_PLAYER_EVENT_MOST_KILLED) + + +def _enrich_server_items(items: list[dict[str, object]]) -> list[dict[str, object]]: + target_index = get_live_data_source().build_target_index() + enriched_items: list[dict[str, object]] = [] + for item in items: + enriched_items.append(_enrich_server_item(item, target_index)) + return enriched_items + + +def _select_primary_snapshot_items(items: list[dict[str, object]]) -> list[dict[str, object]]: + preferred_origin = ( + "real-rcon" + if get_live_data_source_kind() == "rcon" + else "real-a2s" + ) + preferred_items = [ + item + for item in items + if item.get("snapshot_origin") == preferred_origin + ] + return preferred_items or items + + +def _enrich_server_item( + item: dict[str, object], + target_index: dict[str, object], +) -> dict[str, object]: + enriched = dict(item) + enriched["current_map"] = normalize_map_name(enriched.get("current_map")) + history_url = _resolve_community_history_url(enriched.get("external_server_id")) + enriched["community_history_url"] = history_url + enriched["community_history_available"] = bool(history_url) + external_server_id = enriched.get("external_server_id") + snapshot_origin = enriched.get("snapshot_origin") + target = target_index.get(external_server_id) + + if not target or snapshot_origin not in {"real-a2s", "real-rcon"}: + enriched["host"] = None + enriched["query_port"] = None + enriched["game_port"] = None + return enriched + + enriched["host"] = target.host + enriched["query_port"] = target.query_port + enriched["game_port"] = target.game_port + return enriched + + +def _resolve_last_snapshot_at(items: list[dict[str, object]]) -> str | None: + timestamps = [ + str(item["captured_at"]) + for item in items + if item.get("captured_at") + ] + if not timestamps: + return None + + return max(timestamps) + + +def _should_refresh_snapshot( + items: list[dict[str, object]], + snapshot_age_seconds: int | None, + max_snapshot_age_seconds: int, +) -> bool: + if not items: + return True + + if snapshot_age_seconds is None: + return True + + return snapshot_age_seconds > max_snapshot_age_seconds + + +def _try_collect_real_time_snapshot() -> tuple[ + list[dict[str, object]], + list[dict[str, object]], + dict[str, object], +]: + payload = get_live_data_source().collect_snapshots(persist=False) + snapshots = payload.get("snapshots") + items = _select_primary_snapshot_items(_enrich_server_items(list(snapshots or []))) + errors = payload.get("errors") + return ( + items, + list(errors or []), + { + "primary_source": payload.get("primary_source"), + "selected_source": payload.get("selected_source"), + "fallback_used": bool(payload.get("fallback_used")), + "fallback_reason": payload.get("fallback_reason"), + "source_attempts": list(payload.get("source_attempts") or []), + }, + ) + + +def _build_servers_response( + *, + items: list[dict[str, object]], + response_source: str, + last_snapshot_at: str | None, + snapshot_age_seconds: int | None, + max_snapshot_age_seconds: int, + refresh_attempted: bool, + refresh_status: str, + refresh_errors: list[dict[str, object]], + source_policy: dict[str, object], +) -> dict[str, object]: + freshness = ( + "fresh" + if snapshot_age_seconds is not None and snapshot_age_seconds <= max_snapshot_age_seconds + else "stale" + ) + return { + "status": "ok", + "data": { + "title": "Estado actual de servidores", + "context": "current-hll-status", + "source": response_source, + "last_snapshot_at": last_snapshot_at, + "snapshot_age_seconds": snapshot_age_seconds, + "snapshot_age_minutes": _to_snapshot_age_minutes(snapshot_age_seconds), + "max_snapshot_age_seconds": max_snapshot_age_seconds, + "is_stale": freshness == "stale", + "freshness": freshness, + "refresh_attempted": refresh_attempted, + "refresh_status": refresh_status, + "refresh_errors": refresh_errors, + **source_policy, + "items": items, + }, + } + + +def _calculate_snapshot_age_seconds(timestamp: str | None) -> int | None: + if not timestamp: + return None + + normalized = timestamp.replace("Z", "+00:00") + captured_at = datetime.fromisoformat(normalized) + if captured_at.tzinfo is None: + captured_at = captured_at.replace(tzinfo=timezone.utc) + + age = datetime.now(timezone.utc) - captured_at.astimezone(timezone.utc) + return max(0, int(age.total_seconds())) + + +def _to_snapshot_age_minutes(snapshot_age_seconds: int | None) -> int | None: + if snapshot_age_seconds is None: + return None + + return snapshot_age_seconds // 60 + + +def _resolve_historical_fallback_policy( + *, + fallback_reason: str, + operation: str = "historical-read", +) -> dict[str, object]: + return build_historical_runtime_source_policy( + operation=operation, + rcon_status="unsupported", + fallback_reason=fallback_reason, + ) + + +def _merge_recent_match_items( + *, + primary_items: list[dict[str, object]], + fallback_items: list[dict[str, object]], + limit: int, +) -> list[dict[str, object]]: + merged: list[dict[str, object]] = [] + seen_keys: set[str] = set() + for item in list(primary_items) + list(fallback_items): + if not isinstance(item, dict): + continue + dedupe_key = _build_recent_match_dedupe_key(item) + if dedupe_key in seen_keys: + continue + seen_keys.add(dedupe_key) + merged.append(item) + merged.sort(key=_recent_match_sort_key, reverse=True) + return merged[:limit] + + +def _with_recent_result_source( + item: dict[str, object], + result_source: str, +) -> dict[str, object]: + enriched = dict(item) + enriched.setdefault("result_source", result_source) + return enriched + + +def _recent_items_include_rcon_results(items: list[dict[str, object]]) -> bool: + return any( + item.get("result_source") in {"admin-log-match-ended", "rcon-session"} + for item in items + if isinstance(item, dict) + ) + + +def _build_recent_match_dedupe_key(item: dict[str, object]) -> str: + server = item.get("server") if isinstance(item.get("server"), dict) else {} + map_payload = item.get("map") if isinstance(item.get("map"), dict) else {} + match_id = str(item.get("match_id") or "").strip() + server_slug = str(server.get("slug") or server.get("external_server_id") or "").strip() + map_name = str(map_payload.get("name") or map_payload.get("pretty_name") or "").strip().lower() + closed_at = _truncate_recent_match_timestamp( + item.get("closed_at") or item.get("ended_at") + ) + started_at = _truncate_recent_match_timestamp(item.get("started_at")) + if match_id and match_id.isdigit(): + return f"scoreboard:{server_slug}:{match_id}" + return f"recent:{server_slug}:{map_name}:{started_at}:{closed_at}" + + +def _truncate_recent_match_timestamp(value: object) -> str: + normalized = str(value or "").strip() + return normalized[:16] if normalized else "" + + +def _recent_match_sort_key(item: dict[str, object]) -> tuple[str, str]: + closed_at = str(item.get("closed_at") or item.get("ended_at") or "").strip() + started_at = str(item.get("started_at") or "").strip() + return (closed_at, started_at) + + +def _infer_live_source_policy_from_items( + items: list[dict[str, object]], + *, + refresh_attempted: bool, + refresh_errors: list[dict[str, object]], +) -> dict[str, object]: + selected_source = "persisted-snapshot" + fallback_used = False + fallback_reason = None + snapshot_origins = { + str(item.get("snapshot_origin") or "").strip() + for item in items + if item.get("snapshot_origin") + } + if "real-rcon" in snapshot_origins: + selected_source = SOURCE_KIND_RCON + elif "real-a2s" in snapshot_origins: + selected_source = LIVE_SOURCE_A2S + if get_live_data_source_kind() == SOURCE_KIND_RCON: + fallback_used = True + fallback_reason = "persisted-live-snapshot-came-from-a2s" + + attempt_status = "success" if items else ("error" if refresh_attempted else "cached") + attempt_reason = None if items else "no-live-snapshot-items" + if refresh_errors and attempt_reason is None: + attempt_reason = "live-refresh-errors-present" + + return build_source_policy( + primary_source=get_live_data_source_kind(), + selected_source=selected_source, + fallback_used=fallback_used, + fallback_reason=fallback_reason, + source_attempts=[ + build_source_attempt( + source=selected_source, + role="served-response", + status=attempt_status, + reason=attempt_reason, + ) + ], + ) + + +def _build_live_response_source(source_policy: dict[str, object]) -> str: + selected_source = str(source_policy.get("selected_source") or "") + if selected_source == SOURCE_KIND_RCON: + return "real-time-rcon-refresh" + if selected_source == LIVE_SOURCE_A2S: + return "real-time-a2s-fallback" + return "real-time-refresh" + + +def _resolve_community_history_url(external_server_id: object) -> str | None: + normalized_server_id = str(external_server_id or "").strip() + if not normalized_server_id: + return None + origin = get_trusted_public_scoreboard_origin(normalized_server_id) + return f"{origin.base_url}/games" if origin else None diff --git a/backend/app/player_event_aggregates.py b/backend/app/player_event_aggregates.py new file mode 100644 index 0000000..e6c1592 --- /dev/null +++ b/backend/app/player_event_aggregates.py @@ -0,0 +1,261 @@ +"""Derived duel and weapon aggregates computed from the raw player event ledger.""" + +from __future__ import annotations + +import sqlite3 +from pathlib import Path + +from .config import get_database_url, get_storage_path +from .player_event_storage import initialize_player_event_storage + + +def list_most_killed( + *, + server_slug: str | None = None, + month: str | None = None, + external_match_id: str | None = None, + limit: int = 10, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return strongest killer -> victim summaries from the raw ledger.""" + return _query_pair_summary( + event_type="player_kill_summary", + server_slug=server_slug, + month=month, + external_match_id=external_match_id, + limit=limit, + db_path=db_path, + ) + + +def list_death_by( + *, + server_slug: str | None = None, + month: str | None = None, + external_match_id: str | None = None, + limit: int = 10, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return strongest killer -> victim summaries from the victim perspective.""" + return _query_pair_summary( + event_type="player_death_summary", + server_slug=server_slug, + month=month, + external_match_id=external_match_id, + limit=limit, + db_path=db_path, + ) + + +def list_net_duel_summaries( + *, + server_slug: str | None = None, + month: str | None = None, + external_match_id: str | None = None, + limit: int = 10, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return partial net duel summaries using the strongest encounter signals available.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + where_sql, params = _build_common_where( + event_type="player_kill_summary", + server_slug=server_slug, + month=month, + external_match_id=external_match_id, + ) + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + WITH duel_pairs AS ( + SELECT + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN killer_player_key + ELSE victim_player_key + END AS player_a_key, + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN killer_display_name + ELSE victim_display_name + END AS player_a_name, + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN victim_player_key + ELSE killer_player_key + END AS player_b_key, + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN victim_display_name + ELSE killer_display_name + END AS player_b_name, + CASE + WHEN COALESCE(killer_player_key, '') <= COALESCE(victim_player_key, '') + THEN event_value + ELSE -event_value + END AS net_value, + event_value + FROM player_event_raw_ledger + WHERE {where_sql} + AND killer_player_key IS NOT NULL + AND victim_player_key IS NOT NULL + ) + SELECT + player_a_key, + player_a_name, + player_b_key, + player_b_name, + COALESCE(SUM(event_value), 0) AS total_encounters, + COALESCE(SUM(net_value), 0) AS net_duel_value + FROM duel_pairs + GROUP BY player_a_key, player_a_name, player_b_key, player_b_name + ORDER BY ABS(COALESCE(SUM(net_value), 0)) DESC, + COALESCE(SUM(event_value), 0) DESC, + player_a_name ASC, + player_b_name ASC + LIMIT ? + """, + [*params, limit], + ).fetchall() + return [dict(row) for row in rows] + + +def list_weapon_kills( + *, + server_slug: str | None = None, + month: str | None = None, + external_match_id: str | None = None, + limit: int = 10, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return partial weapon summaries derived from top kill events.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + where_sql, params = _build_common_where( + event_type="player_weapon_kill_summary", + server_slug=server_slug, + month=month, + external_match_id=external_match_id, + ) + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + killer_player_key, + killer_display_name, + COALESCE(weapon_name, 'unknown') AS weapon_name, + COALESCE(SUM(event_value), 0) AS total_kills + FROM player_event_raw_ledger + WHERE {where_sql} + AND killer_player_key IS NOT NULL + GROUP BY killer_player_key, killer_display_name, COALESCE(weapon_name, 'unknown') + ORDER BY total_kills DESC, killer_display_name ASC, weapon_name ASC + LIMIT ? + """, + [*params, limit], + ).fetchall() + return [dict(row) for row in rows] + + +def list_teamkill_summaries( + *, + server_slug: str | None = None, + month: str | None = None, + external_match_id: str | None = None, + limit: int = 10, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return derived teamkill totals per player from the raw ledger.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + where_sql, params = _build_common_where( + event_type="player_teamkill_summary", + server_slug=server_slug, + month=month, + external_match_id=external_match_id, + ) + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + killer_player_key, + killer_display_name, + COALESCE(SUM(event_value), 0) AS total_teamkills + FROM player_event_raw_ledger + WHERE {where_sql} + AND killer_player_key IS NOT NULL + GROUP BY killer_player_key, killer_display_name + ORDER BY total_teamkills DESC, killer_display_name ASC + LIMIT ? + """, + [*params, limit], + ).fetchall() + return [dict(row) for row in rows] + + +def _query_pair_summary( + *, + event_type: str, + server_slug: str | None, + month: str | None, + external_match_id: str | None, + limit: int, + db_path: Path | None, +) -> list[dict[str, object]]: + resolved_path = initialize_player_event_storage(db_path=db_path) + where_sql, params = _build_common_where( + event_type=event_type, + server_slug=server_slug, + month=month, + external_match_id=external_match_id, + ) + with _connect(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + killer_player_key, + killer_display_name, + victim_player_key, + victim_display_name, + COALESCE(SUM(event_value), 0) AS total_kills + FROM player_event_raw_ledger + WHERE {where_sql} + AND killer_player_key IS NOT NULL + AND victim_player_key IS NOT NULL + GROUP BY killer_player_key, killer_display_name, victim_player_key, victim_display_name + ORDER BY total_kills DESC, killer_display_name ASC, victim_display_name ASC + LIMIT ? + """, + [*params, limit], + ).fetchall() + return [dict(row) for row in rows] + + +def _build_common_where( + *, + event_type: str, + server_slug: str | None, + month: str | None, + external_match_id: str | None, +) -> tuple[str, list[object]]: + clauses = ["event_type = ?"] + params: list[object] = [event_type] + + if server_slug and server_slug != "all-servers": + clauses.append("server_slug = ?") + params.append(server_slug.strip()) + if month: + clauses.append("substr(COALESCE(CAST(occurred_at AS TEXT), ''), 1, 7) = ?") + params.append(month.strip()) + if external_match_id: + clauses.append("external_match_id = ?") + params.append(external_match_id.strip()) + + return " AND ".join(clauses), params + + +def _connect(db_path: Path) -> sqlite3.Connection: + if get_database_url(): + from .postgres_display_storage import connect_postgres_compat + + return connect_postgres_compat() + connection = sqlite3.connect(db_path or get_storage_path()) + connection.row_factory = sqlite3.Row + return connection diff --git a/backend/app/player_event_models.py b/backend/app/player_event_models.py new file mode 100644 index 0000000..182ed65 --- /dev/null +++ b/backend/app/player_event_models.py @@ -0,0 +1,32 @@ +"""Normalized player event models for the V2 event pipeline foundation.""" + +from __future__ import annotations + +from dataclasses import asdict, dataclass + + +@dataclass(frozen=True, slots=True) +class PlayerEventRecord: + """Minimal normalized player event contract reused across source and storage.""" + + event_id: str + event_type: str + occurred_at: str | None + server_slug: str + external_match_id: str + source_kind: str + source_ref: str | None + raw_event_ref: str | None + killer_player_key: str | None + killer_display_name: str | None + victim_player_key: str | None + victim_display_name: str | None + weapon_name: str | None + weapon_category: str | None + kill_category: str | None + is_teamkill: bool + event_value: int = 1 + + def to_dict(self) -> dict[str, object]: + """Return the event as a plain dictionary.""" + return asdict(self) diff --git a/backend/app/player_event_source.py b/backend/app/player_event_source.py new file mode 100644 index 0000000..6268516 --- /dev/null +++ b/backend/app/player_event_source.py @@ -0,0 +1,111 @@ +"""Player event source selection and contracts for the V2 pipeline.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Protocol + +from .config import get_historical_data_source_kind +from .data_sources import ( + SOURCE_KIND_PUBLIC_SCOREBOARD, + SOURCE_KIND_RCON, + build_source_attempt, + build_source_policy, +) +from .player_event_models import PlayerEventRecord +from .providers.player_event_source_provider import PublicScoreboardPlayerEventSource + + +class PlayerEventSource(Protocol): + """Contract for adapters that normalize player event signals.""" + + source_kind: str + + def extract_match_events( + self, + *, + server_slug: str, + match_payload: dict[str, object], + source_ref: str | None = None, + ) -> list[PlayerEventRecord]: + """Normalize one match payload into reusable player event records.""" + + def describe_scope(self) -> dict[str, object]: + """Describe what the adapter can and cannot capture today.""" + + +class RconPlayerEventSource: + """Placeholder adapter for a future raw RCON/log feed.""" + + source_kind = "rcon-events" + + def extract_match_events( + self, + *, + server_slug: str, + match_payload: dict[str, object], + source_ref: str | None = None, + ) -> list[PlayerEventRecord]: + raise RuntimeError("Raw RCON player event extraction is not implemented yet.") + + def describe_scope(self) -> dict[str, object]: + return { + "source_kind": self.source_kind, + "supports_raw_kill_events": False, + "captures": [], + "limitations": [ + "No raw RCON event or log feed is integrated in this repository yet.", + ], + } + + +@dataclass(frozen=True, slots=True) +class PlayerEventSourceSelection: + """Resolved player-event adapter plus source-policy metadata.""" + + source: PlayerEventSource + source_policy: dict[str, object] + + +def resolve_player_event_source() -> PlayerEventSourceSelection: + """Select the event adapter with safe fallback when raw RCON events are unavailable.""" + source_kind = get_historical_data_source_kind() + if source_kind == SOURCE_KIND_PUBLIC_SCOREBOARD: + return PlayerEventSourceSelection( + source=PublicScoreboardPlayerEventSource(), + source_policy=build_source_policy( + primary_source=SOURCE_KIND_PUBLIC_SCOREBOARD, + selected_source="public-scoreboard-match-summary", + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_PUBLIC_SCOREBOARD, + role="primary", + status="success", + ) + ], + ), + ) + if source_kind == SOURCE_KIND_RCON: + return PlayerEventSourceSelection( + source=PublicScoreboardPlayerEventSource(), + source_policy=build_source_policy( + primary_source=SOURCE_KIND_RCON, + selected_source="public-scoreboard-match-summary", + fallback_used=True, + fallback_reason="rcon-player-events-not-implemented-yet", + source_attempts=[ + build_source_attempt( + source=SOURCE_KIND_RCON, + role="primary", + status="unsupported", + reason="rcon-player-events-not-implemented-yet", + ), + build_source_attempt( + source="public-scoreboard-match-summary", + role="fallback", + status="success", + ), + ], + ), + ) + raise ValueError(f"Unsupported player event source: {source_kind}") diff --git a/backend/app/player_event_storage.py b/backend/app/player_event_storage.py new file mode 100644 index 0000000..1997583 --- /dev/null +++ b/backend/app/player_event_storage.py @@ -0,0 +1,440 @@ +"""Raw storage and run tracking for the V2 player event pipeline.""" + +from __future__ import annotations + +import sqlite3 +from collections.abc import Iterable +from datetime import datetime, timedelta, timezone +from pathlib import Path + +from .config import ( + get_player_event_refresh_overlap_hours, + get_storage_path, + use_postgres_rcon_storage, +) +from .player_event_models import PlayerEventRecord +from .sqlite_utils import connect_sqlite_writer + + +def initialize_player_event_storage(*, db_path: Path | None = None) -> Path: + """Create the append-only player event ledger and its worker metadata tables.""" + resolved_path = db_path or get_storage_path() + resolved_path.parent.mkdir(parents=True, exist_ok=True) + + with _connect(resolved_path) as connection: + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS player_event_raw_ledger ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + event_id TEXT NOT NULL UNIQUE, + event_type TEXT NOT NULL, + occurred_at TEXT, + server_slug TEXT NOT NULL, + external_match_id TEXT NOT NULL, + source_kind TEXT NOT NULL, + source_ref TEXT, + raw_event_ref TEXT, + killer_player_key TEXT, + killer_display_name TEXT, + victim_player_key TEXT, + victim_display_name TEXT, + weapon_name TEXT, + weapon_category TEXT, + kill_category TEXT, + is_teamkill INTEGER NOT NULL DEFAULT 0, + event_value INTEGER NOT NULL DEFAULT 1, + inserted_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS player_event_ingestion_runs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + mode TEXT NOT NULL, + status TEXT NOT NULL, + target_server_slug TEXT, + started_at TEXT NOT NULL, + completed_at TEXT, + pages_processed INTEGER NOT NULL DEFAULT 0, + matches_seen INTEGER NOT NULL DEFAULT 0, + matches_fetched INTEGER NOT NULL DEFAULT 0, + events_inserted INTEGER NOT NULL DEFAULT 0, + duplicate_events INTEGER NOT NULL DEFAULT 0, + notes TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS player_event_backfill_progress ( + server_slug TEXT NOT NULL, + mode TEXT NOT NULL, + next_page INTEGER NOT NULL DEFAULT 1, + last_completed_page INTEGER, + cutoff_occurred_at TEXT, + discovered_total_matches INTEGER, + archive_exhausted INTEGER NOT NULL DEFAULT 0, + last_run_id INTEGER, + last_run_status TEXT, + last_run_started_at TEXT, + last_run_completed_at TEXT, + last_error TEXT, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (server_slug, mode) + ); + + CREATE INDEX IF NOT EXISTS idx_player_event_raw_server_match + ON player_event_raw_ledger(server_slug, external_match_id); + + CREATE INDEX IF NOT EXISTS idx_player_event_raw_occurred_at + ON player_event_raw_ledger(occurred_at DESC); + + CREATE INDEX IF NOT EXISTS idx_player_event_raw_killer_victim + ON player_event_raw_ledger(killer_player_key, victim_player_key); + """ + ) + + return resolved_path + + +def upsert_player_events( + events: Iterable[PlayerEventRecord], + *, + db_path: Path | None = None, +) -> dict[str, int]: + """Insert normalized events idempotently into the raw ledger.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import upsert_player_event_rows + + return upsert_player_event_rows(events) + resolved_path = initialize_player_event_storage(db_path=db_path) + inserted = 0 + duplicates = 0 + with _connect(resolved_path) as connection: + for event in events: + cursor = connection.execute( + """ + INSERT OR IGNORE INTO player_event_raw_ledger ( + event_id, + event_type, + occurred_at, + server_slug, + external_match_id, + source_kind, + source_ref, + raw_event_ref, + killer_player_key, + killer_display_name, + victim_player_key, + victim_display_name, + weapon_name, + weapon_category, + kill_category, + is_teamkill, + event_value + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + event.event_id, + event.event_type, + event.occurred_at, + event.server_slug, + event.external_match_id, + event.source_kind, + event.source_ref, + event.raw_event_ref, + event.killer_player_key, + event.killer_display_name, + event.victim_player_key, + event.victim_display_name, + event.weapon_name, + event.weapon_category, + event.kill_category, + 1 if event.is_teamkill else 0, + max(1, int(event.event_value)), + ), + ) + if int(cursor.rowcount or 0) > 0: + inserted += 1 + else: + duplicates += 1 + return { + "events_inserted": inserted, + "duplicate_events": duplicates, + } + + +def start_player_event_ingestion_run( + *, + mode: str, + target_server_slug: str | None = None, + db_path: Path | None = None, +) -> int: + """Persist one player event ingestion attempt.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + cursor = connection.execute( + """ + INSERT INTO player_event_ingestion_runs ( + mode, + status, + target_server_slug, + started_at + ) VALUES (?, 'running', ?, ?) + """, + (mode, target_server_slug, _utc_now_iso()), + ) + return int(cursor.lastrowid) + + +def finalize_player_event_ingestion_run( + run_id: int, + *, + status: str, + pages_processed: int, + matches_seen: int, + matches_fetched: int, + events_inserted: int, + duplicate_events: int, + notes: str | None = None, + db_path: Path | None = None, +) -> None: + """Update one player event ingestion attempt with final counters.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + connection.execute( + """ + UPDATE player_event_ingestion_runs + SET status = ?, + completed_at = ?, + pages_processed = ?, + matches_seen = ?, + matches_fetched = ?, + events_inserted = ?, + duplicate_events = ?, + notes = ? + WHERE id = ? + """, + ( + status, + _utc_now_iso(), + pages_processed, + matches_seen, + matches_fetched, + events_inserted, + duplicate_events, + notes, + run_id, + ), + ) + + +def mark_player_event_progress_started( + *, + server_slug: str, + mode: str, + run_id: int, + cutoff_occurred_at: str | None, + db_path: Path | None = None, +) -> None: + """Persist the start state for one server ingestion attempt.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + connection.execute( + """ + INSERT INTO player_event_backfill_progress ( + server_slug, + mode, + next_page, + cutoff_occurred_at, + archive_exhausted, + last_run_id, + last_run_status, + last_run_started_at, + last_run_completed_at, + last_error + ) VALUES (?, ?, 1, ?, 0, ?, 'running', ?, NULL, NULL) + ON CONFLICT(server_slug, mode) DO UPDATE SET + cutoff_occurred_at = excluded.cutoff_occurred_at, + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_run_started_at = excluded.last_run_started_at, + last_run_completed_at = NULL, + last_error = NULL, + updated_at = CURRENT_TIMESTAMP + """, + (server_slug, mode, cutoff_occurred_at, run_id, _utc_now_iso()), + ) + + +def mark_player_event_progress_page_completed( + *, + server_slug: str, + mode: str, + page_number: int, + discovered_total_matches: int | None, + run_id: int, + db_path: Path | None = None, +) -> None: + """Advance the resume checkpoint after one page completes successfully.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + connection.execute( + """ + INSERT INTO player_event_backfill_progress ( + server_slug, + mode, + next_page, + last_completed_page, + discovered_total_matches, + archive_exhausted, + last_run_id, + last_run_status, + last_run_started_at, + last_run_completed_at, + last_error + ) VALUES (?, ?, ?, ?, ?, 0, ?, 'running', ?, NULL, NULL) + ON CONFLICT(server_slug, mode) DO UPDATE SET + next_page = excluded.next_page, + last_completed_page = excluded.last_completed_page, + discovered_total_matches = COALESCE( + excluded.discovered_total_matches, + player_event_backfill_progress.discovered_total_matches + ), + archive_exhausted = 0, + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_run_started_at = excluded.last_run_started_at, + last_run_completed_at = NULL, + last_error = NULL, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_slug, + mode, + page_number + 1, + page_number, + discovered_total_matches, + run_id, + _utc_now_iso(), + ), + ) + + +def finalize_player_event_progress( + *, + server_slug: str, + mode: str, + run_id: int, + status: str, + archive_exhausted: bool = False, + error_message: str | None = None, + db_path: Path | None = None, +) -> None: + """Persist the final state of one server event ingestion attempt.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + connection.execute( + """ + INSERT INTO player_event_backfill_progress ( + server_slug, + mode, + next_page, + archive_exhausted, + last_run_id, + last_run_status, + last_run_started_at, + last_run_completed_at, + last_error + ) VALUES (?, ?, 1, ?, ?, ?, ?, ?, ?) + ON CONFLICT(server_slug, mode) DO UPDATE SET + archive_exhausted = CASE + WHEN excluded.last_run_status = 'success' AND excluded.archive_exhausted = 1 + THEN 1 + ELSE player_event_backfill_progress.archive_exhausted + END, + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_run_started_at = COALESCE( + player_event_backfill_progress.last_run_started_at, + excluded.last_run_started_at + ), + last_run_completed_at = excluded.last_run_completed_at, + last_error = excluded.last_error, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_slug, + mode, + 1 if archive_exhausted else 0, + run_id, + status, + _utc_now_iso(), + _utc_now_iso(), + error_message, + ), + ) + + +def get_player_event_resume_page( + server_slug: str, + *, + mode: str = "bootstrap", + db_path: Path | None = None, +) -> int: + """Return the saved resume page for a bootstrap-like event backfill.""" + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + row = connection.execute( + """ + SELECT next_page + FROM player_event_backfill_progress + WHERE server_slug = ? AND mode = ? + """, + (server_slug, mode), + ).fetchone() + return max(1, int(row["next_page"])) if row and row["next_page"] else 1 + + +def get_player_event_refresh_cutoff_for_server( + server_slug: str, + *, + overlap_hours: int | None = None, + db_path: Path | None = None, +) -> str | None: + """Return the latest occurred_at already persisted for one server.""" + resolved_overlap_hours = ( + get_player_event_refresh_overlap_hours() + if overlap_hours is None + else overlap_hours + ) + if resolved_overlap_hours < 0: + raise ValueError("overlap_hours must be zero or positive.") + resolved_path = initialize_player_event_storage(db_path=db_path) + with _connect(resolved_path) as connection: + row = connection.execute( + """ + SELECT MAX(occurred_at) AS latest_occurred_at + FROM player_event_raw_ledger + WHERE server_slug = ? + """, + (server_slug,), + ).fetchone() + latest_occurred_at = str(row["latest_occurred_at"]) if row and row["latest_occurred_at"] else None + if not latest_occurred_at: + return None + + cutoff = _parse_timestamp(latest_occurred_at) - timedelta(hours=resolved_overlap_hours) + return cutoff.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _connect(db_path: Path) -> sqlite3.Connection: + return connect_sqlite_writer(db_path) + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _parse_timestamp(value: str) -> datetime: + normalized = value.strip().replace("Z", "+00:00") + parsed = datetime.fromisoformat(normalized) + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed diff --git a/backend/app/player_event_worker.py b/backend/app/player_event_worker.py new file mode 100644 index 0000000..4724fa3 --- /dev/null +++ b/backend/app/player_event_worker.py @@ -0,0 +1,490 @@ +"""Incremental worker for the V2 player event ingestion pipeline.""" + +from __future__ import annotations + +import argparse +import json +import time +from dataclasses import dataclass +from typing import Iterable + +from .config import ( + get_historical_crcon_detail_workers, + get_historical_crcon_page_size, + get_player_event_refresh_interval_seconds, + get_player_event_refresh_max_retries, + get_player_event_refresh_overlap_hours, + get_player_event_refresh_retry_delay_seconds, +) +from .data_sources import resolve_historical_ingestion_data_source +from .historical_storage import list_historical_servers +from .player_event_source import resolve_player_event_source +from .player_event_storage import ( + finalize_player_event_ingestion_run, + finalize_player_event_progress, + get_player_event_refresh_cutoff_for_server, + get_player_event_resume_page, + initialize_player_event_storage, + mark_player_event_progress_page_completed, + mark_player_event_progress_started, + start_player_event_ingestion_run, + upsert_player_events, +) +from .writer_lock import backend_writer_lock, build_writer_lock_holder + + +@dataclass(slots=True) +class PlayerEventIngestionStats: + pages_processed: int = 0 + matches_seen: int = 0 + matches_fetched: int = 0 + events_inserted: int = 0 + duplicate_events: int = 0 + + def apply(self, delta: dict[str, int]) -> None: + self.events_inserted += int(delta.get("events_inserted", 0)) + self.duplicate_events += int(delta.get("duplicate_events", 0)) + + +def run_player_event_refresh( + *, + server_slug: str | None = None, + max_pages: int | None = None, + page_size: int | None = None, + start_page: int | None = None, + detail_workers: int | None = None, + overlap_hours: int | None = None, +) -> dict[str, object]: + """Refresh recent player event summaries from the configured historical source.""" + with backend_writer_lock( + holder=build_writer_lock_holder( + f"app.player_event_worker refresh:{server_slug or 'all-servers'}" + ) + ): + initialize_player_event_storage() + data_source, data_source_policy = resolve_historical_ingestion_data_source() + event_source_selection = resolve_player_event_source() + event_source = event_source_selection.source + resolved_page_size = page_size or get_historical_crcon_page_size() + resolved_detail_workers = detail_workers or get_historical_crcon_detail_workers() + resolved_overlap_hours = ( + get_player_event_refresh_overlap_hours() + if overlap_hours is None + else overlap_hours + ) + if resolved_overlap_hours < 0: + raise ValueError("--overlap-hours must be zero or positive.") + selected_servers = _select_servers(server_slug) + processed_servers: list[dict[str, object]] = [] + active_runs: dict[str, int] = {} + + try: + for server in selected_servers: + current_server_slug = str(server["slug"]) + run_id = start_player_event_ingestion_run( + mode="refresh", + target_server_slug=current_server_slug, + ) + active_runs[current_server_slug] = run_id + cutoff = get_player_event_refresh_cutoff_for_server( + current_server_slug, + overlap_hours=resolved_overlap_hours, + ) + mark_player_event_progress_started( + server_slug=current_server_slug, + mode="refresh", + run_id=run_id, + cutoff_occurred_at=cutoff, + ) + server_stats = _ingest_server( + server=server, + run_id=run_id, + data_source=data_source, + event_source=event_source, + page_size=resolved_page_size, + max_pages=max_pages, + start_page=_resolve_start_page( + server_slug=current_server_slug, + start_page=start_page, + ), + detail_workers=resolved_detail_workers, + cutoff=cutoff, + ) + finalize_player_event_ingestion_run( + run_id, + status="success", + pages_processed=server_stats["pages_processed"], + matches_seen=server_stats["matches_seen"], + matches_fetched=server_stats["matches_fetched"], + events_inserted=server_stats["events_inserted"], + duplicate_events=server_stats["duplicate_events"], + notes=f"source={data_source.source_kind};adapter={event_source.source_kind}", + ) + finalize_player_event_progress( + server_slug=current_server_slug, + mode="refresh", + run_id=run_id, + status="success", + archive_exhausted=bool(server_stats["archive_exhausted"]), + ) + processed_servers.append(server_stats) + active_runs.pop(current_server_slug, None) + except Exception as exc: + for active_server_slug, run_id in active_runs.items(): + finalize_player_event_ingestion_run( + run_id, + status="failed", + pages_processed=0, + matches_seen=0, + matches_fetched=0, + events_inserted=0, + duplicate_events=0, + notes=str(exc), + ) + finalize_player_event_progress( + server_slug=active_server_slug, + mode="refresh", + run_id=run_id, + status="failed", + error_message=str(exc), + ) + raise + + return { + "status": "ok", + "mode": "refresh", + "source_provider": data_source.source_kind, + "source_policy": data_source_policy, + "event_adapter": event_source.source_kind, + "event_source_policy": event_source_selection.source_policy, + "page_size": resolved_page_size, + "detail_workers": resolved_detail_workers, + "overlap_hours": resolved_overlap_hours, + "scope": event_source.describe_scope(), + "servers": processed_servers, + } + + +def run_periodic_player_event_refresh( + *, + interval_seconds: int, + max_retries: int, + retry_delay_seconds: int, + server_slug: str | None = None, + max_pages: int | None = None, + page_size: int | None = None, + detail_workers: int | None = None, + max_runs: int | None = None, +) -> None: + """Run the refresh worker repeatedly with bounded retries.""" + completed_runs = 0 + print( + json.dumps( + { + "event": "player-event-refresh-loop-started", + "interval_seconds": interval_seconds, + "max_retries": max_retries, + "retry_delay_seconds": retry_delay_seconds, + "server_scope": [server_slug] if server_slug else [server["slug"] for server in list_historical_servers()], + }, + indent=2, + ) + ) + print("Press Ctrl+C to stop.") + + try: + while max_runs is None or completed_runs < max_runs: + completed_runs += 1 + payload = _run_refresh_with_retries( + max_retries=max_retries, + retry_delay_seconds=retry_delay_seconds, + server_slug=server_slug, + max_pages=max_pages, + page_size=page_size, + detail_workers=detail_workers, + ) + print(json.dumps({"run": completed_runs, **payload}, indent=2)) + if max_runs is not None and completed_runs >= max_runs: + break + time.sleep(interval_seconds) + except KeyboardInterrupt: + print("\nPlayer event refresh loop stopped by user.") + + +def _run_refresh_with_retries( + *, + max_retries: int, + retry_delay_seconds: int, + server_slug: str | None, + max_pages: int | None, + page_size: int | None, + detail_workers: int | None, +) -> dict[str, object]: + attempt = 0 + while True: + attempt += 1 + try: + return { + "status": "ok", + "attempts_used": attempt, + "refresh_result": run_player_event_refresh( + server_slug=server_slug, + max_pages=max_pages, + page_size=page_size, + detail_workers=detail_workers, + ), + } + except Exception as exc: + if attempt > max_retries: + return { + "status": "error", + "attempts_used": attempt, + "error": str(exc), + } + if retry_delay_seconds > 0: + time.sleep(retry_delay_seconds) + + +def _ingest_server( + *, + server: dict[str, object], + run_id: int, + data_source: object, + event_source: object, + page_size: int, + max_pages: int | None, + start_page: int, + detail_workers: int, + cutoff: str | None, +) -> dict[str, object]: + page_limit = max_pages or 1000000 + local_stats = PlayerEventIngestionStats() + discovered_total_matches: int | None = None + archive_exhausted = False + + for page_number in range(start_page, start_page + page_limit): + payload = data_source.fetch_match_page( + base_url=str(server["scoreboard_base_url"]), + page=page_number, + limit=page_size, + ) + if discovered_total_matches is None: + discovered_total_matches = _coerce_int(payload.get("total")) + page_matches = _coerce_match_list(payload.get("maps")) + if not page_matches: + archive_exhausted = True + break + + local_stats.pages_processed += 1 + stop_after_page = False + match_ids_to_fetch: list[str] = [] + + for match_summary in page_matches: + local_stats.matches_seen += 1 + reference_timestamp = _pick_match_timestamp(match_summary) + if cutoff and reference_timestamp and reference_timestamp < cutoff: + stop_after_page = True + continue + + match_id = _stringify(match_summary.get("id")) + if match_id: + match_ids_to_fetch.append(match_id) + + detail_payloads = data_source.fetch_match_details( + base_url=str(server["scoreboard_base_url"]), + match_ids=match_ids_to_fetch, + max_workers=detail_workers, + ) + local_stats.matches_fetched += len(detail_payloads) + for detail_payload in detail_payloads: + match_id = _stringify(detail_payload.get("id")) or "unknown" + source_ref = ( + f"{server['scoreboard_base_url']}/api/get_map_scoreboard?map_id={match_id}" + ) + normalized_events = event_source.extract_match_events( + server_slug=str(server["slug"]), + match_payload=detail_payload, + source_ref=source_ref, + ) + local_stats.apply(upsert_player_events(normalized_events)) + + mark_player_event_progress_page_completed( + server_slug=str(server["slug"]), + mode="refresh", + page_number=page_number, + discovered_total_matches=discovered_total_matches, + run_id=run_id, + ) + + if stop_after_page: + break + + return { + "server_slug": server["slug"], + "source_provider": data_source.source_kind, + "event_adapter": event_source.source_kind, + "pages_processed": local_stats.pages_processed, + "matches_seen": local_stats.matches_seen, + "matches_fetched": local_stats.matches_fetched, + "events_inserted": local_stats.events_inserted, + "duplicate_events": local_stats.duplicate_events, + "cutoff": cutoff, + "archive_exhausted": archive_exhausted, + "discovered_total_matches": discovered_total_matches, + } + + +def _resolve_start_page(*, server_slug: str, start_page: int | None) -> int: + if start_page is not None: + return max(1, start_page) + return get_player_event_resume_page(server_slug, mode="refresh") + + +def _select_servers(server_slug: str | None) -> list[dict[str, object]]: + servers = list_historical_servers() + if server_slug is None: + return servers + normalized = server_slug.strip() + selected = [server for server in servers if server["slug"] == normalized] + if not selected: + raise ValueError(f"Unknown historical server slug: {server_slug}") + return selected + + +def _coerce_match_list(payload: object) -> list[dict[str, object]]: + if not isinstance(payload, list): + return [] + return [item for item in payload if isinstance(item, dict)] + + +def _pick_match_timestamp(match_payload: dict[str, object]) -> str | None: + for key in ("end", "start", "creation_time"): + value = match_payload.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + return None + + +def _stringify(value: object) -> str | None: + if value is None: + return None + text = str(value).strip() + return text or None + + +def _coerce_int(value: object) -> int | None: + if value in (None, ""): + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def build_arg_parser() -> argparse.ArgumentParser: + """Create the CLI parser for manual or periodic player event ingestion.""" + parser = argparse.ArgumentParser( + description="Player event refresh worker for HLL Vietnam.", + ) + parser.add_argument( + "mode", + choices=("refresh", "loop"), + help="refresh runs once; loop keeps the worker running periodically", + ) + parser.add_argument( + "--server", + dest="server_slug", + help="optional historical server slug", + ) + parser.add_argument( + "--max-pages", + type=int, + help="optional page cap for local validation", + ) + parser.add_argument( + "--page-size", + type=int, + help="override CRCON page size", + ) + parser.add_argument( + "--start-page", + type=int, + help="override the saved resume page", + ) + parser.add_argument( + "--detail-workers", + type=int, + help="parallel worker count for per-match detail requests", + ) + parser.add_argument( + "--overlap-hours", + type=int, + help="override the incremental overlap window in hours", + ) + parser.add_argument( + "--interval", + type=int, + default=get_player_event_refresh_interval_seconds(), + help="seconds to wait between loop runs", + ) + parser.add_argument( + "--retries", + type=int, + default=get_player_event_refresh_max_retries(), + help="retry attempts after a failed refresh", + ) + parser.add_argument( + "--retry-delay", + type=int, + default=get_player_event_refresh_retry_delay_seconds(), + help="seconds to wait between failed attempts", + ) + parser.add_argument( + "--max-runs", + type=int, + help="optional safety cap for loop mode", + ) + return parser + + +def main(argv: Iterable[str] | None = None) -> int: + """Run the player event worker CLI.""" + parser = build_arg_parser() + args = parser.parse_args(list(argv) if argv is not None else None) + + if args.mode == "refresh": + result = run_player_event_refresh( + server_slug=args.server_slug, + max_pages=args.max_pages, + page_size=args.page_size, + start_page=args.start_page, + detail_workers=args.detail_workers, + overlap_hours=args.overlap_hours, + ) + print(json.dumps(result, indent=2)) + return 0 + + if args.interval <= 0: + raise ValueError("--interval must be a positive integer.") + if args.retries < 0: + raise ValueError("--retries must be zero or positive.") + if args.retry_delay < 0: + raise ValueError("--retry-delay must be zero or positive.") + if args.max_runs is not None and args.max_runs <= 0: + raise ValueError("--max-runs must be positive when provided.") + + run_periodic_player_event_refresh( + interval_seconds=args.interval, + max_retries=args.retries, + retry_delay_seconds=args.retry_delay, + server_slug=args.server_slug, + max_pages=args.max_pages, + page_size=args.page_size, + detail_workers=args.detail_workers, + max_runs=args.max_runs, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/player_external_profiles.py b/backend/app/player_external_profiles.py new file mode 100644 index 0000000..032f57e --- /dev/null +++ b/backend/app/player_external_profiles.py @@ -0,0 +1,65 @@ +"""Safe external profile fields derived from captured player identifiers.""" + +from __future__ import annotations + +import re + + +_STEAM_ID64_RE = re.compile(r"^\d{17}$") +_EPIC_ID_RE = re.compile(r"^[0-9a-f]{32}$", re.IGNORECASE) + + +def build_external_player_profile_fields( + *, + player_id: object = None, + steam_id: object = None, +) -> dict[str, object]: + """Expose external profile links only when a captured identifier is safe.""" + + steam_id_64 = normalize_steam_id_64(steam_id) or normalize_steam_id_64(player_id) + if steam_id_64: + return { + "steam_id_64": steam_id_64, + "platform": "steam", + "external_profile_links": { + "steam": f"https://steamcommunity.com/profiles/{steam_id_64}", + "hellor": f"https://hellor.pro/player/{steam_id_64}", + "hll_records": f"https://hllrecords.com/profiles/{steam_id_64}", + "helo": f"https://helo-system.de/statistics/players/{steam_id_64}?series=2024", + }, + } + + epic_id = normalize_epic_id(player_id) + if epic_id: + return { + "epic_id": epic_id, + "platform": "epic", + "external_profile_links": { + "hellor": f"https://hellor.pro/player/{epic_id}", + "hll_records": f"https://hllrecords.com/profiles/{epic_id}", + }, + } + + return { + "platform": infer_player_platform(player_id=player_id, steam_id=steam_id), + "external_profile_links": {}, + } + + +def normalize_steam_id_64(value: object) -> str | None: + normalized = str(value or "").strip() + return normalized if _STEAM_ID64_RE.fullmatch(normalized) else None + + +def normalize_epic_id(value: object) -> str | None: + normalized = str(value or "").strip() + return normalized.lower() if _EPIC_ID_RE.fullmatch(normalized) else None + + +def infer_player_platform(*, player_id: object = None, steam_id: object = None) -> str: + normalized_player_id = str(player_id or "").strip() + if normalize_steam_id_64(steam_id) or normalize_steam_id_64(normalized_player_id): + return "steam" + if normalize_epic_id(normalized_player_id): + return "epic" + return "unknown" diff --git a/backend/app/postgres_display_storage.py b/backend/app/postgres_display_storage.py new file mode 100644 index 0000000..36898b1 --- /dev/null +++ b/backend/app/postgres_display_storage.py @@ -0,0 +1,929 @@ +"""PostgreSQL read/write storage for data displayed outside the RCON write path.""" + +from __future__ import annotations + +import json +from contextlib import contextmanager +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Any, Iterable, Mapping + +from .config import get_database_url, get_historical_weekly_fallback_max_weekday +from .historical_models import HistoricalSnapshotRecord +from .player_external_profiles import build_external_player_profile_fields +from .scoreboard_origins import resolve_trusted_scoreboard_match_url + + +ALL_SERVERS_SLUG = "all-servers" +ALL_SERVERS_DISPLAY_NAME = "Todos" +SUMMARY_SNAPSHOT_LIMIT = 6 + + +DISPLAY_SCHEMA_SQL = """ +CREATE TABLE IF NOT EXISTS game_sources ( + id BIGSERIAL PRIMARY KEY, + slug TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + provider_kind TEXT NOT NULL, + is_active BOOLEAN NOT NULL DEFAULT TRUE, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE TABLE IF NOT EXISTS servers ( + id BIGSERIAL PRIMARY KEY, + game_source_id BIGINT NOT NULL REFERENCES game_sources(id), + external_server_id TEXT, + server_name TEXT NOT NULL, + region TEXT, + first_seen_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(game_source_id, external_server_id) +); +CREATE TABLE IF NOT EXISTS server_snapshots ( + id BIGSERIAL PRIMARY KEY, + server_id BIGINT NOT NULL REFERENCES servers(id), + captured_at TEXT NOT NULL, + status TEXT NOT NULL, + players INTEGER, + max_players INTEGER, + current_map TEXT, + source_name TEXT NOT NULL, + snapshot_origin TEXT, + source_ref TEXT, + raw_payload_ref TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(server_id, captured_at, source_name, source_ref) +); +CREATE INDEX IF NOT EXISTS idx_pg_server_snapshots_server_time +ON server_snapshots(server_id, captured_at DESC); + +CREATE TABLE IF NOT EXISTS historical_servers ( + id BIGSERIAL PRIMARY KEY, + slug TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + scoreboard_base_url TEXT NOT NULL UNIQUE, + server_number INTEGER, + source_kind TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE TABLE IF NOT EXISTS historical_maps ( + id BIGSERIAL PRIMARY KEY, + external_map_id TEXT UNIQUE, + map_name TEXT, + pretty_name TEXT, + game_mode TEXT, + image_name TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE TABLE IF NOT EXISTS historical_matches ( + id BIGSERIAL PRIMARY KEY, + historical_server_id BIGINT NOT NULL REFERENCES historical_servers(id), + external_match_id TEXT NOT NULL, + historical_map_id BIGINT REFERENCES historical_maps(id), + created_at_source TEXT, + started_at TEXT, + ended_at TEXT, + map_name TEXT, + map_pretty_name TEXT, + game_mode TEXT, + image_name TEXT, + allied_score INTEGER, + axis_score INTEGER, + last_seen_at TEXT NOT NULL, + raw_payload_ref TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(historical_server_id, external_match_id) +); +CREATE TABLE IF NOT EXISTS historical_players ( + id BIGSERIAL PRIMARY KEY, + stable_player_key TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + steam_id TEXT, + source_player_id TEXT, + first_seen_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE TABLE IF NOT EXISTS historical_player_match_stats ( + id BIGSERIAL PRIMARY KEY, + historical_match_id BIGINT NOT NULL REFERENCES historical_matches(id), + historical_player_id BIGINT NOT NULL REFERENCES historical_players(id), + match_player_ref TEXT, + team_side TEXT, + level INTEGER, + kills INTEGER, + deaths INTEGER, + teamkills INTEGER, + time_seconds INTEGER, + kills_per_minute DOUBLE PRECISION, + deaths_per_minute DOUBLE PRECISION, + kill_death_ratio DOUBLE PRECISION, + combat INTEGER, + offense INTEGER, + defense INTEGER, + support INTEGER, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(historical_match_id, historical_player_id) +); +CREATE INDEX IF NOT EXISTS idx_pg_historical_matches_server_end +ON historical_matches(historical_server_id, ended_at DESC, started_at DESC); +CREATE INDEX IF NOT EXISTS idx_pg_historical_player_stats_match +ON historical_player_match_stats(historical_match_id); + +CREATE TABLE IF NOT EXISTS displayed_historical_snapshots ( + server_key TEXT NOT NULL, + snapshot_type TEXT NOT NULL, + metric TEXT NOT NULL DEFAULT '', + snapshot_window TEXT NOT NULL DEFAULT '', + payload_json TEXT NOT NULL, + generated_at TEXT NOT NULL, + source_range_start TEXT, + source_range_end TEXT, + is_stale BOOLEAN NOT NULL DEFAULT FALSE, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(server_key, snapshot_type, metric, snapshot_window) +); + +CREATE TABLE IF NOT EXISTS player_event_raw_ledger ( + id BIGSERIAL PRIMARY KEY, + event_id TEXT NOT NULL UNIQUE, + event_type TEXT NOT NULL, + occurred_at TEXT, + server_slug TEXT NOT NULL, + external_match_id TEXT NOT NULL, + source_kind TEXT NOT NULL, + source_ref TEXT, + raw_event_ref TEXT, + killer_player_key TEXT, + killer_display_name TEXT, + victim_player_key TEXT, + victim_display_name TEXT, + weapon_name TEXT, + weapon_category TEXT, + kill_category TEXT, + is_teamkill BOOLEAN NOT NULL DEFAULT FALSE, + event_value INTEGER NOT NULL DEFAULT 1, + inserted_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE INDEX IF NOT EXISTS idx_pg_player_event_raw_occurred_at +ON player_event_raw_ledger(occurred_at DESC); +""" + + +def initialize_postgres_display_storage() -> None: + with connect_postgres() as connection: + connection.execute(DISPLAY_SCHEMA_SQL) + + +def connect_postgres(): + try: + import psycopg + from psycopg.rows import dict_row + except ImportError as error: # pragma: no cover - environment-specific + raise RuntimeError("psycopg is required when HLL_BACKEND_DATABASE_URL is set.") from error + database_url = get_database_url() + if not database_url: + raise RuntimeError("HLL_BACKEND_DATABASE_URL is required for displayed PostgreSQL storage.") + return psycopg.connect(database_url, row_factory=dict_row) + + +class PostgresCompatConnection: + """Small placeholder shim for SQLite-shaped displayed read queries.""" + + def __init__(self, connection: Any): + self.connection = connection + + def execute(self, sql: str, params: Iterable[object] | None = None): + return self.connection.execute(sql.replace("?", "%s"), tuple(params or ())) + + +@contextmanager +def connect_postgres_compat(): + initialize_postgres_display_storage() + with connect_postgres() as connection: + yield PostgresCompatConnection(connection) + + +def persist_snapshot_record(snapshot: Mapping[str, object]) -> HistoricalSnapshotRecord: + initialize_postgres_display_storage() + generated_at = _iso(snapshot.get("generated_at")) or _utc_now_iso() + metric = str(snapshot.get("metric") or "") + window = str(snapshot.get("window") or "") + payload = snapshot.get("payload") + payload_json = json.dumps( + payload, + ensure_ascii=True, + separators=(",", ":"), + default=_json_payload_default, + ) + with connect_postgres() as connection: + connection.execute( + """ + INSERT INTO displayed_historical_snapshots ( + server_key, snapshot_type, metric, snapshot_window, payload_json, generated_at, + source_range_start, source_range_end, is_stale + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT(server_key, snapshot_type, metric, snapshot_window) DO UPDATE SET + payload_json = EXCLUDED.payload_json, + generated_at = EXCLUDED.generated_at, + source_range_start = EXCLUDED.source_range_start, + source_range_end = EXCLUDED.source_range_end, + is_stale = EXCLUDED.is_stale, + updated_at = CURRENT_TIMESTAMP + """, + ( + str(snapshot["server_key"]), + str(snapshot["snapshot_type"]), + metric, + window, + payload_json, + generated_at, + _iso(snapshot.get("source_range_start")), + _iso(snapshot.get("source_range_end")), + bool(snapshot.get("is_stale", False)), + ), + ) + return HistoricalSnapshotRecord( + server_key=str(snapshot["server_key"]), + snapshot_type=str(snapshot["snapshot_type"]), + metric=metric or None, + window=window or None, + payload_json=payload_json, + generated_at=_parse_datetime(generated_at) or datetime.now(timezone.utc), + source_range_start=_parse_datetime(_iso(snapshot.get("source_range_start"))), + source_range_end=_parse_datetime(_iso(snapshot.get("source_range_end"))), + is_stale=bool(snapshot.get("is_stale", False)), + ) + + +def get_snapshot( + *, + server_key: str, + snapshot_type: str, + metric: str | None, + window: str | None, +) -> dict[str, object] | None: + initialize_postgres_display_storage() + with connect_postgres() as connection: + row = connection.execute( + """ + SELECT * + FROM displayed_historical_snapshots + WHERE server_key = %s AND snapshot_type = %s AND metric = %s AND snapshot_window = %s + """, + (server_key, snapshot_type, metric or "", window or ""), + ).fetchone() + if not row: + return None + return { + "server_key": row["server_key"], + "snapshot_type": row["snapshot_type"], + "metric": row["metric"] or None, + "window": row["snapshot_window"] or None, + "generated_at": row["generated_at"], + "source_range_start": row["source_range_start"], + "source_range_end": row["source_range_end"], + "is_stale": bool(row["is_stale"]), + "payload": json.loads(row["payload_json"]), + } + + +def list_latest_server_snapshots() -> list[dict[str, object]]: + initialize_postgres_display_storage() + with connect_postgres() as connection: + rows = connection.execute( + """ + SELECT s.id AS server_id, s.external_server_id, s.server_name, s.region, + g.slug AS context, snap.source_name, snap.snapshot_origin, + snap.source_ref, snap.captured_at, snap.status, snap.players, + snap.max_players, snap.current_map + FROM servers AS s + JOIN game_sources AS g ON g.id = s.game_source_id + JOIN server_snapshots AS snap ON snap.server_id = s.id + JOIN ( + SELECT server_id, MAX(captured_at) AS captured_at + FROM server_snapshots GROUP BY server_id + ) AS latest ON latest.server_id = snap.server_id + AND latest.captured_at = snap.captured_at + ORDER BY s.server_name ASC + """ + ).fetchall() + return [_attach_server_history(connection, dict(row)) for row in rows] + + +def persist_server_snapshots( + snapshots: Iterable[Mapping[str, object]], + *, + source_name: str, + captured_at: str, + game_source: Mapping[str, str], +) -> dict[str, object]: + initialize_postgres_display_storage() + persisted = 0 + with connect_postgres() as connection: + source = connection.execute( + """ + INSERT INTO game_sources (slug, display_name, provider_kind, is_active) + VALUES (%s, %s, %s, TRUE) + ON CONFLICT(slug) DO UPDATE SET + display_name = EXCLUDED.display_name, + provider_kind = EXCLUDED.provider_kind, + is_active = TRUE, + updated_at = CURRENT_TIMESTAMP + RETURNING id + """, + (game_source["slug"], game_source["display_name"], game_source["provider_kind"]), + ).fetchone() + for snapshot in snapshots: + external_server_id = str(snapshot.get("external_server_id") or "").strip() + if not external_server_id: + external_server_id = _fallback_external_id(snapshot.get("server_name")) + server = connection.execute( + """ + INSERT INTO servers ( + game_source_id, external_server_id, server_name, region, + first_seen_at, last_seen_at + ) VALUES (%s, %s, %s, %s, %s, %s) + ON CONFLICT(game_source_id, external_server_id) DO UPDATE SET + server_name = EXCLUDED.server_name, + region = EXCLUDED.region, + last_seen_at = EXCLUDED.last_seen_at, + updated_at = CURRENT_TIMESTAMP + RETURNING id + """, + ( + source["id"], + external_server_id, + str(snapshot.get("server_name") or "Unknown server"), + snapshot.get("region"), + captured_at, + captured_at, + ), + ).fetchone() + connection.execute( + """ + INSERT INTO server_snapshots ( + server_id, captured_at, status, players, max_players, current_map, + source_name, snapshot_origin, source_ref, raw_payload_ref + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, NULL) + ON CONFLICT(server_id, captured_at, source_name, source_ref) DO UPDATE SET + status = EXCLUDED.status, + players = EXCLUDED.players, + max_players = EXCLUDED.max_players, + current_map = EXCLUDED.current_map, + snapshot_origin = EXCLUDED.snapshot_origin + """, + ( + server["id"], + captured_at, + snapshot.get("status") or "unknown", + snapshot.get("players"), + snapshot.get("max_players"), + snapshot.get("current_map"), + snapshot.get("source_name") or source_name, + snapshot.get("snapshot_origin"), + snapshot.get("source_ref") or snapshot.get("source_name") or source_name, + ), + ) + persisted += 1 + return { + "db_path": "postgresql", + "captured_at": captured_at, + "persisted_snapshots": persisted, + "game_source_slug": game_source["slug"], + } + + +def upsert_player_event_rows(events: Iterable[object]) -> dict[str, int]: + initialize_postgres_display_storage() + inserted = 0 + duplicates = 0 + with connect_postgres() as connection: + for event in events: + row = connection.execute( + """ + INSERT INTO player_event_raw_ledger ( + event_id, event_type, occurred_at, server_slug, external_match_id, + source_kind, source_ref, raw_event_ref, killer_player_key, + killer_display_name, victim_player_key, victim_display_name, + weapon_name, weapon_category, kill_category, is_teamkill, event_value + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT(event_id) DO NOTHING + RETURNING id + """, + ( + event.event_id, + event.event_type, + event.occurred_at, + event.server_slug, + event.external_match_id, + event.source_kind, + event.source_ref, + event.raw_event_ref, + event.killer_player_key, + event.killer_display_name, + event.victim_player_key, + event.victim_display_name, + event.weapon_name, + event.weapon_category, + event.kill_category, + bool(event.is_teamkill), + max(1, int(event.event_value)), + ), + ).fetchone() + inserted += int(bool(row)) + duplicates += int(not row) + return {"events_inserted": inserted, "duplicate_events": duplicates} + + +def list_server_snapshot_history(*, server_id: str | None = None, limit: int) -> list[dict[str, object]]: + initialize_postgres_display_storage() + where = "" + params: list[object] = [] + if server_id: + if server_id.strip().isdigit(): + where = "WHERE s.id = %s" + params.append(int(server_id)) + else: + where = "WHERE s.external_server_id = %s" + params.append(server_id.strip()) + with connect_postgres() as connection: + rows = connection.execute( + f""" + SELECT s.id AS server_id, s.external_server_id, s.server_name, s.region, + g.slug AS context, snap.source_name, snap.snapshot_origin, + snap.source_ref, snap.captured_at, snap.status, snap.players, + snap.max_players, snap.current_map + FROM server_snapshots AS snap + JOIN servers AS s ON s.id = snap.server_id + JOIN game_sources AS g ON g.id = s.game_source_id + {where} + ORDER BY snap.captured_at DESC, s.server_name ASC + LIMIT %s + """, + (*params, limit), + ).fetchall() + return [dict(row) for row in rows] + + +def list_recent_scoreboard_matches(*, server_slug: str | None, limit: int) -> list[dict[str, object]]: + initialize_postgres_display_storage() + where = "" + params: list[object] = [] + if server_slug and server_slug != ALL_SERVERS_SLUG: + where = "WHERE hs.slug = %s" + params.append(server_slug) + with connect_postgres() as connection: + rows = connection.execute( + f""" + SELECT hs.slug AS server_slug, hs.display_name AS server_name, + hm.external_match_id, hm.started_at, hm.ended_at, + hm.map_pretty_name, hm.map_name, hm.allied_score, hm.axis_score, + hm.raw_payload_ref, COUNT(stats.id) AS player_count + FROM historical_matches AS hm + JOIN historical_servers AS hs ON hs.id = hm.historical_server_id + LEFT JOIN historical_player_match_stats AS stats ON stats.historical_match_id = hm.id + {where} + GROUP BY hm.id, hs.slug, hs.display_name + ORDER BY COALESCE(hm.ended_at, hm.started_at) DESC + LIMIT %s + """, + (*params, limit), + ).fetchall() + return [_recent_match_row(row) for row in rows] + + +def get_scoreboard_match_detail(*, server_slug: str, match_id: str) -> dict[str, object] | None: + initialize_postgres_display_storage() + with connect_postgres() as connection: + row = connection.execute( + """ + SELECT hm.id AS match_pk, hs.slug AS server_slug, hs.display_name AS server_name, + hm.external_match_id, hm.started_at, hm.ended_at, hm.map_pretty_name, + hm.map_name, hm.allied_score, hm.axis_score, hm.raw_payload_ref, + COUNT(stats.id) AS player_count, + SUM(COALESCE(stats.time_seconds, 0)) AS total_time_seconds + FROM historical_matches AS hm + JOIN historical_servers AS hs ON hs.id = hm.historical_server_id + LEFT JOIN historical_player_match_stats AS stats ON stats.historical_match_id = hm.id + WHERE hs.slug = %s AND hm.external_match_id = %s + GROUP BY hm.id, hs.slug, hs.display_name + LIMIT 1 + """, + (server_slug, match_id), + ).fetchone() + if not row: + return None + players = connection.execute( + """ + SELECT hp.display_name, hp.stable_player_key, hp.steam_id, stats.team_side, stats.level, + stats.kills, stats.deaths, stats.teamkills, stats.combat, stats.offense, + stats.defense, stats.support, stats.time_seconds + FROM historical_player_match_stats AS stats + JOIN historical_players AS hp ON hp.id = stats.historical_player_id + WHERE stats.historical_match_id = %s + ORDER BY COALESCE(stats.kills, 0) DESC, hp.display_name ASC + """, + (row["match_pk"],), + ).fetchall() + started_at = row["started_at"] + ended_at = row["ended_at"] + return { + "server": {"slug": row["server_slug"], "name": row["server_name"]}, + "match_id": row["external_match_id"], + "started_at": started_at, + "ended_at": ended_at, + "closed_at": ended_at or started_at, + "duration_seconds": _duration_seconds(started_at, ended_at), + "map": {"name": row["map_name"], "pretty_name": row["map_pretty_name"] or row["map_name"]}, + "result": _match_result(row["allied_score"], row["axis_score"]), + "player_count": int(row["player_count"] or 0), + "total_time_seconds": _int(row["total_time_seconds"]), + "players": [ + { + "name": player["display_name"], + "stable_player_key": player["stable_player_key"], + "team_side": player["team_side"], + **build_external_player_profile_fields(steam_id=player["steam_id"]), + **{ + key: _int(player[key]) + for key in ( + "level", "kills", "deaths", "teamkills", "combat", + "offense", "defense", "support", "time_seconds", + ) + }, + } + for player in players + ], + "capture_basis": "public-scoreboard-match", + "match_url": resolve_trusted_scoreboard_match_url(row["raw_payload_ref"], row["server_slug"]), + } + + +def list_scoreboard_server_summaries(*, server_slug: str | None) -> list[dict[str, object]]: + initialize_postgres_display_storage() + if server_slug == ALL_SERVERS_SLUG: + rows = list_scoreboard_server_summaries(server_slug=None) + return [_all_server_summary(rows)] + where = "WHERE hs.slug = %s" if server_slug else "" + params = (server_slug,) if server_slug else () + with connect_postgres() as connection: + rows = connection.execute( + f""" + SELECT hs.slug AS server_slug, hs.display_name AS server_name, + COUNT(DISTINCT hm.id) AS matches_count, + COUNT(DISTINCT hp.id) AS unique_players, + COALESCE(SUM(stats.kills), 0) AS total_kills, + COUNT(DISTINCT COALESCE(hm.map_pretty_name, hm.map_name)) AS map_count, + MIN(COALESCE(hm.ended_at, hm.started_at, hm.created_at_source)) AS first_match_at, + MAX(COALESCE(hm.ended_at, hm.started_at, hm.created_at_source)) AS last_match_at + FROM historical_servers AS hs + LEFT JOIN historical_matches AS hm ON hm.historical_server_id = hs.id + LEFT JOIN historical_player_match_stats AS stats ON stats.historical_match_id = hm.id + LEFT JOIN historical_players AS hp ON hp.id = stats.historical_player_id + {where} + GROUP BY hs.id + ORDER BY hs.server_number ASC, hs.slug ASC + """, + params, + ).fetchall() + map_rows = connection.execute( + f""" + SELECT hs.slug AS server_slug, + COALESCE(hm.map_pretty_name, hm.map_name, 'Mapa no disponible') AS map_name, + COUNT(*) AS matches_count + FROM historical_matches AS hm + JOIN historical_servers AS hs ON hs.id = hm.historical_server_id + {where} + GROUP BY hs.slug, COALESCE(hm.map_pretty_name, hm.map_name, 'Mapa no disponible') + ORDER BY hs.slug ASC, matches_count DESC, map_name ASC + """, + params, + ).fetchall() + maps: dict[str, list[dict[str, object]]] = {} + for row in map_rows: + maps.setdefault(str(row["server_slug"]), []) + if len(maps[str(row["server_slug"])]) < 3: + maps[str(row["server_slug"])].append( + {"map_name": row["map_name"], "matches_count": int(row["matches_count"] or 0)} + ) + return [_summary_row(row, maps.get(str(row["server_slug"]), [])) for row in rows] + + +def list_scoreboard_leaderboard( + *, timeframe: str, metric: str, server_id: str | None, limit: int +) -> dict[str, object]: + current = datetime.now(timezone.utc) + if timeframe == "monthly": + current_start = current.replace(day=1, hour=0, minute=0, second=0, microsecond=0) + previous_start = (current_start - timedelta(days=1)).replace( + day=1, hour=0, minute=0, second=0, microsecond=0 + ) + label = ("current-month", "Mes actual", "previous-closed-month-fallback", "Mes cerrado anterior") + else: + current_midnight = current.replace(hour=0, minute=0, second=0, microsecond=0) + current_start = current_midnight - timedelta(days=current_midnight.weekday()) + previous_start = current_start - timedelta(days=7) + label = ("current-week", "Semana actual", "previous-closed-week-fallback", "Semana cerrada anterior") + current_count = _count_scoreboard_matches(server_id, current_start, current) + previous_count = _count_scoreboard_matches(server_id, previous_start, current_start) + fallback = current_count <= 0 and previous_count > 0 + start, end = (previous_start, current_start) if fallback else (current_start, current) + rows = _leaderboard_rows(server_id=server_id, metric=metric, start=start, end=end, limit=limit) + window_days = max(1, int(((end - start).total_seconds() + 86399) // 86400)) + result = { + "metric": metric, + "window_start": _iso(start), + "window_end": _iso(end), + "window_days": window_days, + "window_kind": label[2] if fallback else label[0], + "window_label": label[3] if fallback else label[1], + "uses_fallback": fallback, + "selection_reason": ( + "no-current-month-matches" if fallback and timeframe == "monthly" + else "insufficient-current-week-sample" if fallback + else label[0] + ), + "items": rows, + } + if timeframe == "monthly": + result.update( + { + "timeframe": "monthly", + "current_month_start": _iso(current_start), + "current_month_closed_matches": current_count, + "previous_month_closed_matches": previous_count, + "sufficient_sample": { + "minimum_closed_matches": 1, + "current_month_closed_matches": current_count, + "current_month_has_sufficient_sample": current_count > 0, + "is_early_month": current.day <= 3, + }, + } + ) + else: + result.update( + { + "current_week_start": _iso(current_start), + "current_week_closed_matches": current_count, + "previous_week_closed_matches": previous_count, + "sufficient_sample": { + "minimum_closed_matches": 1, + "current_week_closed_matches": current_count, + "current_week_has_sufficient_sample": current_count > 0, + "is_early_week": current.weekday() <= get_historical_weekly_fallback_max_weekday(), + "fallback_max_weekday": get_historical_weekly_fallback_max_weekday(), + }, + } + ) + return result + + +def table_counts() -> dict[str, int]: + initialize_postgres_display_storage() + tables = ( + "historical_matches", + "historical_player_match_stats", + "displayed_historical_snapshots", + "player_event_raw_ledger", + "server_snapshots", + ) + with connect_postgres() as connection: + return { + table: int(connection.execute(f"SELECT COUNT(*) AS count FROM {table}").fetchone()["count"] or 0) + for table in tables + } + + +def _leaderboard_rows( + *, server_id: str | None, metric: str, start: datetime, end: datetime, limit: int +) -> list[dict[str, object]]: + metric_sql = { + "kills": "COALESCE(SUM(stats.kills), 0)", + "deaths": "COALESCE(SUM(stats.deaths), 0)", + "support": "COALESCE(SUM(stats.support), 0)", + "matches_over_100_kills": ( + "COALESCE(SUM(CASE WHEN COALESCE(stats.kills, 0) >= 100 THEN 1 ELSE 0 END), 0)" + ), + }[metric] + aggregate = server_id == ALL_SERVERS_SLUG + where, server_params = _server_where(server_id) + server_slug = f"'{ALL_SERVERS_SLUG}'" if aggregate else "hs.slug" + server_name = f"'{ALL_SERVERS_DISPLAY_NAME}'" if aggregate else "hs.display_name" + partition = f"'{ALL_SERVERS_SLUG}'" if aggregate else "hs.slug" + group_by = "hp.id" if aggregate else "hs.slug, hs.display_name, hp.id" + with connect_postgres() as connection: + rows = connection.execute( + f""" + WITH ranked AS ( + SELECT {server_slug} AS server_slug, {server_name} AS server_name, + hp.stable_player_key, hp.display_name AS player_name, hp.steam_id, + COUNT(DISTINCT hm.id) AS matches_count, {metric_sql} AS metric_value, + ROW_NUMBER() OVER ( + PARTITION BY {partition} + ORDER BY {metric_sql} DESC, COUNT(DISTINCT hm.id) ASC, hp.display_name ASC + ) AS ranking_position + FROM historical_player_match_stats AS stats + JOIN historical_matches AS hm ON hm.id = stats.historical_match_id + JOIN historical_servers AS hs ON hs.id = hm.historical_server_id + JOIN historical_players AS hp ON hp.id = stats.historical_player_id + WHERE hm.ended_at IS NOT NULL AND hm.ended_at >= %s AND hm.ended_at < %s {where} + GROUP BY {group_by} + ) + SELECT * FROM ranked WHERE ranking_position <= %s + ORDER BY server_slug ASC, ranking_position ASC + """, + (_iso(start), _iso(end), *server_params, limit), + ).fetchall() + return [ + { + "server": {"slug": row["server_slug"], "name": row["server_name"]}, + "time_range": {"start": _iso(start), "end": _iso(end), "window_days": max(1, (end - start).days or 1)}, + "player": { + "stable_player_key": row["stable_player_key"], + "name": row["player_name"], + "steam_id": row["steam_id"], + }, + "metric": metric, + "ranking_position": int(row["ranking_position"]), + "metric_value": int(row["metric_value"] or 0), + "matches_considered": int(row["matches_count"] or 0), + } + for row in rows + ] + + +def _count_scoreboard_matches(server_id: str | None, start: datetime, end: datetime) -> int: + where, server_params = _server_where(server_id) + with connect_postgres() as connection: + row = connection.execute( + f""" + SELECT COUNT(DISTINCT hm.id) AS count + FROM historical_matches AS hm + JOIN historical_servers AS hs ON hs.id = hm.historical_server_id + JOIN historical_player_match_stats AS stats ON stats.historical_match_id = hm.id + WHERE hm.ended_at IS NOT NULL AND hm.ended_at >= %s AND hm.ended_at < %s {where} + """, + (_iso(start), _iso(end), *server_params), + ).fetchone() + return int(row["count"] or 0) + + +def _server_where(server_id: str | None) -> tuple[str, tuple[object, ...]]: + if not server_id or server_id == ALL_SERVERS_SLUG: + return "", () + return "AND (hs.slug = %s OR CAST(hs.server_number AS TEXT) = %s)", (server_id, server_id) + + +def _recent_match_row(row: Mapping[str, object]) -> dict[str, object]: + return { + "server": {"slug": row["server_slug"], "name": row["server_name"]}, + "match_id": row["external_match_id"], + "started_at": row["started_at"], + "ended_at": row["ended_at"], + "closed_at": row["ended_at"] or row["started_at"], + "map": {"name": row["map_name"], "pretty_name": row["map_pretty_name"] or row["map_name"]}, + "result": _match_result(row["allied_score"], row["axis_score"]), + "player_count": int(row["player_count"] or 0), + "match_url": resolve_trusted_scoreboard_match_url(row["raw_payload_ref"], row["server_slug"]), + } + + +def _summary_row(row: Mapping[str, object], top_maps: list[dict[str, object]]) -> dict[str, object]: + first = row["first_match_at"] + last = row["last_match_at"] + matches = int(row["matches_count"] or 0) + return { + "server": {"slug": row["server_slug"], "name": row["server_name"]}, + "matches_count": matches, + "imported_matches_count": matches, + "unique_players": int(row["unique_players"] or 0), + "total_kills": int(row["total_kills"] or 0), + "map_count": int(row["map_count"] or 0), + "top_maps": top_maps, + "coverage": { + "basis": "postgres-migrated-public-scoreboard", + "status": "available" if matches else "empty", + "imported_matches_count": matches, + "discovered_total_matches": None, + "first_match_at": first, + "last_match_at": last, + "coverage_days": _coverage_days(first, last), + }, + "backfill": {}, + "time_range": {"start": first, "end": last}, + } + + +def _all_server_summary(items: list[dict[str, object]]) -> dict[str, object]: + starts = [item["time_range"]["start"] for item in items if item["time_range"]["start"]] + ends = [item["time_range"]["end"] for item in items if item["time_range"]["end"]] + return { + "server": {"slug": ALL_SERVERS_SLUG, "name": ALL_SERVERS_DISPLAY_NAME}, + "matches_count": sum(int(item["matches_count"]) for item in items), + "imported_matches_count": sum(int(item["imported_matches_count"]) for item in items), + "unique_players": None, + "total_kills": sum(int(item["total_kills"]) for item in items), + "map_count": None, + "top_maps": [], + "coverage": {"basis": "postgres-migrated-public-scoreboard", "status": "available" if items else "empty"}, + "backfill": {}, + "time_range": {"start": min(starts) if starts else None, "end": max(ends) if ends else None}, + } + + +def _attach_server_history(connection: Any, item: dict[str, object]) -> dict[str, object]: + rows = connection.execute( + """ + SELECT captured_at, status, players FROM server_snapshots + WHERE server_id = %s ORDER BY captured_at DESC LIMIT %s + """, + (item["server_id"], SUMMARY_SNAPSHOT_LIMIT), + ).fetchall() + players = [int(row["players"]) for row in rows if row["players"] is not None] + online = [row for row in rows if row["status"] == "online"] + item["history_summary"] = { + "window_size": SUMMARY_SNAPSHOT_LIMIT, + "recent_capture_count": len(rows), + "recent_online_count": len(online), + "recent_average_players": round(sum(players) / len(players), 1) if players else None, + "recent_peak_players": max(players, default=None), + "last_seen_online_at": online[0]["captured_at"] if online else None, + "minutes_since_last_capture": _minutes_since(rows[0]["captured_at"]) if rows else None, + } + return item + + +def _match_result(allied: object, axis: object) -> dict[str, object]: + allied_int, axis_int = _int(allied), _int(axis) + winner = None + if allied_int is not None and axis_int is not None: + winner = "allied" if allied_int > axis_int else "axis" if axis_int > allied_int else "draw" + return {"allied_score": allied_int, "axis_score": axis_int, "winner": winner} + + +def _duration_seconds(start: object, end: object) -> int | None: + start_point, end_point = _parse_datetime(_iso(start)), _parse_datetime(_iso(end)) + return max(0, int((end_point - start_point).total_seconds())) if start_point and end_point else None + + +def _coverage_days(start: object, end: object) -> int | None: + seconds = _duration_seconds(start, end) + return max(1, int((seconds + 86399) // 86400)) if seconds is not None else None + + +def _minutes_since(value: object) -> int | None: + point = _parse_datetime(_iso(value)) + return max(0, int((datetime.now(timezone.utc) - point).total_seconds() // 60)) if point else None + + +def _int(value: object) -> int | None: + try: + return None if value is None else int(value) + except (TypeError, ValueError): + return None + + +def _fallback_external_id(value: object) -> str: + normalized = "".join( + character.lower() if character.isalnum() else "-" + for character in str(value or "unknown-server") + ) + compact = "-".join(part for part in normalized.split("-") if part) + return compact or "unknown-server" + + +def _iso(value: object) -> str | None: + if isinstance(value, datetime): + point = value if value.tzinfo else value.replace(tzinfo=timezone.utc) + return point.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + text = str(value or "").strip() + return text or None + + +def _json_payload_default(value: object) -> str: + if isinstance(value, datetime): + return _iso(value) or "" + raise TypeError(f"Object of type {type(value).__name__} is not JSON serializable") + + +def _parse_datetime(value: str | None) -> datetime | None: + if not value: + return None + try: + point = datetime.fromisoformat(value.replace("Z", "+00:00")) + except ValueError: + return None + return point.astimezone(timezone.utc) if point.tzinfo else point.replace(tzinfo=timezone.utc) + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") diff --git a/backend/app/postgres_rcon_storage.py b/backend/app/postgres_rcon_storage.py new file mode 100644 index 0000000..4fad140 --- /dev/null +++ b/backend/app/postgres_rcon_storage.py @@ -0,0 +1,1038 @@ +"""PostgreSQL persistence for the phase-1 RCON historical pipeline.""" + +from __future__ import annotations + +import json +from collections.abc import Iterable, Mapping +from contextlib import contextmanager +from datetime import datetime, timezone +from typing import Any + +from .config import get_database_url +from .normalizers import normalize_map_name +from .rcon_client import load_rcon_targets + + +COMPETITIVE_WINDOW_GAP_SECONDS = 1800 +COMPETITIVE_MODE_PARTIAL = "partial" +COMPETITIVE_MODE_APPROXIMATE = "approximate" +COMPETITIVE_MODE_EXACT = "exact" + + +RCON_SCHEMA_SQL = """ +CREATE TABLE IF NOT EXISTS rcon_historical_targets ( + id BIGSERIAL PRIMARY KEY, + target_key TEXT NOT NULL UNIQUE, + external_server_id TEXT, + display_name TEXT NOT NULL, + host TEXT NOT NULL, + port INTEGER NOT NULL, + region TEXT, + game_port INTEGER, + query_port INTEGER, + source_name TEXT NOT NULL, + last_configured_at TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS rcon_historical_capture_runs ( + id BIGSERIAL PRIMARY KEY, + mode TEXT NOT NULL, + status TEXT NOT NULL, + target_scope TEXT, + started_at TEXT NOT NULL, + completed_at TEXT, + targets_seen INTEGER NOT NULL DEFAULT 0, + samples_inserted INTEGER NOT NULL DEFAULT 0, + duplicate_samples INTEGER NOT NULL DEFAULT 0, + failed_targets INTEGER NOT NULL DEFAULT 0, + notes TEXT, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS rcon_historical_samples ( + id BIGSERIAL PRIMARY KEY, + target_id BIGINT NOT NULL REFERENCES rcon_historical_targets(id), + capture_run_id BIGINT REFERENCES rcon_historical_capture_runs(id), + captured_at TEXT NOT NULL, + source_kind TEXT NOT NULL, + status TEXT NOT NULL, + players INTEGER, + max_players INTEGER, + current_map TEXT, + normalized_payload_json TEXT NOT NULL, + raw_payload_json TEXT, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_id, captured_at) +); + +CREATE TABLE IF NOT EXISTS rcon_historical_checkpoints ( + target_id BIGINT PRIMARY KEY REFERENCES rcon_historical_targets(id), + last_successful_capture_at TEXT, + last_sample_at TEXT, + last_run_id BIGINT REFERENCES rcon_historical_capture_runs(id), + last_run_status TEXT, + last_error TEXT, + last_error_at TEXT, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS rcon_historical_competitive_windows ( + id BIGSERIAL PRIMARY KEY, + target_id BIGINT NOT NULL REFERENCES rcon_historical_targets(id), + session_key TEXT NOT NULL UNIQUE, + source_kind TEXT NOT NULL, + map_name TEXT, + map_pretty_name TEXT, + first_seen_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + sample_count INTEGER NOT NULL DEFAULT 0, + total_players INTEGER NOT NULL DEFAULT 0, + peak_players INTEGER NOT NULL DEFAULT 0, + last_players INTEGER, + max_players INTEGER, + status TEXT NOT NULL, + confidence_mode TEXT NOT NULL, + capabilities_json TEXT NOT NULL, + latest_payload_json TEXT, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS rcon_admin_log_events ( + id BIGSERIAL PRIMARY KEY, + target_key TEXT NOT NULL, + external_server_id TEXT, + event_timestamp TEXT, + server_time BIGINT, + relative_time TEXT, + event_type TEXT NOT NULL, + raw_message TEXT NOT NULL, + canonical_message TEXT NOT NULL, + parsed_payload_json TEXT NOT NULL, + raw_entry_json TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE NULLS NOT DISTINCT(target_key, server_time, canonical_message) +); + +CREATE TABLE IF NOT EXISTS rcon_player_profile_snapshots ( + id BIGSERIAL PRIMARY KEY, + target_key TEXT NOT NULL, + external_server_id TEXT, + player_id TEXT NOT NULL, + player_name TEXT NOT NULL, + source_server_time BIGINT NOT NULL, + event_timestamp TEXT, + first_seen TEXT, + sessions INTEGER, + matches_played INTEGER, + play_time TEXT, + total_kills INTEGER, + total_deaths INTEGER, + teamkills_done INTEGER, + teamkills_received INTEGER, + kd_ratio DOUBLE PRECISION, + favorite_weapons_json TEXT NOT NULL DEFAULT '{}', + victims_json TEXT NOT NULL DEFAULT '{}', + nemesis_json TEXT NOT NULL DEFAULT '{}', + averages_json TEXT NOT NULL DEFAULT '{}', + sanctions_json TEXT NOT NULL DEFAULT '{}', + raw_content TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_key, player_id, source_server_time) +); + +CREATE TABLE IF NOT EXISTS rcon_materialized_matches ( + id BIGSERIAL PRIMARY KEY, + target_key TEXT NOT NULL, + external_server_id TEXT, + match_key TEXT NOT NULL, + map_name TEXT, + map_pretty_name TEXT, + game_mode TEXT, + started_server_time BIGINT, + ended_server_time BIGINT, + started_at TEXT, + ended_at TEXT, + allied_score INTEGER, + axis_score INTEGER, + winner TEXT, + confidence_mode TEXT NOT NULL, + source_basis TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_key, match_key) +); + +CREATE TABLE IF NOT EXISTS rcon_match_player_stats ( + id BIGSERIAL PRIMARY KEY, + target_key TEXT NOT NULL, + match_key TEXT NOT NULL, + player_id TEXT NOT NULL, + player_name TEXT NOT NULL, + team TEXT, + kills INTEGER NOT NULL DEFAULT 0, + deaths INTEGER NOT NULL DEFAULT 0, + teamkills INTEGER NOT NULL DEFAULT 0, + deaths_by_teamkill INTEGER NOT NULL DEFAULT 0, + weapons_json TEXT NOT NULL DEFAULT '{}', + death_by_weapons_json TEXT NOT NULL DEFAULT '{}', + most_killed_json TEXT NOT NULL DEFAULT '{}', + death_by_json TEXT NOT NULL DEFAULT '{}', + first_seen_server_time BIGINT, + last_seen_server_time BIGINT, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_key, match_key, player_id) +); + +CREATE TABLE IF NOT EXISTS rcon_scoreboard_match_candidates ( + id BIGSERIAL PRIMARY KEY, + server_slug TEXT NOT NULL, + external_match_id TEXT NOT NULL, + started_at TEXT, + ended_at TEXT, + map_name TEXT, + map_pretty_name TEXT, + allied_score INTEGER, + axis_score INTEGER, + player_count INTEGER, + match_url TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(server_slug, external_match_id) +); + +CREATE INDEX IF NOT EXISTS idx_rcon_historical_samples_target_time +ON rcon_historical_samples(target_id, captured_at DESC); +CREATE INDEX IF NOT EXISTS idx_rcon_historical_windows_target_time +ON rcon_historical_competitive_windows(target_id, last_seen_at DESC); +CREATE INDEX IF NOT EXISTS idx_rcon_admin_log_events_target_time +ON rcon_admin_log_events(target_key, server_time DESC); +CREATE INDEX IF NOT EXISTS idx_rcon_admin_log_events_type +ON rcon_admin_log_events(event_type); +CREATE INDEX IF NOT EXISTS idx_rcon_player_profile_snapshots_player +ON rcon_player_profile_snapshots(target_key, player_id, source_server_time DESC); +CREATE INDEX IF NOT EXISTS idx_rcon_materialized_matches_recent +ON rcon_materialized_matches(target_key, ended_at DESC, ended_server_time DESC); +CREATE INDEX IF NOT EXISTS idx_rcon_match_player_stats_match +ON rcon_match_player_stats(target_key, match_key); +CREATE INDEX IF NOT EXISTS idx_rcon_scoreboard_candidates_server_end +ON rcon_scoreboard_match_candidates(server_slug, ended_at DESC, started_at DESC); +""" + + +def initialize_postgres_rcon_storage() -> None: + """Create deterministic PostgreSQL schema for migrated RCON domains.""" + with connect_postgres() as connection: + with connection.cursor() as cursor: + cursor.execute(RCON_SCHEMA_SQL) + + +@contextmanager +def connect_postgres(): + """Yield one PostgreSQL connection with dict-shaped rows.""" + try: + import psycopg + from psycopg.rows import dict_row + except ImportError as error: # pragma: no cover - dependency is environment-specific + raise RuntimeError("psycopg is required when HLL_BACKEND_DATABASE_URL is set.") from error + + database_url = get_database_url() + if not database_url: + raise RuntimeError("HLL_BACKEND_DATABASE_URL is required for PostgreSQL RCON storage.") + with psycopg.connect(database_url, row_factory=dict_row) as connection: + yield connection + + +class PostgresCompatConnection: + """Small DB-API shim for RCON SQL shared with SQLite functions.""" + + def __init__(self, connection: Any): + self.connection = connection + + def execute(self, sql: str, params: Iterable[object] | None = None): + normalized = sql.replace("server_time IS ?", "server_time IS NOT DISTINCT FROM ?") + normalized = normalized.replace("?", "%s") + return self.connection.execute(normalized, tuple(params or ())) + + +@contextmanager +def connect_postgres_compat(): + """Yield a query shim that accepts the phase-1 SQLite-style placeholders.""" + initialize_postgres_rcon_storage() + with connect_postgres() as connection: + yield PostgresCompatConnection(connection) + + +def start_capture_run(*, mode: str, target_scope: str) -> int: + initialize_postgres_rcon_storage() + with connect_postgres() as connection: + row = connection.execute( + """ + INSERT INTO rcon_historical_capture_runs (mode, status, target_scope, started_at) + VALUES (%s, 'running', %s, %s) + RETURNING id + """, + (mode, target_scope, _utc_now_iso()), + ).fetchone() + return int(row["id"]) + + +def finalize_capture_run( + run_id: int, + *, + status: str, + targets_seen: int, + samples_inserted: int, + duplicate_samples: int, + failed_targets: int, + notes: str | None, +) -> None: + initialize_postgres_rcon_storage() + with connect_postgres() as connection: + connection.execute( + """ + UPDATE rcon_historical_capture_runs + SET status = %s, + completed_at = %s, + targets_seen = %s, + samples_inserted = %s, + duplicate_samples = %s, + failed_targets = %s, + notes = %s + WHERE id = %s + """, + ( + status, + _utc_now_iso(), + targets_seen, + samples_inserted, + duplicate_samples, + failed_targets, + notes, + run_id, + ), + ) + + +def persist_sample( + *, + run_id: int, + captured_at: str, + target: Mapping[str, object], + normalized_payload: Mapping[str, object], + raw_payload: Mapping[str, object] | None, +) -> dict[str, int]: + initialize_postgres_rcon_storage() + with connect_postgres() as connection: + target_id = _upsert_target(connection, target=target) + row = connection.execute( + """ + INSERT INTO rcon_historical_samples ( + target_id, capture_run_id, captured_at, source_kind, status, players, + max_players, current_map, normalized_payload_json, raw_payload_json + ) VALUES (%s, %s, %s, 'rcon-live-sample', %s, %s, %s, %s, %s, %s) + ON CONFLICT(target_id, captured_at) DO NOTHING + RETURNING id + """, + ( + target_id, + run_id, + captured_at, + normalized_payload.get("status") or "unknown", + normalized_payload.get("players"), + normalized_payload.get("max_players"), + normalized_payload.get("current_map"), + json.dumps(dict(normalized_payload), separators=(",", ":")), + json.dumps(dict(raw_payload), separators=(",", ":")) if raw_payload else None, + ), + ).fetchone() + inserted = int(row is not None) + _upsert_checkpoint_success( + connection, + target_id=target_id, + run_id=run_id, + captured_at=captured_at, + ) + if inserted: + _upsert_competitive_window( + connection, + target_id=target_id, + captured_at=captured_at, + normalized_payload=normalized_payload, + ) + return {"samples_inserted": inserted, "duplicate_samples": 0 if inserted else 1} + + +def mark_capture_failure( + *, + run_id: int, + target: Mapping[str, object], + error_message: str, +) -> None: + initialize_postgres_rcon_storage() + with connect_postgres() as connection: + target_id = _upsert_target(connection, target=target) + connection.execute( + """ + INSERT INTO rcon_historical_checkpoints ( + target_id, last_run_id, last_run_status, last_error, last_error_at + ) VALUES (%s, %s, 'failed', %s, %s) + ON CONFLICT(target_id) DO UPDATE SET + last_run_id = EXCLUDED.last_run_id, + last_run_status = EXCLUDED.last_run_status, + last_error = EXCLUDED.last_error, + last_error_at = EXCLUDED.last_error_at, + updated_at = CURRENT_TIMESTAMP + """, + (target_id, run_id, error_message, _utc_now_iso()), + ) + + +def list_target_statuses() -> list[dict[str, object]]: + rows = _fetchall( + """ + SELECT + targets.target_key, + targets.external_server_id, + targets.display_name, + targets.host, + targets.port, + targets.region, + targets.source_name, + checkpoints.last_successful_capture_at, + checkpoints.last_sample_at, + checkpoints.last_run_id, + checkpoints.last_run_status, + checkpoints.last_error, + checkpoints.last_error_at, + (SELECT MIN(samples.captured_at) FROM rcon_historical_samples AS samples + WHERE samples.target_id = targets.id) AS first_sample_at, + (SELECT MAX(samples.captured_at) FROM rcon_historical_samples AS samples + WHERE samples.target_id = targets.id) AS latest_sample_at, + (SELECT COUNT(*) FROM rcon_historical_samples AS samples + WHERE samples.target_id = targets.id) AS sample_count + FROM rcon_historical_targets AS targets + LEFT JOIN rcon_historical_checkpoints AS checkpoints + ON checkpoints.target_id = targets.id + ORDER BY targets.display_name ASC, targets.target_key ASC + """ + ) + return [ + { + **dict(row), + "sample_count": int(row["sample_count"] or 0), + "last_sample_at": row["latest_sample_at"] or row["last_sample_at"], + } + for row in rows + ] + + +def list_recent_samples(*, target_key: str | None, limit: int) -> list[dict[str, object]]: + where_clause, params = _target_where_clause(target_key) + rows = _fetchall( + f""" + SELECT targets.target_key, targets.external_server_id, targets.display_name, + targets.region, samples.captured_at, samples.status, samples.players, + samples.max_players, samples.current_map + FROM rcon_historical_samples AS samples + INNER JOIN rcon_historical_targets AS targets ON targets.id = samples.target_id + {where_clause} + ORDER BY samples.captured_at DESC, targets.display_name ASC + LIMIT %s + """, + [*params, limit], + ) + return [dict(row) for row in rows] + + +def list_competitive_windows(*, target_key: str | None, limit: int) -> list[dict[str, object]]: + where_clause, params = _target_where_clause(target_key) + rows = _fetchall( + f""" + SELECT targets.target_key, targets.external_server_id, targets.display_name, + targets.region, windows.session_key, windows.map_name, + windows.map_pretty_name, windows.first_seen_at, windows.last_seen_at, + windows.sample_count, windows.total_players, windows.peak_players, + windows.last_players, windows.max_players, windows.status, + windows.confidence_mode, windows.capabilities_json, + windows.latest_payload_json + FROM rcon_historical_competitive_windows AS windows + INNER JOIN rcon_historical_targets AS targets ON targets.id = windows.target_id + {where_clause} + ORDER BY windows.last_seen_at DESC, targets.display_name ASC + LIMIT %s + """, + [*params, limit], + ) + return [_serialize_window(row) for row in rows] + + +def count_samples_since(since: str | None) -> int: + if not since: + return 0 + row = _fetchone( + "SELECT COUNT(*) AS sample_count FROM rcon_historical_samples WHERE captured_at > %s", + (since,), + ) + return int(row["sample_count"] or 0) if row else 0 + + +def list_competitive_summary_rows(*, target_key: str | None) -> list[dict[str, object]]: + where_clause, params = _target_where_clause(target_key) + rows = _fetchall( + f""" + SELECT targets.target_key, targets.external_server_id, targets.display_name, + targets.region, checkpoints.last_successful_capture_at, + checkpoints.last_run_status, checkpoints.last_error, + checkpoints.last_error_at, COUNT(windows.id) AS window_count, + COALESCE(SUM(windows.sample_count), 0) AS sample_count, + MIN(windows.first_seen_at) AS first_seen_at, + MAX(windows.last_seen_at) AS last_seen_at, + COALESCE(MAX(windows.peak_players), 0) AS peak_players + FROM rcon_historical_targets AS targets + LEFT JOIN rcon_historical_checkpoints AS checkpoints ON checkpoints.target_id = targets.id + LEFT JOIN rcon_historical_competitive_windows AS windows ON windows.target_id = targets.id + {where_clause} + GROUP BY targets.id, checkpoints.target_id + ORDER BY targets.display_name ASC, targets.target_key ASC + """, + params, + ) + return [ + { + **dict(row), + "window_count": int(row["window_count"] or 0), + "sample_count": int(row["sample_count"] or 0), + "peak_players": int(row["peak_players"] or 0), + } + for row in rows + ] + + +def find_competitive_window( + *, + server_key: str, + ended_at: str | None, + map_name: str | None, +) -> dict[str, object] | None: + if not ended_at: + return None + aliases = _expand_target_key_aliases(server_key) + candidates = _fetchall( + """ + SELECT windows.session_key, windows.first_seen_at, windows.last_seen_at, + windows.map_name, windows.map_pretty_name, windows.sample_count, + windows.total_players, windows.peak_players, windows.confidence_mode, + windows.capabilities_json, windows.latest_payload_json + FROM rcon_historical_competitive_windows AS windows + INNER JOIN rcon_historical_targets AS targets ON targets.id = windows.target_id + WHERE targets.target_key = ANY(%s) OR targets.external_server_id = ANY(%s) + ORDER BY windows.last_seen_at DESC + LIMIT 12 + """, + (aliases, aliases), + ) + ended_point = _parse_timestamp(ended_at) + if ended_point is None: + return None + normalized_map_name = normalize_map_name(map_name) + best_row: dict[str, object] | None = None + best_distance: float | None = None + for row in candidates: + row_map = normalize_map_name(row["map_pretty_name"] or row["map_name"]) + if normalized_map_name and row_map and normalized_map_name != row_map: + continue + row_last = _parse_timestamp(row["last_seen_at"]) + if row_last is None: + continue + distance = abs((row_last - ended_point).total_seconds()) + if best_distance is None or distance < best_distance: + best_row = dict(row) + best_distance = distance + if best_row is None or best_distance is None or best_distance > 21600: + return None + sample_count = int(best_row["sample_count"] or 0) + return { + "session_key": best_row["session_key"], + "first_seen_at": best_row["first_seen_at"], + "last_seen_at": best_row["last_seen_at"], + "duration_seconds": _calculate_duration_seconds( + best_row["first_seen_at"], + best_row["last_seen_at"], + ), + "map_name": best_row["map_name"], + "map_pretty_name": best_row["map_pretty_name"] or best_row["map_name"], + "sample_count": sample_count, + "average_players": ( + round((int(best_row["total_players"] or 0) / sample_count), 2) + if sample_count > 0 + else 0.0 + ), + "peak_players": int(best_row["peak_players"] or 0), + "confidence_mode": best_row["confidence_mode"], + "capabilities": _deserialize_json_object(best_row["capabilities_json"]), + } + + +def get_competitive_window_by_session( + *, + server_key: str, + session_key: str, +) -> dict[str, object] | None: + normalized_session_key = str(session_key or "").strip() + if not normalized_session_key: + return None + aliases = _expand_target_key_aliases(server_key) + row = _fetchone( + """ + SELECT targets.target_key, targets.external_server_id, targets.display_name, + targets.region, windows.session_key, windows.map_name, + windows.map_pretty_name, windows.first_seen_at, windows.last_seen_at, + windows.sample_count, windows.total_players, windows.peak_players, + windows.confidence_mode, windows.capabilities_json, + windows.latest_payload_json + FROM rcon_historical_competitive_windows AS windows + INNER JOIN rcon_historical_targets AS targets ON targets.id = windows.target_id + WHERE windows.session_key = %s + AND (targets.target_key = ANY(%s) OR targets.external_server_id = ANY(%s)) + LIMIT 1 + """, + (normalized_session_key, aliases, aliases), + ) + return _serialize_window(row) if row else None + + +def list_scoreboard_candidates(*, server_slug: str, limit: int) -> list[dict[str, object]]: + rows = _fetchall( + """ + SELECT external_match_id, started_at, ended_at, map_name, map_pretty_name, + allied_score, axis_score, player_count, match_url + FROM rcon_scoreboard_match_candidates + WHERE server_slug = %s + ORDER BY COALESCE(ended_at, started_at) DESC + LIMIT %s + """, + (server_slug, limit), + ) + return [dict(row) for row in rows] + + +def upsert_scoreboard_candidates( + *, + server_slug: str, + candidates: Iterable[Mapping[str, object]], +) -> int: + """Cache trusted scoreboard correlation candidates in PostgreSQL.""" + rows = [candidate for candidate in candidates if candidate.get("match_url")] + if not rows: + return 0 + initialize_postgres_rcon_storage() + inserted_or_updated = 0 + with connect_postgres() as connection: + for candidate in rows: + connection.execute( + """ + INSERT INTO rcon_scoreboard_match_candidates ( + server_slug, external_match_id, started_at, ended_at, map_name, + map_pretty_name, allied_score, axis_score, player_count, match_url + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT(server_slug, external_match_id) DO UPDATE SET + started_at = EXCLUDED.started_at, + ended_at = EXCLUDED.ended_at, + map_name = EXCLUDED.map_name, + map_pretty_name = EXCLUDED.map_pretty_name, + allied_score = EXCLUDED.allied_score, + axis_score = EXCLUDED.axis_score, + player_count = EXCLUDED.player_count, + match_url = EXCLUDED.match_url, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_slug, + str(candidate.get("external_match_id") or ""), + candidate.get("started_at"), + candidate.get("ended_at"), + candidate.get("map_name"), + candidate.get("map_pretty_name"), + candidate.get("allied_score"), + candidate.get("axis_score"), + candidate.get("player_count"), + candidate["match_url"], + ), + ) + inserted_or_updated += 1 + return inserted_or_updated + + +def upsert_scoreboard_candidate( + *, + server_slug: str, + candidate: Mapping[str, object], +) -> str: + """Persist one trusted scoreboard correlation candidate and report the upsert path.""" + external_match_id = str(candidate.get("external_match_id") or "").strip() + match_url = str(candidate.get("match_url") or "").strip() + if not external_match_id or not match_url: + return "skipped" + + initialize_postgres_rcon_storage() + with connect_postgres() as connection: + existing = connection.execute( + """ + SELECT id + FROM rcon_scoreboard_match_candidates + WHERE server_slug = %s AND external_match_id = %s + LIMIT 1 + """, + (server_slug, external_match_id), + ).fetchone() + connection.execute( + """ + INSERT INTO rcon_scoreboard_match_candidates ( + server_slug, external_match_id, started_at, ended_at, map_name, + map_pretty_name, allied_score, axis_score, player_count, match_url + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT(server_slug, external_match_id) DO UPDATE SET + started_at = EXCLUDED.started_at, + ended_at = EXCLUDED.ended_at, + map_name = EXCLUDED.map_name, + map_pretty_name = EXCLUDED.map_pretty_name, + allied_score = EXCLUDED.allied_score, + axis_score = EXCLUDED.axis_score, + player_count = EXCLUDED.player_count, + match_url = EXCLUDED.match_url, + updated_at = CURRENT_TIMESTAMP + """, + ( + server_slug, + external_match_id, + candidate.get("started_at"), + candidate.get("ended_at"), + candidate.get("map_name"), + candidate.get("map_pretty_name"), + candidate.get("allied_score"), + candidate.get("axis_score"), + candidate.get("player_count"), + match_url, + ), + ) + return "updated" if existing else "inserted" + + +def count_migrated_tables() -> dict[str, int]: + table_names = ( + "rcon_admin_log_events", + "rcon_player_profile_snapshots", + "rcon_materialized_matches", + "rcon_match_player_stats", + "rcon_historical_targets", + "rcon_historical_samples", + "rcon_historical_competitive_windows", + "rcon_scoreboard_match_candidates", + ) + with connect_postgres() as connection: + return { + table_name: int( + connection.execute(f"SELECT COUNT(*) AS count FROM {table_name}").fetchone()[ + "count" + ] + or 0 + ) + for table_name in table_names + } + + +def _fetchall(sql: str, params: Iterable[object] = ()) -> list[dict[str, object]]: + with connect_postgres() as connection: + return [dict(row) for row in connection.execute(sql, tuple(params)).fetchall()] + + +def _fetchone(sql: str, params: Iterable[object] = ()) -> dict[str, object] | None: + with connect_postgres() as connection: + row = connection.execute(sql, tuple(params)).fetchone() + return dict(row) if row else None + + +def _upsert_target(connection: Any, *, target: Mapping[str, object]) -> int: + target_key = str(target.get("target_key") or "").strip() + display_name = str(target.get("name") or target.get("display_name") or target_key).strip() + host = str(target.get("host") or "").strip() + port = int(target.get("port") or 0) + if not target_key or not host or port <= 0: + raise ValueError("Prospective RCON targets require target_key, host and port.") + row = connection.execute( + """ + INSERT INTO rcon_historical_targets ( + target_key, external_server_id, display_name, host, port, region, + game_port, query_port, source_name, last_configured_at + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT(target_key) DO UPDATE SET + external_server_id = EXCLUDED.external_server_id, + display_name = EXCLUDED.display_name, + host = EXCLUDED.host, + port = EXCLUDED.port, + region = EXCLUDED.region, + game_port = EXCLUDED.game_port, + query_port = EXCLUDED.query_port, + source_name = EXCLUDED.source_name, + last_configured_at = EXCLUDED.last_configured_at, + updated_at = CURRENT_TIMESTAMP + RETURNING id + """, + ( + target_key, + target.get("external_server_id"), + display_name, + host, + port, + target.get("region"), + target.get("game_port"), + target.get("query_port"), + str(target.get("source_name") or "community-hispana-rcon"), + _utc_now_iso(), + ), + ).fetchone() + return int(row["id"]) + + +def _upsert_checkpoint_success( + connection: Any, + *, + target_id: int, + run_id: int, + captured_at: str, +) -> None: + connection.execute( + """ + INSERT INTO rcon_historical_checkpoints ( + target_id, last_successful_capture_at, last_sample_at, last_run_id, + last_run_status, last_error, last_error_at + ) VALUES (%s, %s, %s, %s, 'success', NULL, NULL) + ON CONFLICT(target_id) DO UPDATE SET + last_successful_capture_at = EXCLUDED.last_successful_capture_at, + last_sample_at = EXCLUDED.last_sample_at, + last_run_id = EXCLUDED.last_run_id, + last_run_status = EXCLUDED.last_run_status, + last_error = NULL, + last_error_at = NULL, + updated_at = CURRENT_TIMESTAMP + """, + (target_id, captured_at, captured_at, run_id), + ) + + +def _upsert_competitive_window( + connection: Any, + *, + target_id: int, + captured_at: str, + normalized_payload: Mapping[str, object], +) -> None: + current_map_raw = str(normalized_payload.get("current_map") or "").strip() + if not current_map_raw: + return + map_pretty_name = normalize_map_name(current_map_raw) or current_map_raw + players = int(normalized_payload.get("players") or 0) + max_players = normalized_payload.get("max_players") + status = str(normalized_payload.get("status") or "unknown") + latest_window = connection.execute( + """ + SELECT * + FROM rcon_historical_competitive_windows + WHERE target_id = %s + ORDER BY last_seen_at DESC, id DESC + LIMIT 1 + """, + (target_id,), + ).fetchone() + if latest_window and _should_extend_competitive_window( + latest_window=dict(latest_window), + captured_at=captured_at, + current_map=current_map_raw, + ): + connection.execute( + """ + UPDATE rcon_historical_competitive_windows + SET map_name = %s, + map_pretty_name = %s, + last_seen_at = %s, + sample_count = sample_count + 1, + total_players = total_players + %s, + peak_players = GREATEST(peak_players, %s), + last_players = %s, + max_players = %s, + status = %s, + confidence_mode = %s, + capabilities_json = %s, + latest_payload_json = %s, + updated_at = CURRENT_TIMESTAMP + WHERE id = %s + """, + ( + current_map_raw, + map_pretty_name, + captured_at, + players, + players, + players, + max_players, + status, + COMPETITIVE_MODE_APPROXIMATE, + json.dumps(_build_competitive_capabilities(), separators=(",", ":")), + json.dumps(dict(normalized_payload), separators=(",", ":")), + latest_window["id"], + ), + ) + return + connection.execute( + """ + INSERT INTO rcon_historical_competitive_windows ( + target_id, session_key, source_kind, map_name, map_pretty_name, + first_seen_at, last_seen_at, sample_count, total_players, + peak_players, last_players, max_players, status, confidence_mode, + capabilities_json, latest_payload_json + ) VALUES (%s, %s, 'rcon-historical-samples', %s, %s, %s, %s, 1, + %s, %s, %s, %s, %s, %s, %s, %s) + """, + ( + target_id, + f"{target_id}:{captured_at}", + current_map_raw, + map_pretty_name, + captured_at, + captured_at, + players, + players, + players, + max_players, + status, + COMPETITIVE_MODE_APPROXIMATE, + json.dumps(_build_competitive_capabilities(), separators=(",", ":")), + json.dumps(dict(normalized_payload), separators=(",", ":")), + ), + ) + + +def _target_where_clause(target_key: str | None) -> tuple[str, list[object]]: + if not target_key: + return "", [] + aliases = _expand_target_key_aliases(target_key) + return "WHERE targets.target_key = ANY(%s) OR targets.external_server_id = ANY(%s)", [ + aliases, + aliases, + ] + + +def _expand_target_key_aliases(target_key: str) -> list[str]: + normalized_target_key = str(target_key or "").strip() + aliases = {normalized_target_key} + try: + configured_targets = load_rcon_targets() + except Exception: + configured_targets = () + for target in configured_targets: + external_server_id = str(target.external_server_id or "").strip() + legacy_target_key = f"rcon:{target.host}:{target.port}" + if external_server_id and external_server_id == normalized_target_key: + aliases.update((legacy_target_key, external_server_id)) + elif legacy_target_key == normalized_target_key: + aliases.add(legacy_target_key) + if external_server_id: + aliases.add(external_server_id) + return sorted(alias for alias in aliases if alias) + + +def _serialize_window(row: Mapping[str, object]) -> dict[str, object]: + sample_count = int(row["sample_count"] or 0) + return { + "target_key": row["target_key"], + "external_server_id": row["external_server_id"], + "display_name": row["display_name"], + "region": row["region"], + "session_key": row["session_key"], + "map_name": row["map_name"], + "map_pretty_name": row["map_pretty_name"] or row["map_name"], + "first_seen_at": row["first_seen_at"], + "last_seen_at": row["last_seen_at"], + "duration_seconds": _calculate_duration_seconds( + row["first_seen_at"], + row["last_seen_at"], + ), + "sample_count": sample_count, + "average_players": ( + round((int(row["total_players"] or 0) / sample_count), 2) + if sample_count > 0 + else 0.0 + ), + "peak_players": int(row["peak_players"] or 0), + "last_players": row.get("last_players"), + "max_players": row.get("max_players"), + "status": row.get("status"), + "confidence_mode": row["confidence_mode"], + "capabilities": _deserialize_json_object(row["capabilities_json"]), + "latest_payload": _deserialize_json_object(row["latest_payload_json"]), + } + + +def _should_extend_competitive_window( + *, + latest_window: Mapping[str, object], + captured_at: str, + current_map: str, +) -> bool: + if normalize_map_name(latest_window.get("map_name")) != normalize_map_name(current_map): + return False + latest_seen = _parse_timestamp(latest_window.get("last_seen_at")) + captured_point = _parse_timestamp(captured_at) + if latest_seen is None or captured_point is None: + return False + return (captured_point - latest_seen).total_seconds() <= COMPETITIVE_WINDOW_GAP_SECONDS + + +def _build_competitive_capabilities() -> dict[str, object]: + return { + "recent_matches": COMPETITIVE_MODE_APPROXIMATE, + "server_summary": COMPETITIVE_MODE_EXACT, + "competitive_quality": COMPETITIVE_MODE_PARTIAL, + "result": "session-score", + "gamestate": "session", + "player_stats": "unavailable", + } + + +def _deserialize_json_object(raw_value: object) -> dict[str, object]: + if isinstance(raw_value, str) and raw_value.strip(): + try: + parsed = json.loads(raw_value) + except json.JSONDecodeError: + return {} + return parsed if isinstance(parsed, dict) else {} + return {} + + +def _calculate_duration_seconds(first_seen_at: object, last_seen_at: object) -> int | None: + first_point = _parse_timestamp(first_seen_at) + last_point = _parse_timestamp(last_seen_at) + if first_point is None or last_point is None: + return None + return max(0, int((last_point - first_point).total_seconds())) + + +def _parse_timestamp(raw_value: object) -> datetime | None: + if not isinstance(raw_value, str) or not raw_value.strip(): + return None + try: + timestamp = datetime.fromisoformat(raw_value.replace("Z", "+00:00")) + except ValueError: + return None + if timestamp.tzinfo is None: + timestamp = timestamp.replace(tzinfo=timezone.utc) + return timestamp.astimezone(timezone.utc) + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") diff --git a/backend/app/providers/player_event_source_provider.py b/backend/app/providers/player_event_source_provider.py new file mode 100644 index 0000000..c1ed8af --- /dev/null +++ b/backend/app/providers/player_event_source_provider.py @@ -0,0 +1,415 @@ +"""Player event adapter backed by public CRCON scoreboard match details.""" + +from __future__ import annotations + +import hashlib +from collections.abc import Mapping +from dataclasses import dataclass + +from ..player_event_models import PlayerEventRecord + + +@dataclass(frozen=True, slots=True) +class _PlayerIdentity: + stable_player_key: str + display_name: str | None + + +@dataclass(frozen=True, slots=True) +class PublicScoreboardPlayerEventSource: + """Normalize partial duel and weapon signals from CRCON match detail payloads.""" + + source_kind: str = "public-scoreboard-match-summary" + + def extract_match_events( + self, + *, + server_slug: str, + match_payload: dict[str, object], + source_ref: str | None = None, + ) -> list[PlayerEventRecord]: + match_id = _stringify(match_payload.get("id")) + if not match_id: + return [] + + occurred_at = _pick_match_timestamp(match_payload) + player_rows = _coerce_player_rows(match_payload.get("player_stats")) + if not player_rows: + return [] + + identity_index = _build_identity_index(player_rows) + events: list[PlayerEventRecord] = [] + + for player_row in player_rows: + actor = _build_player_identity(player_row) + if actor is None: + continue + + top_kill_type_name = _extract_primary_name(player_row.get("kills_by_type")) + + for victim_name, victim_count in _extract_named_counts(player_row.get("most_killed")): + victim = _find_identity_by_name(identity_index, victim_name) + if victim is None or victim_count <= 0: + continue + events.append( + _build_event( + event_type="player_kill_summary", + occurred_at=occurred_at, + server_slug=server_slug, + match_id=match_id, + source_kind=self.source_kind, + source_ref=source_ref, + raw_event_ref=( + f"match:{match_id}:player:{actor.stable_player_key}:most-killed:{victim.stable_player_key}" + ), + killer=actor, + victim=victim, + weapon_name=None, + kill_category=top_kill_type_name, + is_teamkill=False, + event_value=victim_count, + ) + ) + + for killer_name, killer_count in _extract_named_counts(player_row.get("death_by")): + killer = _find_identity_by_name(identity_index, killer_name) + if killer is None or killer_count <= 0: + continue + events.append( + _build_event( + event_type="player_death_summary", + occurred_at=occurred_at, + server_slug=server_slug, + match_id=match_id, + source_kind=self.source_kind, + source_ref=source_ref, + raw_event_ref=( + f"match:{match_id}:player:{actor.stable_player_key}:death-by:{killer.stable_player_key}" + ), + killer=killer, + victim=actor, + weapon_name=None, + kill_category=None, + is_teamkill=False, + event_value=killer_count, + ) + ) + + for weapon_name, weapon_count in _extract_named_counts(player_row.get("weapons")): + events.append( + _build_event( + event_type="player_weapon_kill_summary", + occurred_at=occurred_at, + server_slug=server_slug, + match_id=match_id, + source_kind=self.source_kind, + source_ref=source_ref, + raw_event_ref=( + f"match:{match_id}:player:{actor.stable_player_key}:weapons:{weapon_name}" + ), + killer=actor, + victim=None, + weapon_name=weapon_name, + kill_category=top_kill_type_name, + is_teamkill=False, + event_value=weapon_count, + ) + ) + + for weapon_name, weapon_count in _extract_named_counts(player_row.get("death_by_weapons")): + events.append( + _build_event( + event_type="player_weapon_death_summary", + occurred_at=occurred_at, + server_slug=server_slug, + match_id=match_id, + source_kind=self.source_kind, + source_ref=source_ref, + raw_event_ref=( + f"match:{match_id}:player:{actor.stable_player_key}:death-by-weapons:{weapon_name}" + ), + killer=None, + victim=actor, + weapon_name=weapon_name, + kill_category=None, + is_teamkill=False, + event_value=weapon_count, + ) + ) + + teamkills = _coerce_int(player_row.get("teamkills")) or 0 + if teamkills > 0: + events.append( + _build_event( + event_type="player_teamkill_summary", + occurred_at=occurred_at, + server_slug=server_slug, + match_id=match_id, + source_kind=self.source_kind, + source_ref=source_ref, + raw_event_ref=f"match:{match_id}:player:{actor.stable_player_key}:teamkills", + killer=actor, + victim=None, + weapon_name=None, + kill_category=top_kill_type_name, + is_teamkill=True, + event_value=teamkills, + ) + ) + + return events + + def describe_scope(self) -> dict[str, object]: + return { + "source_kind": self.source_kind, + "supports_raw_kill_events": False, + "captures": [ + "Encounter summaries per player from most_killed", + "Death summaries per player from death_by", + "Weapon kill summaries per player from weapons", + "Weapon death summaries per player from death_by_weapons", + "Aggregated teamkills per player and match", + ], + "limitations": [ + "The current source is match-summary data, not a true per-kill event feed.", + "occurred_at uses the match end/start timestamp, not the exact kill timestamp.", + "Only summary counters exposed by the CRCON detail payload are normalized.", + "Full killer->victim ledgers, complete weapon breakdowns, and exact per-event teamkills still require a dedicated raw event/log source.", + ], + } + + +def _build_identity_index(player_rows: list[dict[str, object]]) -> dict[str, _PlayerIdentity]: + identity_index: dict[str, _PlayerIdentity] = {} + for player_row in player_rows: + identity = _build_player_identity(player_row) + if identity is None or not identity.display_name: + continue + identity_index[_normalize_name(identity.display_name)] = identity + return identity_index + + +def _build_player_identity(player_row: dict[str, object]) -> _PlayerIdentity | None: + display_name = _stringify(player_row.get("player")) or _stringify(player_row.get("name")) + source_player_id = _stringify(player_row.get("player_id")) or _stringify(player_row.get("id")) + steam_id = _extract_steam_id(player_row.get("steaminfo")) + stable_player_key = _build_stable_player_key(steam_id=steam_id, source_player_id=source_player_id) + if stable_player_key is None: + return None + return _PlayerIdentity( + stable_player_key=stable_player_key, + display_name=display_name or stable_player_key, + ) + + +def _find_identity_by_name( + identity_index: dict[str, _PlayerIdentity], + player_name: str | None, +) -> _PlayerIdentity | None: + if not player_name: + return None + return identity_index.get(_normalize_name(player_name)) + + +def _build_event( + *, + event_type: str, + occurred_at: str | None, + server_slug: str, + match_id: str, + source_kind: str, + source_ref: str | None, + raw_event_ref: str, + killer: _PlayerIdentity | None, + victim: _PlayerIdentity | None, + weapon_name: str | None, + kill_category: str | None, + is_teamkill: bool, + event_value: int, +) -> PlayerEventRecord: + event_id = _build_event_id( + event_type=event_type, + occurred_at=occurred_at, + server_slug=server_slug, + match_id=match_id, + killer_player_key=killer.stable_player_key if killer else None, + victim_player_key=victim.stable_player_key if victim else None, + weapon_name=weapon_name, + is_teamkill=is_teamkill, + event_value=event_value, + ) + return PlayerEventRecord( + event_id=event_id, + event_type=event_type, + occurred_at=occurred_at, + server_slug=server_slug, + external_match_id=match_id, + source_kind=source_kind, + source_ref=source_ref, + raw_event_ref=raw_event_ref, + killer_player_key=killer.stable_player_key if killer else None, + killer_display_name=killer.display_name if killer else None, + victim_player_key=victim.stable_player_key if victim else None, + victim_display_name=victim.display_name if victim else None, + weapon_name=weapon_name, + weapon_category=None, + kill_category=kill_category, + is_teamkill=is_teamkill, + event_value=max(1, event_value), + ) + + +def _build_event_id( + *, + event_type: str, + occurred_at: str | None, + server_slug: str, + match_id: str, + killer_player_key: str | None, + victim_player_key: str | None, + weapon_name: str | None, + is_teamkill: bool, + event_value: int, +) -> str: + raw_key = "|".join( + [ + event_type, + occurred_at or "", + server_slug, + match_id, + killer_player_key or "", + victim_player_key or "", + weapon_name or "", + "1" if is_teamkill else "0", + str(event_value), + ] + ) + return hashlib.sha1(raw_key.encode("utf-8")).hexdigest() + + +def _pick_match_timestamp(match_payload: Mapping[str, object]) -> str | None: + for key in ("end", "start", "creation_time"): + value = _stringify(match_payload.get(key)) + if value: + return value + return None + + +def _extract_primary_name(value: object) -> str | None: + named_counts = _extract_named_counts(value) + if not named_counts: + return None + return named_counts[0][0] + + +def _extract_named_counts(value: object) -> list[tuple[str, int]]: + aggregated: dict[str, tuple[str, int]] = {} + for name, count in _iter_named_counts(value): + normalized_name = _normalize_name(name) + existing = aggregated.get(normalized_name) + if existing is None: + aggregated[normalized_name] = (name, count) + continue + aggregated[normalized_name] = (existing[0], existing[1] + count) + return sorted( + aggregated.values(), + key=lambda item: (-item[1], item[0].casefold()), + ) + + +def _iter_named_counts(value: object) -> list[tuple[str, int]]: + if isinstance(value, str): + name = _stringify(value) + return [(name, 1)] if name else [] + if isinstance(value, Mapping): + named_count = _extract_named_count_mapping(value) + if named_count is not None: + return [named_count] + + items: list[tuple[str, int]] = [] + for raw_name, raw_count in value.items(): + name = _stringify(raw_name) + count = _coerce_int(raw_count) + if name and count and count > 0: + items.append((name, count)) + return items + if isinstance(value, list): + items: list[tuple[str, int]] = [] + for item in value: + items.extend(_iter_named_counts(item)) + return items + return [] + + +def _extract_named_count_mapping(value: Mapping[str, object]) -> tuple[str, int] | None: + nested_name = None + nested_player = value.get("player") + if isinstance(nested_player, Mapping): + nested_name = _stringify(nested_player.get("name")) or _stringify(nested_player.get("player")) + name = ( + _stringify(value.get("name")) + or _stringify(value.get("player")) + or _stringify(value.get("victim")) + or _stringify(value.get("killer")) + or nested_name + ) + if not name: + return None + count = ( + _coerce_int(value.get("count")) + or _coerce_int(value.get("kills")) + or _coerce_int(value.get("deaths")) + or _coerce_int(value.get("value")) + or _coerce_int(value.get("total")) + or 1 + ) + return name, max(1, count) + + +def _extract_steam_id(value: object) -> str | None: + if isinstance(value, Mapping): + profile = value.get("profile") + if isinstance(profile, Mapping): + steam_id = _stringify(profile.get("steamid")) + if steam_id: + return steam_id + return _stringify(value.get("id")) + return None + + +def _build_stable_player_key( + *, + steam_id: str | None, + source_player_id: str | None, +) -> str | None: + if steam_id: + return f"steam:{steam_id}" + if source_player_id: + return f"crcon-player:{source_player_id}" + return None + + +def _coerce_player_rows(value: object) -> list[dict[str, object]]: + if not isinstance(value, list): + return [] + return [item for item in value if isinstance(item, dict)] + + +def _normalize_name(value: str) -> str: + return value.strip().casefold() + + +def _stringify(value: object) -> str | None: + if value is None: + return None + text = str(value).strip() + return text or None + + +def _coerce_int(value: object) -> int | None: + if value in (None, ""): + return None + try: + return int(value) + except (TypeError, ValueError): + return None diff --git a/backend/app/providers/public_scoreboard_provider.py b/backend/app/providers/public_scoreboard_provider.py new file mode 100644 index 0000000..58232e9 --- /dev/null +++ b/backend/app/providers/public_scoreboard_provider.py @@ -0,0 +1,139 @@ +"""Public scoreboard provider adapter for historical HLL data.""" + +from __future__ import annotations + +import json +import time +from concurrent.futures import ThreadPoolExecutor +from dataclasses import dataclass +from urllib.error import HTTPError, URLError +from urllib.parse import urlencode +from urllib.request import Request, urlopen + +from ..config import ( + get_historical_crcon_request_retries, + get_historical_crcon_request_timeout_seconds, + get_historical_crcon_retry_delay_seconds, +) + + +PUBLIC_INFO_ENDPOINT = "/api/get_public_info" +MATCH_LIST_ENDPOINT = "/api/get_scoreboard_maps" +MATCH_DETAIL_ENDPOINT = "/api/get_map_scoreboard" + + +@dataclass(frozen=True, slots=True) +class PublicScoreboardHistoricalDataSource: + """Historical provider backed by the public CRCON scoreboard JSON API.""" + + source_kind: str = "public-scoreboard" + + def fetch_public_info(self, *, base_url: str) -> dict[str, object]: + return self._fetch_dict_payload(base_url, PUBLIC_INFO_ENDPOINT) + + def fetch_match_page(self, *, base_url: str, page: int, limit: int) -> dict[str, object]: + return self._fetch_dict_payload( + base_url, + MATCH_LIST_ENDPOINT, + {"page": page, "limit": limit}, + context=f"page={page}", + ) + + def fetch_match_details( + self, + *, + base_url: str, + match_ids: list[str], + max_workers: int, + ) -> list[dict[str, object]]: + if not match_ids: + return [] + if max_workers <= 1: + return [ + self._fetch_match_detail(base_url=base_url, match_id=match_id) + for match_id in match_ids + ] + + with ThreadPoolExecutor(max_workers=max_workers) as executor: + futures = [ + executor.submit(self._fetch_match_detail, base_url=base_url, match_id=match_id) + for match_id in match_ids + ] + return [future.result() for future in futures] + + def _fetch_match_detail(self, *, base_url: str, match_id: str) -> dict[str, object]: + return self._fetch_dict_payload( + base_url, + MATCH_DETAIL_ENDPOINT, + {"map_id": match_id}, + context=f"match={match_id}", + ) + + def _fetch_json( + self, + *, + base_url: str, + endpoint: str, + query: dict[str, object] | None = None, + ) -> object: + url = f"{base_url}{endpoint}" + if query: + url = f"{url}?{urlencode(query)}" + + request = Request( + url, + headers={ + "Accept": "application/json", + "User-Agent": "HLL-Vietnam-Historical-Ingestion/0.1", + }, + ) + try: + with urlopen( + request, + timeout=get_historical_crcon_request_timeout_seconds(), + ) as response: + return json.loads(response.read().decode("utf-8")) + except HTTPError as exc: + raise RuntimeError(f"Historical provider request failed: {url} ({exc.code})") from exc + except URLError as exc: + raise RuntimeError(f"Historical provider request failed: {url} ({exc.reason})") from exc + + def _fetch_dict_payload( + self, + base_url: str, + endpoint: str, + query: dict[str, object] | None = None, + *, + context: str = "", + retries: int | None = None, + ) -> dict[str, object]: + resolved_retries = retries or get_historical_crcon_request_retries() + base_retry_delay_seconds = get_historical_crcon_retry_delay_seconds() + last_error: Exception | None = None + for attempt in range(1, resolved_retries + 1): + try: + payload = _unwrap_result( + self._fetch_json(base_url=base_url, endpoint=endpoint, query=query) + ) + except Exception as exc: # pragma: no cover - network path + last_error = exc + else: + if isinstance(payload, dict): + return payload + last_error = ValueError( + f"Unexpected payload type for {base_url}{endpoint} {context}".strip() + ) + + if attempt < resolved_retries: + time.sleep(base_retry_delay_seconds * attempt) + + assert last_error is not None + raise last_error + + +def _unwrap_result(payload: object) -> object: + if not isinstance(payload, dict): + return payload + if "result" not in payload: + return payload + return payload.get("result") diff --git a/backend/app/providers/rcon_provider.py b/backend/app/providers/rcon_provider.py new file mode 100644 index 0000000..61e7eef --- /dev/null +++ b/backend/app/providers/rcon_provider.py @@ -0,0 +1,67 @@ +"""RCON provider adapter for live HLL server state.""" + +from __future__ import annotations + +from dataclasses import dataclass + +from ..rcon_client import ( + RconServerTarget, + load_rcon_targets, + query_live_server_sample, +) +from ..snapshots import build_snapshot_batch, utc_now +from ..storage import persist_snapshot_batch + + +@dataclass(frozen=True, slots=True) +class RconLiveDataSource: + """Live provider backed by direct HLL RCON access.""" + + source_kind: str = "rcon" + + def collect_snapshots(self, *, persist: bool) -> dict[str, object]: + configured_targets = load_rcon_targets() + if not configured_targets: + raise RuntimeError("No RCON targets configured in HLL_BACKEND_RCON_TARGETS.") + + captured_at = utc_now() + normalized_records: list[dict[str, object]] = [] + errors: list[dict[str, object]] = [] + + for target in configured_targets: + try: + normalized_records.append(query_live_server_sample(target)["normalized"]) + except Exception as error: # noqa: BLE001 - keep provider failures controlled + errors.append( + { + "target": target.name, + "host": target.host, + "port": target.port, + "message": str(error), + } + ) + + payload = { + "source_name": "hll-rcon", + "collection_mode": "rcon", + "fallback_used": False, + "target_count": len(configured_targets), + "success_count": len(normalized_records), + "errors": errors, + "captured_at": captured_at.isoformat().replace("+00:00", "Z"), + "snapshots": build_snapshot_batch(normalized_records, captured_at=captured_at), + } + if persist: + payload["storage"] = persist_snapshot_batch( + payload["snapshots"], + source_name=payload["source_name"], + captured_at=payload["captured_at"], + ) + return payload + + def build_target_index(self) -> dict[str | None, RconServerTarget]: + return { + target.external_server_id: target + for target in load_rcon_targets() + if target.external_server_id + } diff --git a/backend/app/rcon_admin_log_ingestion.py b/backend/app/rcon_admin_log_ingestion.py new file mode 100644 index 0000000..e5badba --- /dev/null +++ b/backend/app/rcon_admin_log_ingestion.py @@ -0,0 +1,147 @@ +"""Manual ingestion of Hell Let Loose RCON AdminLog events.""" + +from __future__ import annotations + +import argparse +import json +from dataclasses import dataclass + +from .config import get_rcon_request_timeout_seconds +from .rcon_admin_log_storage import ( + list_rcon_admin_log_event_counts, + persist_rcon_admin_log_entries, +) +from .rcon_client import HllRconConnection, build_rcon_target_key, load_rcon_targets + + +@dataclass(slots=True) +class AdminLogIngestionStats: + targets_seen: int = 0 + events_seen: int = 0 + events_inserted: int = 0 + duplicate_events: int = 0 + failed_targets: int = 0 + + +def ingest_rcon_admin_logs( + *, + minutes: int, + target_key: str | None = None, +) -> dict[str, object]: + """Fetch and persist recent AdminLog entries from configured RCON targets.""" + selected_targets = _select_targets(target_key) + stats = AdminLogIngestionStats() + targets: list[dict[str, object]] = [] + errors: list[dict[str, object]] = [] + timeout_seconds = get_rcon_request_timeout_seconds() + + for target in selected_targets: + stats.targets_seen += 1 + target_metadata = _serialize_target(target) + + try: + with HllRconConnection(timeout_seconds=timeout_seconds) as connection: + connection.connect(host=target.host, port=target.port, password=target.password) + payload = connection.execute_json( + "GetAdminLog", + { + "LogBackTrackTime": minutes * 60, + "Filters": [], + }, + ) + + entries = payload.get("entries") + if not isinstance(entries, list): + entries = [] + + normalized_entries = [entry for entry in entries if isinstance(entry, dict)] + delta = persist_rcon_admin_log_entries( + target=target_metadata, + entries=normalized_entries, + ) + + stats.events_seen += int(delta["events_seen"]) + stats.events_inserted += int(delta["events_inserted"]) + stats.duplicate_events += int(delta["duplicate_events"]) + targets.append( + { + **target_metadata, + "status": "ok", + "minutes": minutes, + **delta, + } + ) + except Exception as exc: # noqa: BLE001 - manual diagnostic command reports per-target failures + stats.failed_targets += 1 + errors.append( + { + **target_metadata, + "status": "error", + "error_type": type(exc).__name__, + "message": str(exc), + } + ) + + return { + "status": "ok" if not errors else ("partial" if targets else "error"), + "target_scope": target_key or "all-configured-rcon-targets", + "minutes": minutes, + "targets": targets, + "errors": errors, + "totals": { + "targets_seen": stats.targets_seen, + "events_seen": stats.events_seen, + "events_inserted": stats.events_inserted, + "duplicate_events": stats.duplicate_events, + "failed_targets": stats.failed_targets, + }, + "event_counts": list_rcon_admin_log_event_counts(), + } + + +def _select_targets(target_key: str | None) -> list[object]: + configured_targets = list(load_rcon_targets()) + if not configured_targets: + raise RuntimeError("No RCON targets configured in HLL_BACKEND_RCON_TARGETS.") + if target_key is None: + return configured_targets + + normalized = target_key.strip() + selected = [ + target + for target in configured_targets + if build_rcon_target_key(target) == normalized + ] + if not selected: + raise ValueError(f"Unknown RCON target key: {target_key}") + return selected + + +def _serialize_target(target: object) -> dict[str, object]: + return { + "target_key": build_rcon_target_key(target), + "external_server_id": target.external_server_id, + "name": target.name, + "host": target.host, + "port": target.port, + "source_name": target.source_name, + } + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--minutes", type=int, default=60) + parser.add_argument("--target", default=None) + args = parser.parse_args() + + print( + json.dumps( + ingest_rcon_admin_logs(minutes=args.minutes, target_key=args.target), + ensure_ascii=False, + indent=2, + ) + ) + + +if __name__ == "__main__": + main() diff --git a/backend/app/rcon_admin_log_materialization.py b/backend/app/rcon_admin_log_materialization.py new file mode 100644 index 0000000..879983c --- /dev/null +++ b/backend/app/rcon_admin_log_materialization.py @@ -0,0 +1,863 @@ +"""Materialize RCON AdminLog events into match and player-stat read models.""" + +from __future__ import annotations + +import argparse +import json +import sqlite3 +from collections import Counter +from collections.abc import Iterable +from contextlib import closing +from pathlib import Path + +from .config import get_storage_path, use_postgres_rcon_storage +from .normalizers import normalize_map_name +from .rcon_admin_log_storage import initialize_rcon_admin_log_storage +from .rcon_historical_storage import list_rcon_historical_competitive_windows +from .sqlite_utils import connect_sqlite_readonly, connect_sqlite_writer + + +MATCH_RESULT_SOURCE = "admin-log-match-ended" +SESSION_RESULT_SOURCE = "rcon-session" + + +def initialize_rcon_materialized_storage(*, db_path: Path | None = None) -> Path: + """Create SQLite structures used by the materialized RCON match pipeline.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import initialize_postgres_rcon_storage + + initialize_postgres_rcon_storage() + return get_storage_path() + + resolved_path = initialize_rcon_admin_log_storage(db_path=db_path) + with closing(connect_sqlite_writer(resolved_path)) as connection: + with connection: + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS rcon_materialized_matches ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_key TEXT NOT NULL, + external_server_id TEXT, + match_key TEXT NOT NULL, + map_name TEXT, + map_pretty_name TEXT, + game_mode TEXT, + started_server_time INTEGER, + ended_server_time INTEGER, + started_at TEXT, + ended_at TEXT, + allied_score INTEGER, + axis_score INTEGER, + winner TEXT, + confidence_mode TEXT NOT NULL, + source_basis TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_key, match_key) + ); + + CREATE INDEX IF NOT EXISTS idx_rcon_materialized_matches_recent + ON rcon_materialized_matches(target_key, ended_at DESC, ended_server_time DESC); + + CREATE TABLE IF NOT EXISTS rcon_match_player_stats ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_key TEXT NOT NULL, + match_key TEXT NOT NULL, + player_id TEXT NOT NULL, + player_name TEXT NOT NULL, + team TEXT, + kills INTEGER NOT NULL DEFAULT 0, + deaths INTEGER NOT NULL DEFAULT 0, + teamkills INTEGER NOT NULL DEFAULT 0, + deaths_by_teamkill INTEGER NOT NULL DEFAULT 0, + weapons_json TEXT NOT NULL DEFAULT '{}', + death_by_weapons_json TEXT NOT NULL DEFAULT '{}', + most_killed_json TEXT NOT NULL DEFAULT '{}', + death_by_json TEXT NOT NULL DEFAULT '{}', + first_seen_server_time INTEGER, + last_seen_server_time INTEGER, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_key, match_key, player_id) + ); + + CREATE INDEX IF NOT EXISTS idx_rcon_match_player_stats_match + ON rcon_match_player_stats(target_key, match_key); + """ + ) + return resolved_path + + +def materialize_rcon_admin_log(*, db_path: Path | None = None) -> dict[str, object]: + """Materialize matches and player stats from stored AdminLog events.""" + resolved_path = initialize_rcon_materialized_storage(db_path=db_path) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + with connect_postgres_compat() as connection: + payload = _materialize_rcon_admin_log_with_connection( + connection, + session_window_db_path=None, + caught_errors=(Exception,), + ) + freshness = summarize_rcon_materialization_status() + return { + **payload, + "latest_materialized_matches": freshness["latest_materialized_matches"], + "latest_admin_log_match_end_events": freshness["latest_admin_log_match_end_events"], + "match_end_status": freshness["match_end_status"], + } + + with closing(connect_sqlite_writer(resolved_path)) as connection: + with connection: + payload = _materialize_rcon_admin_log_with_connection( + connection, + session_window_db_path=resolved_path, + caught_errors=(sqlite3.Error,), + ) + + freshness = summarize_rcon_materialization_status(db_path=resolved_path) + return { + **payload, + "latest_materialized_matches": freshness["latest_materialized_matches"], + "latest_admin_log_match_end_events": freshness["latest_admin_log_match_end_events"], + "match_end_status": freshness["match_end_status"], + } + + +def _materialize_rcon_admin_log_with_connection( + connection: object, + *, + session_window_db_path: Path | None, + caught_errors: tuple[type[BaseException], ...], +) -> dict[str, object]: + errors: list[str] = [] + matches_seen = 0 + matches_materialized = 0 + matches_updated = 0 + player_stats_seen = 0 + player_stats_materialized = 0 + player_stats_updated = 0 + + try: + match_rows = _derive_admin_log_matches(connection) + matches_seen = len(match_rows) + for row in match_rows: + outcome = _upsert_match(connection, row) + matches_materialized += int(outcome == "inserted") + matches_updated += int(outcome == "updated") + session_rows = _derive_session_fallback_matches( + connection, + db_path=session_window_db_path, + ) + matches_seen += len(session_rows) + for row in session_rows: + outcome = _upsert_match(connection, row) + matches_materialized += int(outcome == "inserted") + matches_updated += int(outcome == "updated") + + persisted_matches = _list_materialized_matches(connection) + for match in persisted_matches: + stats = _derive_player_stats_for_match(connection, match) + player_stats_seen += len(stats) + connection.execute( + """ + DELETE FROM rcon_match_player_stats + WHERE target_key = ? AND match_key = ? + """, + (match["target_key"], match["match_key"]), + ) + for stat in stats: + _insert_player_stat(connection, stat) + player_stats_materialized += 1 + except caught_errors as error: + errors.append(str(error)) + return { + "matches_seen": matches_seen, + "matches_materialized": matches_materialized, + "matches_updated": matches_updated, + "player_stats_seen": player_stats_seen, + "player_stats_materialized": player_stats_materialized, + "player_stats_updated": player_stats_updated, + "errors": errors, + } + + +def list_materialized_rcon_matches( + *, + target_key: str | None = None, + only_ended: bool = False, + limit: int = 20, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return recent materialized RCON matches.""" + resolved_path = initialize_rcon_materialized_storage(db_path=db_path) + clauses: list[str] = [] + params: list[object] = [] + if target_key: + clauses.append("(m.target_key = ? OR m.external_server_id = ?)") + params.extend([target_key, target_key]) + if only_ended: + clauses.append("m.source_basis = ?") + params.append(MATCH_RESULT_SOURCE) + where = "WHERE " + " AND ".join(clauses) if clauses else "" + params.append(limit) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + connection_scope = connect_postgres_compat() + else: + connection_scope = closing(connect_sqlite_readonly(resolved_path)) + with connection_scope as connection: + rows = connection.execute( + f""" + SELECT + m.*, + ( + SELECT COUNT(*) + FROM rcon_match_player_stats AS stats + WHERE stats.target_key = m.target_key + AND stats.match_key = m.match_key + ) AS materialized_player_count, + ( + SELECT COUNT(DISTINCT TRIM(stats.player_name)) + FROM rcon_match_player_stats AS stats + WHERE stats.target_key = m.target_key + AND stats.match_key = m.match_key + AND TRIM(COALESCE(stats.player_name, '')) != '' + ) AS materialized_distinct_player_count + FROM rcon_materialized_matches AS m + {where} + ORDER BY COALESCE(m.ended_at, m.started_at) DESC, + COALESCE(m.ended_server_time, m.started_server_time) DESC + LIMIT ? + """, + params, + ).fetchall() + return [dict(row) for row in rows] + + +def get_materialized_rcon_match_detail( + *, + server_key: str, + match_key: str, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return one materialized match with player stats.""" + resolved_path = initialize_rcon_materialized_storage(db_path=db_path) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + connection_scope = connect_postgres_compat() + else: + connection_scope = closing(connect_sqlite_readonly(resolved_path)) + with connection_scope as connection: + match = connection.execute( + """ + SELECT * + FROM rcon_materialized_matches + WHERE match_key = ? + AND (target_key = ? OR external_server_id = ?) + LIMIT 1 + """, + (match_key, server_key, server_key), + ).fetchone() + if match is None and match_key.startswith(f"{server_key}:"): + match = connection.execute( + """ + SELECT * + FROM rcon_materialized_matches + WHERE match_key = ? + LIMIT 1 + """, + (match_key,), + ).fetchone() + if match is None: + return None + stat_rows = connection.execute( + """ + SELECT * + FROM rcon_match_player_stats + WHERE target_key = ? AND match_key = ? + ORDER BY kills DESC, deaths ASC, player_name ASC + """, + (match["target_key"], match["match_key"]), + ).fetchall() + timeline_rows = connection.execute( + """ + SELECT event_type, COUNT(*) AS event_count + FROM rcon_admin_log_events + WHERE target_key = ? + AND server_time IS NOT NULL + AND (? IS NULL OR server_time >= ?) + AND (? IS NULL OR server_time <= ?) + GROUP BY event_type + ORDER BY event_count DESC, event_type ASC + """, + ( + match["target_key"], + match["started_server_time"], + match["started_server_time"], + match["ended_server_time"], + match["ended_server_time"], + ), + ).fetchall() + + return { + "match": dict(match), + "players": [dict(row) for row in stat_rows], + "timeline": [dict(row) for row in timeline_rows], + } + + +def summarize_rcon_materialization_status(*, db_path: Path | None = None) -> dict[str, object]: + """Return a small diagnostic summary for stored RCON materialization state.""" + resolved_path = initialize_rcon_materialized_storage(db_path=db_path) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + connection_scope = connect_postgres_compat() + else: + connection_scope = closing(connect_sqlite_readonly(resolved_path)) + with connection_scope as connection: + match_count = connection.execute( + "SELECT COUNT(*) AS count FROM rcon_materialized_matches" + ).fetchone()["count"] + stats_match_count = connection.execute( + """ + SELECT COUNT(*) AS count + FROM ( + SELECT 1 + FROM rcon_match_player_stats + GROUP BY target_key, match_key + ) AS stats_matches + """ + ).fetchone()["count"] + ranges = connection.execute( + """ + SELECT target_key, MIN(server_time) AS first_server_time, MAX(server_time) AS last_server_time + FROM rcon_admin_log_events + GROUP BY target_key + ORDER BY target_key ASC + """ + ).fetchall() + event_counts = connection.execute( + """ + SELECT target_key, event_type, COUNT(*) AS event_count + FROM rcon_admin_log_events + GROUP BY target_key, event_type + ORDER BY target_key ASC, event_count DESC + """ + ).fetchall() + latest_matches = connection.execute( + """ + SELECT + target_key, + external_server_id, + match_key, + map_pretty_name, + COALESCE(ended_at, started_at) AS closed_at, + ended_at, + ended_server_time, + source_basis, + updated_at + FROM ( + SELECT + *, + ROW_NUMBER() OVER ( + PARTITION BY target_key + ORDER BY COALESCE(ended_at, started_at) DESC, + COALESCE(ended_server_time, started_server_time) DESC, + updated_at DESC + ) AS row_number + FROM rcon_materialized_matches + WHERE source_basis = ? + ) AS ranked_matches + WHERE row_number = 1 + ORDER BY target_key ASC + """, + (MATCH_RESULT_SOURCE,), + ).fetchall() + latest_match_end_events = connection.execute( + """ + SELECT + target_key, + external_server_id, + MAX(event_timestamp) AS latest_event_timestamp, + MAX(server_time) AS latest_server_time, + COUNT(*) AS match_end_events + FROM rcon_admin_log_events + WHERE event_type = 'match_end' + GROUP BY target_key, external_server_id + ORDER BY target_key ASC + """ + ).fetchall() + return { + "materialized_matches": int(match_count or 0), + "matches_with_player_stats": int(stats_match_count or 0), + "server_time_ranges": [dict(row) for row in ranges], + "event_counts": [dict(row) for row in event_counts], + "latest_materialized_matches": [dict(row) for row in latest_matches], + "latest_admin_log_match_end_events": [dict(row) for row in latest_match_end_events], + "match_end_status": ( + "admin-log-match-end-events-available" + if latest_match_end_events + else "no-admin-log-match-end-events-stored" + ), + } + + +def _derive_admin_log_matches(connection: sqlite3.Connection) -> list[dict[str, object]]: + rows = connection.execute( + """ + SELECT * + FROM rcon_admin_log_events + WHERE event_type IN ('match_start', 'match_end') + ORDER BY target_key ASC, server_time ASC, id ASC + """ + ).fetchall() + matches: list[dict[str, object]] = [] + open_by_target: dict[str, sqlite3.Row] = {} + for row in rows: + target_key = row["target_key"] + payload = _json_object(row["parsed_payload_json"]) + if row["event_type"] == "match_start": + if target_key in open_by_target: + matches.append(_build_match_row(open_by_target.pop(target_key), None)) + open_by_target[target_key] = row + continue + start_row = open_by_target.pop(target_key, None) + matches.append(_build_match_row(start_row, row, end_payload=payload)) + for start_row in open_by_target.values(): + matches.append(_build_match_row(start_row, None)) + return matches + + +def _derive_session_fallback_matches( + connection: sqlite3.Connection, + *, + db_path: Path | None, +) -> list[dict[str, object]]: + rows: list[dict[str, object]] = [] + existing = { + (row["target_key"], normalize_map_name(row["map_pretty_name"] or row["map_name"])) + for row in connection.execute( + """ + SELECT target_key, map_name, map_pretty_name + FROM rcon_materialized_matches + WHERE source_basis = ? + """, + (MATCH_RESULT_SOURCE,), + ).fetchall() + } + for window in list_rcon_historical_competitive_windows(limit=100, db_path=db_path): + target_key = str(window.get("target_key") or "") + map_name = window.get("map_pretty_name") or window.get("map_name") + if (target_key, normalize_map_name(map_name)) in existing: + continue + session_key = str(window.get("session_key") or "").strip() + if not target_key or not session_key: + continue + rows.append( + { + "target_key": target_key, + "external_server_id": window.get("external_server_id"), + "match_key": f"session:{session_key}", + "map_name": window.get("map_name"), + "map_pretty_name": normalize_map_name(map_name), + "game_mode": None, + "started_server_time": None, + "ended_server_time": None, + "started_at": window.get("first_seen_at"), + "ended_at": window.get("last_seen_at"), + "allied_score": _nested_int(window.get("latest_payload"), "allied_score"), + "axis_score": _nested_int(window.get("latest_payload"), "axis_score"), + "winner": _resolve_winner( + _nested_int(window.get("latest_payload"), "allied_score"), + _nested_int(window.get("latest_payload"), "axis_score"), + ), + "confidence_mode": "partial", + "source_basis": SESSION_RESULT_SOURCE, + } + ) + return rows + + +def _build_match_row( + start_row: sqlite3.Row | None, + end_row: sqlite3.Row | None, + *, + end_payload: dict[str, object] | None = None, +) -> dict[str, object]: + start_payload = _json_object(start_row["parsed_payload_json"]) if start_row else {} + end_payload = end_payload or (_json_object(end_row["parsed_payload_json"]) if end_row else {}) + target_key = str((end_row or start_row)["target_key"]) + external_server_id = (end_row or start_row)["external_server_id"] + started_server_time = start_row["server_time"] if start_row else None + ended_server_time = end_row["server_time"] if end_row else None + map_name = end_payload.get("map_name") or start_payload.get("map_name") + match_key = _build_match_key( + target_key=target_key, + started_server_time=started_server_time, + ended_server_time=ended_server_time, + map_name=map_name, + ) + return { + "target_key": target_key, + "external_server_id": external_server_id, + "match_key": match_key, + "map_name": map_name, + "map_pretty_name": normalize_map_name(map_name), + "game_mode": start_payload.get("game_mode"), + "started_server_time": started_server_time, + "ended_server_time": ended_server_time, + "started_at": start_row["event_timestamp"] if start_row else None, + "ended_at": end_row["event_timestamp"] if end_row else None, + "allied_score": _coerce_int(end_payload.get("allied_score")), + "axis_score": _coerce_int(end_payload.get("axis_score")), + "winner": end_payload.get("winner") + or _resolve_winner( + _coerce_int(end_payload.get("allied_score")), + _coerce_int(end_payload.get("axis_score")), + ), + "confidence_mode": "exact" if end_row else "partial", + "source_basis": MATCH_RESULT_SOURCE if end_row else "admin-log-match-start", + } + + +def _upsert_match(connection: sqlite3.Connection, row: dict[str, object]) -> str: + existing = connection.execute( + """ + SELECT id + FROM rcon_materialized_matches + WHERE target_key = ? AND match_key = ? + """, + (row["target_key"], row["match_key"]), + ).fetchone() + connection.execute( + """ + INSERT INTO rcon_materialized_matches ( + target_key, external_server_id, match_key, map_name, map_pretty_name, game_mode, + started_server_time, ended_server_time, started_at, ended_at, + allied_score, axis_score, winner, confidence_mode, source_basis + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(target_key, match_key) DO UPDATE SET + external_server_id = excluded.external_server_id, + map_name = excluded.map_name, + map_pretty_name = excluded.map_pretty_name, + game_mode = excluded.game_mode, + started_server_time = excluded.started_server_time, + ended_server_time = excluded.ended_server_time, + started_at = excluded.started_at, + ended_at = excluded.ended_at, + allied_score = excluded.allied_score, + axis_score = excluded.axis_score, + winner = excluded.winner, + confidence_mode = excluded.confidence_mode, + source_basis = excluded.source_basis, + updated_at = CURRENT_TIMESTAMP + """, + ( + row["target_key"], + row.get("external_server_id"), + row["match_key"], + row.get("map_name"), + row.get("map_pretty_name"), + row.get("game_mode"), + row.get("started_server_time"), + row.get("ended_server_time"), + row.get("started_at"), + row.get("ended_at"), + row.get("allied_score"), + row.get("axis_score"), + row.get("winner"), + row["confidence_mode"], + row["source_basis"], + ), + ) + return "updated" if existing else "inserted" + + +def _list_materialized_matches(connection: sqlite3.Connection) -> list[dict[str, object]]: + rows = connection.execute( + """ + SELECT * + FROM rcon_materialized_matches + WHERE started_server_time IS NOT NULL OR ended_server_time IS NOT NULL + ORDER BY target_key ASC, COALESCE(started_server_time, ended_server_time) ASC + """ + ).fetchall() + return [dict(row) for row in rows] + + +def _derive_player_stats_for_match( + connection: sqlite3.Connection, + match: dict[str, object], +) -> list[dict[str, object]]: + lower = match.get("started_server_time") + upper = match.get("ended_server_time") + if lower is None and upper is None: + return [] + clauses = ["target_key = ?", "server_time IS NOT NULL"] + params: list[object] = [match["target_key"]] + if lower is not None: + clauses.append("server_time >= ?") + params.append(lower) + if upper is not None: + clauses.append("server_time <= ?") + params.append(upper) + rows = connection.execute( + f""" + SELECT * + FROM rcon_admin_log_events + WHERE {" AND ".join(clauses)} + AND event_type IN ('kill', 'team_switch', 'connected', 'disconnected', 'chat') + ORDER BY server_time ASC, id ASC + """, + params, + ).fetchall() + + players: dict[str, dict[str, object]] = {} + team_by_player: dict[str, str] = {} + for row in rows: + payload = _json_object(row["parsed_payload_json"]) + server_time = _coerce_int(row["server_time"]) + event_type = row["event_type"] + if event_type == "kill": + killer_key = _player_key(payload.get("killer_id"), payload.get("killer_name")) + victim_key = _player_key(payload.get("victim_id"), payload.get("victim_name")) + killer = _ensure_player( + players, + player_id=killer_key, + player_name=payload.get("killer_name"), + team=payload.get("killer_team") or team_by_player.get(killer_key), + server_time=server_time, + ) + victim = _ensure_player( + players, + player_id=victim_key, + player_name=payload.get("victim_name"), + team=payload.get("victim_team") or team_by_player.get(victim_key), + server_time=server_time, + ) + team_by_player[killer_key] = str(payload.get("killer_team") or killer.get("team") or "") + team_by_player[victim_key] = str(payload.get("victim_team") or victim.get("team") or "") + weapon = str(payload.get("weapon") or "Unknown") + same_team = payload.get("killer_team") and payload.get("killer_team") == payload.get("victim_team") + if same_team: + killer["teamkills"] = int(killer["teamkills"]) + 1 + victim["deaths_by_teamkill"] = int(victim["deaths_by_teamkill"]) + 1 + else: + killer["kills"] = int(killer["kills"]) + 1 + victim["deaths"] = int(victim["deaths"]) + 1 + _counter(killer, "weapons")[weapon] += 1 + _counter(victim, "death_by_weapons")[weapon] += 1 + _counter(killer, "most_killed")[str(victim["player_name"])] += 1 + _counter(victim, "death_by")[str(killer["player_name"])] += 1 + _touch_player(killer, server_time) + _touch_player(victim, server_time) + continue + + if event_type == "team_switch" and not payload.get("player_id"): + continue + player_id = _player_key(payload.get("player_id"), payload.get("player_name")) + team = payload.get("to_team") or payload.get("chat_team") or team_by_player.get(player_id) + player = _ensure_player( + players, + player_id=player_id, + player_name=payload.get("player_name"), + team=team, + server_time=server_time, + ) + if team: + player["team"] = team + team_by_player[player_id] = str(team) + _touch_player(player, server_time) + + stats = [] + for player in players.values(): + stats.append( + { + "target_key": match["target_key"], + "match_key": match["match_key"], + "player_id": player["player_id"], + "player_name": player["player_name"], + "team": player.get("team"), + "kills": player["kills"], + "deaths": player["deaths"], + "teamkills": player["teamkills"], + "deaths_by_teamkill": player["deaths_by_teamkill"], + "weapons_json": _dump_counter(player["weapons"]), + "death_by_weapons_json": _dump_counter(player["death_by_weapons"]), + "most_killed_json": _dump_counter(player["most_killed"]), + "death_by_json": _dump_counter(player["death_by"]), + "first_seen_server_time": player.get("first_seen_server_time"), + "last_seen_server_time": player.get("last_seen_server_time"), + } + ) + return stats + + +def _insert_player_stat(connection: sqlite3.Connection, stat: dict[str, object]) -> None: + connection.execute( + """ + INSERT INTO rcon_match_player_stats ( + target_key, match_key, player_id, player_name, team, + kills, deaths, teamkills, deaths_by_teamkill, + weapons_json, death_by_weapons_json, most_killed_json, death_by_json, + first_seen_server_time, last_seen_server_time + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + stat["target_key"], + stat["match_key"], + stat["player_id"], + stat["player_name"], + stat.get("team"), + stat["kills"], + stat["deaths"], + stat["teamkills"], + stat["deaths_by_teamkill"], + stat["weapons_json"], + stat["death_by_weapons_json"], + stat["most_killed_json"], + stat["death_by_json"], + stat.get("first_seen_server_time"), + stat.get("last_seen_server_time"), + ), + ) + + +def _ensure_player( + players: dict[str, dict[str, object]], + *, + player_id: str, + player_name: object, + team: object, + server_time: int | None, +) -> dict[str, object]: + if player_id not in players: + players[player_id] = { + "player_id": player_id, + "player_name": str(player_name or player_id), + "team": team, + "kills": 0, + "deaths": 0, + "teamkills": 0, + "deaths_by_teamkill": 0, + "weapons": Counter(), + "death_by_weapons": Counter(), + "most_killed": Counter(), + "death_by": Counter(), + "first_seen_server_time": server_time, + "last_seen_server_time": server_time, + } + player = players[player_id] + if player_name: + player["player_name"] = str(player_name) + if team: + player["team"] = team + _touch_player(player, server_time) + return player + + +def _touch_player(player: dict[str, object], server_time: int | None) -> None: + if server_time is None: + return + first_seen = _coerce_int(player.get("first_seen_server_time")) + last_seen = _coerce_int(player.get("last_seen_server_time")) + player["first_seen_server_time"] = server_time if first_seen is None else min(first_seen, server_time) + player["last_seen_server_time"] = server_time if last_seen is None else max(last_seen, server_time) + + +def _counter(player: dict[str, object], key: str) -> Counter[str]: + value = player[key] + if isinstance(value, Counter): + return value + counter: Counter[str] = Counter() + player[key] = counter + return counter + + +def _player_key(player_id: object, player_name: object) -> str: + raw_id = str(player_id or "").strip() + if raw_id: + return raw_id + return f"name:{str(player_name or 'unknown').strip().lower()}" + + +def _build_match_key( + *, + target_key: str, + started_server_time: object, + ended_server_time: object, + map_name: object, +) -> str: + map_part = "".join(character.lower() for character in str(map_name or "unknown") if character.isalnum()) + start_part = "missing" if started_server_time is None else str(started_server_time) + end_part = "open" if ended_server_time is None else str(ended_server_time) + return f"{target_key}:{start_part}:{end_part}:{map_part}" + + +def _json_object(raw_value: object) -> dict[str, object]: + if not isinstance(raw_value, str) or not raw_value.strip(): + return {} + try: + parsed = json.loads(raw_value) + except json.JSONDecodeError: + return {} + return parsed if isinstance(parsed, dict) else {} + + +def _dump_counter(counter: Counter[str]) -> str: + ordered = dict(sorted(counter.items(), key=lambda item: (-item[1], item[0]))) + return json.dumps(ordered, ensure_ascii=False, separators=(",", ":")) + + +def _coerce_int(value: object) -> int | None: + if value is None: + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _nested_int(payload: object, key: str) -> int | None: + if not isinstance(payload, dict): + return None + return _coerce_int(payload.get(key)) + + +def _resolve_winner(allied_score: int | None, axis_score: int | None) -> str | None: + if allied_score is None or axis_score is None: + return None + if allied_score > axis_score: + return "allied" + if axis_score > allied_score: + return "axis" + return "draw" + + +def _main(argv: Iterable[str] | None = None) -> int: + parser = argparse.ArgumentParser(description="Materialize stored RCON AdminLog events.") + parser.add_argument( + "command", + nargs="?", + choices=("materialize", "status"), + default="materialize", + ) + parser.add_argument("--db-path", type=Path, default=None) + args = parser.parse_args(list(argv) if argv is not None else None) + db_path = args.db_path or get_storage_path() + payload = ( + summarize_rcon_materialization_status(db_path=db_path) + if args.command == "status" + else materialize_rcon_admin_log(db_path=db_path) + ) + print(json.dumps({"status": "ok", "data": payload}, ensure_ascii=False, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(_main()) diff --git a/backend/app/rcon_admin_log_parser.py b/backend/app/rcon_admin_log_parser.py new file mode 100644 index 0000000..e8e2c0c --- /dev/null +++ b/backend/app/rcon_admin_log_parser.py @@ -0,0 +1,464 @@ +"""Parser for Hell Let Loose RCON admin log messages.""" + +from __future__ import annotations + +import re +from dataclasses import asdict, dataclass +from typing import Literal + + +RconAdminLogEventType = Literal[ + "match_start", + "match_end", + "kill", + "team_switch", + "connected", + "disconnected", + "chat", + "kick", + "ban", + "message", + "unknown", +] + + +_PREFIX_RE = re.compile( + r"^\[(?P.+?)\s+\((?P\d+)\)\]\s+(?P.*)$", + re.DOTALL, +) + +MATCH_START_RE = re.compile( + r"^MATCH START\s+(?P.+?)\s+(?P[A-Za-z]+)\s*$", + re.DOTALL, +) + +MATCH_END_RE = re.compile( + r"^MATCH ENDED\s+`(?P.+?)`\s+ALLIED\s+\((?P\d+)\s*-\s*(?P\d+)\)\s+AXIS\s*$", + re.DOTALL, +) + +KILL_RE = re.compile( + r"^KILL:\s+" + r"(?P.+?)" + r"\((?PAllies|Axis|None)/(?P[^)]*)\)" + r"\s+->\s+" + r"(?P.+?)" + r"\((?PAllies|Axis|None)/(?P[^)]*)\)" + r"\s+with\s+(?P.+?)\s*$", + re.DOTALL, +) + +TEAM_SWITCH_RE = re.compile( + r"^TEAMSWITCH\s+(?P.+?)\s+\((?P[^>]*)\s+>\s+(?P[^)]*)\)\s*$", + re.DOTALL, +) + +CONNECTED_RE = re.compile( + r"^CONNECTED\s+(?P.+?)\s+\((?P[^)]*)\)\s*$", + re.DOTALL, +) + +DISCONNECTED_RE = re.compile( + r"^DISCONNECTED\s+(?P.+?)\s+\((?P[^)]*)\)\s*$", + re.DOTALL, +) + +CHAT_RE = re.compile( + r"^CHAT\[(?P[^\]]+)\]\[(?P.+?)\((?PAllies|Axis|None)/(?P[^)]*)\)\]:\s*(?P.*)$", + re.DOTALL, +) + +KICK_RE = re.compile( + r"^KICK:\s+\[(?P.+?)\]\s+has been kicked\.\s+\[(?P.*)\]\s*$", + re.DOTALL, +) + +MESSAGE_RE = re.compile( + r"^MESSAGE:\s+player\s+\[(?P.+?)\((?P[^)]*)\)\],\s+content\s+\[(?P.*)\]\s*$", + re.DOTALL, +) + + +@dataclass(frozen=True, slots=True) +class ParsedRconAdminLogEvent: + event_type: RconAdminLogEventType + raw_message: str + relative_time: str | None = None + server_time: int | None = None + map_name: str | None = None + game_mode: str | None = None + allied_score: int | None = None + axis_score: int | None = None + winner: str | None = None + killer_name: str | None = None + killer_team: str | None = None + killer_id: str | None = None + victim_name: str | None = None + victim_team: str | None = None + victim_id: str | None = None + weapon: str | None = None + player_name: str | None = None + player_id: str | None = None + from_team: str | None = None + to_team: str | None = None + chat_scope: str | None = None + chat_team: str | None = None + content: str | None = None + reason: str | None = None + + +@dataclass(frozen=True, slots=True) +class ParsedRconPlayerProfileSnapshot: + player_name: str + player_id: str + source_server_time: int | None + event_timestamp: object + first_seen: str | None + sessions: int | None + matches_played: int | None + play_time: str | None + total_kills: int | None + total_deaths: int | None + teamkills_done: int | None + teamkills_received: int | None + kd_ratio: float | None + favorite_weapons: dict[str, int] + victims: dict[str, int] + nemesis: dict[str, int] + averages: dict[str, object] + sanctions: dict[str, object] + raw_content: str + + +def parse_rcon_admin_log_message(message: str) -> ParsedRconAdminLogEvent: + raw_message = str(message or "") + prefix_match = _PREFIX_RE.match(raw_message) + relative_time = None + server_time = None + body = raw_message + + if prefix_match: + relative_time = prefix_match.group("relative") + server_time = _coerce_int(prefix_match.group("server_time")) + body = prefix_match.group("body") + + parser_payload = { + "raw_message": raw_message, + "relative_time": relative_time, + "server_time": server_time, + } + + if match := MATCH_START_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="match_start", + map_name=_clean(match.group("map_name")), + game_mode=_clean(match.group("game_mode")), + **parser_payload, + ) + + if match := MATCH_END_RE.match(body): + allied_score = _coerce_int(match.group("allied_score")) + axis_score = _coerce_int(match.group("axis_score")) + return ParsedRconAdminLogEvent( + event_type="match_end", + map_name=_clean(match.group("map_name")), + allied_score=allied_score, + axis_score=axis_score, + winner=_resolve_winner(allied_score, axis_score), + **parser_payload, + ) + + if match := KILL_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="kill", + killer_name=_clean(match.group("killer_name")), + killer_team=_clean(match.group("killer_team")), + killer_id=_clean(match.group("killer_id")), + victim_name=_clean(match.group("victim_name")), + victim_team=_clean(match.group("victim_team")), + victim_id=_clean(match.group("victim_id")), + weapon=_clean(match.group("weapon")), + **parser_payload, + ) + + if match := TEAM_SWITCH_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="team_switch", + player_name=_clean(match.group("player_name")), + from_team=_clean(match.group("from_team")), + to_team=_clean(match.group("to_team")), + **parser_payload, + ) + + if match := CONNECTED_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="connected", + player_name=_clean(match.group("player_name")), + player_id=_clean(match.group("player_id")), + **parser_payload, + ) + + if match := DISCONNECTED_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="disconnected", + player_name=_clean(match.group("player_name")), + player_id=_clean(match.group("player_id")), + **parser_payload, + ) + + if match := CHAT_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="chat", + player_name=_clean(match.group("player_name")), + player_id=_clean(match.group("player_id")), + chat_scope=_clean(match.group("scope")), + chat_team=_clean(match.group("team")), + content=_clean(match.group("content")), + **parser_payload, + ) + + if match := KICK_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="kick", + player_name=_clean(match.group("player_name")), + reason=_clean(match.group("reason")), + **parser_payload, + ) + + if body.upper().startswith("BAN"): + return ParsedRconAdminLogEvent(event_type="ban", content=_clean(body), **parser_payload) + + if match := MESSAGE_RE.match(body): + return ParsedRconAdminLogEvent( + event_type="message", + player_name=_clean(match.group("player_name")), + player_id=_clean(match.group("player_id")), + content=_clean(match.group("content")), + **parser_payload, + ) + + return ParsedRconAdminLogEvent(event_type="unknown", content=_clean(body), **parser_payload) + + +def parse_rcon_admin_log_entry(entry: dict[str, object]) -> dict[str, object]: + parsed = parse_rcon_admin_log_message(str(entry.get("message") or "")) + payload = asdict(parsed) + payload["timestamp"] = entry.get("timestamp") + return payload + + +def parse_rcon_player_profile_snapshot( + parsed_event: ParsedRconAdminLogEvent | dict[str, object], + *, + event_timestamp: object = None, +) -> ParsedRconPlayerProfileSnapshot | None: + """Extract long-term player profile data from bot-generated MESSAGE content.""" + if isinstance(parsed_event, ParsedRconAdminLogEvent): + event_type = parsed_event.event_type + player_name = parsed_event.player_name + player_id = parsed_event.player_id + server_time = parsed_event.server_time + content = parsed_event.content + else: + event_type = parsed_event.get("event_type") + player_name = parsed_event.get("player_name") + player_id = parsed_event.get("player_id") + server_time = parsed_event.get("server_time") + content = parsed_event.get("content") + event_timestamp = event_timestamp if event_timestamp is not None else parsed_event.get("timestamp") + + source_server_time = _coerce_int(server_time) + if event_type != "message" or not player_name or not player_id or not content: + return None + if source_server_time is None: + return None + + raw_content = str(content) + lines = [_clean_profile_line(line) for line in raw_content.splitlines()] + lines = [line for line in lines if line] + if not _looks_like_profile_message(lines): + return None + + sections = _profile_sections(lines) + flat_values = _profile_key_values(lines) + total_kills, teamkills_done = _parse_total_with_teamkills(flat_values, "bajas") + total_deaths, teamkills_received = _parse_total_with_teamkills(flat_values, "muertes") + + return ParsedRconPlayerProfileSnapshot( + player_name=str(player_name), + player_id=str(player_id), + source_server_time=source_server_time, + event_timestamp=event_timestamp, + first_seen=_first_value(flat_values, "first seen", "visto por primera vez", "primer visto"), + sessions=_first_int(flat_values, "sessions", "sesiones"), + matches_played=_first_int(flat_values, "matches played", "partidas jugadas", "partidas"), + play_time=_first_value(flat_values, "play time", "tiempo jugado", "tiempo de juego"), + total_kills=total_kills, + total_deaths=total_deaths, + teamkills_done=teamkills_done, + teamkills_received=teamkills_received, + kd_ratio=_first_float(flat_values, "k/d", "kd"), + favorite_weapons=_int_mapping(sections, "armas favoritas", "favorite weapons"), + victims=_int_mapping(sections, "victimas", "víctimas", "vã­ctimas", "victims"), + nemesis=_int_mapping(sections, "nemesis", "némesis", "nã©mesis"), + averages=_object_mapping(sections, "promedios", "averages"), + sanctions=_object_mapping(sections, "sanciones", "sanctions"), + raw_content=raw_content, + ) + + +def _clean(value: str | None) -> str | None: + if value is None: + return None + normalized = value.strip() + return normalized or None + + +def _coerce_int(value: object) -> int | None: + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _coerce_float(value: object) -> float | None: + if value is None: + return None + normalized = str(value).strip().replace(",", ".") + match = re.search(r"-?\d+(?:\.\d+)?", normalized) + if not match: + return None + try: + return float(match.group(0)) + except ValueError: + return None + + +def _resolve_winner(allied_score: int | None, axis_score: int | None) -> str | None: + if allied_score is None or axis_score is None: + return None + if allied_score > axis_score: + return "allied" + if axis_score > allied_score: + return "axis" + return "draw" + + +def _clean_profile_line(value: str) -> str: + cleaned = value.strip().strip("─-").strip() + return cleaned.strip("▒").strip() + + +def _looks_like_profile_message(lines: list[str]) -> bool: + labels = {_normalize_profile_label(line.split(":", 1)[0]) for line in lines if ":" in line} + section_labels = {_normalize_profile_label(line) for line in lines if ":" not in line} + required = {"bajas", "muertes"} + known_sections = { + "totales", + "victimas", + "vã­ctimas", + "nemesis", + "nã©mesis", + "armas favoritas", + "promedios", + "sanciones", + } + return required.issubset(labels) and bool(section_labels & known_sections) + + +def _profile_sections(lines: list[str]) -> dict[str, list[str]]: + sections: dict[str, list[str]] = {} + current = "root" + for line in lines: + if ":" not in line: + current = _normalize_profile_label(line) + sections.setdefault(current, []) + continue + sections.setdefault(current, []).append(line) + return sections + + +def _profile_key_values(lines: list[str]) -> dict[str, str]: + values: dict[str, str] = {} + for line in lines: + if ":" not in line: + continue + key, value = line.split(":", 1) + values[_normalize_profile_label(key)] = value.strip() + return values + + +def _normalize_profile_label(value: object) -> str: + return ( + str(value or "") + .strip() + .lower() + .replace("\u00ad", "") + .replace("í", "i") + .replace("é", "e") + .replace("ã­", "i") + .replace("ã©", "e") + ) + + +def _first_value(values: dict[str, str], *keys: str) -> str | None: + for key in keys: + value = values.get(_normalize_profile_label(key)) + if value: + return value + return None + + +def _first_int(values: dict[str, str], *keys: str) -> int | None: + return _coerce_int_from_text(_first_value(values, *keys)) + + +def _first_float(values: dict[str, str], *keys: str) -> float | None: + return _coerce_float(_first_value(values, *keys)) + + +def _parse_total_with_teamkills(values: dict[str, str], key: str) -> tuple[int | None, int | None]: + raw_value = _first_value(values, key) + if not raw_value: + return None, None + return _coerce_int_from_text(raw_value), _coerce_int_from_text(_inside_parentheses(raw_value)) + + +def _inside_parentheses(value: str) -> str | None: + match = re.search(r"\((.*?)\)", value) + return match.group(1) if match else None + + +def _int_mapping(sections: dict[str, list[str]], *section_names: str) -> dict[str, int]: + mapped: dict[str, int] = {} + for line in _section_lines(sections, *section_names): + key, value = line.split(":", 1) + parsed = _coerce_int_from_text(value) + if parsed is not None: + mapped[key.strip()] = parsed + return mapped + + +def _object_mapping(sections: dict[str, list[str]], *section_names: str) -> dict[str, object]: + mapped: dict[str, object] = {} + for line in _section_lines(sections, *section_names): + key, value = line.split(":", 1) + cleaned = value.strip() + mapped[key.strip()] = _coerce_float(cleaned) if re.search(r"\d", cleaned) else cleaned + return mapped + + +def _section_lines(sections: dict[str, list[str]], *section_names: str) -> list[str]: + lines: list[str] = [] + wanted = {_normalize_profile_label(name) for name in section_names} + for section_name, section_lines in sections.items(): + if _normalize_profile_label(section_name) in wanted: + lines.extend(section_lines) + return lines + + +def _coerce_int_from_text(value: object) -> int | None: + if value is None: + return None + match = re.search(r"-?\d+", str(value)) + return _coerce_int(match.group(0)) if match else None diff --git a/backend/app/rcon_admin_log_storage.py b/backend/app/rcon_admin_log_storage.py new file mode 100644 index 0000000..c479839 --- /dev/null +++ b/backend/app/rcon_admin_log_storage.py @@ -0,0 +1,1021 @@ +"""Storage helpers for parsed RCON AdminLog events.""" + +from __future__ import annotations + +import json +import re +import sqlite3 +from collections import Counter +from collections.abc import Mapping +from contextlib import closing +from datetime import datetime, timedelta, timezone +from pathlib import Path + +from .config import get_storage_path, use_postgres_rcon_storage +from .rcon_admin_log_parser import parse_rcon_admin_log_entry +from .rcon_admin_log_parser import parse_rcon_player_profile_snapshot +from .rcon_historical_storage import initialize_rcon_historical_storage +from .sqlite_utils import connect_sqlite_writer + +CURRENT_MATCH_FALLBACK_FRESHNESS = timedelta(minutes=15) +CURRENT_MATCH_PLAYER_EVENT_TYPES = ( + "kill", + "team_switch", + "connected", + "disconnected", + "chat", + "message", +) + + +def initialize_rcon_admin_log_storage(*, db_path: Path | None = None) -> Path: + """Create SQLite structures for parsed RCON AdminLog events.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import initialize_postgres_rcon_storage + + initialize_postgres_rcon_storage() + return get_storage_path() + + resolved_path = initialize_rcon_historical_storage(db_path=db_path) + + with connect_sqlite_writer(resolved_path) as connection: + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS rcon_admin_log_events ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_key TEXT NOT NULL, + external_server_id TEXT, + event_timestamp TEXT, + server_time INTEGER, + relative_time TEXT, + event_type TEXT NOT NULL, + raw_message TEXT NOT NULL, + canonical_message TEXT NOT NULL, + parsed_payload_json TEXT NOT NULL, + raw_entry_json TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE INDEX IF NOT EXISTS idx_rcon_admin_log_events_dedupe + ON rcon_admin_log_events(target_key, server_time, canonical_message); + + CREATE INDEX IF NOT EXISTS idx_rcon_admin_log_events_target_time + ON rcon_admin_log_events(target_key, server_time DESC); + + CREATE INDEX IF NOT EXISTS idx_rcon_admin_log_events_type + ON rcon_admin_log_events(event_type); + + CREATE TABLE IF NOT EXISTS rcon_player_profile_snapshots ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_key TEXT NOT NULL, + external_server_id TEXT, + player_id TEXT NOT NULL, + player_name TEXT NOT NULL, + source_server_time INTEGER NOT NULL, + event_timestamp TEXT, + first_seen TEXT, + sessions INTEGER, + matches_played INTEGER, + play_time TEXT, + total_kills INTEGER, + total_deaths INTEGER, + teamkills_done INTEGER, + teamkills_received INTEGER, + kd_ratio REAL, + favorite_weapons_json TEXT NOT NULL DEFAULT '{}', + victims_json TEXT NOT NULL DEFAULT '{}', + nemesis_json TEXT NOT NULL DEFAULT '{}', + averages_json TEXT NOT NULL DEFAULT '{}', + sanctions_json TEXT NOT NULL DEFAULT '{}', + raw_content TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_key, player_id, source_server_time) + ); + + CREATE INDEX IF NOT EXISTS idx_rcon_player_profile_snapshots_player + ON rcon_player_profile_snapshots(target_key, player_id, source_server_time DESC); + """ + ) + _ensure_canonical_message_column(connection) + + return resolved_path + + +def persist_rcon_admin_log_entries( + *, + target: Mapping[str, object], + entries: list[dict[str, object]], + db_path: Path | None = None, +) -> dict[str, int]: + """Persist raw and parsed AdminLog entries idempotently.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + return _persist_rcon_admin_log_entries_postgres(target=target, entries=entries) + + resolved_path = initialize_rcon_admin_log_storage(db_path=db_path) + target_key = str(target.get("target_key") or target.get("external_server_id") or "") + if not target_key: + raise ValueError("target must include target_key or external_server_id") + + external_server_id = target.get("external_server_id") + inserted = 0 + duplicates = 0 + + with connect_sqlite_writer(resolved_path) as connection: + for entry in entries: + parsed = parse_rcon_admin_log_entry(entry) + raw_message = str(parsed.get("raw_message") or "") + canonical_message = _canonicalize_admin_log_message(raw_message) + cursor = connection.execute( + """ + INSERT INTO rcon_admin_log_events ( + target_key, + external_server_id, + event_timestamp, + server_time, + relative_time, + event_type, + raw_message, + canonical_message, + parsed_payload_json, + raw_entry_json + ) + SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ? + WHERE NOT EXISTS ( + SELECT 1 + FROM rcon_admin_log_events + WHERE target_key = ? + AND server_time IS ? + AND canonical_message = ? + ) + """, + ( + target_key, + external_server_id, + parsed.get("timestamp"), + parsed.get("server_time"), + parsed.get("relative_time"), + parsed.get("event_type") or "unknown", + raw_message, + canonical_message, + json.dumps(parsed, ensure_ascii=False, separators=(",", ":")), + json.dumps(entry, ensure_ascii=False, separators=(",", ":")), + target_key, + parsed.get("server_time"), + canonical_message, + ), + ) + if int(cursor.rowcount or 0): + inserted += 1 + else: + duplicates += 1 + _persist_profile_snapshot_if_present( + connection, + target_key=target_key, + external_server_id=external_server_id, + parsed=parsed, + ) + + return { + "events_seen": len(entries), + "events_inserted": inserted, + "duplicate_events": duplicates, + } + + +def _persist_profile_snapshot_if_present( + connection: sqlite3.Connection, + *, + target_key: str, + external_server_id: object, + parsed: dict[str, object], +) -> None: + snapshot = parse_rcon_player_profile_snapshot(parsed) + if snapshot is None: + return + connection.execute( + """ + INSERT INTO rcon_player_profile_snapshots ( + target_key, + external_server_id, + player_id, + player_name, + source_server_time, + event_timestamp, + first_seen, + sessions, + matches_played, + play_time, + total_kills, + total_deaths, + teamkills_done, + teamkills_received, + kd_ratio, + favorite_weapons_json, + victims_json, + nemesis_json, + averages_json, + sanctions_json, + raw_content + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(target_key, player_id, source_server_time) DO UPDATE SET + external_server_id = excluded.external_server_id, + player_name = excluded.player_name, + event_timestamp = excluded.event_timestamp, + first_seen = excluded.first_seen, + sessions = excluded.sessions, + matches_played = excluded.matches_played, + play_time = excluded.play_time, + total_kills = excluded.total_kills, + total_deaths = excluded.total_deaths, + teamkills_done = excluded.teamkills_done, + teamkills_received = excluded.teamkills_received, + kd_ratio = excluded.kd_ratio, + favorite_weapons_json = excluded.favorite_weapons_json, + victims_json = excluded.victims_json, + nemesis_json = excluded.nemesis_json, + averages_json = excluded.averages_json, + sanctions_json = excluded.sanctions_json, + raw_content = excluded.raw_content, + updated_at = CURRENT_TIMESTAMP + """, + ( + target_key, + external_server_id, + snapshot.player_id, + snapshot.player_name, + snapshot.source_server_time, + snapshot.event_timestamp, + snapshot.first_seen, + snapshot.sessions, + snapshot.matches_played, + snapshot.play_time, + snapshot.total_kills, + snapshot.total_deaths, + snapshot.teamkills_done, + snapshot.teamkills_received, + snapshot.kd_ratio, + json.dumps(snapshot.favorite_weapons, ensure_ascii=False, separators=(",", ":")), + json.dumps(snapshot.victims, ensure_ascii=False, separators=(",", ":")), + json.dumps(snapshot.nemesis, ensure_ascii=False, separators=(",", ":")), + json.dumps(snapshot.averages, ensure_ascii=False, separators=(",", ":")), + json.dumps(snapshot.sanctions, ensure_ascii=False, separators=(",", ":")), + snapshot.raw_content, + ), + ) + + +_PREFIX_RE = re.compile(r"^\[.*?\(\d+\)\]\s+", re.DOTALL) + + +def _canonicalize_admin_log_message(raw_message: str) -> str: + """Return a stable message body for deduplication across repeated AdminLog reads.""" + normalized = str(raw_message or "").strip() + return _PREFIX_RE.sub("", normalized).strip() + + +def _ensure_canonical_message_column(connection: sqlite3.Connection) -> None: + columns = { + row["name"] + for row in connection.execute("PRAGMA table_info(rcon_admin_log_events)").fetchall() + } + if "canonical_message" not in columns: + connection.execute( + "ALTER TABLE rcon_admin_log_events ADD COLUMN canonical_message TEXT NOT NULL DEFAULT ''" + ) + connection.execute( + """ + UPDATE rcon_admin_log_events + SET canonical_message = raw_message + WHERE canonical_message = '' + """ + ) + connection.execute( + """ + CREATE INDEX IF NOT EXISTS idx_rcon_admin_log_events_dedupe + ON rcon_admin_log_events(target_key, server_time, canonical_message) + """ + ) + + +def list_rcon_admin_log_event_counts(*, db_path: Path | None = None) -> list[dict[str, object]]: + """Return event counts grouped by target and event type.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + with connect_postgres_compat() as connection: + rows = connection.execute( + """ + SELECT + target_key, + event_type, + COUNT(*) AS event_count, + MIN(server_time) AS first_server_time, + MAX(server_time) AS last_server_time + FROM rcon_admin_log_events + GROUP BY target_key, event_type + ORDER BY target_key ASC, event_count DESC + """ + ).fetchall() + return [dict(row) for row in rows] + + resolved_path = db_path or get_storage_path() + initialize_rcon_admin_log_storage(db_path=resolved_path) + + with sqlite3.connect(resolved_path) as connection: + connection.row_factory = sqlite3.Row + rows = connection.execute( + """ + SELECT + target_key, + event_type, + COUNT(*) AS event_count, + MIN(server_time) AS first_server_time, + MAX(server_time) AS last_server_time + FROM rcon_admin_log_events + GROUP BY target_key, event_type + ORDER BY target_key ASC, event_count DESC + """ + ).fetchall() + + return [dict(row) for row in rows] + + +def list_current_match_kill_feed( + *, + server_key: str, + limit: int = 30, + since_event_id: str | None = None, + db_path: Path | None = None, + now: datetime | None = None, +) -> dict[str, object]: + """Return safe recent kill rows for one AdminLog server window.""" + resolved_path = initialize_rcon_admin_log_storage(db_path=db_path) + since_row_id = _parse_current_match_event_row_id(since_event_id) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + connection_scope = connect_postgres_compat() + else: + connection_scope = closing(sqlite3.connect(resolved_path)) + + with connection_scope as connection: + if isinstance(connection, sqlite3.Connection): + connection.row_factory = sqlite3.Row + boundary = connection.execute( + """ + SELECT event_type, server_time + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type IN ('match_start', 'match_end') + AND server_time IS NOT NULL + ORDER BY server_time DESC, id DESC + LIMIT 1 + """, + (server_key, server_key), + ).fetchone() + open_start_time = ( + boundary["server_time"] + if boundary is not None and boundary["event_type"] == "match_start" + else None + ) + if open_start_time is None: + if since_row_id is None: + rows = connection.execute( + """ + SELECT id, target_key, external_server_id, event_timestamp, server_time, + parsed_payload_json + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type = 'kill' + ORDER BY server_time DESC, id DESC + LIMIT ? + """, + (server_key, server_key, limit), + ).fetchall() + else: + rows = connection.execute( + """ + SELECT id, target_key, external_server_id, event_timestamp, server_time, + parsed_payload_json + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type = 'kill' + AND id > ? + ORDER BY server_time DESC, id DESC + LIMIT ? + """, + (server_key, server_key, since_row_id, limit), + ).fetchall() + scope = "recent-admin-log-window" + confidence = "partial" + else: + if since_row_id is None: + rows = connection.execute( + """ + SELECT id, target_key, external_server_id, event_timestamp, server_time, + parsed_payload_json + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type = 'kill' + AND server_time >= ? + ORDER BY server_time DESC, id DESC + LIMIT ? + """, + (server_key, server_key, open_start_time, limit), + ).fetchall() + else: + rows = connection.execute( + """ + SELECT id, target_key, external_server_id, event_timestamp, server_time, + parsed_payload_json + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type = 'kill' + AND server_time >= ? + AND id > ? + ORDER BY server_time DESC, id DESC + LIMIT ? + """, + (server_key, server_key, open_start_time, since_row_id, limit), + ).fetchall() + scope = "open-admin-log-match-window" + confidence = "admin-log-boundary" + + stale_events_filtered = 0 + if scope == "recent-admin-log-window": + freshness_anchor = _as_utc_datetime(now) or datetime.now(timezone.utc) + fresh_rows = [ + row + for row in rows + if _row_is_current_match_fallback_fresh(row, freshness_anchor) + ] + stale_events_filtered = len(rows) - len(fresh_rows) + rows = fresh_rows + if not rows: + scope = "no-current-match-events" + confidence = "stale-filtered" if stale_events_filtered else "none" + + return { + "scope": scope, + "confidence": confidence, + "stale_events_filtered": stale_events_filtered, + "items": [_serialize_kill_feed_row(row) for row in rows], + } + + +def list_current_match_player_stats( + *, + server_key: str, + db_path: Path | None = None, + now: datetime | None = None, +) -> dict[str, object]: + """Return current-match participants and partial stats from the safe AdminLog window.""" + resolved_path = initialize_rcon_admin_log_storage(db_path=db_path) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + connection_scope = connect_postgres_compat() + else: + connection_scope = closing(sqlite3.connect(resolved_path)) + + with connection_scope as connection: + if isinstance(connection, sqlite3.Connection): + connection.row_factory = sqlite3.Row + window = _resolve_current_match_window( + connection, + server_key=server_key, + now=now, + ) + rows = _list_current_match_participant_rows( + connection, + server_key=server_key, + window=window, + ) + + players: dict[str, dict[str, object]] = {} + for row in rows: + payload = _json_mapping(row["parsed_payload_json"]) + event_timestamp = row["event_timestamp"] + event_type = str(row["event_type"] or "") + if event_type == "kill": + killer = _ensure_current_match_player( + players, + player_name=payload.get("killer_name"), + player_id=payload.get("killer_id"), + team=payload.get("killer_team"), + event_timestamp=event_timestamp, + is_connected=None, + source=event_type, + ) + victim = _ensure_current_match_player( + players, + player_name=payload.get("victim_name"), + player_id=payload.get("victim_id"), + team=payload.get("victim_team"), + event_timestamp=event_timestamp, + is_connected=None, + source=event_type, + ) + if killer is not None: + weapon = _safe_event_field(payload.get("weapon")) or "UNKNOWN" + _player_weapon_counts(killer)[weapon] += 1 + if payload.get("killer_team") and payload.get("killer_team") == payload.get("victim_team"): + killer["teamkills"] = int(killer["teamkills"]) + 1 + else: + killer["kills"] = int(killer["kills"]) + 1 + if victim is not None: + victim["deaths"] = int(victim["deaths"]) + 1 + if payload.get("killer_team") and payload.get("killer_team") == payload.get("victim_team"): + victim["deaths_by_teamkill"] = int(victim["deaths_by_teamkill"]) + 1 + continue + + if event_type == "team_switch": + _ensure_current_match_player( + players, + player_name=payload.get("player_name"), + player_id=payload.get("player_id"), + team=payload.get("to_team"), + event_timestamp=event_timestamp, + is_connected=None, + source=event_type, + ) + continue + + if event_type == "connected": + _ensure_current_match_player( + players, + player_name=payload.get("player_name"), + player_id=payload.get("player_id"), + team=None, + event_timestamp=event_timestamp, + is_connected=True, + source=event_type, + ) + continue + + if event_type == "disconnected": + _ensure_current_match_player( + players, + player_name=payload.get("player_name"), + player_id=payload.get("player_id"), + team=None, + event_timestamp=event_timestamp, + is_connected=False, + source=event_type, + ) + continue + + if event_type in {"chat", "message"}: + _ensure_current_match_player( + players, + player_name=payload.get("player_name"), + player_id=payload.get("player_id"), + team=payload.get("chat_team"), + event_timestamp=event_timestamp, + is_connected=None, + source=event_type, + ) + + items = [_serialize_current_match_player(player, window_confidence=window["confidence"]) for player in players.values()] + items.sort(key=_current_match_player_sort_key) + return { + "scope": window["scope"], + "confidence": window["confidence"] if items else window["confidence"], + "source": "rcon-admin-log-current-match-summary", + "updated_at": max( + (str(item["last_seen_at"]) for item in items if item.get("last_seen_at")), + default=None, + ), + "stale_events_filtered": int(window["stale_events_filtered"]), + "items": items, + } + + +def _resolve_current_match_window( + connection: sqlite3.Connection | object, + *, + server_key: str, + now: datetime | None, +) -> dict[str, object]: + boundary = connection.execute( + """ + SELECT event_type, server_time + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type IN ('match_start', 'match_end') + AND server_time IS NOT NULL + ORDER BY server_time DESC, id DESC + LIMIT 1 + """, + (server_key, server_key), + ).fetchone() + open_start_time = ( + boundary["server_time"] + if boundary is not None and boundary["event_type"] == "match_start" + else None + ) + if open_start_time is not None: + return { + "scope": "open-admin-log-match-window", + "confidence": "admin-log-boundary", + "open_start_time": int(open_start_time), + "stale_events_filtered": 0, + "freshness_anchor": None, + } + + freshness_anchor = _as_utc_datetime(now) or datetime.now(timezone.utc) + return { + "scope": "recent-admin-log-window", + "confidence": "partial", + "open_start_time": None, + "stale_events_filtered": 0, + "freshness_anchor": freshness_anchor, + } + + +def _list_current_match_participant_rows( + connection: sqlite3.Connection | object, + *, + server_key: str, + window: Mapping[str, object], +) -> list[Mapping[str, object]]: + event_placeholders = ",".join("?" for _ in CURRENT_MATCH_PLAYER_EVENT_TYPES) + params: list[object] = [server_key, server_key, *CURRENT_MATCH_PLAYER_EVENT_TYPES] + if window.get("open_start_time") is not None: + params.append(window["open_start_time"]) + rows = connection.execute( + f""" + SELECT id, target_key, external_server_id, event_timestamp, server_time, event_type, + parsed_payload_json + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type IN ({event_placeholders}) + AND server_time >= ? + ORDER BY server_time ASC, id ASC + """, + params, + ).fetchall() + return rows + + rows = connection.execute( + f""" + SELECT id, target_key, external_server_id, event_timestamp, server_time, event_type, + parsed_payload_json + FROM rcon_admin_log_events + WHERE (target_key = ? OR external_server_id = ?) + AND event_type IN ({event_placeholders}) + ORDER BY server_time DESC, id DESC + LIMIT 500 + """, + params, + ).fetchall() + freshness_anchor = window.get("freshness_anchor") + fresh_rows = [ + row + for row in rows + if _row_is_current_match_fallback_fresh(row, freshness_anchor) + ] + window["stale_events_filtered"] = len(rows) - len(fresh_rows) + if not fresh_rows: + window["scope"] = "no-current-match-events" + window["confidence"] = "stale-filtered" if window["stale_events_filtered"] else "none" + return [] + return list(reversed(fresh_rows)) + + +def get_latest_rcon_player_profile_summaries( + *, + target_key: str, + player_ids: list[str], + db_path: Path | None = None, +) -> dict[str, dict[str, object]]: + """Return safe latest profile summaries keyed by player id.""" + requested_ids = [str(player_id).strip() for player_id in player_ids if str(player_id).strip()] + if not target_key or not requested_ids: + return {} + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + placeholders = ",".join("?" for _ in requested_ids) + with connect_postgres_compat() as connection: + rows = connection.execute( + f""" + SELECT snapshots.* + FROM rcon_player_profile_snapshots AS snapshots + INNER JOIN ( + SELECT player_id, MAX(source_server_time) AS latest_source_server_time + FROM rcon_player_profile_snapshots + WHERE target_key = ? + AND player_id IN ({placeholders}) + GROUP BY player_id + ) AS latest + ON latest.player_id = snapshots.player_id + AND latest.latest_source_server_time = snapshots.source_server_time + WHERE snapshots.target_key = ? + """, + [target_key, *requested_ids, target_key], + ).fetchall() + return {str(row["player_id"]): _build_safe_profile_summary(row) for row in rows} + + resolved_path = db_path or get_storage_path() + initialize_rcon_admin_log_storage(db_path=resolved_path) + placeholders = ",".join("?" for _ in requested_ids) + with sqlite3.connect(resolved_path) as connection: + connection.row_factory = sqlite3.Row + rows = connection.execute( + f""" + SELECT snapshots.* + FROM rcon_player_profile_snapshots AS snapshots + INNER JOIN ( + SELECT player_id, MAX(source_server_time) AS latest_source_server_time + FROM rcon_player_profile_snapshots + WHERE target_key = ? + AND player_id IN ({placeholders}) + GROUP BY player_id + ) AS latest + ON latest.player_id = snapshots.player_id + AND latest.latest_source_server_time = snapshots.source_server_time + WHERE snapshots.target_key = ? + """, + [target_key, *requested_ids, target_key], + ).fetchall() + + return {str(row["player_id"]): _build_safe_profile_summary(row) for row in rows} + + +def _build_safe_profile_summary(row: sqlite3.Row) -> dict[str, object]: + return { + "player_name": row["player_name"], + "source_server_time": row["source_server_time"], + "event_timestamp": row["event_timestamp"], + "first_seen": row["first_seen"], + "sessions": row["sessions"], + "matches_played": row["matches_played"], + "play_time": row["play_time"], + "totals": { + "kills": row["total_kills"], + "deaths": row["total_deaths"], + "teamkills_done": row["teamkills_done"], + "teamkills_received": row["teamkills_received"], + "kd_ratio": row["kd_ratio"], + }, + "favorite_weapons": _json_mapping(row["favorite_weapons_json"]), + "victims": _json_mapping(row["victims_json"]), + "nemesis": _json_mapping(row["nemesis_json"]), + "averages": _json_mapping(row["averages_json"]), + "sanctions": _json_mapping(row["sanctions_json"]), + } + + +def _json_mapping(raw_value: object) -> dict[str, object]: + if not isinstance(raw_value, str) or not raw_value.strip(): + return {} + try: + parsed = json.loads(raw_value) + except json.JSONDecodeError: + return {} + return parsed if isinstance(parsed, dict) else {} + + +def _serialize_kill_feed_row(row: Mapping[str, object]) -> dict[str, object]: + payload = _json_mapping(row["parsed_payload_json"]) + target_key = str(row["external_server_id"] or row["target_key"] or "unknown") + killer_team = _safe_event_field(payload.get("killer_team")) + victim_team = _safe_event_field(payload.get("victim_team")) + return { + "event_id": f"rcon-admin-log:{target_key}:{row['id']}", + "event_timestamp": row["event_timestamp"], + "server_time": row["server_time"], + "killer_name": _safe_event_field(payload.get("killer_name")), + "killer_team": killer_team, + "victim_name": _safe_event_field(payload.get("victim_name")), + "victim_team": victim_team, + "weapon": _safe_event_field(payload.get("weapon")), + "is_teamkill": bool( + killer_team + and killer_team != "None" + and killer_team == victim_team + ), + } + + +def _parse_current_match_event_row_id(value: object) -> int | None: + prefix, separator, row_id = str(value or "").rpartition(":") + if separator != ":" or not prefix.startswith("rcon-admin-log:"): + return None + try: + parsed = int(row_id) + except ValueError: + return None + return parsed if parsed > 0 else None + + +def _safe_event_field(value: object) -> str | None: + normalized = str(value or "").strip() + return normalized or None + + +def _ensure_current_match_player( + players: dict[str, dict[str, object]], + *, + player_name: object, + player_id: object, + team: object, + event_timestamp: object, + is_connected: bool | None, + source: str, +) -> dict[str, object] | None: + safe_name = _safe_event_field(player_name) + safe_id = _safe_event_field(player_id) + key = _current_match_player_key(safe_id, safe_name) + if key is None: + return None + player = players.setdefault( + key, + { + "player_id": safe_id, + "player_name": safe_name, + "team": None, + "kills": 0, + "deaths": 0, + "teamkills": 0, + "deaths_by_teamkill": 0, + "is_connected": None, + "last_seen_at": None, + "_weapon_counts": Counter(), + "_sources": set(), + }, + ) + if safe_id: + player["player_id"] = safe_id + if safe_name: + current_name = _safe_event_field(player.get("player_name")) + if current_name is None or len(safe_name) >= len(current_name): + player["player_name"] = safe_name + safe_team = _safe_event_field(team) + if safe_team: + player["team"] = safe_team + if is_connected is not None: + player["is_connected"] = is_connected + safe_timestamp = _safe_event_field(event_timestamp) + if safe_timestamp and ( + player["last_seen_at"] is None or safe_timestamp > str(player["last_seen_at"]) + ): + player["last_seen_at"] = safe_timestamp + player["_sources"].add(source) + return player + + +def _current_match_player_key( + player_id: str | None, + player_name: str | None, +) -> str | None: + if player_id: + return f"id:{player_id}" + if player_name: + return f"name:{player_name.casefold()}" + return None + + +def _player_weapon_counts(player: Mapping[str, object]) -> Counter[str]: + weapon_counts = player.get("_weapon_counts") + if isinstance(weapon_counts, Counter): + return weapon_counts + return Counter() + + +def _serialize_current_match_player( + player: Mapping[str, object], + *, + window_confidence: object, +) -> dict[str, object]: + sources = sorted(str(value) for value in player.get("_sources", set())) + return { + "player_name": player.get("player_name"), + "player_id": player.get("player_id"), + "team": player.get("team"), + "kills": int(player.get("kills") or 0), + "deaths": int(player.get("deaths") or 0), + "teamkills": int(player.get("teamkills") or 0), + "deaths_by_teamkill": int(player.get("deaths_by_teamkill") or 0), + "favorite_weapon": _favorite_weapon_for_player(_player_weapon_counts(player)), + "last_seen_at": player.get("last_seen_at"), + "is_connected": player.get("is_connected"), + "connected": player.get("is_connected"), + "source": ",".join(sources) if sources else "unknown", + "confidence": str(window_confidence or "partial"), + } + + +def _current_match_player_sort_key(player: Mapping[str, object]) -> tuple[int, int, int, str]: + connected = player.get("is_connected") + if connected is True: + connected_rank = 0 + elif connected is None: + connected_rank = 1 + else: + connected_rank = 2 + return ( + -int(player.get("kills") or 0), + int(player.get("deaths") or 0), + connected_rank, + str(player.get("player_name") or "").casefold(), + ) + + +def _favorite_weapon_for_player(weapons: Counter[str] | None) -> str | None: + if not weapons: + return None + return min(weapons.items(), key=lambda item: (-item[1], item[0]))[0] + + +def _row_is_current_match_fallback_fresh( + row: Mapping[str, object], + freshness_anchor: datetime, +) -> bool: + event_time = _as_utc_datetime(row["event_timestamp"]) + if event_time is None: + return False + age = freshness_anchor - event_time + return timedelta(0) <= age <= CURRENT_MATCH_FALLBACK_FRESHNESS + + +def _as_utc_datetime(value: object) -> datetime | None: + if isinstance(value, datetime): + parsed = value + elif isinstance(value, str) and value.strip(): + try: + parsed = datetime.fromisoformat(value.strip().replace("Z", "+00:00")) + except ValueError: + return None + else: + return None + if parsed.tzinfo is None: + return parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _persist_rcon_admin_log_entries_postgres( + *, + target: Mapping[str, object], + entries: list[dict[str, object]], +) -> dict[str, int]: + from .postgres_rcon_storage import connect_postgres_compat + + target_key = str(target.get("target_key") or target.get("external_server_id") or "") + if not target_key: + raise ValueError("target must include target_key or external_server_id") + + external_server_id = target.get("external_server_id") + inserted = 0 + duplicates = 0 + with connect_postgres_compat() as connection: + for entry in entries: + parsed = parse_rcon_admin_log_entry(entry) + raw_message = str(parsed.get("raw_message") or "") + canonical_message = _canonicalize_admin_log_message(raw_message) + cursor = connection.execute( + """ + INSERT INTO rcon_admin_log_events ( + target_key, + external_server_id, + event_timestamp, + server_time, + relative_time, + event_type, + raw_message, + canonical_message, + parsed_payload_json, + raw_entry_json + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT DO NOTHING + """, + ( + target_key, + external_server_id, + parsed.get("timestamp"), + parsed.get("server_time"), + parsed.get("relative_time"), + parsed.get("event_type") or "unknown", + raw_message, + canonical_message, + json.dumps(parsed, ensure_ascii=False, separators=(",", ":")), + json.dumps(entry, ensure_ascii=False, separators=(",", ":")), + ), + ) + if int(cursor.rowcount or 0): + inserted += 1 + else: + duplicates += 1 + _persist_profile_snapshot_if_present( + connection, + target_key=target_key, + external_server_id=external_server_id, + parsed=parsed, + ) + return { + "events_seen": len(entries), + "events_inserted": inserted, + "duplicate_events": duplicates, + } diff --git a/backend/app/rcon_client.py b/backend/app/rcon_client.py new file mode 100644 index 0000000..a35ddbc --- /dev/null +++ b/backend/app/rcon_client.py @@ -0,0 +1,660 @@ +"""Minimal Hell Let Loose RCON client for live server state queries.""" + +from __future__ import annotations + +import base64 +import itertools +import json +import socket +import struct +from collections.abc import Mapping +from dataclasses import dataclass + +from .config import ( + DEFAULT_RCON_SOURCE_NAME, + get_rcon_request_timeout_seconds, + get_rcon_targets_payload, +) + + +RCON_BUFFER_SIZE = 32768 +RCON_HEADER_FORMAT = " None: + super().__init__(message) + self.error_type = error_type + self.error_stage = error_stage + + +class HllRconConnection: + """Synchronous HLL RCON v2 connection for lightweight live status queries.""" + + def __init__(self, *, timeout_seconds: float) -> None: + self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self._socket.settimeout(timeout_seconds) + self._xor_key: bytes | None = None + self._auth_token: str | None = None + self._request_ids = itertools.count(1) + self._current_stage = "tcp_connect" + + def connect(self, *, host: str, port: int, password: str) -> None: + self._run_socket_stage( + "tcp_connect", + lambda: self._socket.connect((host, port)), + ) + + server_connect_response = self._exchange( + "ServerConnect", + "", + request_stage="server_connect_request", + response_stage="server_connect_response", + ) + self._current_stage = "xor_key_decode" + xor_key_b64 = _expect_text_content(server_connect_response, command_name="ServerConnect") + try: + self._xor_key = base64.b64decode(xor_key_b64) + except (ValueError, TypeError) as error: + raise RconQueryError( + "payload-invalid", + "The HLL server returned an invalid RCON XOR key.", + error_stage="xor_key_decode", + ) from error + if not self._xor_key: + raise RconQueryError( + "unexpected-response", + "The HLL server returned an empty RCON XOR key.", + error_stage="xor_key_decode", + ) + + login_response = self._exchange( + "Login", + password, + request_stage="login_request", + response_stage="login_response", + ) + self._auth_token = _expect_text_content(login_response, command_name="Login") + if not self._auth_token: + raise RconQueryError( + "unexpected-response", + "The HLL server returned an empty RCON auth token.", + error_stage="login_response", + ) + + def execute_json( + self, + command: str, + content: dict[str, object] | str = "", + ) -> dict[str, object]: + stage_prefix = _resolve_command_stage_prefix(command) + response = self._exchange( + command, + content, + request_stage=f"{stage_prefix}_request", + response_stage=f"{stage_prefix}_response", + ) + self._current_stage = "payload_decode" + content_body = response.get("contentBody") + if isinstance(content_body, dict): + return content_body + if isinstance(content_body, str): + try: + parsed = json.loads(content_body) + except json.JSONDecodeError as error: + raise RconQueryError( + "payload-invalid", + f"The HLL server returned invalid JSON content for {command}.", + error_stage="payload_decode", + ) from error + if isinstance(parsed, dict): + return parsed + raise RconQueryError( + "unexpected-response", + f"The HLL server returned an unexpected payload for {command}.", + error_stage="unexpected_response", + ) + + def close(self) -> None: + try: + self._socket.shutdown(socket.SHUT_RDWR) + except OSError: + pass + self._socket.close() + + def _exchange( + self, + command: str, + content: dict[str, object] | str = "", + *, + request_stage: str, + response_stage: str, + ) -> dict[str, object]: + request_id = next(self._request_ids) + self._send_request( + request_id=request_id, + command=command, + content=content, + request_stage=request_stage, + ) + response = self._receive_response(response_stage=response_stage) + response_request_id = int(response.get("requestId") or 0) + if response_request_id != request_id: + raise RconQueryError( + "unexpected-response", + f"Unexpected RCON response id {response_request_id} for request {request_id}.", + error_stage="unexpected_response", + ) + _raise_for_status(response, command_name=command, error_stage=response_stage) + return response + + def _send_request( + self, + *, + request_id: int, + command: str, + content: dict[str, object] | str, + request_stage: str, + ) -> None: + content_body = ( + content + if isinstance(content, str) + else json.dumps(content, separators=(",", ":")) + ) + body = json.dumps( + { + "authToken": self._auth_token or "", + "version": RCON_PROTOCOL_VERSION, + "name": command, + "contentBody": content_body, + }, + separators=(",", ":"), + ).encode("utf-8") + header = struct.pack( + RCON_HEADER_FORMAT, + RCON_MAGIC_HEADER_VALUE, + request_id, + len(body), + ) + self._run_socket_stage( + request_stage, + lambda: self._socket.sendall(header + self._xor(body)), + ) + + def _receive_response(self, *, response_stage: str) -> dict[str, object]: + header_size = struct.calcsize(RCON_HEADER_FORMAT) + header_bytes = self._recv_exact( + header_size, + stage=response_stage, + receive_context="response header", + ) + try: + magic_value, request_id, body_length = struct.unpack( + RCON_HEADER_FORMAT, + header_bytes, + ) + except struct.error as error: + raise RconQueryError( + "payload-invalid", + "The HLL server returned an invalid RCON response header.", + error_stage=response_stage, + ) from error + if magic_value != RCON_MAGIC_HEADER_VALUE: + raise RconQueryError( + "invalid-magic", + ( + "The HLL server returned an unexpected RCON magic value: " + f"{magic_value:#x} (expected {RCON_MAGIC_HEADER_VALUE:#x})." + ), + error_stage=response_stage, + ) + if body_length <= 0: + raise RconQueryError( + "unexpected-response", + "The HLL server returned an empty RCON response body.", + error_stage=response_stage, + ) + + body = self._xor(self._recv_body(body_length, stage=response_stage)) + try: + parsed = json.loads(body.decode("utf-8", errors="replace")) + except json.JSONDecodeError as error: + raise RconQueryError( + "payload-invalid", + "The HLL server returned malformed RCON JSON.", + error_stage="payload_decode", + ) from error + if not isinstance(parsed, dict): + raise RconQueryError( + "unexpected-response", + "The HLL server returned a non-object RCON response.", + error_stage="unexpected_response", + ) + + parsed["requestId"] = request_id + return parsed + + def _recv_body(self, expected_length: int, *, stage: str) -> bytes: + chunks = bytearray() + original_timeout = self._socket.gettimeout() + body_timeout_seconds = min(3.0, original_timeout or 3.0) + self._socket.settimeout(body_timeout_seconds) + try: + while len(chunks) < expected_length: + self._current_stage = stage + try: + chunk = self._socket.recv( + min(RCON_BUFFER_SIZE, expected_length - len(chunks)) + ) + except (TimeoutError, socket.timeout) as error: + raise RconQueryError( + "timeout", + ( + f"Timed out during {stage} while waiting for response body " + f"({len(chunks)}/{expected_length} bytes received)." + ), + error_stage=stage, + ) from error + except OSError as error: + raise RconQueryError( + _classify_socket_error_type(error), + f"RCON socket error during {stage}: {error}", + error_stage=stage, + ) from error + if not chunk: + raise RconQueryError( + "connection-closed", + ( + "The HLL RCON connection closed unexpectedly while waiting for " + f"response body ({len(chunks)}/{expected_length} bytes received)." + ), + error_stage=stage, + ) + chunks.extend(chunk) + finally: + self._socket.settimeout(original_timeout) + return bytes(chunks) + + def _recv_exact( + self, + expected_length: int, + *, + stage: str, + receive_context: str, + ) -> bytes: + chunks = bytearray() + while len(chunks) < expected_length: + self._current_stage = stage + try: + chunk = self._socket.recv(min(RCON_BUFFER_SIZE, expected_length - len(chunks))) + except (TimeoutError, socket.timeout) as error: + raise RconQueryError( + "timeout", + ( + f"Timed out during {stage} while waiting for {receive_context} " + f"({len(chunks)}/{expected_length} bytes received)." + ), + error_stage=stage, + ) from error + except OSError as error: + raise RconQueryError( + _classify_socket_error_type(error), + f"RCON socket error during {stage}: {error}", + error_stage=stage, + ) from error + if not chunk: + raise RconQueryError( + "connection-closed", + ( + "The HLL RCON connection closed unexpectedly while waiting for " + f"{receive_context} ({len(chunks)}/{expected_length} bytes received)." + ), + error_stage=stage, + ) + chunks.extend(chunk) + return bytes(chunks) + + def _xor(self, payload: bytes) -> bytes: + if not self._xor_key: + return payload + return bytes( + value ^ self._xor_key[index % len(self._xor_key)] + for index, value in enumerate(payload) + ) + + def __enter__(self) -> HllRconConnection: + return self + + def __exit__(self, exc_type: object, exc: object, traceback: object) -> None: + self.close() + + def _run_socket_stage(self, stage: str, operation: object) -> object: + self._current_stage = stage + try: + return operation() + except (TimeoutError, socket.timeout) as error: + raise RconQueryError( + "timeout", + f"Timed out during {stage}.", + error_stage=stage, + ) from error + except OSError as error: + raise RconQueryError( + _classify_socket_error_type(error), + f"RCON socket error during {stage}: {error}", + error_stage=stage, + ) from error + + +def load_rcon_targets() -> tuple[RconServerTarget, ...]: + """Load RCON targets from JSON env payload.""" + raw_payload = get_rcon_targets_payload() + if raw_payload is None: + return () + parsed = json.loads(raw_payload) + if not isinstance(parsed, list): + raise ValueError("HLL_BACKEND_RCON_TARGETS must be a JSON array.") + return tuple(_coerce_rcon_target(item) for item in parsed if isinstance(item, dict)) + + +def query_live_server_state( + target: RconServerTarget, + *, + timeout_seconds: float | None = None, +) -> dict[str, object]: + """Query one HLL server via RCON and normalize it to the live snapshot shape.""" + sample = query_live_server_sample(target, timeout_seconds=timeout_seconds) + return dict(sample["normalized"]) + + +def query_live_server_sample( + target: RconServerTarget, + *, + timeout_seconds: float | None = None, +) -> dict[str, object]: + """Query one HLL server and return both normalized and raw session data.""" + resolved_timeout = timeout_seconds or get_rcon_request_timeout_seconds() + try: + with HllRconConnection(timeout_seconds=resolved_timeout) as connection: + connection.connect(host=target.host, port=target.port, password=target.password) + session = connection.execute_json( + "GetServerInformation", + {"Name": "session", "Value": ""}, + ) + except RconQueryError: + raise + except (TimeoutError, socket.timeout) as error: + raise RconQueryError( + "timeout", + f"Timed out after {resolved_timeout:.1f}s while querying {target.host}:{target.port}.", + ) from error + except ConnectionRefusedError as error: + raise RconQueryError( + "connection-refused", + f"Connection refused by {target.host}:{target.port}.", + ) from error + except OSError as error: + raise RconQueryError( + _classify_socket_error_type(error), + f"RCON socket error against {target.host}:{target.port}: {error}", + ) from error + except RuntimeError as error: + raise RconQueryError( + _classify_runtime_error_type(error), + str(error), + error_stage=getattr(error, "error_stage", None), + ) from error + + resolved_external_id = target.external_server_id or f"rcon:{target.host}:{target.port}" + return { + "target": { + "target_key": build_rcon_target_key(target), + "name": target.name, + "host": target.host, + "port": target.port, + "external_server_id": target.external_server_id, + "region": target.region, + "game_port": target.game_port, + "query_port": target.query_port, + "source_name": target.source_name, + }, + "normalized": { + "external_server_id": resolved_external_id, + "server_name": _string_or_none(session.get("serverName")) or target.name, + "status": "online", + "players": _coerce_optional_int(session.get("playerCount")), + "max_players": _coerce_optional_int(session.get("maxPlayerCount")), + "current_map": ( + _string_or_none(session.get("mapId")) or _string_or_none(session.get("mapName")) + ), + "game_mode": _string_or_none(session.get("gameMode")), + "allied_score": _coerce_optional_int(session.get("alliedScore")), + "axis_score": _coerce_optional_int(session.get("axisScore")), + "winner": _resolve_rcon_winner( + _coerce_optional_int(session.get("alliedScore")), + _coerce_optional_int(session.get("axisScore")), + ), + "allied_faction": _string_or_none(session.get("alliedFaction")), + "axis_faction": _string_or_none(session.get("axisFaction")), + "allied_players": _coerce_optional_int(session.get("alliedPlayerCount")), + "axis_players": _coerce_optional_int(session.get("axisPlayerCount")), + "remaining_match_time_seconds": _coerce_optional_int(session.get("remainingMatchTime")), + "match_time_seconds": _coerce_optional_int(session.get("matchTime")), + "queue_count": _coerce_optional_int(session.get("queueCount")), + "max_queue_count": _coerce_optional_int(session.get("maxQueueCount")), + "vip_queue_count": _coerce_optional_int(session.get("vipQueueCount")), + "max_vip_queue_count": _coerce_optional_int(session.get("maxVipQueueCount")), + "region": target.region, + "source_name": target.source_name, + "snapshot_origin": "real-rcon", + "source_ref": f"rcon://{target.host}:{target.port}", + }, + "raw_session": session, + } + + +def build_rcon_target_key(target: RconServerTarget) -> str: + """Build a stable local key for one configured RCON target.""" + external_server_id = _string_or_none(target.external_server_id) + if external_server_id: + return external_server_id + return f"rcon:{target.host}:{target.port}" + + +def _coerce_rcon_target(raw_target: dict[str, object]) -> RconServerTarget: + slug = _string_or_none(raw_target.get("slug")) + external_server_id = _string_or_none(raw_target.get("external_server_id")) or slug + name = _string_or_none(raw_target.get("name")) or _slug_to_display_name(slug) or "Unnamed RCON target" + host = _required_string(raw_target, "host") + password = _required_string(raw_target, "password") + source_name = _string_or_none(raw_target.get("source_name")) or DEFAULT_RCON_SOURCE_NAME + port = _required_positive_int(raw_target, "port") + if not host: + raise ValueError("Each RCON target must define a non-empty 'host'.") + if port <= 0: + raise ValueError("Each RCON target must define a positive 'port'.") + if not password: + raise ValueError("Each RCON target must define a non-empty 'password'.") + + return RconServerTarget( + name=name, + host=host, + port=port, + password=password, + source_name=source_name or DEFAULT_RCON_SOURCE_NAME, + external_server_id=external_server_id, + region=_string_or_none(raw_target.get("region")), + game_port=_coerce_optional_positive_int(raw_target.get("game_port")), + query_port=_coerce_optional_positive_int(raw_target.get("query_port")), + ) + + +def _raise_for_status( + response: dict[str, object], + *, + command_name: str, + error_stage: str, +) -> None: + status_code = int(response.get("statusCode") or 0) + if status_code == 200: + return + status_message = _string_or_none(response.get("statusMessage")) or "Unknown RCON error." + if command_name == "Login" and status_code in {401, 403}: + raise RconQueryError( + "auth/login", + f"{command_name} failed with RCON status {status_code}: {status_message}", + error_stage=error_stage, + ) + raise RconQueryError( + "unexpected-response", + f"{command_name} failed with RCON status {status_code}: {status_message}", + error_stage=error_stage, + ) + + +def _expect_text_content(response: dict[str, object], *, command_name: str) -> str: + content = response.get("contentBody") + if isinstance(content, str): + return content + raise RconQueryError( + "unexpected-response", + f"The HLL server returned unexpected text content for {command_name}.", + error_stage="unexpected_response", + ) + + +def _resolve_command_stage_prefix(command: str) -> str: + normalized_command = str(command or "").strip().lower() + stage_prefix_by_command = { + "serverconnect": "server_connect", + "login": "login", + "getserverinformation": "get_server_information", + } + return stage_prefix_by_command.get(normalized_command, normalized_command or "rcon_command") + + +def _string_or_none(value: object) -> str | None: + if not isinstance(value, str): + return None + normalized = value.strip() + return normalized or None + + +def _resolve_rcon_winner(allied_score: int | None, axis_score: int | None) -> str | None: + if allied_score is None or axis_score is None: + return None + if allied_score > axis_score: + return "allied" + if axis_score > allied_score: + return "axis" + return "draw" + + +def _coerce_optional_int(value: object) -> int | None: + if value is None: + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _coerce_optional_positive_int(value: object) -> int | None: + if value is None: + return None + coerced = int(value) + if coerced <= 0: + raise ValueError("Configured RCON target ports must be positive when defined.") + return coerced + + +def _required_string(raw_target: Mapping[str, object], field_name: str) -> str: + value = _string_or_none(raw_target.get(field_name)) + if value is None: + available_fields = ", ".join(sorted(raw_target.keys())) + raise ValueError( + f"Each RCON target must define a non-empty '{field_name}'. " + f"Available fields: {available_fields or 'none'}." + ) + return value + + +def _required_positive_int(raw_target: Mapping[str, object], field_name: str) -> int: + raw_value = raw_target.get(field_name) + try: + value = int(raw_value) + except (TypeError, ValueError) as error: + available_fields = ", ".join(sorted(raw_target.keys())) + raise ValueError( + f"Each RCON target must define a valid integer '{field_name}'. " + f"Available fields: {available_fields or 'none'}." + ) from error + if value <= 0: + raise ValueError(f"Each RCON target must define a positive '{field_name}'.") + return value + + +def _slug_to_display_name(slug: str | None) -> str | None: + normalized_slug = _string_or_none(slug) + if normalized_slug is None: + return None + if normalized_slug.startswith("comunidad-hispana-"): + suffix = normalized_slug.removeprefix("comunidad-hispana-") + if suffix.isdigit(): + return f"Comunidad Hispana #{suffix.zfill(2)}" + parts = [part for part in normalized_slug.replace("_", "-").split("-") if part] + if not parts: + return None + return " ".join(part.upper() if part.isdigit() else part.capitalize() for part in parts) + + +def _classify_socket_error_type(error: OSError) -> str: + if isinstance(error, TimeoutError): + return "timeout" + if isinstance(error, ConnectionRefusedError): + return "connection-refused" + if getattr(error, "errno", None) in {10060, 110, 60}: + return "timeout" + return "other-error" + + +def _classify_runtime_error_type(error: RuntimeError) -> str: + message = str(error).lower() + if "auth token" in message or "login failed" in message or "status 401" in message or "status 403" in message: + return "auth/login" + if "invalid magic" in message: + return "invalid-magic" + if "closed unexpectedly" in message or "closed connection" in message: + return "connection-closed" + if "invalid json" in message or "unexpected payload" in message or "malformed" in message or "invalid rcon" in message: + return "payload-invalid" + if "timed out" in message: + return "timeout" + if "unexpected" in message: + return "unexpected-response" + return "other-error" diff --git a/backend/app/rcon_historical_backfill.py b/backend/app/rcon_historical_backfill.py new file mode 100644 index 0000000..0363be2 --- /dev/null +++ b/backend/app/rcon_historical_backfill.py @@ -0,0 +1,484 @@ +"""Explicit RCON/AdminLog historical backfill command.""" + +from __future__ import annotations + +import argparse +import json +import time +from dataclasses import dataclass +from contextlib import closing +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Iterable + +from .config import ( + get_rcon_backfill_chunk_hours, + get_rcon_backfill_max_days_back, + get_rcon_backfill_sleep_seconds, + get_rcon_request_timeout_seconds, + use_postgres_rcon_storage, +) +from .historical_runner import generate_historical_snapshots +from .historical_storage import ALL_SERVERS_SLUG +from .rcon_admin_log_materialization import ( + MATCH_RESULT_SOURCE, + initialize_rcon_materialized_storage, + materialize_rcon_admin_log, +) +from .rcon_admin_log_storage import persist_rcon_admin_log_entries +from .rcon_client import HllRconConnection, RconServerTarget, build_rcon_target_key, load_rcon_targets +from .rcon_historical_leaderboards import list_rcon_materialized_leaderboard +from .sqlite_utils import connect_sqlite_readonly +from .writer_lock import backend_writer_lock, build_writer_lock_holder + +DEFAULT_ALLOWED_SERVER_KEYS = frozenset({"comunidad-hispana-01", "comunidad-hispana-02"}) +EXCLUDED_BY_DEFAULT_SERVER_KEYS = frozenset({"comunidad-hispana-03"}) + + +@dataclass(frozen=True, slots=True) +class BackfillWindow: + start: datetime + end: datetime + + @property + def lookback_seconds(self) -> int: + now = datetime.now(timezone.utc) + return max(1, int((now - self.start).total_seconds())) + + +def run_rcon_historical_backfill( + *, + servers: str | None = None, + from_value: str | None = None, + to_value: str | None = None, + ensure_recent_matches: int | None = None, + ensure_current_month: bool = False, + ensure_leaderboard_windows: bool = False, + chunk_hours: int | None = None, + sleep_seconds: float | None = None, + max_days_back: int | None = None, + dry_run: bool = False, + regenerate_snapshots: bool = False, + db_path: Path | None = None, +) -> dict[str, object]: + """Backfill AdminLog events and materialized RCON matches on explicit operator command.""" + anchor = datetime.now(timezone.utc) + resolved_chunk_hours = chunk_hours or get_rcon_backfill_chunk_hours() + resolved_sleep_seconds = ( + get_rcon_backfill_sleep_seconds() if sleep_seconds is None else sleep_seconds + ) + resolved_max_days_back = max_days_back or get_rcon_backfill_max_days_back() + selected_targets = select_backfill_targets(servers) + recent_before = count_recent_materialized_closed_matches(db_path=db_path) + monthly_before = _window_diagnostic("monthly", db_path=db_path, now=anchor) + weekly_before = _window_diagnostic("weekly", db_path=db_path, now=anchor) + requested_range = _resolve_requested_range( + anchor=anchor, + from_value=from_value, + to_value=to_value, + ensure_recent_matches=ensure_recent_matches, + ensure_current_month=ensure_current_month, + ensure_leaderboard_windows=ensure_leaderboard_windows, + max_days_back=resolved_max_days_back, + ) + windows = _build_backfill_windows( + start=requested_range["start"], + end=requested_range["end"], + chunk_hours=resolved_chunk_hours, + ) + + result: dict[str, object] = { + "status": "dry-run" if dry_run else "ok", + "dry_run": dry_run, + "servers_processed": [build_rcon_target_key(target) for target in selected_targets], + "requested_range": { + "from": _to_iso(requested_range["start"]), + "to": _to_iso(requested_range["end"]), + "reason": requested_range["reason"], + "admin_log_api": "lookback-only", + }, + "actual_windows_scanned": [], + "events_seen": 0, + "events_inserted": 0, + "duplicate_events": 0, + "matches_materialized": 0, + "matches_updated": 0, + "player_stats_materialized": 0, + "player_stats_updated": 0, + "recent_materialized_closed_match_count_before": recent_before, + "recent_materialized_closed_match_count_after": recent_before, + "monthly_selected_window_before": monthly_before, + "monthly_selected_window": monthly_before, + "weekly_selected_window_before": weekly_before, + "weekly_selected_window": weekly_before, + "snapshot_regeneration_result": None, + "errors": [], + } + + if dry_run: + result["actual_windows_scanned"] = [ + _serialize_window(window) for window in _limit_windows_for_recent_need( + windows, + ensure_recent_matches=ensure_recent_matches, + db_path=db_path, + ) + ] + return result + + try: + with backend_writer_lock( + holder=build_writer_lock_holder("app.rcon_historical_backfill") + ): + windows_to_scan = _limit_windows_for_recent_need( + windows, + ensure_recent_matches=ensure_recent_matches, + db_path=db_path, + ) + for window in windows_to_scan: + for target in selected_targets: + window_result = _scan_target_window(target, window) + result["actual_windows_scanned"].append(window_result["window"]) + result["events_seen"] = int(result["events_seen"]) + int( + window_result["events_seen"] + ) + result["events_inserted"] = int(result["events_inserted"]) + int( + window_result["events_inserted"] + ) + result["duplicate_events"] = int(result["duplicate_events"]) + int( + window_result["duplicate_events"] + ) + if window_result.get("error"): + result["errors"].append(window_result["error"]) + if resolved_sleep_seconds > 0: + time.sleep(resolved_sleep_seconds) + + materialized = materialize_rcon_admin_log(db_path=db_path) + result["matches_materialized"] = int(result["matches_materialized"]) + int( + materialized.get("matches_materialized") or 0 + ) + result["matches_updated"] = int(result["matches_updated"]) + int( + materialized.get("matches_updated") or 0 + ) + result["player_stats_materialized"] = int( + result["player_stats_materialized"] + ) + int(materialized.get("player_stats_materialized") or 0) + result["player_stats_updated"] = int(result["player_stats_updated"]) + int( + materialized.get("player_stats_updated") or 0 + ) + + if ensure_recent_matches and count_recent_materialized_closed_matches( + db_path=db_path + ) >= ensure_recent_matches: + break + + if regenerate_snapshots: + result["snapshot_regeneration_result"] = generate_historical_snapshots( + server_slug=None, + run_number=1, + ) + except Exception as exc: # noqa: BLE001 - CLI reports structured operator diagnostics + result["status"] = "error" + result["errors"].append({"error_type": type(exc).__name__, "message": str(exc)}) + + recent_after = count_recent_materialized_closed_matches(db_path=db_path) + result["recent_materialized_closed_match_count_after"] = recent_after + result["monthly_selected_window"] = _window_diagnostic("monthly", db_path=db_path, now=anchor) + result["weekly_selected_window"] = _window_diagnostic("weekly", db_path=db_path, now=anchor) + if result["errors"] and result["status"] == "ok": + result["status"] = "partial" + return result + + +def select_backfill_targets(servers: str | None) -> list[RconServerTarget]: + """Load configured RCON targets and apply safe server selection rules.""" + configured_targets = list(load_rcon_targets()) + if not configured_targets: + raise RuntimeError("No RCON targets configured in HLL_BACKEND_RCON_TARGETS.") + by_key = {build_rcon_target_key(target): target for target in configured_targets} + requested_keys = _parse_server_keys(servers) + if requested_keys: + unknown = sorted(key for key in requested_keys if key not in by_key) + if unknown: + raise ValueError(f"Unknown RCON server key(s): {', '.join(unknown)}") + return [by_key[key] for key in requested_keys] + selected = [ + target + for key, target in by_key.items() + if key in DEFAULT_ALLOWED_SERVER_KEYS and key not in EXCLUDED_BY_DEFAULT_SERVER_KEYS + ] + if not selected: + raise RuntimeError( + "No default backfill targets selected. Pass --servers with configured keys explicitly." + ) + return selected + + +def count_recent_materialized_closed_matches( + *, + server_key: str | None = None, + db_path: Path | None = None, +) -> int: + """Count materialized closed AdminLog matches available for recent-match UI.""" + resolved_path = initialize_rcon_materialized_storage(db_path=db_path) + scope_sql = "" + params: list[object] = [MATCH_RESULT_SOURCE] + if server_key and server_key != ALL_SERVERS_SLUG: + scope_sql = "AND (target_key = ? OR external_server_id = ?)" + params.extend([server_key, server_key]) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + connection_scope = connect_postgres_compat() + else: + connection_scope = closing(connect_sqlite_readonly(resolved_path)) + with connection_scope as connection: + row = connection.execute( + f""" + SELECT COUNT(*) AS count + FROM rcon_materialized_matches + WHERE source_basis = ? + AND ended_at IS NOT NULL + {scope_sql} + """, + params, + ).fetchone() + return int(row["count"] or 0) if row else 0 + + +def _scan_target_window(target: RconServerTarget, window: BackfillWindow) -> dict[str, object]: + target_metadata = _serialize_target(target) + serialized_window = _serialize_window(window) + try: + with HllRconConnection(timeout_seconds=get_rcon_request_timeout_seconds()) as connection: + connection.connect(host=target.host, port=target.port, password=target.password) + payload = connection.execute_json( + "GetAdminLog", + { + "LogBackTrackTime": window.lookback_seconds, + "Filters": [], + }, + ) + entries = payload.get("entries") + if not isinstance(entries, list): + entries = [] + normalized_entries = [entry for entry in entries if isinstance(entry, dict)] + delta = persist_rcon_admin_log_entries( + target=target_metadata, + entries=normalized_entries, + ) + return {"window": serialized_window, "error": None, **delta} + except Exception as exc: # noqa: BLE001 - per-window errors must not hide neighboring windows + return { + "window": serialized_window, + "events_seen": 0, + "events_inserted": 0, + "duplicate_events": 0, + "error": { + **target_metadata, + **serialized_window, + "error_type": type(exc).__name__, + "message": str(exc), + }, + } + + +def _resolve_requested_range( + *, + anchor: datetime, + from_value: str | None, + to_value: str | None, + ensure_recent_matches: int | None, + ensure_current_month: bool, + ensure_leaderboard_windows: bool, + max_days_back: int, +) -> dict[str, object]: + end = _parse_datetime_argument(to_value, default=anchor) + starts = [] + reasons = [] + if from_value: + starts.append(_parse_datetime_argument(from_value, default=anchor)) + reasons.append("explicit-range") + if ensure_current_month: + starts.append(_month_start(anchor)) + reasons.append("ensure-current-month") + if ensure_leaderboard_windows: + starts.append(_previous_month_start(_month_start(anchor))) + starts.append(_week_start(anchor) - timedelta(days=7)) + reasons.append("ensure-leaderboard-windows") + if ensure_recent_matches: + starts.append(anchor - timedelta(days=max_days_back)) + reasons.append(f"ensure-recent-matches-{ensure_recent_matches}") + if not starts: + starts.append(anchor - timedelta(days=max_days_back)) + reasons.append("default-max-days-back") + start = max(min(starts), anchor - timedelta(days=max_days_back)) + return {"start": start, "end": end, "reason": ",".join(reasons)} + + +def _build_backfill_windows( + *, + start: datetime, + end: datetime, + chunk_hours: int, +) -> list[BackfillWindow]: + windows: list[BackfillWindow] = [] + cursor = _as_utc(end) + lower = _as_utc(start) + chunk = timedelta(hours=chunk_hours) + while cursor > lower: + window_start = max(lower, cursor - chunk) + windows.append(BackfillWindow(start=window_start, end=cursor)) + cursor = window_start + return windows + + +def _limit_windows_for_recent_need( + windows: list[BackfillWindow], + *, + ensure_recent_matches: int | None, + db_path: Path | None, +) -> list[BackfillWindow]: + if not ensure_recent_matches: + return windows + if count_recent_materialized_closed_matches(db_path=db_path) >= ensure_recent_matches: + return [] + return windows + + +def _window_diagnostic( + timeframe: str, + *, + db_path: Path | None, + now: datetime, +) -> dict[str, object]: + payload = list_rcon_materialized_leaderboard( + server_key=ALL_SERVERS_SLUG, + timeframe=timeframe, + metric="kills", + limit=1, + db_path=db_path, + now=now, + ) + return { + "window_kind": payload.get("window_kind"), + "window_label": payload.get("window_label"), + "window_start": payload.get("window_start"), + "window_end": payload.get("window_end"), + "selection_reason": payload.get("selection_reason"), + "current_week_closed_matches": payload.get("current_week_closed_matches"), + "previous_week_closed_matches": payload.get("previous_week_closed_matches"), + "selected_month_start": payload.get("selected_month_start"), + "selected_month_end": payload.get("selected_month_end"), + "current_month_closed_matches": payload.get("current_month_closed_matches"), + "previous_month_closed_matches": payload.get("previous_month_closed_matches"), + "sufficient_sample": payload.get("sufficient_sample"), + } + + +def _parse_server_keys(value: str | None) -> list[str]: + return [part.strip() for part in str(value or "").split(",") if part.strip()] + + +def _parse_datetime_argument(value: str | None, *, default: datetime) -> datetime: + if value is None or str(value).strip().lower() == "now": + return default + raw = str(value).strip() + if len(raw) == 10: + raw = f"{raw}T00:00:00+00:00" + parsed = datetime.fromisoformat(raw.replace("Z", "+00:00")) + return _as_utc(parsed) + + +def _month_start(value: datetime) -> datetime: + point = _as_utc(value) + return point.replace(day=1, hour=0, minute=0, second=0, microsecond=0) + + +def _previous_month_start(current_month_start: datetime) -> datetime: + return _month_start(current_month_start - timedelta(days=1)) + + +def _week_start(value: datetime) -> datetime: + point = _as_utc(value) + return (point - timedelta(days=point.weekday())).replace( + hour=0, + minute=0, + second=0, + microsecond=0, + ) + + +def _as_utc(value: datetime) -> datetime: + if value.tzinfo is None: + return value.replace(tzinfo=timezone.utc) + return value.astimezone(timezone.utc) + + +def _serialize_target(target: RconServerTarget) -> dict[str, object]: + return { + "target_key": build_rcon_target_key(target), + "external_server_id": target.external_server_id, + "name": target.name, + "host": target.host, + "port": target.port, + "source_name": target.source_name, + } + + +def _serialize_window(window: BackfillWindow) -> dict[str, object]: + return { + "start": _to_iso(window.start), + "end": _to_iso(window.end), + "requested_log_backtrack_seconds": window.lookback_seconds, + } + + +def _to_iso(value: datetime) -> str: + return _as_utc(value).isoformat().replace("+00:00", "Z") + + +def _main(argv: Iterable[str] | None = None) -> int: + parser = argparse.ArgumentParser(description="Backfill RCON AdminLog historical materialized matches.") + parser.add_argument("--from", dest="from_value", default=None) + parser.add_argument("--to", dest="to_value", default=None) + parser.add_argument("--servers", default=None) + parser.add_argument("--ensure-recent-matches", type=int, default=None) + parser.add_argument("--ensure-current-month", action="store_true") + parser.add_argument("--ensure-leaderboard-windows", action="store_true") + parser.add_argument("--chunk-hours", type=int, default=get_rcon_backfill_chunk_hours()) + parser.add_argument("--sleep-seconds", type=float, default=get_rcon_backfill_sleep_seconds()) + parser.add_argument("--max-days-back", type=int, default=get_rcon_backfill_max_days_back()) + parser.add_argument("--dry-run", action="store_true") + parser.add_argument("--regenerate-snapshots", action="store_true") + parser.add_argument("--db-path", type=Path, default=None) + args = parser.parse_args(list(argv) if argv is not None else None) + + if args.ensure_recent_matches is not None and args.ensure_recent_matches <= 0: + raise ValueError("--ensure-recent-matches must be positive.") + if args.chunk_hours <= 0: + raise ValueError("--chunk-hours must be positive.") + if args.sleep_seconds < 0: + raise ValueError("--sleep-seconds must be zero or positive.") + if args.max_days_back <= 0: + raise ValueError("--max-days-back must be positive.") + + payload = run_rcon_historical_backfill( + servers=args.servers, + from_value=args.from_value, + to_value=args.to_value, + ensure_recent_matches=args.ensure_recent_matches, + ensure_current_month=args.ensure_current_month, + ensure_leaderboard_windows=args.ensure_leaderboard_windows, + chunk_hours=args.chunk_hours, + sleep_seconds=args.sleep_seconds, + max_days_back=args.max_days_back, + dry_run=args.dry_run, + regenerate_snapshots=args.regenerate_snapshots, + db_path=args.db_path, + ) + print(json.dumps(payload, ensure_ascii=False, indent=2, default=str)) + return 0 if payload.get("status") != "error" else 1 + + +if __name__ == "__main__": + raise SystemExit(_main()) diff --git a/backend/app/rcon_historical_backfill_operational.py b/backend/app/rcon_historical_backfill_operational.py new file mode 100644 index 0000000..7017a65 --- /dev/null +++ b/backend/app/rcon_historical_backfill_operational.py @@ -0,0 +1,173 @@ +"""Observable operator backfill for RCON AdminLog. + +This command is intentionally simple and explicit. It is meant to be run after stopping +`historical-runner` and `rcon-historical-worker`, so it does not compete with the shared +writer lock loop. It prints one JSON line per step, which makes progress visible in +PowerShell and Docker logs. +""" + +from __future__ import annotations + +import argparse +import json +import time +from datetime import datetime, timezone +from typing import Iterable + +from .historical_runner import generate_historical_snapshots +from .rcon_admin_log_ingestion import ingest_rcon_admin_logs +from .rcon_admin_log_materialization import materialize_rcon_admin_log +from .rcon_historical_backfill import count_recent_materialized_closed_matches, select_backfill_targets +from .rcon_client import build_rcon_target_key + + +def run_operational_backfill( + *, + ensure_recent_matches: int, + servers: str, + max_days_back: int, + chunk_hours: int, + sleep_seconds: float, + regenerate_snapshots: bool, +) -> dict[str, object]: + started_at = datetime.now(timezone.utc) + targets = select_backfill_targets(servers) + target_keys = [build_rcon_target_key(target) for target in targets] + before = count_recent_materialized_closed_matches() + result: dict[str, object] = { + "status": "ok", + "started_at": _iso(started_at), + "admin_log_api": "lookback-only", + "exact_historical_range_supported": False, + "servers_processed": target_keys, + "ensure_recent_matches": ensure_recent_matches, + "max_days_back": max_days_back, + "chunk_hours": chunk_hours, + "recent_materialized_closed_match_count_before": before, + "recent_materialized_closed_match_count_after": before, + "events_seen": 0, + "events_inserted": 0, + "duplicate_events": 0, + "matches_materialized": 0, + "matches_updated": 0, + "windows_scanned": [], + "errors": [], + "snapshot_regeneration_result": None, + } + _log("backfill-started", result=result) + + max_minutes = max_days_back * 24 * 60 + step_minutes = chunk_hours * 60 + minutes = step_minutes + + while minutes <= max_minutes: + current_count = count_recent_materialized_closed_matches() + result["recent_materialized_closed_match_count_after"] = current_count + if current_count >= ensure_recent_matches: + result["termination_reason"] = "recent-match-target-reached" + break + + for target_key in target_keys: + _log("target-lookback-started", target_key=target_key, lookback_minutes=minutes) + try: + ingestion = ingest_rcon_admin_logs(minutes=minutes, target_key=target_key) + totals = ingestion.get("totals") if isinstance(ingestion.get("totals"), dict) else {} + materialized = materialize_rcon_admin_log() + window_summary = { + "target_key": target_key, + "lookback_minutes": minutes, + "events_seen": int(totals.get("events_seen") or 0), + "events_inserted": int(totals.get("events_inserted") or 0), + "duplicate_events": int(totals.get("duplicate_events") or 0), + "matches_materialized": int(materialized.get("matches_materialized") or 0), + "matches_updated": int(materialized.get("matches_updated") or 0), + } + result["windows_scanned"].append(window_summary) + _add(result, window_summary) + result["recent_materialized_closed_match_count_after"] = count_recent_materialized_closed_matches() + _log( + "target-lookback-finished", + **window_summary, + recent_materialized_closed_match_count_after=result["recent_materialized_closed_match_count_after"], + ) + except Exception as exc: # noqa: BLE001 - operator command must continue reporting + error = { + "target_key": target_key, + "lookback_minutes": minutes, + "error_type": type(exc).__name__, + "message": str(exc), + } + result["errors"].append(error) + _log("target-lookback-failed", error=error) + + if sleep_seconds > 0: + time.sleep(sleep_seconds) + + minutes += step_minutes + + if result["recent_materialized_closed_match_count_after"] < ensure_recent_matches: + result["status"] = "partial" + result.setdefault("termination_reason", "exhausted_available_admin_log_or_max_days_back") + + if regenerate_snapshots: + _log("snapshot-regeneration-started") + try: + result["snapshot_regeneration_result"] = generate_historical_snapshots(server_slug=None, run_number=1) + _log("snapshot-regeneration-finished", snapshot_regeneration_result=result["snapshot_regeneration_result"]) + except Exception as exc: # noqa: BLE001 + result["status"] = "partial" + error = {"phase": "snapshot-regeneration", "error_type": type(exc).__name__, "message": str(exc)} + result["errors"].append(error) + _log("snapshot-regeneration-failed", error=error) + + result["finished_at"] = _iso(datetime.now(timezone.utc)) + _log("backfill-finished", result=result) + return result + + +def _add(result: dict[str, object], window_summary: dict[str, object]) -> None: + for key in ("events_seen", "events_inserted", "duplicate_events", "matches_materialized", "matches_updated"): + result[key] = int(result.get(key) or 0) + int(window_summary.get(key) or 0) + + +def _log(event: str, **payload: object) -> None: + print(json.dumps({"event": event, **payload}, ensure_ascii=False, default=str), flush=True) + + +def _iso(value: datetime) -> str: + return value.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _main(argv: Iterable[str] | None = None) -> int: + parser = argparse.ArgumentParser(description="Observable RCON AdminLog backfill operator command.") + parser.add_argument("--ensure-recent-matches", type=int, default=100) + parser.add_argument("--servers", default="comunidad-hispana-01,comunidad-hispana-02") + parser.add_argument("--chunk-hours", type=int, default=3) + parser.add_argument("--sleep-seconds", type=float, default=1.0) + parser.add_argument("--max-days-back", type=int, default=45) + parser.add_argument("--regenerate-snapshots", action="store_true") + args = parser.parse_args(list(argv) if argv is not None else None) + + if args.ensure_recent_matches <= 0: + raise ValueError("--ensure-recent-matches must be positive.") + if args.chunk_hours <= 0: + raise ValueError("--chunk-hours must be positive.") + if args.sleep_seconds < 0: + raise ValueError("--sleep-seconds must be zero or positive.") + if args.max_days_back <= 0: + raise ValueError("--max-days-back must be positive.") + + payload = run_operational_backfill( + ensure_recent_matches=args.ensure_recent_matches, + servers=args.servers, + chunk_hours=args.chunk_hours, + sleep_seconds=args.sleep_seconds, + max_days_back=args.max_days_back, + regenerate_snapshots=args.regenerate_snapshots, + ) + print(json.dumps(payload, ensure_ascii=False, indent=2, default=str), flush=True) + return 0 if payload.get("status") != "error" else 1 + + +if __name__ == "__main__": + raise SystemExit(_main()) diff --git a/backend/app/rcon_historical_leaderboards.py b/backend/app/rcon_historical_leaderboards.py new file mode 100644 index 0000000..4da272e --- /dev/null +++ b/backend/app/rcon_historical_leaderboards.py @@ -0,0 +1,600 @@ +"""Leaderboard read model over materialized RCON/AdminLog match stats.""" + +from __future__ import annotations + +from contextlib import closing +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Literal + +from .config import get_storage_path, use_postgres_rcon_storage +from .config import get_historical_weekly_fallback_min_matches +from .historical_storage import ALL_SERVERS_SLUG +from .rcon_admin_log_materialization import ( + MATCH_RESULT_SOURCE, + initialize_rcon_materialized_storage, +) +from .sqlite_utils import connect_sqlite_readonly + +LeaderboardTimeframe = Literal["weekly", "monthly"] +LeaderboardMetric = Literal["kills", "deaths", "matches_over_100_kills", "support"] + + +def build_rcon_materialized_leaderboard_snapshot_payload( + *, + server_id: str | None = None, + timeframe: str = "weekly", + metric: str = "kills", + limit: int = 10, +) -> dict[str, object]: + """Return an API payload for RCON-backed leaderboard snapshots. + + This is a runtime fast read over the materialized AdminLog tables. It intentionally + avoids the old public-scoreboard fallback because the UI is running in RCON mode. + """ + + normalized_timeframe = _normalize_timeframe(timeframe) + normalized_metric = _normalize_metric(metric) + result = list_rcon_materialized_leaderboard( + server_key=server_id, + timeframe=normalized_timeframe, + metric=normalized_metric, + limit=limit, + ) + items = list(result.get("items") or [])[:limit] + return { + "status": "ok", + "data": { + "title": _build_title( + metric=normalized_metric, + timeframe=normalized_timeframe, + server_id=server_id, + ), + "context": f"historical-{normalized_timeframe}-leaderboard-snapshot", + "source": "rcon-materialized-admin-log-leaderboard", + "server_slug": server_id, + "timeframe": normalized_timeframe, + "metric": normalized_metric, + "found": True, + "snapshot_status": "ready", + "missing_reason": None, + "request_path_policy": "runtime-rcon-materialized-fast-path", + "generation_policy": "runtime-materialized-read", + "generated_at": _to_iso(datetime.now(timezone.utc)), + "source_range_start": result.get("source_range_start"), + "source_range_end": result.get("source_range_end"), + "is_stale": False, + "freshness": "runtime", + "window_days": result.get("window_days"), + "window_start": result.get("window_start"), + "window_end": result.get("window_end"), + "window_kind": result.get("window_kind"), + "window_label": result.get("window_label"), + "uses_fallback": False, + "selection_reason": result.get("selection_reason"), + "current_week_start": result.get("current_week_start"), + "current_week_closed_matches": result.get("current_week_closed_matches"), + "previous_week_closed_matches": result.get("previous_week_closed_matches"), + "current_month_start": result.get("current_month_start"), + "selected_month_start": result.get("selected_month_start"), + "selected_month_end": result.get("selected_month_end"), + "current_month_closed_matches": result.get("current_month_closed_matches"), + "previous_month_closed_matches": result.get("previous_month_closed_matches"), + "sufficient_sample": result.get("sufficient_sample"), + "snapshot_limit": result.get("limit"), + "limit": limit, + "runtime_enrichment": { + "applied": False, + "reason": None, + }, + "primary_source": "rcon", + "selected_source": "rcon", + "fallback_used": False, + "fallback_reason": None, + "source_attempts": [ + { + "source": "rcon", + "role": "primary", + "status": "success", + "reason": "leaderboard-served-by-rcon-materialized-admin-log", + "message": None, + } + ], + "items": items, + }, + } + + +def list_rcon_materialized_leaderboard( + *, + server_key: str | None = None, + timeframe: str = "weekly", + metric: str = "kills", + limit: int = 10, + db_path: Path | None = None, + now: datetime | None = None, +) -> dict[str, object]: + """Return a leaderboard built from materialized RCON/AdminLog player stats. + + RCON/AdminLog materialization currently has reliable kill/death/teamkill counters, + but not public-scoreboard support points. For support, return an explicitly empty + supported payload rather than falling back to unrelated public scoreboard storage. + """ + + normalized_timeframe = _normalize_timeframe(timeframe) + normalized_metric = _normalize_metric(metric) + normalized_limit = max(1, int(limit or 10)) + anchor = _as_utc(now or datetime.now(timezone.utc)) + + resolved_path = initialize_rcon_materialized_storage(db_path=db_path) + connection_scope = _connect_scope(resolved_path, db_path=db_path) + with connection_scope as connection: + window = select_leaderboard_window( + connection=connection, + server_key=server_key, + timeframe=normalized_timeframe, + now=anchor, + ) + if normalized_metric == "support": + return _empty_payload( + server_key=server_key, + timeframe=normalized_timeframe, + metric=normalized_metric, + limit=normalized_limit, + window=window, + reason="rcon-materialized-stats-do-not-include-support-score", + ) + rows = _fetch_leaderboard_rows( + connection, + server_key=server_key, + metric=normalized_metric, + limit=normalized_limit, + window_start=window["start"], + window_end=window["end"], + ) + source_range = _fetch_source_range( + connection, + server_key=server_key, + window_start=window["start"], + window_end=window["end"], + ) + + items = [_build_item(row, index=index + 1) for index, row in enumerate(rows)] + return { + "source": "rcon-materialized-admin-log-leaderboard", + "server_key": server_key, + "metric": normalized_metric, + "limit": normalized_limit, + "window_days": window["days"], + "window_start": _to_iso(window["start"]), + "window_end": _to_iso(window["end"]), + "window_kind": window["kind"], + "window_label": window["label"], + "uses_fallback": False, + "selection_reason": window["selection_reason"], + "current_week_start": _to_iso(window["current_week_start"]), + "current_week_closed_matches": window["current_week_closed_matches"], + "previous_week_closed_matches": window["previous_week_closed_matches"], + "current_month_start": _to_iso(window["current_month_start"]), + "selected_month_start": _to_iso(window["selected_month_start"]), + "selected_month_end": _to_iso(window["selected_month_end"]), + "current_month_closed_matches": window["current_month_closed_matches"], + "previous_month_closed_matches": window["previous_month_closed_matches"], + "sufficient_sample": window["sufficient_sample"], + "source_range_start": _to_iso(source_range[0]) if source_range[0] else None, + "source_range_end": _to_iso(source_range[1]) if source_range[1] else None, + "items": items, + } + + +def _fetch_leaderboard_rows( + connection: object, + *, + server_key: str | None, + metric: str, + limit: int, + window_start: datetime, + window_end: datetime, +) -> list[dict[str, object]]: + scope_sql, scope_params = _build_scope_sql(server_key) + metric_sql = { + "kills": "SUM(COALESCE(stats.kills, 0))", + "deaths": "SUM(COALESCE(stats.deaths, 0))", + "matches_over_100_kills": "SUM(CASE WHEN COALESCE(stats.kills, 0) >= 100 THEN 1 ELSE 0 END)", + }[metric] + having_sql = f"HAVING {metric_sql} > 0" + params: list[object] = [ + _to_iso(window_start), + _to_iso(window_end), + *scope_params, + limit, + ] + rows = connection.execute( + f""" + SELECT + stats.player_id, + stats.player_name, + {metric_sql} AS metric_value, + COUNT(DISTINCT stats.match_key) AS matches_considered, + SUM(COALESCE(stats.kills, 0)) AS kills, + SUM(COALESCE(stats.deaths, 0)) AS deaths, + SUM(COALESCE(stats.teamkills, 0)) AS teamkills + FROM rcon_match_player_stats AS stats + INNER JOIN rcon_materialized_matches AS matches + ON matches.target_key = stats.target_key + AND matches.match_key = stats.match_key + WHERE matches.source_basis = ? + AND COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT)) >= ? + AND COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT)) <= ? + {scope_sql} + AND TRIM(COALESCE(stats.player_name, '')) != '' + GROUP BY stats.player_id, stats.player_name + {having_sql} + ORDER BY metric_value DESC, matches_considered DESC, stats.player_name ASC + LIMIT ? + """, + [MATCH_RESULT_SOURCE, *params], + ).fetchall() + return [dict(row) for row in rows] + + +def _fetch_match_counts( + connection: object, + *, + server_key: str | None, + timeframe: str, + window_start: datetime, + window_end: datetime, +) -> dict[str, int]: + current_week_start = _week_start(window_end) + previous_week_start = current_week_start - timedelta(days=7) + current_month_start = _month_start(window_end) + previous_month_start = _previous_month_start(current_month_start) + return { + "current_week_closed_matches": _count_matches( + connection, + server_key=server_key, + start=current_week_start, + end=window_end, + ), + "previous_week_closed_matches": _count_matches( + connection, + server_key=server_key, + start=previous_week_start, + end=current_week_start, + ), + "current_month_closed_matches": _count_matches( + connection, + server_key=server_key, + start=current_month_start, + end=window_end, + ), + "previous_month_closed_matches": _count_matches( + connection, + server_key=server_key, + start=previous_month_start, + end=current_month_start, + ), + } + + +def select_leaderboard_window( + *, + connection: object, + server_key: str | None, + timeframe: str, + now: datetime | None = None, +) -> dict[str, object]: + """Select the RCON leaderboard window using weekly/monthly fallback policy.""" + anchor = _as_utc(now or datetime.now(timezone.utc)) + current_week_start = _week_start(anchor) + previous_week_start = current_week_start - timedelta(days=7) + current_month_start = _month_start(anchor) + previous_month_start = _previous_month_start(current_month_start) + minimum_week_matches = get_historical_weekly_fallback_min_matches() + current_week_count = _count_matches( + connection, + server_key=server_key, + start=current_week_start, + end=anchor, + ) + previous_week_count = _count_matches( + connection, + server_key=server_key, + start=previous_week_start, + end=current_week_start, + ) + current_month_count = _count_matches( + connection, + server_key=server_key, + start=current_month_start, + end=anchor, + ) + previous_month_count = _count_matches( + connection, + server_key=server_key, + start=previous_month_start, + end=current_month_start, + ) + + if timeframe == "monthly": + use_previous_month = anchor.day <= 7 + start = previous_month_start if use_previous_month else current_month_start + end = current_month_start if use_previous_month else anchor + return { + "start": start, + "end": end, + "days": max(1, (end.date() - start.date()).days), + "kind": "previous-month" if use_previous_month else "current-month", + "label": "Mes anterior" if use_previous_month else "Mes actual", + "selection_reason": ( + "monthly-uses-previous-month-until-day-8" + if use_previous_month + else "monthly-uses-current-month-after-day-7" + ), + "current_week_start": current_week_start, + "current_week_closed_matches": current_week_count, + "previous_week_closed_matches": previous_week_count, + "current_month_start": current_month_start, + "selected_month_start": start, + "selected_month_end": end, + "current_month_closed_matches": current_month_count, + "previous_month_closed_matches": previous_month_count, + "sufficient_sample": { + "minimum_closed_matches": 1, + "current_month_closed_matches": current_month_count, + "previous_month_closed_matches": previous_month_count, + "current_month_has_sufficient_sample": current_month_count >= 1, + "uses_previous_month_until_day": 7, + }, + } + + current_week_has_sample = current_week_count >= minimum_week_matches + start = current_week_start if current_week_has_sample else previous_week_start + end = anchor if current_week_has_sample else current_week_start + return { + "start": start, + "end": end, + "days": max(1, (end.date() - start.date()).days), + "kind": "current-week" if current_week_has_sample else "previous-week", + "label": "Semana actual" if current_week_has_sample else "Semana anterior", + "selection_reason": ( + "weekly-current-week-has-sufficient-closed-matches" + if current_week_has_sample + else "weekly-fallback-previous-week-insufficient-current-week-data" + ), + "current_week_start": current_week_start, + "current_week_closed_matches": current_week_count, + "previous_week_closed_matches": previous_week_count, + "current_month_start": current_month_start, + "selected_month_start": current_month_start, + "selected_month_end": anchor, + "current_month_closed_matches": current_month_count, + "previous_month_closed_matches": previous_month_count, + "sufficient_sample": { + "minimum_closed_matches": minimum_week_matches, + "current_week_closed_matches": current_week_count, + "current_week_has_sufficient_sample": current_week_has_sample, + "previous_week_closed_matches": previous_week_count, + }, + } + + +def _fetch_source_range( + connection: object, + *, + server_key: str | None, + window_start: datetime, + window_end: datetime, +) -> tuple[datetime | None, datetime | None]: + scope_sql, scope_params = _build_scope_sql(server_key, table_alias="matches") + row = connection.execute( + f""" + SELECT + MIN(COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT))) AS source_range_start, + MAX(COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT))) AS source_range_end + FROM rcon_materialized_matches AS matches + WHERE matches.source_basis = ? + AND COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT)) >= ? + AND COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT)) <= ? + {scope_sql} + """, + [MATCH_RESULT_SOURCE, _to_iso(window_start), _to_iso(window_end), *scope_params], + ).fetchone() + if not row: + return None, None + return _parse_datetime(row["source_range_start"]), _parse_datetime(row["source_range_end"]) + + +def _count_matches( + connection: object, + *, + server_key: str | None, + start: datetime, + end: datetime, +) -> int: + scope_sql, scope_params = _build_scope_sql(server_key, table_alias="matches") + row = connection.execute( + f""" + SELECT COUNT(*) AS count + FROM rcon_materialized_matches AS matches + WHERE matches.source_basis = ? + AND COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT)) >= ? + AND COALESCE(CAST(matches.ended_at AS TEXT), CAST(matches.started_at AS TEXT)) < ? + {scope_sql} + """, + [MATCH_RESULT_SOURCE, _to_iso(start), _to_iso(end), *scope_params], + ).fetchone() + return int(row["count"] or 0) if row else 0 + + +def _build_item(row: dict[str, object], *, index: int) -> dict[str, object]: + kills = _coerce_int(row.get("kills")) + deaths = _coerce_int(row.get("deaths")) + return { + "ranking_position": index, + "player": { + "id": row.get("player_id"), + "name": row.get("player_name"), + }, + "player_id": row.get("player_id"), + "player_name": row.get("player_name"), + "metric_value": _coerce_int(row.get("metric_value")), + "matches_considered": _coerce_int(row.get("matches_considered")), + "kills": kills, + "deaths": deaths, + "teamkills": _coerce_int(row.get("teamkills")), + "kd_ratio": round(kills / deaths, 2) if deaths else float(kills), + } + + +def _build_scope_sql( + server_key: str | None, + *, + table_alias: str = "matches", +) -> tuple[str, list[object]]: + if not server_key or server_key == ALL_SERVERS_SLUG: + return "", [] + return f"AND ({table_alias}.target_key = ? OR {table_alias}.external_server_id = ?)", [ + server_key, + server_key, + ] + + +def _connect_scope(resolved_path: Path, *, db_path: Path | None): + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import connect_postgres_compat + + return connect_postgres_compat() + return closing(connect_sqlite_readonly(resolved_path)) + + +def _empty_payload( + *, + server_key: str | None, + timeframe: str, + metric: str, + limit: int, + window: dict[str, object], + reason: str, +) -> dict[str, object]: + return { + "source": "rcon-materialized-admin-log-leaderboard", + "server_key": server_key, + "metric": metric, + "limit": limit, + "window_days": window["days"], + "window_start": _to_iso(window["start"]), + "window_end": _to_iso(window["end"]), + "window_kind": window["kind"], + "window_label": window["label"], + "uses_fallback": False, + "selection_reason": reason, + "current_week_start": _to_iso(window["current_week_start"]), + "current_week_closed_matches": window["current_week_closed_matches"], + "previous_week_closed_matches": window["previous_week_closed_matches"], + "current_month_start": _to_iso(window["current_month_start"]), + "selected_month_start": _to_iso(window["selected_month_start"]), + "selected_month_end": _to_iso(window["selected_month_end"]), + "current_month_closed_matches": window["current_month_closed_matches"], + "previous_month_closed_matches": window["previous_month_closed_matches"], + "sufficient_sample": window["sufficient_sample"], + "source_range_start": None, + "source_range_end": None, + "items": [], + } + + +def _build_window(timeframe: str) -> dict[str, object]: + now = datetime.now(timezone.utc) + if timeframe == "monthly": + start = _month_start(now) + return { + "start": start, + "end": now, + "days": max(1, (now.date() - start.date()).days + 1), + "kind": "current-month", + "label": "Mes actual", + } + start = _week_start(now) + return { + "start": start, + "end": now, + "days": max(1, (now.date() - start.date()).days + 1), + "kind": "current-week", + "label": "Semana actual", + } + + +def _as_utc(value: datetime) -> datetime: + if value.tzinfo is None: + return value.replace(tzinfo=timezone.utc) + return value.astimezone(timezone.utc) + + +def _week_start(value: datetime) -> datetime: + point = value.astimezone(timezone.utc) + start = point - timedelta(days=point.weekday()) + return start.replace(hour=0, minute=0, second=0, microsecond=0) + + +def _month_start(value: datetime) -> datetime: + point = value.astimezone(timezone.utc) + return point.replace(day=1, hour=0, minute=0, second=0, microsecond=0) + + +def _previous_month_start(current_month_start: datetime) -> datetime: + previous_month_end = current_month_start - timedelta(days=1) + return _month_start(previous_month_end) + + +def _normalize_timeframe(value: str) -> LeaderboardTimeframe: + return "monthly" if str(value or "").strip().lower() == "monthly" else "weekly" + + +def _normalize_metric(value: str) -> LeaderboardMetric: + normalized = str(value or "kills").strip().lower() + if normalized in {"kills", "deaths", "matches_over_100_kills", "support"}: + return normalized # type: ignore[return-value] + return "kills" + + +def _build_title(*, metric: str, timeframe: str, server_id: str | None) -> str: + timeframe_label = "mensual" if timeframe == "monthly" else "semanal" + scope = "totales" if server_id == ALL_SERVERS_SLUG else "por servidor" + metric_label = { + "kills": "Top kills", + "deaths": "Top muertes", + "matches_over_100_kills": "Partidas 100+ kills", + "support": "Top soporte", + }.get(metric, "Top kills") + return f"Snapshot {metric_label} {timeframe_label} {scope}" + + +def _coerce_int(value: object) -> int: + try: + return int(value or 0) + except (TypeError, ValueError): + return 0 + + +def _parse_datetime(value: object) -> datetime | None: + if isinstance(value, datetime): + parsed = value + elif isinstance(value, str) and value.strip(): + try: + parsed = datetime.fromisoformat(value.strip().replace("Z", "+00:00")) + except ValueError: + return None + else: + return None + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _to_iso(value: object) -> str: + parsed = _parse_datetime(value) + if parsed is None: + parsed = datetime.now(timezone.utc) + return parsed.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") diff --git a/backend/app/rcon_historical_read_model.py b/backend/app/rcon_historical_read_model.py new file mode 100644 index 0000000..9434ba7 --- /dev/null +++ b/backend/app/rcon_historical_read_model.py @@ -0,0 +1,627 @@ +"""Read-only minimal HTTP model over prospective RCON historical persistence.""" + +from __future__ import annotations + +import json +from datetime import datetime, timedelta, timezone + +from .historical_storage import ALL_SERVERS_SLUG +from .normalizers import normalize_map_name +from .player_external_profiles import build_external_player_profile_fields +from .rcon_scoreboard_correlation import resolve_rcon_scoreboard_match_url +from .rcon_historical_storage import ( + find_rcon_historical_competitive_window, + get_rcon_historical_competitive_window_by_session, + list_rcon_historical_competitive_summary_rows, + list_rcon_historical_competitive_windows, +) + +MATCH_RESULT_SOURCE = "admin-log-match-ended" +SESSION_RESULT_SOURCE = "rcon-session" + + +def list_rcon_historical_server_summaries( + *, + server_key: str | None = None, +) -> list[dict[str, object]]: + """Return per-target coverage and freshness from RCON-backed competitive storage.""" + items = list_rcon_historical_competitive_summary_rows() + if server_key and server_key != ALL_SERVERS_SLUG: + normalized = server_key.strip() + items = [ + item + for item in items + if item["target_key"] == normalized or item["external_server_id"] == normalized + ] + + summaries = [_build_server_summary(item) for item in items] + if server_key == ALL_SERVERS_SLUG: + return [_build_all_servers_summary(summaries)] + return summaries + + +def list_rcon_historical_recent_activity( + *, + server_key: str | None = None, + limit: int = 20, +) -> list[dict[str, object]]: + """Return recent RCON-backed competitive windows for one or all targets.""" + from .rcon_admin_log_materialization import list_materialized_rcon_matches + + normalized_server_key = None if server_key == ALL_SERVERS_SLUG else server_key + materialized_items = list_materialized_rcon_matches( + target_key=normalized_server_key, + only_ended=True, + limit=limit, + ) + primary_items = [_build_materialized_recent_item(item) for item in materialized_items] + if primary_items: + return primary_items[:limit] + + session_items = list_rcon_historical_competitive_windows( + target_key=normalized_server_key, + limit=limit, + ) + fallback_items = [ + { + "server": { + "slug": item["target_key"], + "name": item["display_name"], + "external_server_id": item["external_server_id"], + "region": item["region"], + }, + "match_id": item["session_key"], + "internal_detail_match_id": item["session_key"], + "started_at": item["first_seen_at"], + "ended_at": item["last_seen_at"], + "closed_at": item["last_seen_at"], + "map": { + "name": item.get("map_name"), + "pretty_name": normalize_map_name(item.get("map_pretty_name") or item.get("map_name")), + }, + "result": _build_rcon_result(item.get("latest_payload")), + "gamestate": _build_rcon_gamestate(item.get("latest_payload")), + "player_count": int(round(float(item.get("average_players") or 0))), + "peak_players": item.get("peak_players"), + "sample_count": item.get("sample_count"), + "duration_seconds": item.get("duration_seconds"), + "capture_basis": "rcon-competitive-window", + "result_source": SESSION_RESULT_SOURCE, + "capabilities": item.get("capabilities"), + "minutes_since_capture": _minutes_since_timestamp(item.get("last_seen_at")), + } + for item in session_items + ] + return _merge_recent_items(primary_items, fallback_items, limit=limit) + + +def describe_rcon_historical_read_model() -> dict[str, object]: + """Describe what the minimal RCON historical read model currently supports.""" + return { + "source": "rcon-historical-competitive-read-model", + "supported_endpoints": [ + "/api/historical/server-summary", + "/api/historical/recent-matches", + ], + "unsupported_endpoints": [ + "/api/historical/weekly-top-kills", + "/api/historical/weekly-leaderboard", + "/api/historical/leaderboard", + "/api/historical/monthly-mvp", + "/api/historical/monthly-mvp-v2", + "/api/historical/elo-mmr/leaderboard", + "/api/historical/elo-mmr/player", + "/api/historical/player-events", + "/api/historical/player-profile", + "/api/historical/snapshots/*", + ], + "capabilities": { + "server_summary": "exact", + "recent_matches": "exact-when-admin-log-match-ended", + "competitive_quality": "partial", + "result": "admin-log-match-ended", + "gamestate": "session-fallback", + "player_stats": "admin-log-derived", + }, + "limitations": [ + "No retroactive backfill of closed matches.", + "No weekly or monthly competitive leaderboards.", + "No MVP or player-event parity with public-scoreboard.", + "No player-level scoreboard parity from RCON samples alone.", + ], + } + + +def get_rcon_historical_competitive_match_context( + *, + server_key: str, + ended_at: str | None, + map_name: str | None = None, +) -> dict[str, object] | None: + """Return the closest RCON-backed competitive context for one historical match.""" + return find_rcon_historical_competitive_window( + server_key=server_key, + ended_at=ended_at, + map_name=map_name, + ) + + +def get_rcon_historical_match_detail( + *, + server_key: str, + match_id: str, +) -> dict[str, object] | None: + """Return one RCON competitive window as a match-detail compatible payload.""" + from .rcon_admin_log_materialization import get_materialized_rcon_match_detail + + materialized = get_materialized_rcon_match_detail(server_key=server_key, match_key=match_id) + if materialized is not None: + return _build_materialized_detail_item(materialized) + + item = get_rcon_historical_competitive_window_by_session( + server_key=server_key, + session_key=match_id, + ) + if item is None: + return None + player_count = int(round(float(item.get("average_players") or 0))) + server_slug = item["external_server_id"] or item["target_key"] + return { + "server": { + "slug": item["target_key"], + "name": item["display_name"], + "external_server_id": item["external_server_id"], + "region": item["region"], + }, + "match_id": item["session_key"], + "started_at": item["first_seen_at"], + "ended_at": item["last_seen_at"], + "closed_at": item["last_seen_at"], + "duration_seconds": item.get("duration_seconds"), + "map": { + "name": item.get("map_name"), + "pretty_name": normalize_map_name(item.get("map_pretty_name") or item.get("map_name")), + }, + "result": _build_rcon_result(item.get("latest_payload")), + "gamestate": _build_rcon_gamestate(item.get("latest_payload")), + "player_count": int(round(float(item.get("average_players") or 0))), + "peak_players": item.get("peak_players"), + "sample_count": item.get("sample_count"), + "players": [], + "capture_basis": "rcon-competitive-window", + "confidence": item.get("confidence_mode"), + "source_basis": "rcon-session", + "result_source": SESSION_RESULT_SOURCE, + "capabilities": item.get("capabilities"), + "match_url": resolve_rcon_scoreboard_match_url( + server_slug=server_slug, + map_name=item.get("map_pretty_name") or item.get("map_name"), + started_at=item["first_seen_at"], + ended_at=item["last_seen_at"], + duration_seconds=item.get("duration_seconds"), + player_count=player_count, + peak_players=item.get("peak_players"), + ), + } + + +def _build_materialized_recent_item(item: dict[str, object]) -> dict[str, object]: + timestamps = _build_materialized_timestamp_payload(item) + player_count = _resolve_materialized_player_count(item) + scoreboard_correlation = build_materialized_scoreboard_correlation_input(item) + return { + "server": { + "slug": item.get("target_key"), + "name": _server_display_name(item.get("external_server_id") or item.get("target_key")), + "external_server_id": item.get("external_server_id"), + "region": None, + }, + "match_id": item.get("match_key"), + "internal_detail_match_id": item.get("match_key"), + "started_at": timestamps["started_at"], + "ended_at": timestamps["ended_at"], + "closed_at": timestamps["closed_at"], + "timestamp_confidence": timestamps["timestamp_confidence"], + "map": { + "name": item.get("map_name"), + "pretty_name": item.get("map_pretty_name") or normalize_map_name(item.get("map_name")), + }, + "game_mode": item.get("game_mode"), + "result": { + "allied_score": item.get("allied_score"), + "axis_score": item.get("axis_score"), + "winner": item.get("winner"), + }, + "winner": item.get("winner"), + "player_count": player_count, + "peak_players": None, + "sample_count": None, + "duration_seconds": _calculate_match_duration_seconds(item), + "capture_basis": "rcon-materialized-admin-log", + "confidence": item.get("confidence_mode"), + "source_basis": item.get("source_basis"), + "result_source": ( + MATCH_RESULT_SOURCE + if item.get("source_basis") == MATCH_RESULT_SOURCE + else SESSION_RESULT_SOURCE + ), + "match_url": resolve_rcon_scoreboard_match_url( + **scoreboard_correlation, + ), + "capabilities": describe_rcon_historical_read_model()["capabilities"], + } + + +def _build_materialized_detail_item(materialized: dict[str, object]) -> dict[str, object]: + from .rcon_admin_log_storage import get_latest_rcon_player_profile_summaries + + match = materialized["match"] + recent_item = _build_materialized_recent_item(match) + profile_summaries = get_latest_rcon_player_profile_summaries( + target_key=str(match["target_key"]), + player_ids=[str(row["player_id"]) for row in materialized["players"] if row.get("player_id")], + ) + players = [ + _build_player_row( + row, + profile_summary=profile_summaries.get(str(row.get("player_id"))), + ) + for row in materialized["players"] + ] + player_count = len(players) if players else recent_item.get("player_count") + return { + **recent_item, + "match_id": match["match_key"], + "game_mode": match.get("game_mode"), + "winner": match.get("winner"), + "confidence": match.get("confidence_mode"), + "source_basis": match.get("source_basis"), + "player_count": player_count, + "players": players, + "timeline": { + "event_counts": materialized.get("timeline", []), + }, + } + + +def _resolve_materialized_player_count(item: dict[str, object]) -> int | None: + for key in ( + "player_count", + "materialized_player_count", + "materialized_distinct_player_count", + ): + value = _coerce_optional_int(item.get(key)) + if value is not None and value > 0: + return value + return None + + +def _build_player_row( + row: dict[str, object], + *, + profile_summary: dict[str, object] | None = None, +) -> dict[str, object]: + kills = _coerce_optional_int(row.get("kills")) or 0 + deaths = _coerce_optional_int(row.get("deaths")) or 0 + player = { + "player_name": row.get("player_name"), + "team": row.get("team"), + "kills": kills, + "deaths": deaths, + "teamkills": _coerce_optional_int(row.get("teamkills")) or 0, + "kd_ratio": round(kills / deaths, 2) if deaths else float(kills), + "top_weapons": _top_counter(row.get("weapons_json")), + "most_killed": _top_counter(row.get("most_killed_json")), + "death_by": _top_counter(row.get("death_by_json")), + **build_external_player_profile_fields(player_id=row.get("player_id")), + } + if profile_summary: + player["profile_summary"] = profile_summary + return player + + +def _top_counter(raw_value: object, *, limit: int = 5) -> list[dict[str, object]]: + if not isinstance(raw_value, str) or not raw_value.strip(): + return [] + try: + payload = json.loads(raw_value) + except (NameError, ValueError, TypeError): + return [] + if not isinstance(payload, dict): + return [] + rows = [ + {"name": str(name), "count": int(count)} + for name, count in payload.items() + if _coerce_optional_int(count) is not None + ] + rows.sort(key=lambda item: (-int(item["count"]), str(item["name"]))) + return rows[:limit] + + +def _build_materialized_timestamp_payload(item: dict[str, object]) -> dict[str, object]: + started_at = item.get("started_at") + ended_at = item.get("ended_at") + duration_seconds = _calculate_match_duration_seconds(item) + has_server_time_duration = bool(duration_seconds and duration_seconds > 0) + if started_at and ended_at and started_at == ended_at and has_server_time_duration: + return { + "started_at": None, + "ended_at": None, + "closed_at": ended_at, + "timestamp_confidence": "server-time-only", + } + return { + "started_at": started_at, + "ended_at": ended_at, + "closed_at": ended_at or started_at, + "timestamp_confidence": "absolute" if started_at or ended_at else "server-time-only", + } + + +def _build_materialized_scoreboard_correlation_window( + item: dict[str, object], + timestamps: dict[str, object], +) -> dict[str, object]: + started_at = timestamps.get("started_at") + ended_at = timestamps.get("ended_at") + if started_at and ended_at: + return {"started_at": started_at, "ended_at": ended_at} + + closed_at = timestamps.get("closed_at") or item.get("ended_at") or item.get("started_at") + duration_seconds = _calculate_match_duration_seconds(item) + closed_point = _parse_datetime(closed_at) + if closed_point is None or not duration_seconds: + return {"started_at": started_at, "ended_at": ended_at} + + started_point = closed_point - timedelta(seconds=int(duration_seconds)) + return { + "started_at": started_point.isoformat().replace("+00:00", "Z"), + "ended_at": closed_point.isoformat().replace("+00:00", "Z"), + } + + +def build_materialized_scoreboard_correlation_input( + item: dict[str, object], +) -> dict[str, object]: + """Build safe candidate correlation inputs for one materialized RCON match.""" + timestamps = _build_materialized_timestamp_payload(item) + correlation_window = _build_materialized_scoreboard_correlation_window(item, timestamps) + return { + "server_slug": item.get("external_server_id") or item.get("target_key"), + "map_name": item.get("map_pretty_name") or item.get("map_name"), + "started_at": correlation_window["started_at"], + "ended_at": correlation_window["ended_at"], + "duration_seconds": _calculate_match_duration_seconds(item), + "allied_score": item.get("allied_score"), + "axis_score": item.get("axis_score"), + } + + +def _merge_recent_items( + primary_items: list[dict[str, object]], + fallback_items: list[dict[str, object]], + *, + limit: int, +) -> list[dict[str, object]]: + merged: list[dict[str, object]] = [] + seen: set[tuple[object, object]] = set() + for item in primary_items + fallback_items: + map_payload = item.get("map") if isinstance(item.get("map"), dict) else {} + key = ( + item.get("server", {}).get("slug") if isinstance(item.get("server"), dict) else None, + normalize_map_name(map_payload.get("pretty_name") or map_payload.get("name")), + ) + if key in seen: + continue + seen.add(key) + merged.append(item) + merged.sort(key=lambda row: str(row.get("closed_at") or row.get("ended_at") or row.get("started_at") or ""), reverse=True) + return merged[:limit] + + +def _server_display_name(server_slug: object) -> str: + slug = str(server_slug or "").strip() + if slug == "comunidad-hispana-01": + return "Comunidad Hispana #01" + if slug == "comunidad-hispana-02": + return "Comunidad Hispana #02" + return slug or "RCON" + + +def _build_rcon_result(latest_payload: object) -> dict[str, object]: + payload = latest_payload if isinstance(latest_payload, dict) else {} + allied_score = _coerce_optional_int(payload.get("allied_score")) + axis_score = _coerce_optional_int(payload.get("axis_score")) + winner = payload.get("winner") + if not isinstance(winner, str) or not winner: + winner = _resolve_result_winner(allied_score, axis_score) + return { + "allied_score": allied_score, + "axis_score": axis_score, + "winner": winner, + } + + +def _build_rcon_gamestate(latest_payload: object) -> dict[str, object]: + payload = latest_payload if isinstance(latest_payload, dict) else {} + return { + "game_mode": payload.get("game_mode"), + "allied_faction": payload.get("allied_faction"), + "axis_faction": payload.get("axis_faction"), + "allied_players": _coerce_optional_int(payload.get("allied_players")), + "axis_players": _coerce_optional_int(payload.get("axis_players")), + "remaining_match_time_seconds": _coerce_optional_int( + payload.get("remaining_match_time_seconds") + ), + "match_time_seconds": _coerce_optional_int(payload.get("match_time_seconds")), + "queue_count": _coerce_optional_int(payload.get("queue_count")), + "max_queue_count": _coerce_optional_int(payload.get("max_queue_count")), + "vip_queue_count": _coerce_optional_int(payload.get("vip_queue_count")), + "max_vip_queue_count": _coerce_optional_int(payload.get("max_vip_queue_count")), + } + + +def _resolve_result_winner(allied_score: int | None, axis_score: int | None) -> str | None: + if allied_score is None or axis_score is None: + return None + if allied_score > axis_score: + return "allied" + if axis_score > allied_score: + return "axis" + return "draw" + + +def _coerce_optional_int(value: object) -> int | None: + if value is None: + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _build_server_summary(item: dict[str, object]) -> dict[str, object]: + sample_count = int(item.get("sample_count") or 0) + first_last_points = list_rcon_historical_recent_activity( + server_key=str(item["target_key"]), + limit=1, + ) + last_sample_at = item.get("last_seen_at") + latest_activity = first_last_points[0] if first_last_points else None + + return { + "server": { + "slug": item["target_key"], + "name": item["display_name"], + "external_server_id": item["external_server_id"], + "region": item["region"], + }, + "coverage": { + "basis": "rcon-competitive-windows", + "status": "available" if int(item.get("window_count") or 0) > 0 else "empty", + "window_count": int(item.get("window_count") or 0), + "sample_count": sample_count, + "first_sample_at": item.get("first_seen_at"), + "last_sample_at": last_sample_at, + "coverage_hours": _calculate_coverage_hours(item.get("first_seen_at"), last_sample_at), + }, + "freshness": { + "last_successful_capture_at": item.get("last_successful_capture_at"), + "minutes_since_last_capture": _minutes_since_timestamp(last_sample_at), + "last_run_status": item.get("last_run_status"), + "last_error": item.get("last_error"), + "last_error_at": item.get("last_error_at"), + }, + "activity": { + "latest_players": latest_activity.get("player_count") if latest_activity else None, + "latest_peak_players": latest_activity.get("peak_players") if latest_activity else None, + "latest_map": latest_activity.get("map", {}).get("pretty_name") if latest_activity else None, + "latest_status": "captured" if latest_activity else None, + }, + "time_range": { + "start": item.get("first_seen_at"), + "end": last_sample_at, + }, + "capabilities": describe_rcon_historical_read_model()["capabilities"], + } + + +def _build_all_servers_summary(items: list[dict[str, object]]) -> dict[str, object]: + total_samples = sum(int(item["coverage"].get("sample_count") or 0) for item in items) + last_points = [ + item["time_range"].get("end") + for item in items + if item["time_range"].get("end") + ] + last_capture_at = max(last_points) if last_points else None + return { + "server": { + "slug": ALL_SERVERS_SLUG, + "name": "Todos", + "external_server_id": None, + "region": None, + }, + "coverage": { + "basis": "rcon-competitive-windows-aggregate", + "status": "available" if total_samples > 0 else "empty", + "sample_count": total_samples, + "first_sample_at": None, + "last_sample_at": last_capture_at, + "coverage_hours": None, + }, + "freshness": { + "last_successful_capture_at": last_capture_at, + "minutes_since_last_capture": _minutes_since_timestamp(last_capture_at), + "last_run_status": None, + "last_error": None, + "last_error_at": None, + }, + "activity": { + "latest_players": None, + "latest_max_players": None, + "latest_map": None, + "latest_status": None, + }, + "time_range": { + "start": None, + "end": last_capture_at, + }, + "server_count": len(items), + "capabilities": describe_rcon_historical_read_model()["capabilities"], + } + + +def _minutes_since_timestamp(timestamp: str | None) -> int | None: + if not timestamp: + return None + captured_at = _parse_datetime(timestamp) + if captured_at is None: + return None + delta = datetime.now(timezone.utc) - captured_at.astimezone(timezone.utc) + return max(0, int(delta.total_seconds() // 60)) + + +def _parse_datetime(value: object) -> datetime | None: + if isinstance(value, datetime): + parsed = value + elif isinstance(value, str) and value.strip(): + try: + parsed = datetime.fromisoformat(value.strip().replace("Z", "+00:00")) + except ValueError: + return None + else: + return None + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _calculate_coverage_hours( + first_sample_at: object, + last_sample_at: object, +) -> float | None: + first_point = _parse_datetime(first_sample_at) + last_point = _parse_datetime(last_sample_at) + if first_point is None or last_point is None: + return None + delta = last_point - first_point + return round(delta.total_seconds() / 3600, 2) + + +def _calculate_duration_seconds(first_seen_at: object, last_seen_at: object) -> int | None: + first_point = _parse_datetime(first_seen_at) + last_point = _parse_datetime(last_seen_at) + if first_point is None or last_point is None: + return None + return max(0, int((last_point - first_point).total_seconds())) + + +def _calculate_match_duration_seconds(item: dict[str, object]) -> int | None: + duration = _calculate_duration_seconds(item.get("started_at"), item.get("ended_at")) + if duration: + return duration + started_server_time = _coerce_optional_int(item.get("started_server_time")) + ended_server_time = _coerce_optional_int(item.get("ended_server_time")) + if started_server_time is None or ended_server_time is None: + return duration + return max(0, ended_server_time - started_server_time) diff --git a/backend/app/rcon_historical_storage.py b/backend/app/rcon_historical_storage.py new file mode 100644 index 0000000..30d75b4 --- /dev/null +++ b/backend/app/rcon_historical_storage.py @@ -0,0 +1,1109 @@ +"""Separate storage and run tracking for prospective RCON historical capture.""" + +from __future__ import annotations + +import json +import sqlite3 +from collections.abc import Mapping +from datetime import datetime, timezone +from pathlib import Path + +from .config import get_storage_path, use_postgres_rcon_storage +from .normalizers import normalize_map_name +from .rcon_client import load_rcon_targets +from .sqlite_utils import connect_sqlite_readonly, connect_sqlite_writer + + +COMPETITIVE_WINDOW_GAP_SECONDS = 1800 +COMPETITIVE_MODE_PARTIAL = "partial" +COMPETITIVE_MODE_APPROXIMATE = "approximate" +COMPETITIVE_MODE_EXACT = "exact" + + +def initialize_rcon_historical_storage(*, db_path: Path | None = None) -> Path: + """Create the SQLite structures used by prospective RCON capture.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import initialize_postgres_rcon_storage + + initialize_postgres_rcon_storage() + return get_storage_path() + + resolved_path = db_path or get_storage_path() + resolved_path.parent.mkdir(parents=True, exist_ok=True) + + with _connect(resolved_path) as connection: + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS rcon_historical_targets ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_key TEXT NOT NULL UNIQUE, + external_server_id TEXT, + display_name TEXT NOT NULL, + host TEXT NOT NULL, + port INTEGER NOT NULL, + region TEXT, + game_port INTEGER, + query_port INTEGER, + source_name TEXT NOT NULL, + last_configured_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS rcon_historical_capture_runs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + mode TEXT NOT NULL, + status TEXT NOT NULL, + target_scope TEXT, + started_at TEXT NOT NULL, + completed_at TEXT, + targets_seen INTEGER NOT NULL DEFAULT 0, + samples_inserted INTEGER NOT NULL DEFAULT 0, + duplicate_samples INTEGER NOT NULL DEFAULT 0, + failed_targets INTEGER NOT NULL DEFAULT 0, + notes TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS rcon_historical_samples ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_id INTEGER NOT NULL, + capture_run_id INTEGER, + captured_at TEXT NOT NULL, + source_kind TEXT NOT NULL, + status TEXT NOT NULL, + players INTEGER, + max_players INTEGER, + current_map TEXT, + normalized_payload_json TEXT NOT NULL, + raw_payload_json TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(target_id, captured_at), + FOREIGN KEY (target_id) REFERENCES rcon_historical_targets(id), + FOREIGN KEY (capture_run_id) REFERENCES rcon_historical_capture_runs(id) + ); + + CREATE TABLE IF NOT EXISTS rcon_historical_checkpoints ( + target_id INTEGER PRIMARY KEY, + last_successful_capture_at TEXT, + last_sample_at TEXT, + last_run_id INTEGER, + last_run_status TEXT, + last_error TEXT, + last_error_at TEXT, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (target_id) REFERENCES rcon_historical_targets(id), + FOREIGN KEY (last_run_id) REFERENCES rcon_historical_capture_runs(id) + ); + + CREATE INDEX IF NOT EXISTS idx_rcon_historical_samples_target_time + ON rcon_historical_samples(target_id, captured_at DESC); + + CREATE TABLE IF NOT EXISTS rcon_historical_competitive_windows ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_id INTEGER NOT NULL, + session_key TEXT NOT NULL UNIQUE, + source_kind TEXT NOT NULL, + map_name TEXT, + map_pretty_name TEXT, + first_seen_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + sample_count INTEGER NOT NULL DEFAULT 0, + total_players INTEGER NOT NULL DEFAULT 0, + peak_players INTEGER NOT NULL DEFAULT 0, + last_players INTEGER, + max_players INTEGER, + status TEXT NOT NULL, + confidence_mode TEXT NOT NULL, + capabilities_json TEXT NOT NULL, + latest_payload_json TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (target_id) REFERENCES rcon_historical_targets(id) + ); + + CREATE INDEX IF NOT EXISTS idx_rcon_historical_windows_target_time + ON rcon_historical_competitive_windows(target_id, last_seen_at DESC); + """ + ) + + return resolved_path + + +def start_rcon_historical_capture_run( + *, + mode: str, + target_scope: str, + db_path: Path | None = None, +) -> int: + """Create one run row for prospective RCON capture.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import start_capture_run + + return start_capture_run(mode=mode, target_scope=target_scope) + + resolved_path = initialize_rcon_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + cursor = connection.execute( + """ + INSERT INTO rcon_historical_capture_runs ( + mode, + status, + target_scope, + started_at + ) VALUES (?, 'running', ?, ?) + """, + (mode, target_scope, _utc_now_iso()), + ) + return int(cursor.lastrowid) + + +def finalize_rcon_historical_capture_run( + run_id: int, + *, + status: str, + targets_seen: int, + samples_inserted: int, + duplicate_samples: int, + failed_targets: int, + notes: str | None = None, + db_path: Path | None = None, +) -> None: + """Finalize one prospective RCON capture run.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import finalize_capture_run + + finalize_capture_run( + run_id, + status=status, + targets_seen=targets_seen, + samples_inserted=samples_inserted, + duplicate_samples=duplicate_samples, + failed_targets=failed_targets, + notes=notes, + ) + return + + resolved_path = initialize_rcon_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + connection.execute( + """ + UPDATE rcon_historical_capture_runs + SET status = ?, + completed_at = ?, + targets_seen = ?, + samples_inserted = ?, + duplicate_samples = ?, + failed_targets = ?, + notes = ? + WHERE id = ? + """, + ( + status, + _utc_now_iso(), + targets_seen, + samples_inserted, + duplicate_samples, + failed_targets, + notes, + run_id, + ), + ) + + +def persist_rcon_historical_sample( + *, + run_id: int, + captured_at: str, + target: Mapping[str, object], + normalized_payload: Mapping[str, object], + raw_payload: Mapping[str, object] | None, + db_path: Path | None = None, +) -> dict[str, int]: + """Persist one prospective RCON sample and refresh its checkpoint.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import persist_sample + + return persist_sample( + run_id=run_id, + captured_at=captured_at, + target=target, + normalized_payload=normalized_payload, + raw_payload=raw_payload, + ) + + resolved_path = initialize_rcon_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + target_id = _upsert_target(connection, target=target) + cursor = connection.execute( + """ + INSERT OR IGNORE INTO rcon_historical_samples ( + target_id, + capture_run_id, + captured_at, + source_kind, + status, + players, + max_players, + current_map, + normalized_payload_json, + raw_payload_json + ) VALUES (?, ?, ?, 'rcon-live-sample', ?, ?, ?, ?, ?, ?) + """, + ( + target_id, + run_id, + captured_at, + normalized_payload.get("status") or "unknown", + normalized_payload.get("players"), + normalized_payload.get("max_players"), + normalized_payload.get("current_map"), + json.dumps(dict(normalized_payload), separators=(",", ":")), + json.dumps(dict(raw_payload), separators=(",", ":")) if raw_payload else None, + ), + ) + inserted = int(cursor.rowcount or 0) + _upsert_checkpoint_success( + connection, + target_id=target_id, + run_id=run_id, + captured_at=captured_at, + ) + if inserted: + _upsert_competitive_window( + connection, + target_id=target_id, + captured_at=captured_at, + normalized_payload=normalized_payload, + ) + return { + "samples_inserted": inserted, + "duplicate_samples": 0 if inserted else 1, + } + + +def mark_rcon_historical_capture_failure( + *, + run_id: int, + target: Mapping[str, object], + error_message: str, + db_path: Path | None = None, +) -> None: + """Persist failure metadata for one target inside a capture run.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import mark_capture_failure + + mark_capture_failure(run_id=run_id, target=target, error_message=error_message) + return + + resolved_path = initialize_rcon_historical_storage(db_path=db_path) + with _connect(resolved_path) as connection: + target_id = _upsert_target(connection, target=target) + connection.execute( + """ + INSERT INTO rcon_historical_checkpoints ( + target_id, + last_run_id, + last_run_status, + last_error, + last_error_at + ) VALUES (?, ?, 'failed', ?, ?) + ON CONFLICT(target_id) DO UPDATE SET + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_error = excluded.last_error, + last_error_at = excluded.last_error_at, + updated_at = CURRENT_TIMESTAMP + """, + (target_id, run_id, error_message, _utc_now_iso()), + ) + + +def list_rcon_historical_target_statuses( + *, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return per-target coverage and freshness for prospective RCON capture.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import list_target_statuses + + return list_target_statuses() + + resolved_path = _resolve_db_path(db_path) + try: + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + """ + SELECT + targets.target_key, + targets.external_server_id, + targets.display_name, + targets.host, + targets.port, + targets.region, + targets.source_name, + checkpoints.last_successful_capture_at, + checkpoints.last_sample_at, + checkpoints.last_run_id, + checkpoints.last_run_status, + checkpoints.last_error, + checkpoints.last_error_at, + ( + SELECT MIN(samples.captured_at) + FROM rcon_historical_samples AS samples + WHERE samples.target_id = targets.id + ) AS first_sample_at, + ( + SELECT MAX(samples.captured_at) + FROM rcon_historical_samples AS samples + WHERE samples.target_id = targets.id + ) AS latest_sample_at, + ( + SELECT COUNT(*) + FROM rcon_historical_samples AS samples + WHERE samples.target_id = targets.id + ) AS sample_count + FROM rcon_historical_targets AS targets + LEFT JOIN rcon_historical_checkpoints AS checkpoints + ON checkpoints.target_id = targets.id + ORDER BY targets.display_name ASC, targets.target_key ASC + """ + ).fetchall() + except sqlite3.OperationalError: + return [] + return [ + { + "target_key": row["target_key"], + "external_server_id": row["external_server_id"], + "display_name": row["display_name"], + "host": row["host"], + "port": row["port"], + "region": row["region"], + "source_name": row["source_name"], + "sample_count": int(row["sample_count"] or 0), + "first_sample_at": row["first_sample_at"], + "last_successful_capture_at": row["last_successful_capture_at"], + "last_sample_at": row["latest_sample_at"] or row["last_sample_at"], + "last_run_id": row["last_run_id"], + "last_run_status": row["last_run_status"], + "last_error": row["last_error"], + "last_error_at": row["last_error_at"], + } + for row in rows + ] + + +def list_recent_rcon_historical_samples( + *, + target_key: str | None = None, + limit: int = 20, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return recent prospective RCON samples for one or all configured targets.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import list_recent_samples + + return list_recent_samples(target_key=target_key, limit=limit) + + resolved_path = _resolve_db_path(db_path) + where_clause = "" + params: list[object] = [limit] + if target_key: + aliases = _expand_target_key_aliases(target_key) + alias_placeholders = ", ".join("?" for _ in aliases) + where_clause = ( + "WHERE targets.target_key IN " + f"({alias_placeholders}) OR targets.external_server_id IN ({alias_placeholders})" + ) + params = [*aliases, *aliases, limit] + + try: + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + targets.target_key, + targets.external_server_id, + targets.display_name, + targets.region, + samples.captured_at, + samples.status, + samples.players, + samples.max_players, + samples.current_map + FROM rcon_historical_samples AS samples + INNER JOIN rcon_historical_targets AS targets + ON targets.id = samples.target_id + {where_clause} + ORDER BY samples.captured_at DESC, targets.display_name ASC + LIMIT ? + """, + params, + ).fetchall() + except sqlite3.OperationalError: + return [] + return [ + { + "target_key": row["target_key"], + "external_server_id": row["external_server_id"], + "display_name": row["display_name"], + "region": row["region"], + "captured_at": row["captured_at"], + "status": row["status"], + "players": row["players"], + "max_players": row["max_players"], + "current_map": row["current_map"], + } + for row in rows + ] + + +def list_rcon_historical_competitive_windows( + *, + target_key: str | None = None, + limit: int = 20, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return recent RCON-backed competitive windows derived from persisted samples.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import list_competitive_windows + + return list_competitive_windows(target_key=target_key, limit=limit) + + resolved_path = _resolve_db_path(db_path) + where_clause = "" + params: list[object] = [limit] + if target_key: + aliases = _expand_target_key_aliases(target_key) + alias_placeholders = ", ".join("?" for _ in aliases) + where_clause = ( + "WHERE targets.target_key IN " + f"({alias_placeholders}) OR targets.external_server_id IN ({alias_placeholders})" + ) + params = [*aliases, *aliases, limit] + + try: + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + targets.target_key, + targets.external_server_id, + targets.display_name, + targets.region, + windows.session_key, + windows.map_name, + windows.map_pretty_name, + windows.first_seen_at, + windows.last_seen_at, + windows.sample_count, + windows.total_players, + windows.peak_players, + windows.last_players, + windows.max_players, + windows.status, + windows.confidence_mode, + windows.capabilities_json, + windows.latest_payload_json + FROM rcon_historical_competitive_windows AS windows + INNER JOIN rcon_historical_targets AS targets + ON targets.id = windows.target_id + {where_clause} + ORDER BY windows.last_seen_at DESC, targets.display_name ASC + LIMIT ? + """, + params, + ).fetchall() + except sqlite3.OperationalError: + return [] + items: list[dict[str, object]] = [] + for row in rows: + sample_count = int(row["sample_count"] or 0) + average_players = round((int(row["total_players"] or 0) / sample_count), 2) if sample_count > 0 else 0.0 + items.append( + { + "target_key": row["target_key"], + "external_server_id": row["external_server_id"], + "display_name": row["display_name"], + "region": row["region"], + "session_key": row["session_key"], + "map_name": row["map_name"], + "map_pretty_name": row["map_pretty_name"] or row["map_name"], + "first_seen_at": row["first_seen_at"], + "last_seen_at": row["last_seen_at"], + "duration_seconds": _calculate_duration_seconds( + row["first_seen_at"], + row["last_seen_at"], + ), + "sample_count": sample_count, + "average_players": average_players, + "peak_players": int(row["peak_players"] or 0), + "last_players": row["last_players"], + "max_players": row["max_players"], + "status": row["status"], + "confidence_mode": row["confidence_mode"], + "capabilities": _deserialize_json_object(row["capabilities_json"]), + "latest_payload": _deserialize_json_object(row["latest_payload_json"]), + } + ) + return items + + +def count_rcon_historical_samples_since( + since: str | None, + *, + db_path: Path | None = None, +) -> int: + """Return how many RCON samples were captured after one timestamp.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import count_samples_since + + return count_samples_since(since) + + if not since: + return 0 + resolved_path = _resolve_db_path(db_path) + try: + with _connect_readonly(resolved_path) as connection: + row = connection.execute( + """ + SELECT COUNT(*) AS sample_count + FROM rcon_historical_samples + WHERE captured_at > ? + """, + (since,), + ).fetchone() + except sqlite3.OperationalError: + return 0 + return int(row["sample_count"] or 0) if row else 0 + + +def list_rcon_historical_competitive_summary_rows( + *, + target_key: str | None = None, + db_path: Path | None = None, +) -> list[dict[str, object]]: + """Return RCON-backed per-target summary rows over competitive windows.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import list_competitive_summary_rows + + return list_competitive_summary_rows(target_key=target_key) + + resolved_path = _resolve_db_path(db_path) + where_clause = "" + params: list[object] = [] + if target_key: + aliases = _expand_target_key_aliases(target_key) + alias_placeholders = ", ".join("?" for _ in aliases) + where_clause = ( + "WHERE targets.target_key IN " + f"({alias_placeholders}) OR targets.external_server_id IN ({alias_placeholders})" + ) + params = [*aliases, *aliases] + + try: + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + targets.target_key, + targets.external_server_id, + targets.display_name, + targets.region, + checkpoints.last_successful_capture_at, + checkpoints.last_run_status, + checkpoints.last_error, + checkpoints.last_error_at, + COUNT(windows.id) AS window_count, + COALESCE(SUM(windows.sample_count), 0) AS sample_count, + MIN(windows.first_seen_at) AS first_seen_at, + MAX(windows.last_seen_at) AS last_seen_at, + COALESCE(MAX(windows.peak_players), 0) AS peak_players + FROM rcon_historical_targets AS targets + LEFT JOIN rcon_historical_checkpoints AS checkpoints + ON checkpoints.target_id = targets.id + LEFT JOIN rcon_historical_competitive_windows AS windows + ON windows.target_id = targets.id + {where_clause} + GROUP BY targets.id + ORDER BY targets.display_name ASC, targets.target_key ASC + """, + params, + ).fetchall() + except sqlite3.OperationalError: + return [] + return [ + { + "target_key": row["target_key"], + "external_server_id": row["external_server_id"], + "display_name": row["display_name"], + "region": row["region"], + "window_count": int(row["window_count"] or 0), + "sample_count": int(row["sample_count"] or 0), + "first_seen_at": row["first_seen_at"], + "last_seen_at": row["last_seen_at"], + "peak_players": int(row["peak_players"] or 0), + "last_successful_capture_at": row["last_successful_capture_at"], + "last_run_status": row["last_run_status"], + "last_error": row["last_error"], + "last_error_at": row["last_error_at"], + } + for row in rows + ] + + +def find_rcon_historical_competitive_window( + *, + server_key: str, + ended_at: str | None, + map_name: str | None = None, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return the closest competitive window for one server/match if coverage exists.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import find_competitive_window + + return find_competitive_window( + server_key=server_key, + ended_at=ended_at, + map_name=map_name, + ) + + if not ended_at: + return None + resolved_path = _resolve_db_path(db_path) + normalized_map_name = normalize_map_name(map_name) + aliases = _expand_target_key_aliases(server_key) + alias_placeholders = ", ".join("?" for _ in aliases) + try: + with _connect_readonly(resolved_path) as connection: + candidates = connection.execute( + f""" + SELECT + windows.session_key, + windows.first_seen_at, + windows.last_seen_at, + windows.map_name, + windows.map_pretty_name, + windows.sample_count, + windows.total_players, + windows.peak_players, + windows.confidence_mode, + windows.capabilities_json, + windows.latest_payload_json + FROM rcon_historical_competitive_windows AS windows + INNER JOIN rcon_historical_targets AS targets + ON targets.id = windows.target_id + WHERE ( + targets.target_key IN ({alias_placeholders}) + OR targets.external_server_id IN ({alias_placeholders}) + ) + ORDER BY windows.last_seen_at DESC + LIMIT 12 + """, + [*aliases, *aliases], + ).fetchall() + except sqlite3.OperationalError: + return None + if not candidates: + return None + + ended_point = _parse_timestamp(ended_at) + best_row: sqlite3.Row | None = None + best_distance: float | None = None + for row in candidates: + row_map_name = normalize_map_name(row["map_pretty_name"] or row["map_name"]) + if normalized_map_name and row_map_name and normalized_map_name != row_map_name: + continue + row_last = _parse_timestamp(row["last_seen_at"]) + distance = abs((row_last - ended_point).total_seconds()) + if best_distance is None or distance < best_distance: + best_row = row + best_distance = distance + if best_row is None or best_distance is None or best_distance > 21600: + return None + sample_count = int(best_row["sample_count"] or 0) + return { + "session_key": best_row["session_key"], + "first_seen_at": best_row["first_seen_at"], + "last_seen_at": best_row["last_seen_at"], + "duration_seconds": _calculate_duration_seconds( + best_row["first_seen_at"], + best_row["last_seen_at"], + ), + "map_name": best_row["map_name"], + "map_pretty_name": best_row["map_pretty_name"] or best_row["map_name"], + "sample_count": sample_count, + "average_players": round((int(best_row["total_players"] or 0) / sample_count), 2) if sample_count > 0 else 0.0, + "peak_players": int(best_row["peak_players"] or 0), + "confidence_mode": best_row["confidence_mode"], + "capabilities": _deserialize_json_object(best_row["capabilities_json"]), + } + + +def get_rcon_historical_competitive_window_by_session( + *, + server_key: str, + session_key: str, + db_path: Path | None = None, +) -> dict[str, object] | None: + """Return one persisted competitive RCON window by its synthetic session key.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_rcon_storage import get_competitive_window_by_session + + return get_competitive_window_by_session( + server_key=server_key, + session_key=session_key, + ) + + normalized_session_key = str(session_key or "").strip() + if not normalized_session_key: + return None + resolved_path = _resolve_db_path(db_path) + aliases = _expand_target_key_aliases(server_key) + alias_placeholders = ", ".join("?" for _ in aliases) + try: + with _connect_readonly(resolved_path) as connection: + row = connection.execute( + f""" + SELECT + targets.target_key, + targets.external_server_id, + targets.display_name, + targets.region, + windows.session_key, + windows.map_name, + windows.map_pretty_name, + windows.first_seen_at, + windows.last_seen_at, + windows.sample_count, + windows.total_players, + windows.peak_players, + windows.confidence_mode, + windows.capabilities_json, + windows.latest_payload_json + FROM rcon_historical_competitive_windows AS windows + INNER JOIN rcon_historical_targets AS targets + ON targets.id = windows.target_id + WHERE windows.session_key = ? + AND ( + targets.target_key IN ({alias_placeholders}) + OR targets.external_server_id IN ({alias_placeholders}) + ) + LIMIT 1 + """, + [normalized_session_key, *aliases, *aliases], + ).fetchone() + except sqlite3.OperationalError: + return None + if row is None: + return None + sample_count = int(row["sample_count"] or 0) + return { + "target_key": row["target_key"], + "external_server_id": row["external_server_id"], + "display_name": row["display_name"], + "region": row["region"], + "session_key": row["session_key"], + "first_seen_at": row["first_seen_at"], + "last_seen_at": row["last_seen_at"], + "duration_seconds": _calculate_duration_seconds( + row["first_seen_at"], + row["last_seen_at"], + ), + "map_name": row["map_name"], + "map_pretty_name": row["map_pretty_name"] or row["map_name"], + "sample_count": sample_count, + "average_players": round((int(row["total_players"] or 0) / sample_count), 2) + if sample_count > 0 + else 0.0, + "peak_players": int(row["peak_players"] or 0), + "confidence_mode": row["confidence_mode"], + "capabilities": _deserialize_json_object(row["capabilities_json"]), + "latest_payload": _deserialize_json_object(row["latest_payload_json"]), + } + + +def _connect(db_path: Path) -> sqlite3.Connection: + return connect_sqlite_writer(db_path) + + +def _connect_readonly(db_path: Path) -> sqlite3.Connection: + return connect_sqlite_readonly(db_path) + + +def _resolve_db_path(db_path: Path | None) -> Path: + return db_path or get_storage_path() + + +def _expand_target_key_aliases(target_key: str) -> list[str]: + normalized_target_key = str(target_key or "").strip() + if not normalized_target_key: + return [normalized_target_key] + + aliases = {normalized_target_key} + try: + configured_targets = load_rcon_targets() + except Exception: + configured_targets = () + + for target in configured_targets: + external_server_id = str(target.external_server_id or "").strip() + legacy_target_key = f"rcon:{target.host}:{target.port}" + if external_server_id and external_server_id == normalized_target_key: + aliases.add(legacy_target_key) + aliases.add(external_server_id) + elif legacy_target_key == normalized_target_key: + aliases.add(legacy_target_key) + if external_server_id: + aliases.add(external_server_id) + + return sorted(alias for alias in aliases if alias) + + +def _upsert_target(connection: sqlite3.Connection, *, target: Mapping[str, object]) -> int: + target_key = str(target.get("target_key") or "").strip() + if not target_key: + raise ValueError("Prospective RCON targets require a non-empty target_key.") + display_name = str(target.get("name") or target.get("display_name") or target_key).strip() + host = str(target.get("host") or "").strip() + port = int(target.get("port") or 0) + if not host or port <= 0: + raise ValueError("Prospective RCON targets require host and port.") + + connection.execute( + """ + INSERT INTO rcon_historical_targets ( + target_key, + external_server_id, + display_name, + host, + port, + region, + game_port, + query_port, + source_name, + last_configured_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(target_key) DO UPDATE SET + external_server_id = excluded.external_server_id, + display_name = excluded.display_name, + host = excluded.host, + port = excluded.port, + region = excluded.region, + game_port = excluded.game_port, + query_port = excluded.query_port, + source_name = excluded.source_name, + last_configured_at = excluded.last_configured_at, + updated_at = CURRENT_TIMESTAMP + """, + ( + target_key, + target.get("external_server_id"), + display_name, + host, + port, + target.get("region"), + target.get("game_port"), + target.get("query_port"), + str(target.get("source_name") or "community-hispana-rcon"), + _utc_now_iso(), + ), + ) + row = connection.execute( + "SELECT id FROM rcon_historical_targets WHERE target_key = ?", + (target_key,), + ).fetchone() + if row is None: + raise RuntimeError("Failed to resolve prospective RCON target id.") + return int(row["id"]) + + +def _upsert_checkpoint_success( + connection: sqlite3.Connection, + *, + target_id: int, + run_id: int, + captured_at: str, +) -> None: + connection.execute( + """ + INSERT INTO rcon_historical_checkpoints ( + target_id, + last_successful_capture_at, + last_sample_at, + last_run_id, + last_run_status, + last_error, + last_error_at + ) VALUES (?, ?, ?, ?, 'success', NULL, NULL) + ON CONFLICT(target_id) DO UPDATE SET + last_successful_capture_at = excluded.last_successful_capture_at, + last_sample_at = excluded.last_sample_at, + last_run_id = excluded.last_run_id, + last_run_status = excluded.last_run_status, + last_error = NULL, + last_error_at = NULL, + updated_at = CURRENT_TIMESTAMP + """, + (target_id, captured_at, captured_at, run_id), + ) + + +def _upsert_competitive_window( + connection: sqlite3.Connection, + *, + target_id: int, + captured_at: str, + normalized_payload: Mapping[str, object], +) -> None: + current_map_raw = str(normalized_payload.get("current_map") or "").strip() + if not current_map_raw: + return + map_pretty_name = normalize_map_name(current_map_raw) or current_map_raw + players = int(normalized_payload.get("players") or 0) + max_players = normalized_payload.get("max_players") + status = str(normalized_payload.get("status") or "unknown") + latest_window = connection.execute( + """ + SELECT * + FROM rcon_historical_competitive_windows + WHERE target_id = ? + ORDER BY last_seen_at DESC, id DESC + LIMIT 1 + """, + (target_id,), + ).fetchone() + if latest_window and _should_extend_competitive_window( + latest_window=latest_window, + captured_at=captured_at, + current_map=current_map_raw, + ): + connection.execute( + """ + UPDATE rcon_historical_competitive_windows + SET map_name = ?, + map_pretty_name = ?, + last_seen_at = ?, + sample_count = sample_count + 1, + total_players = total_players + ?, + peak_players = CASE WHEN peak_players > ? THEN peak_players ELSE ? END, + last_players = ?, + max_players = ?, + status = ?, + confidence_mode = ?, + capabilities_json = ?, + latest_payload_json = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, + ( + current_map_raw, + map_pretty_name, + captured_at, + players, + players, + players, + players, + max_players, + status, + COMPETITIVE_MODE_APPROXIMATE, + json.dumps(_build_competitive_capabilities(), ensure_ascii=True, separators=(",", ":")), + json.dumps(dict(normalized_payload), ensure_ascii=True, separators=(",", ":")), + latest_window["id"], + ), + ) + return + + session_key = f"{target_id}:{captured_at}" + connection.execute( + """ + INSERT INTO rcon_historical_competitive_windows ( + target_id, + session_key, + source_kind, + map_name, + map_pretty_name, + first_seen_at, + last_seen_at, + sample_count, + total_players, + peak_players, + last_players, + max_players, + status, + confidence_mode, + capabilities_json, + latest_payload_json + ) VALUES (?, ?, 'rcon-historical-samples', ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + target_id, + session_key, + current_map_raw, + map_pretty_name, + captured_at, + captured_at, + players, + players, + players, + max_players, + status, + COMPETITIVE_MODE_APPROXIMATE, + json.dumps(_build_competitive_capabilities(), ensure_ascii=True, separators=(",", ":")), + json.dumps(dict(normalized_payload), ensure_ascii=True, separators=(",", ":")), + ), + ) + + +def _should_extend_competitive_window( + *, + latest_window: sqlite3.Row, + captured_at: str, + current_map: str, +) -> bool: + latest_map = str(latest_window["map_name"] or "").strip() + if normalize_map_name(latest_map) != normalize_map_name(current_map): + return False + latest_seen = _parse_timestamp(str(latest_window["last_seen_at"])) + captured_point = _parse_timestamp(captured_at) + return (captured_point - latest_seen).total_seconds() <= COMPETITIVE_WINDOW_GAP_SECONDS + + +def _build_competitive_capabilities() -> dict[str, object]: + return { + "recent_matches": COMPETITIVE_MODE_APPROXIMATE, + "server_summary": COMPETITIVE_MODE_EXACT, + "competitive_quality": COMPETITIVE_MODE_PARTIAL, + "result": "session-score", + "gamestate": "session", + "player_stats": "unavailable", + } + + +def _deserialize_json_object(raw_value: object) -> dict[str, object]: + if isinstance(raw_value, str) and raw_value.strip(): + try: + parsed = json.loads(raw_value) + except json.JSONDecodeError: + return {} + if isinstance(parsed, dict): + return parsed + return {} + + +def _parse_timestamp(raw_value: str) -> datetime: + timestamp = datetime.fromisoformat(raw_value.replace("Z", "+00:00")) + if timestamp.tzinfo is None: + timestamp = timestamp.replace(tzinfo=timezone.utc) + return timestamp.astimezone(timezone.utc) + + +def _calculate_duration_seconds(first_seen_at: str | None, last_seen_at: str | None) -> int | None: + if not first_seen_at or not last_seen_at: + return None + return max(0, int((_parse_timestamp(last_seen_at) - _parse_timestamp(first_seen_at)).total_seconds())) + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") diff --git a/backend/app/rcon_historical_worker.py b/backend/app/rcon_historical_worker.py new file mode 100644 index 0000000..d308e7a --- /dev/null +++ b/backend/app/rcon_historical_worker.py @@ -0,0 +1,554 @@ +"""Dedicated prospective RCON historical capture worker.""" + +from __future__ import annotations + +import argparse +from datetime import date, datetime +import json +import os +import time +from dataclasses import dataclass +from typing import Iterable + +from .config import ( + get_rcon_historical_capture_interval_seconds, + get_rcon_historical_capture_max_retries, + get_rcon_historical_capture_retry_delay_seconds, + get_rcon_request_timeout_seconds, +) +from .rcon_admin_log_ingestion import ingest_rcon_admin_logs +from .rcon_admin_log_materialization import materialize_rcon_admin_log +from .rcon_client import ( + RconQueryError, + build_rcon_target_key, + load_rcon_targets, + query_live_server_sample, +) +from .rcon_historical_storage import ( + finalize_rcon_historical_capture_run, + initialize_rcon_historical_storage, + list_rcon_historical_target_statuses, + mark_rcon_historical_capture_failure, + persist_rcon_historical_sample, + start_rcon_historical_capture_run, +) +from .snapshots import utc_now +from .writer_lock import backend_writer_lock, build_writer_lock_holder + + +@dataclass(slots=True) +class RconHistoricalCaptureStats: + targets_seen: int = 0 + samples_inserted: int = 0 + duplicate_samples: int = 0 + failed_targets: int = 0 + admin_log_events_seen: int = 0 + admin_log_events_inserted: int = 0 + admin_log_duplicate_events: int = 0 + admin_log_failed_targets: int = 0 + materialized_matches_inserted: int = 0 + materialized_matches_updated: int = 0 + + +def run_rcon_historical_capture( + *, + target_key: str | None = None, +) -> dict[str, object]: + """Capture one prospective RCON sample for one or all configured targets.""" + with backend_writer_lock( + holder=build_writer_lock_holder( + f"app.rcon_historical_worker capture:{target_key or 'all-targets'}" + ) + ): + return run_rcon_historical_capture_unlocked(target_key=target_key) + + +def run_rcon_historical_capture_unlocked( + *, + target_key: str | None = None, +) -> dict[str, object]: + """Capture one prospective RCON sample assuming the shared writer lock is already held.""" + initialize_rcon_historical_storage() + selected_targets = _select_targets(target_key) + selected_target_keys = {build_rcon_target_key(target) for target in selected_targets} + admin_log_lookback_minutes = get_rcon_admin_log_lookback_minutes() + captured_at = utc_now().isoformat().replace("+00:00", "Z") + target_scope = target_key or "all-configured-rcon-targets" + run_id = start_rcon_historical_capture_run(mode="capture", target_scope=target_scope) + stats = RconHistoricalCaptureStats() + items: list[dict[str, object]] = [] + errors: list[dict[str, object]] = [] + admin_log_errors: list[dict[str, object]] = [] + timeout_seconds = get_rcon_request_timeout_seconds() + + try: + for target in selected_targets: + target_metadata = _serialize_target(target) + stats.targets_seen += 1 + try: + sample = query_live_server_sample( + target, + timeout_seconds=timeout_seconds, + ) + delta = persist_rcon_historical_sample( + run_id=run_id, + captured_at=captured_at, + target=target_metadata, + normalized_payload=sample["normalized"], + raw_payload=sample["raw_session"], + ) + stats.samples_inserted += int(delta["samples_inserted"]) + stats.duplicate_samples += int(delta["duplicate_samples"]) + items.append( + { + "target_key": target_metadata["target_key"], + "external_server_id": target.external_server_id, + "name": target.name, + "host": target.host, + "port": target.port, + "timeout_seconds": timeout_seconds, + "captured_at": captured_at, + "sample_inserted": bool(delta["samples_inserted"]), + "normalized": sample["normalized"], + } + ) + except Exception as exc: # noqa: BLE001 - controlled worker failures + stats.failed_targets += 1 + mark_rcon_historical_capture_failure( + run_id=run_id, + target=target_metadata, + error_message=_format_error_message(exc), + ) + errors.append(_serialize_capture_error(target, exc, timeout_seconds=timeout_seconds)) + + admin_log_result = _ingest_target_admin_log( + target_key=str(target_metadata["target_key"]), + minutes=admin_log_lookback_minutes, + ) + _merge_admin_log_result( + stats=stats, + admin_log_errors=admin_log_errors, + target=target_metadata, + result=admin_log_result, + ) + + materialization_result = materialize_rcon_admin_log() + stats.materialized_matches_inserted = int( + materialization_result.get("matches_materialized") or 0 + ) + stats.materialized_matches_updated = int( + materialization_result.get("matches_updated") or 0 + ) + + status = "success" if not errors else ("partial" if items else "failed") + finalize_rcon_historical_capture_run( + run_id, + status=status, + targets_seen=stats.targets_seen, + samples_inserted=stats.samples_inserted, + duplicate_samples=stats.duplicate_samples, + failed_targets=stats.failed_targets, + notes=None if not errors else json.dumps(errors, separators=(",", ":")), + ) + except Exception as exc: + finalize_rcon_historical_capture_run( + run_id, + status="failed", + targets_seen=stats.targets_seen, + samples_inserted=stats.samples_inserted, + duplicate_samples=stats.duplicate_samples, + failed_targets=max(1, stats.failed_targets), + notes=str(exc), + ) + raise + + return { + "status": "ok" if items else "error", + "run_status": status, + "captured_at": captured_at, + "target_scope": target_scope, + "admin_log_lookback_minutes": admin_log_lookback_minutes, + "targets": items, + "errors": errors, + "admin_log_errors": admin_log_errors, + "materialization_result": materialization_result, + "storage_status": [ + status + for status in list_rcon_historical_target_statuses() + if status.get("target_key") in selected_target_keys + ], + "totals": { + "targets_seen": stats.targets_seen, + "samples_inserted": stats.samples_inserted, + "duplicate_samples": stats.duplicate_samples, + "failed_targets": stats.failed_targets, + "admin_log_events_seen": stats.admin_log_events_seen, + "admin_log_events_inserted": stats.admin_log_events_inserted, + "admin_log_duplicate_events": stats.admin_log_duplicate_events, + "admin_log_failed_targets": stats.admin_log_failed_targets, + "materialized_matches_inserted": stats.materialized_matches_inserted, + "materialized_matches_updated": stats.materialized_matches_updated, + }, + } + + +def run_periodic_rcon_historical_capture( + *, + interval_seconds: int, + max_retries: int, + retry_delay_seconds: int, + target_key: str | None = None, + max_runs: int | None = None, +) -> None: + """Run prospective RCON capture in a local loop.""" + completed_runs = 0 + startup_targets = _describe_loop_targets(target_key) + _emit_worker_event( + "rcon-historical-capture-worker-started", + interval_seconds=interval_seconds, + max_retries=max_retries, + retry_delay_seconds=retry_delay_seconds, + target_scope=target_key or "all-configured-rcon-targets", + target_count=len(startup_targets), + targets=startup_targets, + ) + print("Press Ctrl+C to stop.") + + try: + while max_runs is None or completed_runs < max_runs: + completed_runs += 1 + _emit_worker_event( + "rcon-historical-capture-cycle-started", + run=completed_runs, + ) + payload = _run_capture_with_retries( + max_retries=max_retries, + retry_delay_seconds=retry_delay_seconds, + target_key=target_key, + ) + _emit_worker_event( + "rcon-historical-capture-cycle-finished", + run=completed_runs, + result=payload, + ) + if max_runs is not None and completed_runs >= max_runs: + break + _emit_worker_event( + "rcon-historical-capture-sleep-started", + run=completed_runs, + sleep_seconds=interval_seconds, + ) + time.sleep(interval_seconds) + except KeyboardInterrupt: + print("\nRCON historical capture loop stopped by user.") + except Exception as exc: + _emit_worker_event( + "rcon-historical-capture-worker-exited-unexpectedly", + error_type=type(exc).__name__, + message=str(exc), + ) + raise + + +def _run_capture_with_retries( + *, + max_retries: int, + retry_delay_seconds: int, + target_key: str | None, +) -> dict[str, object]: + attempt = 0 + while True: + attempt += 1 + try: + return { + "status": "ok", + "attempts_used": attempt, + "capture_result": run_rcon_historical_capture(target_key=target_key), + } + except Exception as exc: + if attempt > max_retries: + _emit_worker_event( + "rcon-historical-capture-attempt-failed", + attempt=attempt, + max_retries=max_retries, + error_type=type(exc).__name__, + message=str(exc), + retries_exhausted=True, + ) + return { + "status": "error", + "attempts_used": attempt, + "error": str(exc), + } + _emit_worker_event( + "rcon-historical-capture-attempt-failed", + attempt=attempt, + max_retries=max_retries, + error_type=type(exc).__name__, + message=str(exc), + ) + if retry_delay_seconds > 0: + _emit_worker_event( + "rcon-historical-capture-retry-sleep-started", + attempt=attempt, + sleep_seconds=retry_delay_seconds, + ) + time.sleep(retry_delay_seconds) + + +def _select_targets(target_key: str | None) -> list[object]: + configured_targets = list(load_rcon_targets()) + if not configured_targets: + raise RuntimeError("No RCON targets configured in HLL_BACKEND_RCON_TARGETS.") + if target_key is None: + return configured_targets + + normalized = target_key.strip() + selected = [ + target + for target in configured_targets + if build_rcon_target_key(target) == normalized + ] + if not selected: + raise ValueError(f"Unknown RCON target key: {target_key}") + return selected + + +def _describe_loop_targets(target_key: str | None) -> list[dict[str, str]]: + """Describe configured worker targets without exposing credentials.""" + try: + targets = _select_targets(target_key) + except Exception as exc: # noqa: BLE001 - startup logging must not hide capture error + return [ + { + "status": "unavailable", + "error_type": type(exc).__name__, + "message": str(exc), + } + ] + return [ + { + "target_key": build_rcon_target_key(target), + "external_server_id": str(target.external_server_id or ""), + "name": str(target.name or ""), + } + for target in targets + ] + + +def _emit_worker_event(event: str, **fields: object) -> None: + """Print one JSON worker event using safe date/time serialization.""" + print( + json.dumps({"event": event, **fields}, indent=2, default=_json_default), + flush=True, + ) + + +def _json_default(value: object) -> str: + if isinstance(value, (date, datetime)): + return value.isoformat() + return str(value) + + +def get_rcon_admin_log_lookback_minutes() -> int: + """Return the AdminLog lookback window used by periodic RCON capture.""" + configured_value = os.getenv("HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES", "60") + lookback_minutes = int(configured_value) + if lookback_minutes <= 0: + raise ValueError("HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES must be positive.") + return lookback_minutes + + +def _ingest_target_admin_log( + *, + target_key: str, + minutes: int, +) -> dict[str, object]: + try: + return ingest_rcon_admin_logs(minutes=minutes, target_key=target_key) + except Exception as exc: # noqa: BLE001 - worker reports per-target AdminLog failures + return { + "status": "error", + "errors": [ + { + "target_key": target_key, + "status": "error", + "error_type": type(exc).__name__, + "message": str(exc), + } + ], + "totals": { + "events_seen": 0, + "events_inserted": 0, + "duplicate_events": 0, + "failed_targets": 1, + }, + } + + +def _merge_admin_log_result( + *, + stats: RconHistoricalCaptureStats, + admin_log_errors: list[dict[str, object]], + target: dict[str, object], + result: dict[str, object], +) -> None: + totals = result.get("totals") + if isinstance(totals, dict): + stats.admin_log_events_seen += int(totals.get("events_seen") or 0) + stats.admin_log_events_inserted += int(totals.get("events_inserted") or 0) + stats.admin_log_duplicate_events += int(totals.get("duplicate_events") or 0) + stats.admin_log_failed_targets += int(totals.get("failed_targets") or 0) + + errors = result.get("errors") + if isinstance(errors, list): + for error in errors: + if isinstance(error, dict): + admin_log_errors.append( + { + "target_key": target["target_key"], + "external_server_id": target.get("external_server_id"), + "name": target.get("name"), + "status": "error", + "error_type": error.get("error_type"), + "message": error.get("message"), + } + ) + + +def _serialize_target(target: object) -> dict[str, object]: + return { + "target_key": build_rcon_target_key(target), + "external_server_id": target.external_server_id, + "name": target.name, + "host": target.host, + "port": target.port, + "region": target.region, + "game_port": target.game_port, + "query_port": target.query_port, + "source_name": target.source_name, + } + + +def _serialize_capture_error( + target: object, + error: Exception, + *, + timeout_seconds: float, +) -> dict[str, object]: + error_type = _classify_capture_error_type(error) + error_stage = _classify_capture_error_stage(error) + return { + "target_key": build_rcon_target_key(target), + "external_server_id": target.external_server_id, + "name": target.name, + "host": target.host, + "port": target.port, + "timeout_seconds": timeout_seconds, + "error_type": error_type, + "error_stage": error_stage, + "message": str(error), + } + + +def _classify_capture_error_type(error: Exception) -> str: + if isinstance(error, RconQueryError): + return error.error_type + message = str(error).lower() + if "timed out" in message or "timeout" in message: + return "timeout" + if "401" in message or "403" in message or "login" in message or "auth" in message: + return "auth/login" + if "refused" in message: + return "connection-refused" + if "payload" in message or "json" in message or "malformed" in message: + return "payload-invalid" + return "other-error" + + +def _classify_capture_error_stage(error: Exception) -> str | None: + if isinstance(error, RconQueryError): + return error.error_stage + return None + + +def _format_error_message(error: Exception) -> str: + error_type = _classify_capture_error_type(error) + error_stage = _classify_capture_error_stage(error) + if error_stage: + return f"[{error_type}:{error_stage}] {error}" + return f"[{error_type}] {error}" + + +def build_arg_parser() -> argparse.ArgumentParser: + """Create the CLI parser for manual or periodic prospective RCON capture.""" + parser = argparse.ArgumentParser( + description="Prospective RCON historical capture for HLL Vietnam.", + ) + parser.add_argument( + "mode", + choices=("capture", "loop"), + help="capture runs once; loop keeps collecting periodically", + ) + parser.add_argument( + "--target", + dest="target_key", + help="optional target key; defaults to all configured RCON targets", + ) + parser.add_argument( + "--interval", + type=int, + default=get_rcon_historical_capture_interval_seconds(), + help="seconds to wait between loop runs", + ) + parser.add_argument( + "--retries", + type=int, + default=get_rcon_historical_capture_max_retries(), + help="retry attempts after a failed capture", + ) + parser.add_argument( + "--retry-delay", + type=int, + default=get_rcon_historical_capture_retry_delay_seconds(), + help="seconds to wait between failed attempts", + ) + parser.add_argument( + "--max-runs", + type=int, + help="optional safety cap for loop mode", + ) + return parser + + +def main(argv: Iterable[str] | None = None) -> int: + """Run the prospective RCON historical capture CLI.""" + parser = build_arg_parser() + args = parser.parse_args(list(argv) if argv is not None else None) + + if args.mode == "capture": + result = run_rcon_historical_capture(target_key=args.target_key) + print(json.dumps(result, indent=2, default=_json_default)) + return 0 + + if args.interval <= 0: + raise ValueError("--interval must be a positive integer.") + if args.retries < 0: + raise ValueError("--retries must be zero or positive.") + if args.retry_delay < 0: + raise ValueError("--retry-delay must be zero or positive.") + if args.max_runs is not None and args.max_runs <= 0: + raise ValueError("--max-runs must be positive when provided.") + + run_periodic_rcon_historical_capture( + interval_seconds=args.interval, + max_retries=args.retries, + retry_delay_seconds=args.retry_delay, + target_key=args.target_key, + max_runs=args.max_runs, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/rcon_scoreboard_correlation.py b/backend/app/rcon_scoreboard_correlation.py new file mode 100644 index 0000000..4465fca --- /dev/null +++ b/backend/app/rcon_scoreboard_correlation.py @@ -0,0 +1,448 @@ +"""Correlate RCON competitive windows with trusted persisted scoreboard matches.""" + +from __future__ import annotations + +import sqlite3 +from datetime import datetime, timezone +from pathlib import Path + +from .config import get_storage_path, use_postgres_rcon_storage +from .normalizers import normalize_map_name +from .scoreboard_origins import resolve_trusted_scoreboard_match_url +from .sqlite_utils import connect_sqlite_readonly + + +MIN_CONFIDENCE_SCORE = 5 +MAX_CANDIDATES = 200 + + +def resolve_rcon_scoreboard_match_url( + *, + server_slug: object, + map_name: object, + started_at: object, + ended_at: object, + duration_seconds: object = None, + player_count: object = None, + peak_players: object = None, + allied_score: object = None, + axis_score: object = None, + db_path: Path | None = None, +) -> str | None: + """Return a trusted scoreboard URL for an RCON window only on strong evidence.""" + resolution = resolve_rcon_scoreboard_correlation( + server_slug=server_slug, + map_name=map_name, + started_at=started_at, + ended_at=ended_at, + duration_seconds=duration_seconds, + player_count=player_count, + peak_players=peak_players, + allied_score=allied_score, + axis_score=axis_score, + db_path=db_path, + ) + match_url = resolution.get("match_url") + return str(match_url) if match_url else None + + +def resolve_rcon_scoreboard_correlation( + *, + server_slug: object, + map_name: object, + started_at: object, + ended_at: object, + duration_seconds: object = None, + player_count: object = None, + peak_players: object = None, + allied_score: object = None, + axis_score: object = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Return a safe candidate selection summary for one RCON match window.""" + normalized_server_slug = str(server_slug or "").strip() + normalized_map = normalize_map_name(map_name) + rcon_start = _parse_timestamp(started_at) + rcon_end = _parse_timestamp(ended_at) + if not normalized_server_slug or not normalized_map or not rcon_start or not rcon_end: + return {"match_url": None, "candidate_count": 0, "reason": "invalid-rcon-window"} + if rcon_end < rcon_start: + rcon_start, rcon_end = rcon_end, rcon_start + + candidates = _list_persisted_scoreboard_candidates( + server_slug=normalized_server_slug, + db_path=db_path or get_storage_path(), + ) + scored_candidates = [ + scored + for candidate in candidates + if (scored := _score_candidate( + candidate, + normalized_map=normalized_map, + rcon_start=rcon_start, + rcon_end=rcon_end, + duration_seconds=_coerce_int(duration_seconds), + player_count=_coerce_int(player_count), + peak_players=_coerce_int(peak_players), + allied_score=_coerce_int(allied_score), + axis_score=_coerce_int(axis_score), + )) + is not None + ] + if not scored_candidates: + return { + "match_url": None, + "candidate_count": len(candidates), + "reason": "no-safe-candidate", + } + + scored_candidates.sort(key=lambda item: item["score"], reverse=True) + best = scored_candidates[0] + if int(best["score"]) < MIN_CONFIDENCE_SCORE: + return { + "match_url": None, + "candidate_count": len(candidates), + "reason": "low-confidence", + } + if len(scored_candidates) > 1 and int(scored_candidates[1]["score"]) >= int(best["score"]): + return { + "match_url": None, + "candidate_count": len(candidates), + "reason": "ambiguous-candidate", + } + return { + "match_url": str(best["match_url"]), + "candidate_count": len(candidates), + "reason": "linked", + "selected_candidate": { + "external_match_id": best.get("external_match_id"), + "correlation_score": int(best["score"]), + }, + } + + +def diagnose_rcon_scoreboard_correlation( + *, + server_slug: object, + map_name: object, + started_at: object, + ended_at: object, + duration_seconds: object = None, + player_count: object = None, + peak_players: object = None, + allied_score: object = None, + axis_score: object = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Describe safe candidate scoring for a single RCON correlation window.""" + normalized_server_slug = str(server_slug or "").strip() + normalized_map = normalize_map_name(map_name) + rcon_start = _parse_timestamp(started_at) + rcon_end = _parse_timestamp(ended_at) + if not normalized_server_slug or not normalized_map or not rcon_start or not rcon_end: + return { + "candidate_search_window": { + "started_at": started_at, + "ended_at": ended_at, + "candidate_limit": MAX_CANDIDATES, + }, + "candidate_count": 0, + "top_candidates": [], + "selected_candidate": None, + "final_reason": "invalid-rcon-window", + } + if rcon_end < rcon_start: + rcon_start, rcon_end = rcon_end, rcon_start + + candidates = _list_persisted_scoreboard_candidates( + server_slug=normalized_server_slug, + db_path=db_path or get_storage_path(), + ) + resolution = resolve_rcon_scoreboard_correlation( + server_slug=server_slug, + map_name=map_name, + started_at=started_at, + ended_at=ended_at, + duration_seconds=duration_seconds, + player_count=player_count, + peak_players=peak_players, + allied_score=allied_score, + axis_score=axis_score, + db_path=db_path, + ) + summaries = [ + _diagnostic_candidate_summary( + candidate, + server_slug=normalized_server_slug, + normalized_map=normalized_map, + rcon_start=rcon_start, + rcon_end=rcon_end, + duration_seconds=_coerce_int(duration_seconds), + player_count=_coerce_int(player_count), + peak_players=_coerce_int(peak_players), + allied_score=_coerce_int(allied_score), + axis_score=_coerce_int(axis_score), + ) + for candidate in candidates + ] + summaries.sort( + key=lambda item: ( + -int(item["correlation_score"] or -1), + str(item.get("external_match_id") or ""), + ) + ) + selected_id = ( + resolution.get("selected_candidate", {}).get("external_match_id") + if isinstance(resolution.get("selected_candidate"), dict) + else None + ) + selected_candidate = next( + (item for item in summaries if item.get("external_match_id") == selected_id), + None, + ) + return { + "candidate_search_window": { + "started_at": rcon_start.isoformat().replace("+00:00", "Z"), + "ended_at": rcon_end.isoformat().replace("+00:00", "Z"), + "candidate_limit": MAX_CANDIDATES, + }, + "candidate_count": len(candidates), + "top_candidates": summaries[:5], + "selected_candidate": selected_candidate, + "final_reason": resolution["reason"], + } + + +def _list_persisted_scoreboard_candidates( + *, + server_slug: str, + db_path: Path, +) -> list[dict[str, object]]: + if use_postgres_rcon_storage(): + from .postgres_rcon_storage import list_scoreboard_candidates + + postgres_candidates = list_scoreboard_candidates( + server_slug=server_slug, + limit=MAX_CANDIDATES, + ) + if postgres_candidates: + return postgres_candidates + + try: + with connect_sqlite_readonly(db_path) as connection: + rows = connection.execute( + """ + SELECT + historical_matches.external_match_id, + historical_matches.started_at, + historical_matches.ended_at, + historical_matches.map_name, + historical_matches.map_pretty_name, + historical_matches.allied_score, + historical_matches.axis_score, + historical_matches.raw_payload_ref, + historical_servers.slug AS server_slug, + COUNT(historical_player_match_stats.id) AS player_count + FROM historical_matches + INNER JOIN historical_servers + ON historical_servers.id = historical_matches.historical_server_id + LEFT JOIN historical_player_match_stats + ON historical_player_match_stats.historical_match_id = historical_matches.id + WHERE historical_servers.slug = ? + AND historical_matches.raw_payload_ref IS NOT NULL + GROUP BY historical_matches.id + ORDER BY COALESCE(historical_matches.ended_at, historical_matches.started_at) DESC + LIMIT ? + """, + (server_slug, MAX_CANDIDATES), + ).fetchall() + except sqlite3.Error: + return [] + + items: list[dict[str, object]] = [] + for row in rows: + match_url = resolve_trusted_scoreboard_match_url( + row["raw_payload_ref"], + row["server_slug"], + ) + if not match_url: + continue + items.append( + { + "external_match_id": row["external_match_id"], + "started_at": row["started_at"], + "ended_at": row["ended_at"], + "map_name": row["map_name"], + "map_pretty_name": row["map_pretty_name"], + "allied_score": row["allied_score"], + "axis_score": row["axis_score"], + "player_count": row["player_count"], + "match_url": match_url, + } + ) + if items and use_postgres_rcon_storage(): + from .postgres_rcon_storage import upsert_scoreboard_candidates + + upsert_scoreboard_candidates(server_slug=server_slug, candidates=items) + return items + + +def _score_candidate( + candidate: dict[str, object], + *, + normalized_map: str, + rcon_start: datetime, + rcon_end: datetime, + duration_seconds: int | None, + player_count: int | None, + peak_players: int | None, + allied_score: int | None, + axis_score: int | None, +) -> dict[str, object] | None: + candidate_map = normalize_map_name( + candidate.get("map_pretty_name") or candidate.get("map_name") + ) + if candidate_map != normalized_map: + return None + + candidate_start = _parse_timestamp(candidate.get("started_at")) + candidate_end = _parse_timestamp(candidate.get("ended_at")) + if not candidate_start or not candidate_end: + return None + if candidate_end < candidate_start: + candidate_start, candidate_end = candidate_end, candidate_start + + score = 0 + overlap_seconds = _overlap_seconds(rcon_start, rcon_end, candidate_start, candidate_end) + rcon_midpoint = rcon_start + (rcon_end - rcon_start) / 2 + if overlap_seconds > 0: + score += 3 + if candidate_start <= rcon_midpoint <= candidate_end: + score += 2 + + closest_edge_distance = min( + abs((rcon_start - candidate_start).total_seconds()), + abs((rcon_start - candidate_end).total_seconds()), + abs((rcon_end - candidate_start).total_seconds()), + abs((rcon_end - candidate_end).total_seconds()), + ) + if closest_edge_distance <= 1800: + score += 2 + elif closest_edge_distance <= 3600: + score += 1 + + candidate_duration = int((candidate_end - candidate_start).total_seconds()) + if duration_seconds and candidate_duration > 0: + if abs(candidate_duration - duration_seconds) <= 1800: + score += 1 + elif overlap_seconds > 0 and duration_seconds <= candidate_duration: + score += 1 + + candidate_allied_score = _coerce_int(candidate.get("allied_score")) + candidate_axis_score = _coerce_int(candidate.get("axis_score")) + if ( + allied_score is not None + and axis_score is not None + and candidate_allied_score is not None + and candidate_axis_score is not None + ): + if candidate_allied_score == allied_score and candidate_axis_score == axis_score: + score += 2 + elif sorted((candidate_allied_score, candidate_axis_score)) == sorted((allied_score, axis_score)): + score += 1 + + candidate_players = _coerce_int(candidate.get("player_count")) + reference_players = peak_players or player_count + if candidate_players and reference_players: + if abs(candidate_players - reference_players) <= 20: + score += 1 + elif candidate_players >= int(reference_players * 0.75): + score += 1 + + if score <= 0: + return None + return { + "score": score, + "external_match_id": candidate.get("external_match_id"), + "match_url": candidate["match_url"], + } + + +def _diagnostic_candidate_summary( + candidate: dict[str, object], + *, + server_slug: str, + normalized_map: str, + rcon_start: datetime, + rcon_end: datetime, + duration_seconds: int | None, + player_count: int | None, + peak_players: int | None, + allied_score: int | None, + axis_score: int | None, +) -> dict[str, object]: + match_url = resolve_trusted_scoreboard_match_url(candidate.get("match_url"), server_slug) + safe_candidate = {**candidate, "match_url": match_url} if match_url else None + scored = ( + _score_candidate( + safe_candidate, + normalized_map=normalized_map, + rcon_start=rcon_start, + rcon_end=rcon_end, + duration_seconds=duration_seconds, + player_count=player_count, + peak_players=peak_players, + allied_score=allied_score, + axis_score=axis_score, + ) + if safe_candidate + else None + ) + map_label = candidate.get("map_pretty_name") or candidate.get("map_name") + summary = { + "external_match_id": candidate.get("external_match_id"), + "started_at": candidate.get("started_at"), + "ended_at": candidate.get("ended_at"), + "map": map_label, + "score": { + "allied_score": _coerce_int(candidate.get("allied_score")), + "axis_score": _coerce_int(candidate.get("axis_score")), + }, + "match_url": match_url, + "correlation_score": int(scored["score"]) if scored else None, + } + if not match_url: + summary["rejection_reason"] = "unsafe-url" + elif scored is None: + summary["rejection_reason"] = "map-or-window-mismatch" + return summary + + +def _overlap_seconds( + first_start: datetime, + first_end: datetime, + second_start: datetime, + second_end: datetime, +) -> int: + return max(0, int((min(first_end, second_end) - max(first_start, second_start)).total_seconds())) + + +def _parse_timestamp(value: object) -> datetime | None: + if not isinstance(value, str) or not value.strip(): + return None + try: + parsed = datetime.fromisoformat(value.strip().replace("Z", "+00:00")) + except ValueError: + return None + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _coerce_int(value: object) -> int | None: + if value is None: + return None + try: + return int(round(float(value))) + except (TypeError, ValueError): + return None diff --git a/backend/app/rcon_scoreboard_relink.py b/backend/app/rcon_scoreboard_relink.py new file mode 100644 index 0000000..3835cb2 --- /dev/null +++ b/backend/app/rcon_scoreboard_relink.py @@ -0,0 +1,78 @@ +"""Report safe scoreboard links for existing materialized RCON matches.""" + +from __future__ import annotations + +import argparse +import json +from collections.abc import Iterable +from pathlib import Path + +from .rcon_admin_log_materialization import list_materialized_rcon_matches +from .rcon_historical_read_model import build_materialized_scoreboard_correlation_input +from .rcon_scoreboard_correlation import resolve_rcon_scoreboard_correlation + + +DEFAULT_LIMIT = 500 + + +def relink_materialized_matches( + *, + server_key: str | None = None, + limit: int = DEFAULT_LIMIT, + db_path: Path | None = None, +) -> dict[str, object]: + """Scan existing matches against trusted candidates used by the detail read model.""" + matches = list_materialized_rcon_matches( + target_key=server_key, + only_ended=True, + limit=limit, + db_path=db_path, + ) + report: dict[str, object] = { + "matches_scanned": len(matches), + "candidates_scanned": 0, + "matches_linked": 0, + "matches_skipped_no_candidate": 0, + "matches_skipped_ambiguous": 0, + "errors": [], + } + for match in matches: + try: + resolution = resolve_rcon_scoreboard_correlation( + **build_materialized_scoreboard_correlation_input(match), + db_path=db_path, + ) + except Exception as exc: + report["errors"].append( + {"match_key": match.get("match_key"), "message": str(exc)} + ) + continue + report["candidates_scanned"] += int(resolution.get("candidate_count") or 0) + if resolution.get("match_url"): + report["matches_linked"] += 1 + elif resolution.get("reason") == "ambiguous-candidate": + report["matches_skipped_ambiguous"] += 1 + else: + report["matches_skipped_no_candidate"] += 1 + return report + + +def main(argv: Iterable[str] | None = None) -> int: + parser = argparse.ArgumentParser( + description="Resolve trusted scoreboard links for materialized RCON matches." + ) + parser.add_argument("--server", dest="server_key") + parser.add_argument("--limit", type=int, default=DEFAULT_LIMIT) + parser.add_argument("--db-path", type=Path, default=None) + args = parser.parse_args(list(argv) if argv is not None else None) + report = relink_materialized_matches( + server_key=args.server_key, + limit=max(1, args.limit), + db_path=args.db_path, + ) + print(json.dumps(report, ensure_ascii=False, indent=2)) + return 0 if not report["errors"] else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/routes.py b/backend/app/routes.py new file mode 100644 index 0000000..c906413 --- /dev/null +++ b/backend/app/routes.py @@ -0,0 +1,395 @@ +"""Route resolution helpers for the HLL Vietnam backend bootstrap.""" + +from __future__ import annotations + +from http import HTTPStatus +from urllib.parse import parse_qs, urlparse + +from .config import get_historical_data_source_kind +from .payloads import ( + build_community_payload, + build_current_match_kill_feed_payload, + build_current_match_player_stats_payload, + build_current_match_payload, + build_discord_payload, + build_elo_mmr_leaderboard_payload, + build_elo_mmr_player_payload, + build_error_payload, + build_health_payload, + build_historical_leaderboard_payload, + build_historical_match_detail_payload, + build_monthly_mvp_payload, + build_monthly_mvp_v2_payload, + build_monthly_leaderboard_payload, + build_monthly_leaderboard_snapshot_payload, + build_monthly_mvp_snapshot_payload, + build_monthly_mvp_v2_snapshot_payload, + build_player_event_payload, + build_player_event_snapshot_payload, + build_historical_server_summary_snapshot_payload, + build_historical_player_profile_payload, + build_historical_server_summary_payload, + build_leaderboard_snapshot_payload, + build_recent_historical_matches_snapshot_payload, + build_recent_historical_matches_payload, + build_server_detail_history_payload, + build_server_history_payload, + build_server_latest_payload, + build_servers_payload, + build_trailer_payload, + build_weekly_leaderboard_snapshot_payload, + build_weekly_leaderboard_payload, + build_weekly_top_kills_payload, +) +from .rcon_historical_leaderboards import build_rcon_materialized_leaderboard_snapshot_payload +from .scoreboard_origins import get_trusted_public_scoreboard_origin + + +GET_ROUTES = { + "/health": build_health_payload, + "/api/community": build_community_payload, + "/api/trailer": build_trailer_payload, + "/api/discord": build_discord_payload, + "/api/servers": build_servers_payload, +} + + +def resolve_get_payload(path: str) -> tuple[HTTPStatus | None, dict[str, object]]: + """Resolve the JSON payload for a supported GET route.""" + parsed = urlparse(path) + if parsed.path == "/api/servers/latest": + return HTTPStatus.OK, build_server_latest_payload() + + if parsed.path == "/api/servers/history": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + return HTTPStatus.OK, build_server_history_payload(limit=limit) + + if parsed.path == "/api/current-match": + server_slug = parse_qs(parsed.query).get("server", [None])[0] + if not server_slug: + return HTTPStatus.BAD_REQUEST, build_error_payload("Server parameter is required") + if get_trusted_public_scoreboard_origin(server_slug) is None: + return HTTPStatus.NOT_FOUND, build_error_payload("Current match server is not supported") + return HTTPStatus.OK, build_current_match_payload(server_slug=server_slug) + + if parsed.path == "/api/current-match/kills": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_slug = params.get("server", [None])[0] + if not server_slug: + return HTTPStatus.BAD_REQUEST, build_error_payload("Server parameter is required") + if get_trusted_public_scoreboard_origin(server_slug) is None: + return HTTPStatus.NOT_FOUND, build_error_payload("Current match server is not supported") + return HTTPStatus.OK, build_current_match_kill_feed_payload( + server_slug=server_slug, + limit=limit, + since_event_id=params.get("since_event_id", [None])[0], + ) + + if parsed.path == "/api/current-match/players": + server_slug = parse_qs(parsed.query).get("server", [None])[0] + if not server_slug: + return HTTPStatus.BAD_REQUEST, build_error_payload("Server parameter is required") + if get_trusted_public_scoreboard_origin(server_slug) is None: + return HTTPStatus.NOT_FOUND, build_error_payload("Current match server is not supported") + return HTTPStatus.OK, build_current_match_player_stats_payload(server_slug=server_slug) + + if parsed.path == "/api/historical/weekly-top-kills": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_id = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_weekly_top_kills_payload(limit=limit, server_id=server_id) + + if parsed.path == "/api/historical/leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + metric = params.get("metric", ["kills"])[0] + timeframe = params.get("timeframe", ["weekly"])[0] + if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter") + if timeframe not in {"weekly", "monthly"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid timeframe parameter") + return HTTPStatus.OK, build_historical_leaderboard_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe=timeframe, + ) + + if parsed.path == "/api/historical/weekly-leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + metric = params.get("metric", ["kills"])[0] + if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter") + return HTTPStatus.OK, build_weekly_leaderboard_payload( + limit=limit, + server_id=server_id, + metric=metric, + ) + + if parsed.path == "/api/historical/monthly-leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + metric = params.get("metric", ["kills"])[0] + if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter") + return HTTPStatus.OK, build_monthly_leaderboard_payload( + limit=limit, + server_id=server_id, + metric=metric, + ) + + if parsed.path == "/api/historical/monthly-mvp": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_id = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_monthly_mvp_payload( + limit=limit, + server_id=server_id, + ) + + if parsed.path == "/api/historical/monthly-mvp-v2": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_id = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_monthly_mvp_v2_payload( + limit=limit, + server_id=server_id, + ) + + if parsed.path == "/api/historical/player-events": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + view = params.get("view", ["most-killed"])[0] + if view not in {"most-killed", "death-by", "duels", "weapon-kills", "teamkills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid view parameter") + return HTTPStatus.OK, build_player_event_payload( + limit=limit, + server_id=server_id, + view=view, + ) + + if parsed.path == "/api/historical/snapshots/leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + metric = params.get("metric", ["kills"])[0] + timeframe = params.get("timeframe", ["weekly"])[0] + if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter") + if timeframe not in {"weekly", "monthly"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid timeframe parameter") + if get_historical_data_source_kind() == "rcon": + return HTTPStatus.OK, build_rcon_materialized_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe=timeframe, + ) + return HTTPStatus.OK, build_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe=timeframe, + ) + + if parsed.path == "/api/historical/snapshots/monthly-leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + metric = params.get("metric", ["kills"])[0] + if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter") + if get_historical_data_source_kind() == "rcon": + return HTTPStatus.OK, build_rcon_materialized_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe="monthly", + ) + return HTTPStatus.OK, build_monthly_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + ) + + if parsed.path == "/api/historical/snapshots/monthly-mvp": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_id = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_monthly_mvp_snapshot_payload( + limit=limit, + server_id=server_id, + ) + + if parsed.path == "/api/historical/snapshots/monthly-mvp-v2": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_id = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_monthly_mvp_v2_snapshot_payload( + limit=limit, + server_id=server_id, + ) + + if parsed.path == "/api/historical/snapshots/player-events": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + view = params.get("view", ["most-killed"])[0] + if view not in {"most-killed", "death-by", "duels", "weapon-kills", "teamkills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid view parameter") + return HTTPStatus.OK, build_player_event_snapshot_payload( + limit=limit, + server_id=server_id, + view=view, + ) + + if parsed.path == "/api/historical/snapshots/weekly-leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + params = parse_qs(parsed.query) + server_id = params.get("server", [None])[0] + metric = params.get("metric", ["kills"])[0] + if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter") + if get_historical_data_source_kind() == "rcon": + return HTTPStatus.OK, build_rcon_materialized_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + timeframe="weekly", + ) + return HTTPStatus.OK, build_weekly_leaderboard_snapshot_payload( + limit=limit, + server_id=server_id, + metric=metric, + ) + + if parsed.path == "/api/historical/recent-matches": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_slug = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_recent_historical_matches_payload( + limit=limit, + server_slug=server_slug, + ) + + if parsed.path == "/api/historical/snapshots/recent-matches": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_slug = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_recent_historical_matches_snapshot_payload( + limit=limit, + server_slug=server_slug, + ) + + if parsed.path == "/api/historical/matches/detail": + params = parse_qs(parsed.query) + server_slug = params.get("server", [None])[0] + match_id = params.get("match", [None])[0] + if not server_slug: + return HTTPStatus.BAD_REQUEST, build_error_payload("Server parameter is required") + if not match_id: + return HTTPStatus.BAD_REQUEST, build_error_payload("Match parameter is required") + return HTTPStatus.OK, build_historical_match_detail_payload( + server_slug=server_slug, + match_id=match_id, + ) + + if parsed.path == "/api/historical/server-summary": + server_slug = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_historical_server_summary_payload(server_slug=server_slug) + + if parsed.path == "/api/historical/snapshots/server-summary": + server_slug = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_historical_server_summary_snapshot_payload( + server_slug=server_slug + ) + + if parsed.path == "/api/historical/player-profile": + player_id = parse_qs(parsed.query).get("player", [None])[0] + if not player_id: + return HTTPStatus.BAD_REQUEST, build_error_payload("Player parameter is required") + return HTTPStatus.OK, build_historical_player_profile_payload(player_id) + + if parsed.path == "/api/historical/elo-mmr/leaderboard": + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + server_id = parse_qs(parsed.query).get("server", [None])[0] + return HTTPStatus.OK, build_elo_mmr_leaderboard_payload( + limit=limit, + server_id=server_id, + ) + + if parsed.path == "/api/historical/elo-mmr/player": + params = parse_qs(parsed.query) + player_id = params.get("player", [None])[0] + if not player_id: + return HTTPStatus.BAD_REQUEST, build_error_payload("Player parameter is required") + server_id = params.get("server", [None])[0] + return HTTPStatus.OK, build_elo_mmr_player_payload( + player_id=player_id, + server_id=server_id, + ) + + builder = GET_ROUTES.get(parsed.path) + if builder is None: + if parsed.path.startswith("/api/servers/") and parsed.path.endswith("/history"): + server_id = parsed.path.removeprefix("/api/servers/").removesuffix("/history") + server_id = server_id.strip("/") + if not server_id: + return HTTPStatus.BAD_REQUEST, build_error_payload("Server id is required") + + limit = _parse_limit(parsed.query) + if limit is None: + return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter") + + return HTTPStatus.OK, build_server_detail_history_payload(server_id, limit=limit) + return None, {} + + return HTTPStatus.OK, builder() + + +def _parse_limit(query: str) -> int | None: + raw_limit = parse_qs(query).get("limit", ["20"])[0] + try: + limit = int(raw_limit) + except ValueError: + return None + + if limit < 1 or limit > 100: + return None + + return limit diff --git a/backend/app/scheduler.py b/backend/app/scheduler.py new file mode 100644 index 0000000..249aa28 --- /dev/null +++ b/backend/app/scheduler.py @@ -0,0 +1,100 @@ +"""Local development loop for periodic snapshot refreshes.""" + +from __future__ import annotations + +import argparse +import json +import time + +from .a2s_client import DEFAULT_A2S_TIMEOUT +from .collector import collect_server_snapshots +from .config import get_refresh_interval_seconds + + +def run_local_refresh_loop( + *, + interval_seconds: int, + source_mode: str, + timeout: float, + allow_controlled_fallback: bool, + max_runs: int | None = None, +) -> None: + """Run the collector periodically until interrupted or the run limit is reached.""" + completed_runs = 0 + print( + "Starting local snapshot refresh loop " + f"(interval={interval_seconds}s, source={source_mode}, persist=true)." + ) + print("Press Ctrl+C to stop.") + + try: + while max_runs is None or completed_runs < max_runs: + completed_runs += 1 + payload = collect_server_snapshots( + source_mode=source_mode, + timeout=timeout, + allow_controlled_fallback=allow_controlled_fallback, + persist=True, + ) + print(json.dumps({"run": completed_runs, **payload}, indent=2)) + + if max_runs is not None and completed_runs >= max_runs: + break + + time.sleep(interval_seconds) + except KeyboardInterrupt: + print("\nLocal snapshot refresh loop stopped by user.") + + +def main() -> None: + """Allow local scheduled refresh execution without adding external infrastructure.""" + parser = argparse.ArgumentParser( + description="Run periodic local snapshot refreshes for development and landing demos.", + ) + parser.add_argument( + "--interval", + type=int, + default=get_refresh_interval_seconds(), + help="Seconds to wait between persisted refresh runs. Defaults to env value or 60.", + ) + parser.add_argument( + "--source", + choices=("controlled", "a2s", "auto"), + default="auto", + help="Choose controlled data, configured A2S targets, or auto with fallback.", + ) + parser.add_argument( + "--timeout", + type=float, + default=DEFAULT_A2S_TIMEOUT, + help="Socket timeout in seconds for A2S probes.", + ) + parser.add_argument( + "--no-fallback", + action="store_true", + help="Disable fallback to controlled data when A2S fails.", + ) + parser.add_argument( + "--max-runs", + type=int, + default=None, + help="Optional safety limit for the number of refresh cycles to execute.", + ) + args = parser.parse_args() + + if args.interval <= 0: + raise ValueError("--interval must be a positive integer.") + if args.max_runs is not None and args.max_runs <= 0: + raise ValueError("--max-runs must be positive when provided.") + + run_local_refresh_loop( + interval_seconds=args.interval, + source_mode=args.source, + timeout=args.timeout, + allow_controlled_fallback=not args.no_fallback, + max_runs=args.max_runs, + ) + + +if __name__ == "__main__": + main() diff --git a/backend/app/scoreboard_candidate_backfill.py b/backend/app/scoreboard_candidate_backfill.py new file mode 100644 index 0000000..5db8a08 --- /dev/null +++ b/backend/app/scoreboard_candidate_backfill.py @@ -0,0 +1,259 @@ +"""Backfill public scoreboard candidates for RCON match link correlation.""" + +from __future__ import annotations + +import argparse +import json +from datetime import datetime, timezone +from collections.abc import Mapping +from typing import Iterable + +from .historical_storage import initialize_historical_storage, list_historical_servers, upsert_historical_match +from .postgres_rcon_storage import upsert_scoreboard_candidate +from .providers.public_scoreboard_provider import PublicScoreboardHistoricalDataSource +from .scoreboard_origins import ( + build_trusted_scoreboard_match_url, + get_trusted_public_scoreboard_origin, + list_trusted_public_scoreboard_origins, +) + +DEFAULT_MAX_PAGES = 20 +DEFAULT_PAGE_SIZE = 100 +DEFAULT_DETAIL_WORKERS = 4 + + +def main(argv: Iterable[str] | None = None) -> int: + parser = build_arg_parser() + args = parser.parse_args(list(argv) if argv is not None else None) + start_at = _parse_timestamp(args.start_at, option_name="--from") + end_at = _parse_timestamp(args.end_at, option_name="--to") + if end_at <= start_at: + parser.error("--to must be later than --from") + server = _resolve_server(args.server_slug, parser) + report = run_backfill(server=server, start_at=start_at, end_at=end_at, max_pages=args.max_pages, page_size=args.page_size, detail_workers=args.detail_workers) + print(json.dumps(report, ensure_ascii=False, indent=2)) + return 0 if not report["errors"] else 1 + + +def run_backfill(*, server: dict[str, object], start_at: datetime, end_at: datetime, max_pages: int, page_size: int, detail_workers: int) -> dict[str, object]: + initialize_historical_storage() + provider = PublicScoreboardHistoricalDataSource() + server_slug = str(server["slug"]) + base_url = str(server["scoreboard_base_url"]) + counters = { + "pages_processed": 0, + "candidates_seen": 0, + "list_candidates_inserted": 0, + "list_candidates_updated": 0, + "list_candidates_skipped": 0, + "candidates_inserted": 0, + "candidates_updated": 0, + "player_rows_inserted": 0, + "player_rows_updated": 0, + } + errors: list[dict[str, object]] = [] + skipped_unsafe_urls = 0 + stopped_after_window = False + for page in range(1, max_pages + 1): + try: + page_payload = provider.fetch_match_page(base_url=base_url, page=page, limit=page_size) + except Exception as exc: + errors.append({"stage": "fetch_match_page", "page": page, "message": str(exc)}) + break + matches = _coerce_match_list(page_payload.get("maps")) + if not matches: + break + counters["pages_processed"] += 1 + ids: list[str] = [] + for match in matches: + counters["candidates_seen"] += 1 + ref_time = _parse_optional_timestamp(_pick_match_timestamp(match)) + if ref_time and ref_time < start_at: + stopped_after_window = True + continue + if ref_time and ref_time >= end_at: + continue + candidate = _build_list_candidate(server=server, match=match) + if candidate is None: + counters["list_candidates_skipped"] += 1 + skipped_unsafe_urls += int(_list_candidate_url_is_unsafe(server=server, match=match)) + else: + try: + outcome = upsert_scoreboard_candidate( + server_slug=server_slug, + candidate=candidate, + ) + except Exception as exc: + counters["list_candidates_skipped"] += 1 + errors.append( + { + "stage": "upsert_list_scoreboard_candidate", + "match_id": candidate["external_match_id"], + "message": str(exc), + } + ) + else: + counters[f"list_candidates_{outcome}"] += 1 + match_id = _stringify(match.get("id")) + if match_id: + ids.append(match_id) + if ids: + try: + details = provider.fetch_match_details(base_url=base_url, match_ids=ids, max_workers=detail_workers) + except Exception as exc: + errors.append({"stage": "fetch_match_details", "page": page, "message": str(exc)}) + details = [] + for detail in details: + try: + delta = upsert_historical_match(server_slug=server_slug, match_payload=detail) + except Exception as exc: + errors.append({"stage": "upsert_historical_match", "match_id": _stringify(detail.get("id")), "message": str(exc)}) + continue + counters["candidates_inserted"] += _coerce_int(delta.get("matches_inserted")) + counters["candidates_updated"] += _coerce_int(delta.get("matches_updated")) + counters["player_rows_inserted"] += _coerce_int(delta.get("player_rows_inserted")) + counters["player_rows_updated"] += _coerce_int(delta.get("player_rows_updated")) + if stopped_after_window: + break + return {"status": "ok" if not errors else "partial", "server": server_slug, "scoreboard_base_url": base_url, "requested_window": {"from": _format_timestamp(start_at), "to": _format_timestamp(end_at)}, "stopped_after_window": stopped_after_window, "skipped_unsafe_urls": skipped_unsafe_urls, "errors": errors, **counters} + + +def build_arg_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description="Backfill public scoreboard match candidates for RCON link correlation.") + parser.add_argument("--server", dest="server_slug", required=True) + parser.add_argument("--from", dest="start_at", required=True) + parser.add_argument("--to", dest="end_at", required=True) + parser.add_argument("--max-pages", type=int, default=DEFAULT_MAX_PAGES) + parser.add_argument("--page-size", type=int, default=DEFAULT_PAGE_SIZE) + parser.add_argument("--detail-workers", type=int, default=DEFAULT_DETAIL_WORKERS) + return parser + + +def _resolve_server(server_slug: str, parser: argparse.ArgumentParser) -> dict[str, object]: + trusted = {origin.slug for origin in list_trusted_public_scoreboard_origins()} + if server_slug not in trusted: + parser.error(f"unknown or untrusted server '{server_slug}'") + for server in list_historical_servers(): + if server.get("slug") == server_slug: + return server + parser.error(f"trusted server '{server_slug}' is not present in historical storage") + raise AssertionError("unreachable") + + +def _parse_timestamp(value: str, *, option_name: str) -> datetime: + try: + parsed = datetime.fromisoformat(value.strip().replace("Z", "+00:00")) + except ValueError as exc: + raise argparse.ArgumentTypeError(f"{option_name} must be an ISO timestamp") from exc + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def _parse_optional_timestamp(value: object) -> datetime | None: + if not isinstance(value, str) or not value.strip(): + return None + try: + return _parse_timestamp(value, option_name="timestamp") + except argparse.ArgumentTypeError: + return None + + +def _format_timestamp(value: datetime) -> str: + return value.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _coerce_match_list(payload: object) -> list[dict[str, object]]: + return [item for item in payload if isinstance(item, dict)] if isinstance(payload, list) else [] + + +def _pick_match_timestamp(match: dict[str, object]) -> object: + for key in ("end", "start", "creation_time"): + value = match.get(key) + if isinstance(value, str) and value.strip(): + return value.strip() + return None + + +def _build_list_candidate( + *, + server: Mapping[str, object], + match: Mapping[str, object], +) -> dict[str, object] | None: + server_slug = _stringify(server.get("slug")) + external_match_id = _stringify(match.get("id")) + origin = get_trusted_public_scoreboard_origin(server_slug) + map_payload = match.get("map") + result_payload = match.get("result") + if ( + origin is None + or not external_match_id + or not external_match_id.isdigit() + or str(server.get("scoreboard_base_url") or "").strip() != origin.base_url + or _coerce_optional_int(server.get("server_number")) != origin.server_number + or _coerce_optional_int(match.get("server_number")) != origin.server_number + or not isinstance(map_payload, Mapping) + or not isinstance(result_payload, Mapping) + ): + return None + + started_at = _stringify(match.get("start")) + ended_at = _stringify(match.get("end")) + match_url = build_trusted_scoreboard_match_url( + server_slug=server_slug, + external_match_id=external_match_id, + ) + if not started_at or not ended_at or not match_url: + return None + return { + "external_match_id": external_match_id, + "started_at": started_at, + "ended_at": ended_at, + "map_name": _stringify(map_payload.get("id") or map_payload.get("name")), + "map_pretty_name": _stringify(map_payload.get("pretty_name")), + "allied_score": _coerce_optional_int(result_payload.get("allied")), + "axis_score": _coerce_optional_int(result_payload.get("axis")), + "player_count": _coerce_optional_int(match.get("player_count")), + "match_url": match_url, + } + + +def _list_candidate_url_is_unsafe( + *, + server: Mapping[str, object], + match: Mapping[str, object], +) -> bool: + external_match_id = _stringify(match.get("id")) + return bool( + external_match_id + and build_trusted_scoreboard_match_url( + server_slug=server.get("slug"), + external_match_id=external_match_id, + ) + is None + ) + + +def _stringify(value: object) -> str | None: + if value is None: + return None + text = str(value).strip() + return text or None + + +def _coerce_int(value: object) -> int: + try: + return int(value or 0) + except (TypeError, ValueError): + return 0 + + +def _coerce_optional_int(value: object) -> int | None: + try: + return None if value is None else int(value) + except (TypeError, ValueError): + return None + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/scoreboard_correlation_diagnostics.py b/backend/app/scoreboard_correlation_diagnostics.py new file mode 100644 index 0000000..0b88d8f --- /dev/null +++ b/backend/app/scoreboard_correlation_diagnostics.py @@ -0,0 +1,83 @@ +"""JSON diagnostics for missing materialized RCON scoreboard links.""" + +from __future__ import annotations + +import argparse +import json +from collections.abc import Iterable +from pathlib import Path + +from .rcon_admin_log_materialization import get_materialized_rcon_match_detail +from .rcon_historical_read_model import build_materialized_scoreboard_correlation_input +from .rcon_scoreboard_correlation import diagnose_rcon_scoreboard_correlation + + +def inspect_materialized_match_correlation( + *, + server_key: str, + match_key: str, + db_path: Path | None = None, +) -> dict[str, object]: + """Return safe scoreboard correlation diagnostics for one materialized match.""" + materialized = get_materialized_rcon_match_detail( + server_key=server_key, + match_key=match_key, + db_path=db_path, + ) + if materialized is None: + return { + "rcon_match_key": match_key, + "server": server_key, + "candidate_count": 0, + "top_candidates": [], + "selected_candidate": None, + "final_reason": "rcon-match-not-found", + } + + match = materialized["match"] + correlation_input = build_materialized_scoreboard_correlation_input(match) + correlation = diagnose_rcon_scoreboard_correlation( + **correlation_input, + db_path=db_path, + ) + return { + "rcon_match_key": match.get("match_key"), + "server": match.get("external_server_id") or match.get("target_key"), + "map": match.get("map_pretty_name") or match.get("map_name"), + "started_at": match.get("started_at"), + "ended_at": match.get("ended_at"), + "closed_at": match.get("ended_at") or match.get("started_at"), + "duration_seconds": correlation_input.get("duration_seconds"), + "score": { + "allied_score": match.get("allied_score"), + "axis_score": match.get("axis_score"), + "winner": match.get("winner"), + }, + **correlation, + } + + +def main(argv: Iterable[str] | None = None) -> int: + parser = argparse.ArgumentParser( + description="Explain scoreboard candidate correlation for one RCON match." + ) + parser.add_argument("--server", required=True) + parser.add_argument("--match", dest="match_key", required=True) + parser.add_argument("--db-path", type=Path, default=None) + args = parser.parse_args(list(argv) if argv is not None else None) + print( + json.dumps( + inspect_materialized_match_correlation( + server_key=args.server, + match_key=args.match_key, + db_path=args.db_path, + ), + ensure_ascii=False, + indent=2, + ) + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/scoreboard_origins.py b/backend/app/scoreboard_origins.py new file mode 100644 index 0000000..1aaf1b3 --- /dev/null +++ b/backend/app/scoreboard_origins.py @@ -0,0 +1,97 @@ +"""Trusted public scoreboard origins for active community servers.""" + +from __future__ import annotations + +from dataclasses import dataclass +import re +from urllib.parse import urlparse + + +@dataclass(frozen=True, slots=True) +class TrustedScoreboardOrigin: + """Public scoreboard origin trusted for one active community server.""" + + slug: str + display_name: str + base_url: str + server_number: int + source_kind: str = "crcon-scoreboard-json" + + +TRUSTED_PUBLIC_SCOREBOARD_ORIGINS = ( + TrustedScoreboardOrigin( + slug="comunidad-hispana-01", + display_name="Comunidad Hispana #01", + base_url="https://scoreboard.comunidadhll.es", + server_number=1, + ), + TrustedScoreboardOrigin( + slug="comunidad-hispana-02", + display_name="Comunidad Hispana #02", + base_url="https://scoreboard.comunidadhll.es:5443", + server_number=2, + ), +) + +_TRUSTED_GAME_PATH_RE = re.compile(r"^/games/\d+/?$") + + +def list_trusted_public_scoreboard_origins() -> tuple[TrustedScoreboardOrigin, ...]: + """Return trusted public scoreboard origins for active default servers.""" + return TRUSTED_PUBLIC_SCOREBOARD_ORIGINS + + +def get_trusted_public_scoreboard_origin( + server_slug: object, +) -> TrustedScoreboardOrigin | None: + """Return the trusted public scoreboard origin for one active server.""" + normalized_slug = str(server_slug or "").strip() + if not normalized_slug: + return None + for origin in TRUSTED_PUBLIC_SCOREBOARD_ORIGINS: + if origin.slug == normalized_slug: + return origin + return None + + +def resolve_trusted_scoreboard_match_url( + raw_payload_ref: object, + server_slug: object, +) -> str | None: + """Return a match URL only when it belongs to the trusted server origin.""" + origin = get_trusted_public_scoreboard_origin(server_slug) + candidate = str(raw_payload_ref or "").strip() + if origin is None or not candidate: + return None + + candidate_parts = urlparse(candidate) + origin_parts = urlparse(origin.base_url) + if candidate_parts.scheme not in {"http", "https"}: + return None + if candidate_parts.scheme != origin_parts.scheme: + return None + if candidate_parts.netloc != origin_parts.netloc: + return None + if candidate_parts.username or candidate_parts.password: + return None + if not _TRUSTED_GAME_PATH_RE.match(candidate_parts.path): + return None + if candidate_parts.params or candidate_parts.query or candidate_parts.fragment: + return None + return candidate + + +def build_trusted_scoreboard_match_url( + *, + server_slug: object, + external_match_id: object, +) -> str | None: + """Build a trusted scoreboard match URL from one numeric public match id.""" + origin = get_trusted_public_scoreboard_origin(server_slug) + match_id = str(external_match_id or "").strip() + if origin is None or not match_id.isdigit(): + return None + return resolve_trusted_scoreboard_match_url( + f"{origin.base_url}/games/{match_id}", + origin.slug, + ) diff --git a/backend/app/server_targets.py b/backend/app/server_targets.py new file mode 100644 index 0000000..8a349e4 --- /dev/null +++ b/backend/app/server_targets.py @@ -0,0 +1,106 @@ +"""Registry helpers for development-time A2S probe targets.""" + +from __future__ import annotations + +import json +from dataclasses import dataclass + +from .config import DEFAULT_A2S_SOURCE_NAME, get_a2s_targets_payload + + +DEFAULT_A2S_TARGETS = ( + { + "name": "Comunidad Hispana #01", + "host": "152.114.195.174", + "query_port": 7778, + "game_port": 7777, + "source_name": DEFAULT_A2S_SOURCE_NAME, + "external_server_id": "comunidad-hispana-01", + "region": "ES", + }, + { + "name": "Comunidad Hispana #02", + "host": "152.114.195.150", + "query_port": 7878, + "game_port": 7877, + "source_name": DEFAULT_A2S_SOURCE_NAME, + "external_server_id": "comunidad-hispana-02", + "region": "ES", + }, +) + + +@dataclass(frozen=True, slots=True) +class A2SServerTarget: + """Minimal configuration needed to query one A2S target.""" + + name: str + host: str + query_port: int + game_port: int | None + source_name: str + external_server_id: str | None = None + region: str | None = None + + +def load_a2s_targets() -> tuple[A2SServerTarget, ...]: + """Load configured A2S targets from env JSON or the local default registry.""" + raw_payload = get_a2s_targets_payload() + raw_targets = DEFAULT_A2S_TARGETS if raw_payload is None else _parse_targets(raw_payload) + return tuple(_coerce_target(item) for item in raw_targets) + + +def _parse_targets(raw_payload: str) -> list[dict[str, object]]: + try: + parsed = json.loads(raw_payload) + except json.JSONDecodeError as error: + raise ValueError("HLL_BACKEND_A2S_TARGETS must be valid JSON.") from error + + if not isinstance(parsed, list): + raise ValueError("HLL_BACKEND_A2S_TARGETS must be a JSON array.") + + return [item for item in parsed if isinstance(item, dict)] + + +def _coerce_target(raw_target: dict[str, object]) -> A2SServerTarget: + name = str(raw_target.get("name") or "Unnamed target").strip() + host = str(raw_target.get("host") or "").strip() + source_name = str(raw_target.get("source_name") or DEFAULT_A2S_SOURCE_NAME).strip() + query_port = int(raw_target.get("query_port") or 0) + game_port = _coerce_optional_positive_int(raw_target.get("game_port")) + external_server_id = _string_or_none(raw_target.get("external_server_id")) + region = _string_or_none(raw_target.get("region")) + + if not host: + raise ValueError("Each A2S target must define a non-empty host.") + if query_port <= 0: + raise ValueError("Each A2S target must define a valid query_port.") + + return A2SServerTarget( + name=name, + host=host, + query_port=query_port, + game_port=game_port, + source_name=source_name or DEFAULT_A2S_SOURCE_NAME, + external_server_id=external_server_id, + region=region, + ) + + +def _string_or_none(value: object) -> str | None: + if not isinstance(value, str): + return None + + normalized = value.strip() + return normalized or None + + +def _coerce_optional_positive_int(value: object) -> int | None: + if value is None: + return None + + coerced = int(value) + if coerced <= 0: + raise ValueError("Each A2S target game_port must be positive when defined.") + + return coerced diff --git a/backend/app/snapshots.py b/backend/app/snapshots.py new file mode 100644 index 0000000..234e832 --- /dev/null +++ b/backend/app/snapshots.py @@ -0,0 +1,54 @@ +"""Snapshot builders for normalized provisional server data.""" + +from __future__ import annotations + +from datetime import datetime, timezone +from typing import Iterable, Mapping + + +def build_server_snapshot( + normalized_record: Mapping[str, object], + *, + captured_at: datetime, +) -> dict[str, object]: + """Build a consistent snapshot payload for one normalized server.""" + timestamp = _as_utc_timestamp(captured_at) + return { + "external_server_id": normalized_record.get("external_server_id"), + "server_name": normalized_record.get("server_name"), + "status": normalized_record.get("status"), + "players": normalized_record.get("players"), + "max_players": normalized_record.get("max_players"), + "current_map": normalized_record.get("current_map"), + "region": normalized_record.get("region"), + "source_name": normalized_record.get("source_name"), + "snapshot_origin": normalized_record.get("snapshot_origin"), + "source_ref": normalized_record.get("source_ref"), + "captured_at": timestamp, + } + + +def build_snapshot_batch( + normalized_records: Iterable[Mapping[str, object]], + *, + captured_at: datetime, +) -> list[dict[str, object]]: + """Build snapshots for a batch captured at the same timestamp.""" + return [ + build_server_snapshot(record, captured_at=captured_at) + for record in normalized_records + ] + + +def utc_now() -> datetime: + """Return the current UTC timestamp for snapshot capture.""" + return datetime.now(timezone.utc) + + +def _as_utc_timestamp(value: datetime) -> str: + if value.tzinfo is None: + value = value.replace(tzinfo=timezone.utc) + else: + value = value.astimezone(timezone.utc) + + return value.isoformat().replace("+00:00", "Z") diff --git a/backend/app/sqlite_to_postgres_migration.py b/backend/app/sqlite_to_postgres_migration.py new file mode 100644 index 0000000..a28d102 --- /dev/null +++ b/backend/app/sqlite_to_postgres_migration.py @@ -0,0 +1,368 @@ +"""Idempotent phase-2 migration from displayed SQLite/files into PostgreSQL.""" + +from __future__ import annotations + +import json +import sqlite3 +from collections import defaultdict +from contextlib import closing +from pathlib import Path +from typing import Any + +from .config import get_storage_path +from .postgres_display_storage import ( + connect_postgres as connect_display_postgres, + initialize_postgres_display_storage, + persist_snapshot_record, +) +from .postgres_rcon_storage import initialize_postgres_rcon_storage + + +RCON_TABLES = ( + "rcon_historical_targets", + "rcon_historical_capture_runs", + "rcon_historical_samples", + "rcon_historical_checkpoints", + "rcon_historical_competitive_windows", + "rcon_admin_log_events", + "rcon_player_profile_snapshots", + "rcon_materialized_matches", + "rcon_match_player_stats", + "rcon_scoreboard_match_candidates", +) +DISPLAY_TABLES = ( + "game_sources", + "servers", + "server_snapshots", + "historical_servers", + "historical_maps", + "historical_matches", + "historical_players", + "historical_player_match_stats", + "player_event_raw_ledger", +) +SKIP_SLUG = "comunidad-hispana-03" + + +def migrate_sqlite_to_postgres() -> dict[str, object]: + """Copy displayed legacy data to PostgreSQL without deleting legacy sources.""" + initialize_postgres_rcon_storage() + initialize_postgres_display_storage() + summary: dict[str, object] = { + "status": "ok", + "source_paths": [], + "migrated_tables": [], + "migrated_domains": [], + "rows_read": {}, + "rows_inserted": {}, + "rows_updated": {}, + "rows_skipped": {}, + "errors": [], + } + table_totals: dict[str, dict[str, int]] = defaultdict( + lambda: {"read": 0, "inserted": 0, "updated": 0, "skipped": 0} + ) + for db_path in _discover_sqlite_paths(): + summary["source_paths"].append(str(db_path)) + try: + _migrate_sqlite_path(db_path, table_totals) + except Exception as error: # noqa: BLE001 - report all source failures + summary["errors"].append({"source_path": str(db_path), "error": str(error)}) + + snapshots_root = get_storage_path().parent / "snapshots" + if snapshots_root.exists(): + summary["source_paths"].append(str(snapshots_root)) + _migrate_snapshot_files(snapshots_root, table_totals, summary["errors"]) + _sync_sequences() + summary["migrated_tables"] = sorted(table_totals) + summary["migrated_domains"] = [ + "rcon-admin-log-events", + "rcon-player-profile-snapshots", + "rcon-historical-capture-samples-and-windows", + "rcon-materialized-matches", + "rcon-materialized-player-stats", + "rcon-safe-scoreboard-candidates", + "public-scoreboard-historical-matches-and-player-stats", + "weekly-and-monthly-scoreboard-rankings", + "displayed-historical-snapshots", + "live-server-summary-cache", + "player-event-ledger", + ] + for table_name, totals in sorted(table_totals.items()): + summary["rows_read"][table_name] = totals["read"] + summary["rows_inserted"][table_name] = totals["inserted"] + summary["rows_updated"][table_name] = totals["updated"] + summary["rows_skipped"][table_name] = totals["skipped"] + summary["status"] = "ok" if not summary["errors"] else "completed-with-errors" + return summary + + +def _migrate_sqlite_path(db_path: Path, totals: dict[str, dict[str, int]]) -> None: + with closing(sqlite3.connect(db_path)) as sqlite_connection: + sqlite_connection.row_factory = sqlite3.Row + available_tables = { + row["name"] + for row in sqlite_connection.execute( + "SELECT name FROM sqlite_master WHERE type = 'table'" + ).fetchall() + } + tables = [table for table in (*RCON_TABLES, *DISPLAY_TABLES) if table in available_tables] + with connect_display_postgres() as postgres_connection: + postgres_columns = { + table: _postgres_columns(postgres_connection, table) + for table in tables + } + historical_server_ids = _legacy_server03_ids(sqlite_connection) + historical_match_ids = _legacy_match_ids(sqlite_connection, historical_server_ids) + legacy_rcon_target_ids = _legacy_rcon_target03_ids(sqlite_connection) + for table_name in tables: + _copy_table( + sqlite_connection, + postgres_connection, + table_name=table_name, + postgres_columns=postgres_columns[table_name], + totals=totals[table_name], + historical_server_ids=historical_server_ids, + historical_match_ids=historical_match_ids, + legacy_rcon_target_ids=legacy_rcon_target_ids, + ) + + +def _copy_table( + sqlite_connection: sqlite3.Connection, + postgres_connection: Any, + *, + table_name: str, + postgres_columns: list[str], + totals: dict[str, int], + historical_server_ids: set[int], + historical_match_ids: set[int], + legacy_rcon_target_ids: set[int], +) -> None: + sqlite_columns = [ + str(row["name"]) + for row in sqlite_connection.execute(f"PRAGMA table_info({table_name})").fetchall() + ] + columns = [column for column in sqlite_columns if column in postgres_columns] + if not columns: + return + rows = sqlite_connection.execute( + f"SELECT {', '.join(columns)} FROM {table_name}" + ).fetchall() + placeholders = ", ".join(["%s"] * len(columns)) + sql = ( + f"INSERT INTO {table_name} ({', '.join(columns)}) " + f"VALUES ({placeholders}) ON CONFLICT DO NOTHING" + ) + values: list[tuple[object, ...]] = [] + for row in rows: + totals["read"] += 1 + row_dict = dict(row) + if _skip_row( + table_name, + row_dict, + historical_server_ids=historical_server_ids, + historical_match_ids=historical_match_ids, + legacy_rcon_target_ids=legacy_rcon_target_ids, + ): + totals["skipped"] += 1 + continue + values.append(tuple(_postgres_value(column, row_dict[column]) for column in columns)) + with postgres_connection.cursor() as cursor: + for start in range(0, len(values), 1000): + batch = values[start : start + 1000] + cursor.executemany(sql, batch) + inserted = max(0, int(cursor.rowcount or 0)) + totals["inserted"] += inserted + totals["skipped"] += len(batch) - inserted + + +def _migrate_snapshot_files( + snapshots_root: Path, + totals: dict[str, dict[str, int]], + errors: list[object], +) -> None: + snapshot_totals = totals["displayed_historical_snapshots"] + for snapshot_path in sorted(snapshots_root.glob("*/*.json")): + snapshot_totals["read"] += 1 + try: + document = json.loads(snapshot_path.read_text(encoding="utf-8")) + if str(document.get("server_key") or "") == SKIP_SLUG: + snapshot_totals["skipped"] += 1 + continue + before = _snapshot_exists(document) + persist_snapshot_record(document) + snapshot_totals["updated" if before else "inserted"] += 1 + except Exception as error: # noqa: BLE001 - keep migrating neighboring snapshots + snapshot_totals["skipped"] += 1 + errors.append({"source_path": str(snapshot_path), "error": str(error)}) + + +def _snapshot_exists(document: dict[str, object]) -> bool: + with connect_display_postgres() as connection: + row = connection.execute( + """ + SELECT 1 FROM displayed_historical_snapshots + WHERE server_key = %s AND snapshot_type = %s AND metric = %s AND snapshot_window = %s + """, + ( + str(document.get("server_key") or ""), + str(document.get("snapshot_type") or ""), + str(document.get("metric") or ""), + str(document.get("window") or ""), + ), + ).fetchone() + return bool(row) + + +def _skip_row( + table_name: str, + row: dict[str, object], + *, + historical_server_ids: set[int], + historical_match_ids: set[int], + legacy_rcon_target_ids: set[int], +) -> bool: + if row.get("server_slug") == SKIP_SLUG or row.get("slug") == SKIP_SLUG: + return True + if row.get("external_server_id") == SKIP_SLUG or row.get("target_key") == SKIP_SLUG: + return True + if table_name == "historical_matches" and row.get("historical_server_id") in historical_server_ids: + return True + if ( + table_name == "historical_player_match_stats" + and row.get("historical_match_id") in historical_match_ids + ): + return True + if table_name == "rcon_historical_samples" and row.get("target_id") in legacy_rcon_target_ids: + return True + if table_name == "rcon_historical_checkpoints" and row.get("target_id") in legacy_rcon_target_ids: + return True + if table_name == "rcon_historical_competitive_windows" and row.get("target_id") in legacy_rcon_target_ids: + return True + return False + + +def _legacy_server03_ids(connection: sqlite3.Connection) -> set[int]: + if not _has_table(connection, "historical_servers"): + return set() + return { + int(row["id"]) + for row in connection.execute( + "SELECT id FROM historical_servers WHERE slug = ?", + (SKIP_SLUG,), + ).fetchall() + } + + +def _legacy_rcon_target03_ids(connection: sqlite3.Connection) -> set[int]: + if not _has_table(connection, "rcon_historical_targets"): + return set() + return { + int(row["id"]) + for row in connection.execute( + """ + SELECT id FROM rcon_historical_targets + WHERE external_server_id = ? OR target_key = ? + """, + (SKIP_SLUG, SKIP_SLUG), + ).fetchall() + } + + +def _legacy_match_ids(connection: sqlite3.Connection, historical_server_ids: set[int]) -> set[int]: + if not historical_server_ids or not _has_table(connection, "historical_matches"): + return set() + placeholders = ", ".join(["?"] * len(historical_server_ids)) + return { + int(row["id"]) + for row in connection.execute( + f"SELECT id FROM historical_matches WHERE historical_server_id IN ({placeholders})", + tuple(sorted(historical_server_ids)), + ).fetchall() + } + + +def _postgres_columns(connection: Any, table_name: str) -> list[str]: + rows = connection.execute( + """ + SELECT column_name + FROM information_schema.columns + WHERE table_schema = 'public' AND table_name = %s + ORDER BY ordinal_position + """, + (table_name,), + ).fetchall() + return [str(row["column_name"]) for row in rows] + + +def _sync_sequences() -> None: + tables = ( + "game_sources", + "servers", + "server_snapshots", + "historical_servers", + "historical_maps", + "historical_matches", + "historical_players", + "historical_player_match_stats", + "player_event_raw_ledger", + "rcon_historical_targets", + "rcon_historical_capture_runs", + "rcon_historical_samples", + "rcon_historical_competitive_windows", + "rcon_admin_log_events", + "rcon_player_profile_snapshots", + "rcon_materialized_matches", + "rcon_match_player_stats", + "rcon_scoreboard_match_candidates", + ) + with connect_display_postgres() as connection: + for table_name in tables: + connection.execute( + f""" + SELECT setval( + pg_get_serial_sequence(%s, 'id'), + GREATEST(COALESCE((SELECT MAX(id) FROM {table_name}), 1), 1), + TRUE + ) + """, + (table_name,), + ) + + +def _discover_sqlite_paths() -> list[Path]: + configured = get_storage_path() + candidates = {configured} + if configured.parent.exists(): + candidates.update(configured.parent.glob("*.sqlite*")) + return sorted( + path + for path in candidates + if path.exists() + and path.is_file() + and not str(path).endswith(("-shm", "-wal")) + ) + + +def _has_table(connection: sqlite3.Connection, table_name: str) -> bool: + return bool( + connection.execute( + "SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?", + (table_name,), + ).fetchone() + ) + + +def _postgres_value(column: str, value: object) -> object: + if column in {"is_active", "is_teamkill"}: + return bool(value) + return value + + +def main() -> None: + print(json.dumps(migrate_sqlite_to_postgres(), ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/backend/app/sqlite_utils.py b/backend/app/sqlite_utils.py new file mode 100644 index 0000000..7bdf40f --- /dev/null +++ b/backend/app/sqlite_utils.py @@ -0,0 +1,41 @@ +"""Shared SQLite connection helpers for backend persistence layers.""" + +from __future__ import annotations + +import sqlite3 +from pathlib import Path + +from .config import get_sqlite_busy_timeout_ms, get_sqlite_writer_timeout_seconds + + +def connect_sqlite_writer( + db_path: Path, + *, + timeout_seconds: float | None = None, + busy_timeout_ms: int | None = None, +) -> sqlite3.Connection: + """Open one SQLite connection with the common writer policy.""" + resolved_timeout_seconds = ( + get_sqlite_writer_timeout_seconds() + if timeout_seconds is None + else timeout_seconds + ) + resolved_busy_timeout_ms = ( + get_sqlite_busy_timeout_ms() + if busy_timeout_ms is None + else busy_timeout_ms + ) + + connection = sqlite3.connect(db_path, timeout=resolved_timeout_seconds) + connection.row_factory = sqlite3.Row + connection.execute("PRAGMA foreign_keys = ON") + connection.execute("PRAGMA journal_mode = WAL") + connection.execute(f"PRAGMA busy_timeout = {resolved_busy_timeout_ms}") + return connection + + +def connect_sqlite_readonly(db_path: Path) -> sqlite3.Connection: + """Open one read-only SQLite connection with row access enabled.""" + connection = sqlite3.connect(f"file:{db_path}?mode=ro", uri=True) + connection.row_factory = sqlite3.Row + return connection diff --git a/backend/app/storage.py b/backend/app/storage.py new file mode 100644 index 0000000..e64c4ad --- /dev/null +++ b/backend/app/storage.py @@ -0,0 +1,549 @@ +"""Local SQLite persistence for provisional server snapshots.""" + +from __future__ import annotations + +import sqlite3 +from datetime import datetime, timezone +from pathlib import Path +from typing import Iterable, Mapping + +from .config import get_storage_path, use_postgres_rcon_storage +from .sqlite_utils import connect_sqlite_readonly, connect_sqlite_writer + + +DEFAULT_GAME_SOURCE = { + "slug": "current-hll", + "display_name": "Current Hell Let Loose", + "provider_kind": "development", +} +SUMMARY_SNAPSHOT_LIMIT = 6 + + +def resolve_storage_path(*, db_path: Path | None = None) -> Path: + """Resolve the SQLite path used by live snapshot persistence.""" + return db_path or get_storage_path() + + +def initialize_storage(*, db_path: Path | None = None) -> Path: + """Create the local database file and minimal schema when missing.""" + resolved_path = resolve_storage_path(db_path=db_path) + resolved_path.parent.mkdir(parents=True, exist_ok=True) + + with _connect(resolved_path) as connection: + connection.executescript( + """ + CREATE TABLE IF NOT EXISTS game_sources ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + slug TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + provider_kind TEXT NOT NULL, + is_active INTEGER NOT NULL DEFAULT 1, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP + ); + + CREATE TABLE IF NOT EXISTS servers ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + game_source_id INTEGER NOT NULL, + external_server_id TEXT, + server_name TEXT NOT NULL, + region TEXT, + first_seen_at TEXT NOT NULL, + last_seen_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE (game_source_id, external_server_id), + FOREIGN KEY (game_source_id) REFERENCES game_sources(id) + ); + + CREATE TABLE IF NOT EXISTS server_snapshots ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + server_id INTEGER NOT NULL, + captured_at TEXT NOT NULL, + status TEXT NOT NULL, + players INTEGER, + max_players INTEGER, + current_map TEXT, + source_name TEXT NOT NULL, + snapshot_origin TEXT, + source_ref TEXT, + raw_payload_ref TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (server_id) REFERENCES servers(id) + ); + + CREATE INDEX IF NOT EXISTS idx_server_snapshots_server_time + ON server_snapshots(server_id, captured_at); + """ + ) + _ensure_server_snapshot_columns(connection) + + return resolved_path + + +def persist_snapshot_batch( + snapshots: Iterable[Mapping[str, object]], + *, + source_name: str, + captured_at: str, + game_source: Mapping[str, str] | None = None, + db_path: Path | None = None, +) -> dict[str, object]: + """Persist a batch of normalized snapshots into local SQLite storage.""" + source_definition = dict(DEFAULT_GAME_SOURCE) + if game_source is not None: + source_definition.update(game_source) + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import persist_server_snapshots + + return persist_server_snapshots( + snapshots, + source_name=source_name, + captured_at=captured_at, + game_source=source_definition, + ) + resolved_path = initialize_storage(db_path=db_path) + + persisted = 0 + with _connect(resolved_path) as connection: + game_source_id = _upsert_game_source(connection, source_definition) + for snapshot in snapshots: + server_id = _upsert_server( + connection, + game_source_id=game_source_id, + snapshot=snapshot, + captured_at=captured_at, + ) + connection.execute( + """ + INSERT INTO server_snapshots ( + server_id, + captured_at, + status, + players, + max_players, + current_map, + source_name, + snapshot_origin, + source_ref, + raw_payload_ref + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + server_id, + captured_at, + snapshot.get("status"), + snapshot.get("players"), + snapshot.get("max_players"), + snapshot.get("current_map"), + snapshot.get("source_name") or source_name, + snapshot.get("snapshot_origin"), + snapshot.get("source_ref"), + None, + ), + ) + persisted += 1 + + return { + "db_path": str(resolved_path), + "captured_at": captured_at, + "persisted_snapshots": persisted, + "game_source_slug": source_definition["slug"], + } + + +def list_latest_snapshots(*, db_path: Path | None = None) -> list[dict[str, object]]: + """Return the latest persisted snapshot for each known server.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_latest_server_snapshots + + return list_latest_server_snapshots() + resolved_path = resolve_storage_path(db_path=db_path) + if not resolved_path.exists(): + return [] + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + """ + SELECT + servers.id AS server_id, + servers.external_server_id, + servers.server_name, + servers.region, + game_sources.slug AS context, + server_snapshots.source_name, + server_snapshots.snapshot_origin, + server_snapshots.source_ref, + server_snapshots.captured_at, + server_snapshots.status, + server_snapshots.players, + server_snapshots.max_players, + server_snapshots.current_map + FROM servers + INNER JOIN game_sources + ON game_sources.id = servers.game_source_id + INNER JOIN server_snapshots + ON server_snapshots.server_id = servers.id + INNER JOIN ( + SELECT server_id, MAX(captured_at) AS latest_captured_at + FROM server_snapshots + GROUP BY server_id + ) AS latest + ON latest.server_id = server_snapshots.server_id + AND latest.latest_captured_at = server_snapshots.captured_at + ORDER BY servers.server_name ASC + """ + ).fetchall() + items = [_serialize_snapshot_row(row) for row in rows] + return _attach_history_summaries(connection, items) + + +def list_snapshot_history( + *, + db_path: Path | None = None, + limit: int = 20, +) -> list[dict[str, object]]: + """Return recent persisted snapshots across all servers.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_server_snapshot_history + + return list_server_snapshot_history(limit=limit) + resolved_path = resolve_storage_path(db_path=db_path) + if not resolved_path.exists(): + return [] + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + """ + SELECT + servers.id AS server_id, + servers.external_server_id, + servers.server_name, + servers.region, + game_sources.slug AS context, + server_snapshots.source_name, + server_snapshots.snapshot_origin, + server_snapshots.source_ref, + server_snapshots.captured_at, + server_snapshots.status, + server_snapshots.players, + server_snapshots.max_players, + server_snapshots.current_map + FROM server_snapshots + INNER JOIN servers + ON servers.id = server_snapshots.server_id + INNER JOIN game_sources + ON game_sources.id = servers.game_source_id + ORDER BY server_snapshots.captured_at DESC, servers.server_name ASC + LIMIT ? + """, + (limit,), + ).fetchall() + return [_serialize_snapshot_row(row) for row in rows] + + +def list_server_history( + server_id: str, + *, + db_path: Path | None = None, + limit: int = 20, +) -> list[dict[str, object]]: + """Return recent history for one server by numeric id or external id.""" + if use_postgres_rcon_storage(explicit_sqlite_path=db_path): + from .postgres_display_storage import list_server_snapshot_history + + return list_server_snapshot_history(server_id=server_id, limit=limit) + resolved_path = resolve_storage_path(db_path=db_path) + if not resolved_path.exists(): + return [] + server_filter, server_value = _build_server_filter(server_id) + with _connect_readonly(resolved_path) as connection: + rows = connection.execute( + f""" + SELECT + servers.id AS server_id, + servers.external_server_id, + servers.server_name, + servers.region, + game_sources.slug AS context, + server_snapshots.source_name, + server_snapshots.snapshot_origin, + server_snapshots.source_ref, + server_snapshots.captured_at, + server_snapshots.status, + server_snapshots.players, + server_snapshots.max_players, + server_snapshots.current_map + FROM server_snapshots + INNER JOIN servers + ON servers.id = server_snapshots.server_id + INNER JOIN game_sources + ON game_sources.id = servers.game_source_id + WHERE {server_filter} = ? + ORDER BY server_snapshots.captured_at DESC + LIMIT ? + """, + (server_value, limit), + ).fetchall() + return [_serialize_snapshot_row(row) for row in rows] + + +def _connect(db_path: Path) -> sqlite3.Connection: + return connect_sqlite_writer(db_path) + + +def _connect_readonly(db_path: Path) -> sqlite3.Connection: + return connect_sqlite_readonly(db_path) + + +def _upsert_game_source( + connection: sqlite3.Connection, + game_source: Mapping[str, str], +) -> int: + connection.execute( + """ + INSERT INTO game_sources (slug, display_name, provider_kind, is_active) + VALUES (?, ?, ?, 1) + ON CONFLICT(slug) DO UPDATE SET + display_name = excluded.display_name, + provider_kind = excluded.provider_kind, + is_active = 1, + updated_at = CURRENT_TIMESTAMP + """, + ( + game_source["slug"], + game_source["display_name"], + game_source["provider_kind"], + ), + ) + row = connection.execute( + "SELECT id FROM game_sources WHERE slug = ?", + (game_source["slug"],), + ).fetchone() + if row is None: + raise RuntimeError("Failed to resolve game source during snapshot persistence.") + + return int(row["id"]) + + +def _upsert_server( + connection: sqlite3.Connection, + *, + game_source_id: int, + snapshot: Mapping[str, object], + captured_at: str, +) -> int: + external_server_id = snapshot.get("external_server_id") + if not isinstance(external_server_id, str) or not external_server_id.strip(): + external_server_id = _build_fallback_external_id(snapshot) + + server_name = str(snapshot.get("server_name") or "Unknown server") + region = snapshot.get("region") + + connection.execute( + """ + INSERT INTO servers ( + game_source_id, + external_server_id, + server_name, + region, + first_seen_at, + last_seen_at + ) VALUES (?, ?, ?, ?, ?, ?) + ON CONFLICT(game_source_id, external_server_id) DO UPDATE SET + server_name = excluded.server_name, + region = excluded.region, + last_seen_at = excluded.last_seen_at, + updated_at = CURRENT_TIMESTAMP + """, + ( + game_source_id, + external_server_id, + server_name, + region, + captured_at, + captured_at, + ), + ) + row = connection.execute( + """ + SELECT id + FROM servers + WHERE game_source_id = ? AND external_server_id = ? + """, + (game_source_id, external_server_id), + ).fetchone() + if row is None: + raise RuntimeError("Failed to resolve server during snapshot persistence.") + + return int(row["id"]) + + +def _build_fallback_external_id(snapshot: Mapping[str, object]) -> str: + server_name = str(snapshot.get("server_name") or "unknown-server") + normalized = "".join( + character.lower() if character.isalnum() else "-" + for character in server_name + ) + compact = "-".join(part for part in normalized.split("-") if part) + return compact or "unknown-server" + + +def _ensure_server_snapshot_columns(connection: sqlite3.Connection) -> None: + columns = { + str(row["name"]) + for row in connection.execute("PRAGMA table_info(server_snapshots)").fetchall() + } + + if "snapshot_origin" not in columns: + connection.execute("ALTER TABLE server_snapshots ADD COLUMN snapshot_origin TEXT") + if "source_ref" not in columns: + connection.execute("ALTER TABLE server_snapshots ADD COLUMN source_ref TEXT") + + connection.execute( + """ + UPDATE server_snapshots + SET snapshot_origin = CASE + WHEN source_name = 'controlled-placeholder' THEN 'controlled-fallback' + WHEN source_name LIKE '%a2s%' THEN 'real-a2s' + ELSE 'unknown' + END + WHERE snapshot_origin IS NULL OR snapshot_origin = '' + """ + ) + connection.execute( + """ + UPDATE server_snapshots + SET source_ref = source_name + WHERE source_ref IS NULL OR source_ref = '' + """ + ) + _backfill_registered_a2s_source_refs(connection) + + +def _backfill_registered_a2s_source_refs(connection: sqlite3.Connection) -> None: + from .server_targets import load_a2s_targets + + for target in load_a2s_targets(): + if not target.external_server_id: + continue + + connection.execute( + """ + UPDATE server_snapshots + SET source_ref = ? + WHERE snapshot_origin = 'real-a2s' + AND source_ref = source_name + AND server_id IN ( + SELECT id + FROM servers + WHERE external_server_id = ? + ) + """, + ( + f"a2s://{target.host}:{target.query_port}", + target.external_server_id, + ), + ) + + +def _serialize_snapshot_row(row: sqlite3.Row) -> dict[str, object]: + return { + "server_id": row["server_id"], + "external_server_id": row["external_server_id"], + "server_name": row["server_name"], + "region": row["region"], + "context": row["context"], + "source_name": row["source_name"], + "snapshot_origin": row["snapshot_origin"], + "source_ref": row["source_ref"], + "captured_at": row["captured_at"], + "status": row["status"], + "players": row["players"], + "max_players": row["max_players"], + "current_map": row["current_map"], + } + + +def _attach_history_summaries( + connection: sqlite3.Connection, + items: list[dict[str, object]], +) -> list[dict[str, object]]: + enriched_items: list[dict[str, object]] = [] + for item in items: + enriched = dict(item) + enriched["history_summary"] = _build_history_summary( + connection, + int(item["server_id"]), + ) + enriched_items.append(enriched) + + return enriched_items + + +def _build_history_summary( + connection: sqlite3.Connection, + server_id: int, +) -> dict[str, object]: + rows = connection.execute( + """ + SELECT + captured_at, + status, + players + FROM server_snapshots + WHERE server_id = ? + ORDER BY captured_at DESC + LIMIT ? + """, + (server_id, SUMMARY_SNAPSHOT_LIMIT), + ).fetchall() + return _summarize_history_rows(rows) + + +def _summarize_history_rows(rows: list[sqlite3.Row]) -> dict[str, object]: + capture_count = len(rows) + player_values = [ + int(row["players"]) + for row in rows + if row["players"] is not None + ] + online_rows = [row for row in rows if row["status"] == "online"] + latest_captured_at = str(rows[0]["captured_at"]) if rows else None + last_seen_online_at = str(online_rows[0]["captured_at"]) if online_rows else None + + return { + "window_size": SUMMARY_SNAPSHOT_LIMIT, + "recent_capture_count": capture_count, + "recent_online_count": len(online_rows), + "recent_average_players": _round_average(player_values), + "recent_peak_players": max(player_values, default=None), + "last_seen_online_at": last_seen_online_at, + "minutes_since_last_capture": _minutes_since_timestamp(latest_captured_at), + } + + +def _round_average(values: list[int]) -> float | None: + if not values: + return None + + return round(sum(values) / len(values), 1) + + +def _minutes_since_timestamp(timestamp: str | None) -> int | None: + if not timestamp: + return None + + normalized = timestamp.replace("Z", "+00:00") + captured_at = datetime.fromisoformat(normalized) + if captured_at.tzinfo is None: + captured_at = captured_at.replace(tzinfo=timezone.utc) + + delta = datetime.now(timezone.utc) - captured_at.astimezone(timezone.utc) + return max(0, int(delta.total_seconds() // 60)) + + +def _build_server_filter(server_id: str) -> tuple[str, object]: + normalized = server_id.strip() + if normalized.isdigit(): + return "servers.id", int(normalized) + + return "servers.external_server_id", normalized diff --git a/backend/app/storage_diagnostics.py b/backend/app/storage_diagnostics.py new file mode 100644 index 0000000..1ee8042 --- /dev/null +++ b/backend/app/storage_diagnostics.py @@ -0,0 +1,164 @@ +"""Report active PostgreSQL/displayed storage backend and migration parity counts.""" + +from __future__ import annotations + +import json +import sqlite3 +from contextlib import closing + +from .config import get_database_url, get_storage_path, use_postgres_rcon_storage +from .rcon_admin_log_materialization import summarize_rcon_materialization_status +from .rcon_admin_log_storage import initialize_rcon_admin_log_storage +from .sqlite_utils import connect_sqlite_readonly + + +MIGRATED_RCON_TABLES = ( + "rcon_admin_log_events", + "rcon_player_profile_snapshots", + "rcon_materialized_matches", + "rcon_match_player_stats", + "rcon_historical_targets", + "rcon_historical_samples", + "rcon_historical_competitive_windows", + "rcon_scoreboard_match_candidates", +) + + +def build_storage_diagnostics() -> dict[str, object]: + """Return one JSON-safe diagnostic payload for the migrated domains.""" + if use_postgres_rcon_storage(): + from .postgres_rcon_storage import count_migrated_tables + from .postgres_display_storage import table_counts + + rcon_counts = count_migrated_tables() + displayed_counts = table_counts() + backend = "postgresql" + else: + rcon_counts = _count_sqlite_tables() + displayed_counts = {} + backend = "sqlite-fallback" + materialization = summarize_rcon_materialization_status() + return { + "active_storage_backend": backend, + "database_url_configured": bool(get_database_url()), + "sqlite_fallback_path": str(get_storage_path()), + "migrated_domains": [ + "rcon-admin-log-events", + "rcon-player-profile-snapshots", + "rcon-historical-capture-samples-and-windows", + "rcon-materialized-matches", + "rcon-materialized-player-stats", + "rcon-safe-scoreboard-candidates", + "public-scoreboard-historical-matches-and-player-stats", + "weekly-rankings", + "monthly-rankings", + "displayed-historical-snapshots", + "server-summary-and-live-server-cache", + "player-event-ledger", + ], + "table_counts": { + **rcon_counts, + **displayed_counts, + "admin_log_events": rcon_counts.get("rcon_admin_log_events", 0), + "materialized_matches": rcon_counts.get("rcon_materialized_matches", 0), + "player_stats": rcon_counts.get("rcon_match_player_stats", 0), + "public_scoreboard_historical_matches": displayed_counts.get( + "historical_matches", 0 + ), + "weekly_rankings_source_stats": displayed_counts.get( + "historical_player_match_stats", 0 + ), + "monthly_rankings_source_stats": displayed_counts.get( + "historical_player_match_stats", 0 + ), + "server_summary_cache": displayed_counts.get("displayed_historical_snapshots", 0), + "player_event_ledger": displayed_counts.get("player_event_raw_ledger", 0), + "scoreboard_candidates": rcon_counts.get("rcon_scoreboard_match_candidates", 0), + }, + "latest_materialized_matches": materialization["latest_materialized_matches"], + "latest_admin_log_match_end_events": materialization[ + "latest_admin_log_match_end_events" + ], + "match_end_status": materialization["match_end_status"], + "remaining_sqlite_or_file_backed_domains": [ + { + "domain": "public-scoreboard ingestion run and backfill checkpoints", + "displayed_in_frontend": False, + "reason": "operational import bookkeeping is not read by visible pages", + "planned_phase": "phase-3-or-when-scoreboard-import-runs-on-postgresql", + }, + { + "domain": "Elo/MMR tables", + "displayed_in_frontend": False, + "reason": "Elo/MMR remains paused and hidden from visible pages", + "planned_phase": "phase-3", + }, + ], + "sqlite_remaining": [ + "public-scoreboard ingestion run and backfill checkpoints", + "paused Elo/MMR tables", + ], + "scoreboard_correlation": "PostgreSQL safe candidates and migrated trusted historical match URLs are used.", + "external_player_ids": _postgres_external_player_id_diagnostics() + if backend == "postgresql" + else { + "available_in_postgresql": False, + "reason": "PostgreSQL storage is not active.", + }, + "migration_parity_summary": { + "available": backend == "postgresql", + "source_command": "python -m app.sqlite_to_postgres_migration", + "displayed_historical_storage": ( + "postgresql" if backend == "postgresql" else "sqlite-or-file-fallback" + ), + }, + } + + +def _count_sqlite_tables() -> dict[str, int]: + resolved_path = initialize_rcon_admin_log_storage() + counts: dict[str, int] = {} + with closing(connect_sqlite_readonly(resolved_path)) as connection: + for table_name in MIGRATED_RCON_TABLES: + try: + row = connection.execute( + f"SELECT COUNT(*) AS count FROM {table_name}" + ).fetchone() + except sqlite3.Error: + counts[table_name] = 0 + else: + counts[table_name] = int(row["count"] or 0) + return counts + + +def _postgres_external_player_id_diagnostics() -> dict[str, object]: + from .postgres_rcon_storage import connect_postgres + + with connect_postgres() as connection: + row = connection.execute( + """ + SELECT + (SELECT COUNT(*) FROM rcon_match_player_stats + WHERE player_id ~ '^[0-9]{17}$') AS rcon_match_steam_id64_rows, + (SELECT COUNT(*) FROM rcon_player_profile_snapshots + WHERE player_id ~ '^[0-9]{17}$') AS rcon_profile_steam_id64_rows, + (SELECT COUNT(*) FROM historical_players + WHERE steam_id ~ '^[0-9]{17}$') AS scoreboard_player_steam_id64_rows + """ + ).fetchone() + return { + "available_in_postgresql": True, + "rcon_match_steam_id64_rows": int(row["rcon_match_steam_id64_rows"] or 0), + "rcon_profile_steam_id64_rows": int(row["rcon_profile_steam_id64_rows"] or 0), + "scoreboard_player_steam_id64_rows": int( + row["scoreboard_player_steam_id64_rows"] or 0 + ), + } + + +def main() -> None: + print(json.dumps(build_storage_diagnostics(), ensure_ascii=False, indent=2, default=str)) + + +if __name__ == "__main__": + main() diff --git a/backend/app/writer_lock.py b/backend/app/writer_lock.py new file mode 100644 index 0000000..8186ee3 --- /dev/null +++ b/backend/app/writer_lock.py @@ -0,0 +1,255 @@ +"""Shared single-writer lock coordination for backend automation jobs.""" + +from __future__ import annotations + +import json +import os +import socket +import sys +import time +from contextlib import contextmanager +from datetime import datetime, timezone +from pathlib import Path +from uuid import uuid4 + +from .config import ( + get_storage_path, + get_writer_lock_poll_interval_seconds, + get_writer_lock_timeout_seconds, +) + + +class BackendWriterLockTimeoutError(RuntimeError): + """Raised when the shared backend writer lock cannot be acquired in time.""" + + +_ACTIVE_LOCK_DEPTH_BY_PATH: dict[Path, int] = {} +_ACTIVE_LOCK_TOKEN_BY_PATH: dict[Path, str] = {} +CONTAINER_STALE_LOCK_GRACE_SECONDS = 300 + + +def resolve_backend_writer_lock_path(*, storage_path: Path | None = None) -> Path: + """Return the shared lock path derived from the configured SQLite storage path.""" + resolved_storage_path = storage_path or get_storage_path() + return resolved_storage_path.parent / f"{resolved_storage_path.stem}.writer.lock" + + +@contextmanager +def backend_writer_lock( + *, + holder: str, + storage_path: Path | None = None, + timeout_seconds: float | None = None, + poll_interval_seconds: float | None = None, +): + """Acquire the shared backend writer lock with reentrant safety per process.""" + lock_path = resolve_backend_writer_lock_path(storage_path=storage_path).resolve() + if lock_path in _ACTIVE_LOCK_DEPTH_BY_PATH: + _ACTIVE_LOCK_DEPTH_BY_PATH[lock_path] += 1 + try: + yield _read_lock_metadata(lock_path) + finally: + _ACTIVE_LOCK_DEPTH_BY_PATH[lock_path] -= 1 + if _ACTIVE_LOCK_DEPTH_BY_PATH[lock_path] <= 0: + _ACTIVE_LOCK_DEPTH_BY_PATH.pop(lock_path, None) + _ACTIVE_LOCK_TOKEN_BY_PATH.pop(lock_path, None) + return + + metadata = _acquire_backend_writer_lock( + lock_path=lock_path, + holder=holder, + timeout_seconds=get_writer_lock_timeout_seconds() + if timeout_seconds is None + else timeout_seconds, + poll_interval_seconds=get_writer_lock_poll_interval_seconds() + if poll_interval_seconds is None + else poll_interval_seconds, + ) + _ACTIVE_LOCK_DEPTH_BY_PATH[lock_path] = 1 + _ACTIVE_LOCK_TOKEN_BY_PATH[lock_path] = str(metadata["lock_token"]) + try: + yield metadata + finally: + _release_backend_writer_lock(lock_path) + _ACTIVE_LOCK_DEPTH_BY_PATH.pop(lock_path, None) + _ACTIVE_LOCK_TOKEN_BY_PATH.pop(lock_path, None) + + +def build_writer_lock_holder(label: str) -> str: + """Build one readable holder label from the current command line.""" + argv = " ".join(sys.argv).strip() + if argv: + return f"{label} [{argv}]" + return label + + +def _acquire_backend_writer_lock( + *, + lock_path: Path, + holder: str, + timeout_seconds: float, + poll_interval_seconds: float, +) -> dict[str, object]: + if timeout_seconds < 0: + raise ValueError("Writer lock timeout must be zero or positive.") + if poll_interval_seconds <= 0: + raise ValueError("Writer lock poll interval must be positive.") + + lock_path.parent.mkdir(parents=True, exist_ok=True) + deadline = time.monotonic() + timeout_seconds + metadata = _build_lock_metadata(holder=holder) + + while True: + try: + file_descriptor = os.open( + lock_path, + os.O_CREAT | os.O_EXCL | os.O_WRONLY, + ) + except FileExistsError: + existing_metadata = _read_lock_metadata(lock_path) + if _can_clear_stale_lock(existing_metadata): + _remove_lock_file(lock_path) + continue + if time.monotonic() >= deadline: + raise BackendWriterLockTimeoutError( + _build_lock_timeout_message( + lock_path=lock_path, + holder=holder, + timeout_seconds=timeout_seconds, + existing_metadata=existing_metadata, + ) + ) + time.sleep(poll_interval_seconds) + continue + + try: + with os.fdopen(file_descriptor, "w", encoding="utf-8") as handle: + json.dump(metadata, handle, ensure_ascii=True, indent=2) + handle.write("\n") + return metadata + except Exception: + _remove_lock_file(lock_path) + raise + + +def _release_backend_writer_lock(lock_path: Path) -> None: + expected_token = _ACTIVE_LOCK_TOKEN_BY_PATH.get(lock_path) + existing_metadata = _read_lock_metadata(lock_path) + if existing_metadata and expected_token and existing_metadata.get("lock_token") != expected_token: + return + _remove_lock_file(lock_path) + + +def _remove_lock_file(lock_path: Path) -> None: + try: + lock_path.unlink() + except FileNotFoundError: + return + + +def _build_lock_metadata(*, holder: str) -> dict[str, object]: + return { + "lock_token": uuid4().hex, + "holder": holder, + "started_at": _utc_now_iso(), + "hostname": socket.gethostname(), + "pid": os.getpid(), + "cwd": str(Path.cwd()), + } + + +def _read_lock_metadata(lock_path: Path) -> dict[str, object] | None: + try: + return json.loads(lock_path.read_text(encoding="utf-8")) + except (FileNotFoundError, OSError, json.JSONDecodeError): + return None + + +def _can_clear_stale_lock(existing_metadata: dict[str, object] | None) -> bool: + if not existing_metadata: + return False + try: + holder_pid = int(existing_metadata.get("pid")) + except (TypeError, ValueError): + return False + if holder_pid <= 0: + return False + + holder_hostname = str(existing_metadata.get("hostname") or "").strip() + current_hostname = socket.gethostname() + if holder_hostname == current_hostname: + if _is_process_alive(holder_pid): + return False + return True + if not _looks_like_containerized_holder(existing_metadata): + return False + lock_age_seconds = _calculate_lock_age_seconds(existing_metadata) + if lock_age_seconds is None: + return False + if lock_age_seconds < CONTAINER_STALE_LOCK_GRACE_SECONDS: + return False + return True + + +def _is_process_alive(pid: int) -> bool: + if pid == os.getpid(): + return True + try: + os.kill(pid, 0) + except ProcessLookupError: + return False + except PermissionError: + return True + except OSError as exc: + winerror = getattr(exc, "winerror", None) + if winerror in {3, 87} or exc.errno in {3}: + return False + return True + return True + + +def _build_lock_timeout_message( + *, + lock_path: Path, + holder: str, + timeout_seconds: float, + existing_metadata: dict[str, object] | None, +) -> str: + if not existing_metadata: + return ( + f"Writer lock is busy at {lock_path} and could not be acquired within " + f"{timeout_seconds:.1f}s for {holder}." + ) + + existing_holder = existing_metadata.get("holder") or "unknown-holder" + started_at = existing_metadata.get("started_at") or "unknown-started-at" + hostname = existing_metadata.get("hostname") or "unknown-host" + pid = existing_metadata.get("pid") or "unknown-pid" + return ( + f"Writer lock is busy at {lock_path}. Held by {existing_holder} " + f"since {started_at} on {hostname} (pid {pid}). " + f"Timed out after waiting {timeout_seconds:.1f}s for {holder}." + ) + + +def _looks_like_containerized_holder(existing_metadata: dict[str, object]) -> bool: + holder_cwd = str(existing_metadata.get("cwd") or "").strip().lower() + return holder_cwd.startswith("/app") + + +def _calculate_lock_age_seconds(existing_metadata: dict[str, object]) -> float | None: + started_at_raw = str(existing_metadata.get("started_at") or "").strip() + if not started_at_raw: + return None + try: + started_at = datetime.fromisoformat(started_at_raw.replace("Z", "+00:00")) + except ValueError: + return None + if started_at.tzinfo is None: + started_at = started_at.replace(tzinfo=timezone.utc) + delta = datetime.now(timezone.utc) - started_at.astimezone(timezone.utc) + return max(0.0, delta.total_seconds()) + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") diff --git a/backend/data/.gitkeep b/backend/data/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/backend/data/.gitkeep @@ -0,0 +1 @@ + diff --git a/backend/data/snapshots/.gitkeep b/backend/data/snapshots/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/backend/data/snapshots/.gitkeep @@ -0,0 +1 @@ + diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..6ab0fc9 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,2 @@ +# PostgreSQL is used by the phase-1 RCON historical storage migration. +psycopg[binary]>=3.2,<4 diff --git a/backend/tests/test_current_match_payload.py b/backend/tests/test_current_match_payload.py new file mode 100644 index 0000000..51b844d --- /dev/null +++ b/backend/tests/test_current_match_payload.py @@ -0,0 +1,524 @@ +from http import HTTPStatus +from datetime import datetime, timezone +from unittest.mock import patch + +from app.payloads import build_current_match_payload +from app.rcon_admin_log_storage import list_current_match_player_stats, persist_rcon_admin_log_entries +from app.rcon_client import RconServerTarget +from app.routes import resolve_get_payload + + +TARGET = RconServerTarget( + name="Comunidad Hispana #01", + host="127.0.0.1", + port=7779, + password="test-password", + source_name="test-rcon", + external_server_id="comunidad-hispana-01", +) + + +def test_current_match_payload_projects_rich_live_rcon_session_fields(): + data = _build_with_rcon_sample( + { + "normalized": { + "server_name": "Comunidad Hispana #01", + "status": "online", + "current_map": "carentan_warfare", + "game_mode": "Warfare", + "allied_score": 2, + "axis_score": 2, + "allied_players": 0, + "axis_players": 0, + "players": 0, + "max_players": 100, + "match_time_seconds": 5400, + "remaining_match_time_seconds": 0, + }, + "raw_session": {"mapId": "carentan_warfare", "mapName": "CARENTAN"}, + } + ) + + assert data["map"] == "Carentan" + assert data["map_id"] == "carentan_warfare" + assert data["map_pretty_name"] == "Carentan" + assert data["game_mode"] == "Warfare" + assert data["allied_score"] == 2 + assert data["axis_score"] == 2 + assert data["players"] == 0 + assert data["player_count_quality"] == "rcon-session-unverified" + assert data["player_count_source"] == "rcon-session" + assert data["score_source"] == "rcon-session" + assert data["map_source"] == "rcon-session" + assert data["public_scoreboard_url"] == "https://scoreboard.comunidadhll.es" + assert "/games" not in data["public_scoreboard_url"] + + +def test_current_match_payload_preserves_missing_values_as_null(): + data = _build_with_rcon_sample( + { + "normalized": { + "server_name": "Comunidad Hispana #01", + "status": "online", + "current_map": None, + "game_mode": None, + "players": None, + "max_players": None, + }, + "raw_session": {}, + } + ) + + assert data["map"] is None + assert data["map_id"] is None + assert data["game_mode"] is None + assert data["allied_score"] is None + assert data["axis_score"] is None + assert data["players"] is None + assert data["player_count_quality"] is None + assert data["player_count_source"] is None + assert data["score_source"] is None + assert data["map_source"] is None + + +def test_current_match_payload_keeps_explicit_zero_score(): + data = _build_with_rcon_sample( + { + "normalized": { + "server_name": "Comunidad Hispana #01", + "status": "online", + "current_map": "stmariedumont_warfare", + "allied_score": 0, + "axis_score": 0, + }, + "raw_session": { + "mapId": "stmariedumont_warfare", + "mapName": "ST MARIE DU MONT", + }, + } + ) + + assert data["map"] == "St. Marie Du Mont" + assert data["allied_score"] == 0 + assert data["axis_score"] == 0 + assert data["score_source"] == "rcon-session" + + +def test_current_match_payload_fallback_resolves_legacy_rcon_external_id_for_01(): + data = _build_with_snapshot_fallback( + "comunidad-hispana-01", + { + "external_server_id": "rcon:152.114.195.174:7779", + "server_name": "#01 [ESP] Comunidad Hispana", + "status": "online", + "current_map": "St. Marie Du Mont", + "players": 0, + "max_players": 100, + "captured_at": "2026-03-24T14:08:41.008487Z", + }, + ) + + assert data["found"] is True + assert data["map"] == "St. Marie Du Mont" + assert data["map_pretty_name"] == "St. Marie Du Mont" + assert data["status"] == "online" + assert data["players"] == 0 + assert data["max_players"] == 100 + assert data["captured_at"] == "2026-03-24T14:08:41.008487Z" + assert data["updated_at"] == "2026-03-24T14:08:41.008487Z" + assert data["public_scoreboard_url"] == "https://scoreboard.comunidadhll.es" + + +def test_current_match_payload_fallback_resolves_legacy_rcon_source_ref_for_02(): + data = _build_with_snapshot_fallback( + "comunidad-hispana-02", + { + "external_server_id": "snapshot-server-02", + "source_ref": "rcon://152.114.195.150:7879", + "status": "online", + "current_map": "Elsenborn Ridge", + "captured_at": "2026-03-24T14:08:41.008487Z", + }, + ) + + assert data["found"] is True + assert data["server_slug"] == "comunidad-hispana-02" + assert data["map"] == "Elsenborn Ridge" + assert data["map_pretty_name"] == "Elsenborn Ridge" + assert data["public_scoreboard_url"] == "https://scoreboard.comunidadhll.es:5443" + + +def test_current_match_payload_fallback_resolves_community_server_names(): + number_first = _build_with_snapshot_fallback( + "comunidad-hispana-01", + { + "external_server_id": "snapshot-server-01", + "server_name": "#01 [ESP] Comunidad Hispana - Spa Onl", + "current_map": "Mortain", + }, + ) + community_first = _build_with_snapshot_fallback( + "comunidad-hispana-02", + { + "external_server_id": "snapshot-server-02", + "name": "Comunidad Hispana #02", + "current_map": "Carentan", + }, + ) + + assert number_first["found"] is True + assert number_first["map"] == "Mortain" + assert community_first["found"] is True + assert community_first["map"] == "Carentan" + + +def test_current_match_payload_fallback_does_not_match_unknown_snapshot(): + data = _build_with_snapshot_fallback( + "comunidad-hispana-01", + { + "external_server_id": "rcon:203.0.113.10:9000", + "source_ref": "rcon://203.0.113.10:9000", + "server_name": "#03 Comunidad Hispana", + "current_map": "Unknown Match", + }, + ) + + assert data["found"] is False + assert data["map"] is None + assert data["status"] == "unavailable" + + +def test_current_match_route_rejects_unsupported_server(): + status, payload = resolve_get_payload("/api/current-match?server=not-trusted") + + assert status == HTTPStatus.NOT_FOUND + assert payload["status"] == "error" + + +def test_current_match_player_route_rejects_unsupported_server(): + status, payload = resolve_get_payload("/api/current-match/players?server=not-trusted") + + assert status == HTTPStatus.NOT_FOUND + assert payload["status"] == "error" + + +def test_current_match_player_stats_aggregate_safe_admin_log_rows(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": ( + "[2:00 min (120)] KILL: Bravo(Axis/steam-bravo) -> " + "Alpha(Allies/steam-alpha) with MP40" + ), + }, + { + "timestamp": "2026-05-21T10:02:00Z", + "message": ( + "[3:00 min (140)] KILL: Alpha(Allies/steam-alpha) -> " + "Charlie(Allies/steam-charlie) with M1 GARAND" + ), + }, + { + "timestamp": "2026-05-21T10:03:00Z", + "message": ( + "[4:00 min (160)] KILL: Alpha(Allies/steam-alpha) -> " + "Bravo(Axis/steam-bravo) with M1 GARAND" + ), + }, + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + ) + + assert stats["scope"] == "open-admin-log-match-window" + assert stats["confidence"] == "admin-log-boundary" + assert stats["source"] == "rcon-admin-log-current-match-summary" + assert [item["player_name"] for item in stats["items"]] == ["Alpha", "Bravo", "Charlie"] + assert stats["items"][0] == { + "player_name": "Alpha", + "player_id": "steam-alpha", + "team": "Allies", + "kills": 1, + "deaths": 1, + "teamkills": 1, + "deaths_by_teamkill": 0, + "is_connected": None, + "connected": None, + "last_seen_at": "2026-05-21T10:03:00Z", + "favorite_weapon": "M1 GARAND", + "source": "kill", + "confidence": "admin-log-boundary", + } + assert "raw_message" not in stats["items"][0] + + +def test_current_match_player_stats_include_connected_players_without_kills(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": "[2:00 min (120)] CONNECTED Quiet Player (steam-quiet)", + }, + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + ) + + assert stats["scope"] == "open-admin-log-match-window" + assert stats["items"] == [ + { + "player_name": "Quiet Player", + "player_id": "steam-quiet", + "team": None, + "kills": 0, + "deaths": 0, + "teamkills": 0, + "deaths_by_teamkill": 0, + "favorite_weapon": None, + "last_seen_at": "2026-05-21T10:01:00Z", + "is_connected": True, + "connected": True, + "source": "connected", + "confidence": "admin-log-boundary", + } + ] + + +def test_current_match_player_stats_keep_disconnected_participants_visible(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": "[2:00 min (120)] CONNECTED Brief Player (steam-brief)", + }, + { + "timestamp": "2026-05-21T10:05:00Z", + "message": "[6:00 min (180)] DISCONNECTED Brief Player (steam-brief)", + }, + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + ) + + assert stats["items"] == [ + { + "player_name": "Brief Player", + "player_id": "steam-brief", + "team": None, + "kills": 0, + "deaths": 0, + "teamkills": 0, + "deaths_by_teamkill": 0, + "favorite_weapon": None, + "last_seen_at": "2026-05-21T10:05:00Z", + "is_connected": False, + "connected": False, + "source": "connected,disconnected", + "confidence": "admin-log-boundary", + } + ] + + +def test_current_match_player_stats_include_victim_only_players(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": ( + "[2:00 min (120)] KILL: Killer One(Axis/steam-killer) -> " + "Victim Only(Allies/steam-victim) with MP40" + ), + }, + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + ) + by_name = {item["player_name"]: item for item in stats["items"]} + + assert by_name["Victim Only"]["kills"] == 0 + assert by_name["Victim Only"]["deaths"] == 1 + assert by_name["Victim Only"]["favorite_weapon"] is None + + +def test_current_match_player_stats_exclude_players_before_open_match_start(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T09:55:00Z", + "message": "[0:30 min (90)] CONNECTED Old Match Player (steam-old)", + }, + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": "[2:00 min (120)] CONNECTED New Match Player (steam-new)", + }, + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + ) + + assert [item["player_name"] for item in stats["items"]] == ["New Match Player"] + + +def test_current_match_player_stats_sort_connected_before_disconnected_with_same_stats(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": "[2:00 min (120)] CONNECTED Connected Alpha (steam-connected)", + }, + { + "timestamp": "2026-05-21T10:02:00Z", + "message": "[3:00 min (140)] CONNECTED Disconnected Bravo (steam-disconnected)", + }, + { + "timestamp": "2026-05-21T10:03:00Z", + "message": "[4:00 min (160)] DISCONNECTED Disconnected Bravo (steam-disconnected)", + }, + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + ) + + assert [item["player_name"] for item in stats["items"]] == [ + "Connected Alpha", + "Disconnected Bravo", + ] + + +def test_current_match_player_stats_filter_stale_recent_events(tmp_path): + db_path = tmp_path / "admin-log.sqlite3" + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-21T09:30:00Z", + "message": ( + "[1:00 min (1779355800)] KILL: Old Killer(Allies/steam-old) -> " + "Old Victim(Axis/steam-victim-old) with M1 GARAND" + ), + } + ], + db_path=db_path, + ) + + stats = list_current_match_player_stats( + server_key="comunidad-hispana-01", + db_path=db_path, + now=datetime(2026, 5, 21, 10, 0, tzinfo=timezone.utc), + ) + + assert stats["scope"] == "no-current-match-events" + assert stats["confidence"] == "stale-filtered" + assert stats["items"] == [] + + +def _build_with_rcon_sample(sample: dict[str, object]) -> dict[str, object]: + with ( + patch("app.payloads.load_rcon_targets", return_value=(TARGET,)), + patch("app.payloads.query_live_server_sample", return_value=sample), + ): + payload = build_current_match_payload(server_slug="comunidad-hispana-01") + return payload["data"] + + +def _build_with_snapshot_fallback( + server_slug: str, + item: dict[str, object], +) -> dict[str, object]: + with ( + patch("app.payloads._query_current_match_rcon_sample", return_value=None), + patch( + "app.payloads.build_servers_payload", + return_value={ + "status": "ok", + "data": { + "last_snapshot_at": "2026-03-24T14:08:41.008487Z", + "items": [item], + }, + }, + ), + ): + payload = build_current_match_payload(server_slug=server_slug) + return payload["data"] diff --git a/backend/tests/test_database_maintenance.py b/backend/tests/test_database_maintenance.py new file mode 100644 index 0000000..e0af8aa --- /dev/null +++ b/backend/tests/test_database_maintenance.py @@ -0,0 +1,448 @@ +from __future__ import annotations + +import io +import json +import sqlite3 +import tempfile +import unittest +from contextlib import closing, redirect_stdout +from datetime import datetime, timedelta, timezone +from pathlib import Path + +from app.database_maintenance import run_database_maintenance_cleanup +from app.rcon_admin_log_materialization import MATCH_RESULT_SOURCE, initialize_rcon_materialized_storage +from app.rcon_admin_log_storage import initialize_rcon_admin_log_storage +from app.storage import initialize_storage + + +class DatabaseMaintenanceTests(unittest.TestCase): + def test_dry_run_does_not_delete(self) -> None: + with _temp_db() as db_path: + _insert_server_snapshot(db_path, snapshot_id=1, captured_at="2026-05-01T00:00:00Z") + + payload = run_database_maintenance_cleanup( + db_path=db_path, + now="2026-06-20T12:00:00Z", + ) + + self.assertEqual(payload["status"], "ok") + self.assertEqual(payload["mode"], "dry-run") + with closing(sqlite3.connect(db_path)) as connection: + self.assertEqual( + connection.execute("SELECT COUNT(*) FROM server_snapshots").fetchone()[0], + 1, + ) + + def test_apply_deletes_old_server_snapshots(self) -> None: + with _temp_db() as db_path: + _insert_server_snapshot(db_path, snapshot_id=1, captured_at="2026-05-01T00:00:00Z") + _insert_server_snapshot(db_path, snapshot_id=2, captured_at="2026-06-18T00:00:00Z") + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-20T12:00:00Z", + recent_matches_keep=1, + ) + + with closing(sqlite3.connect(db_path)) as connection: + ids = [row[0] for row in connection.execute("SELECT id FROM server_snapshots ORDER BY id")] + self.assertEqual(ids, [2]) + + def test_apply_deletes_old_noncritical_admin_log_events(self) -> None: + with _temp_db() as db_path: + _insert_admin_log_event( + db_path, + event_id=1, + event_type="chat", + event_timestamp="2026-04-01T00:00:00Z", + server_time=100, + ) + _insert_admin_log_event( + db_path, + event_id=2, + event_type="chat", + event_timestamp="2026-06-15T00:00:00Z", + server_time=200, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-20T12:00:00Z", + ) + + with closing(sqlite3.connect(db_path)) as connection: + remaining = [ + tuple(row) + for row in connection.execute( + "SELECT id, event_type FROM rcon_admin_log_events ORDER BY id" + ) + ] + self.assertEqual(remaining, [(2, "chat")]) + + def test_apply_preserves_critical_events_within_retention(self) -> None: + with _temp_db() as db_path: + _insert_admin_log_event( + db_path, + event_id=1, + event_type="kill", + event_timestamp="2026-06-10T00:00:00Z", + server_time=100, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-20T12:00:00Z", + ) + + with closing(sqlite3.connect(db_path)) as connection: + count = connection.execute( + "SELECT COUNT(*) FROM rcon_admin_log_events WHERE event_type = 'kill'" + ).fetchone()[0] + self.assertEqual(count, 1) + + def test_apply_preserves_latest_100_materialized_matches(self) -> None: + with _temp_db() as db_path: + for index in range(101): + ended_at = ( + datetime(2026, 1, 1, 12, tzinfo=timezone.utc) + timedelta(days=index) + ).isoformat().replace("+00:00", "Z") + _insert_materialized_match( + db_path, + match_id=index + 1, + match_key=f"match-{index + 1}", + ended_at=ended_at, + server_time_start=(index + 1) * 10, + server_time_end=(index + 1) * 10 + 5, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-20T12:00:00Z", + ) + + with closing(sqlite3.connect(db_path)) as connection: + remaining = connection.execute( + "SELECT COUNT(*) FROM rcon_materialized_matches" + ).fetchone()[0] + oldest = connection.execute( + "SELECT COUNT(*) FROM rcon_materialized_matches WHERE match_key = 'match-1'" + ).fetchone()[0] + self.assertEqual(remaining, 100) + self.assertEqual(oldest, 0) + + def test_apply_preserves_current_month_matches(self) -> None: + with _temp_db() as db_path: + _insert_materialized_match( + db_path, + match_id=1, + match_key="old", + ended_at="2026-01-10T12:00:00Z", + server_time_start=10, + server_time_end=20, + ) + _insert_materialized_match( + db_path, + match_id=2, + match_key="current-month", + ended_at="2026-06-03T12:00:00Z", + server_time_start=30, + server_time_end=40, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-20T12:00:00Z", + recent_matches_keep=1, + ) + + with closing(sqlite3.connect(db_path)) as connection: + keys = [row[0] for row in connection.execute("SELECT match_key FROM rcon_materialized_matches")] + self.assertEqual(keys, ["current-month"]) + + def test_apply_preserves_previous_month_when_now_day_is_early(self) -> None: + with _temp_db() as db_path: + _insert_materialized_match( + db_path, + match_id=1, + match_key="previous-month", + ended_at="2026-05-15T12:00:00Z", + server_time_start=10, + server_time_end=20, + ) + _insert_materialized_match( + db_path, + match_id=2, + match_key="older", + ended_at="2026-04-15T12:00:00Z", + server_time_start=30, + server_time_end=40, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-05T12:00:00Z", + recent_matches_keep=1, + ) + + with closing(sqlite3.connect(db_path)) as connection: + keys = [row[0] for row in connection.execute("SELECT match_key FROM rcon_materialized_matches")] + self.assertEqual(keys, ["previous-month"]) + + def test_apply_preserves_current_week(self) -> None: + with _temp_db() as db_path: + _insert_materialized_match( + db_path, + match_id=1, + match_key="current-week", + ended_at="2026-06-10T12:00:00Z", + server_time_start=10, + server_time_end=20, + ) + _insert_materialized_match( + db_path, + match_id=2, + match_key="older", + ended_at="2026-05-01T12:00:00Z", + server_time_start=30, + server_time_end=40, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-10T13:00:00Z", + recent_matches_keep=1, + ) + + with closing(sqlite3.connect(db_path)) as connection: + keys = [row[0] for row in connection.execute("SELECT match_key FROM rcon_materialized_matches")] + self.assertEqual(keys, ["current-week"]) + + def test_apply_preserves_previous_week_when_fallback_may_need_it(self) -> None: + with _temp_db() as db_path: + _insert_materialized_match( + db_path, + match_id=1, + match_key="previous-week", + ended_at="2026-06-03T12:00:00Z", + server_time_start=10, + server_time_end=20, + ) + _insert_materialized_match( + db_path, + match_id=2, + match_key="current-week-sample", + ended_at="2026-06-09T12:00:00Z", + server_time_start=30, + server_time_end=40, + ) + _insert_materialized_match( + db_path, + match_id=3, + match_key="older", + ended_at="2026-05-01T12:00:00Z", + server_time_start=50, + server_time_end=60, + ) + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-10T13:00:00Z", + recent_matches_keep=1, + ) + + with closing(sqlite3.connect(db_path)) as connection: + keys = { + row[0] + for row in connection.execute("SELECT match_key FROM rcon_materialized_matches") + } + self.assertEqual(keys, {"previous-week", "current-week-sample"}) + + def test_apply_deletes_old_non_protected_match_and_child_stats(self) -> None: + with _temp_db() as db_path: + _insert_materialized_match( + db_path, + match_id=1, + match_key="delete-me", + ended_at="2026-01-10T12:00:00Z", + server_time_start=10, + server_time_end=20, + ) + _insert_materialized_match( + db_path, + match_id=2, + match_key="keep-me", + ended_at="2026-06-18T12:00:00Z", + server_time_start=30, + server_time_end=40, + ) + _insert_player_stat(db_path, match_key="delete-me", player_id="player-1") + _insert_player_stat(db_path, match_key="keep-me", player_id="player-2") + + run_database_maintenance_cleanup( + apply=True, + db_path=db_path, + now="2026-06-20T12:00:00Z", + recent_matches_keep=1, + ) + + with closing(sqlite3.connect(db_path)) as connection: + deleted_match_count = connection.execute( + "SELECT COUNT(*) FROM rcon_materialized_matches WHERE match_key = 'delete-me'" + ).fetchone()[0] + deleted_stat_count = connection.execute( + "SELECT COUNT(*) FROM rcon_match_player_stats WHERE match_key = 'delete-me'" + ).fetchone()[0] + kept_stat_count = connection.execute( + "SELECT COUNT(*) FROM rcon_match_player_stats WHERE match_key = 'keep-me'" + ).fetchone()[0] + self.assertEqual(deleted_match_count, 0) + self.assertEqual(deleted_stat_count, 0) + self.assertEqual(kept_stat_count, 1) + + def test_missing_optional_tables_are_logged_and_do_not_crash(self) -> None: + with _temp_db(create_schema=False) as db_path: + stream = io.StringIO() + with redirect_stdout(stream): + payload = run_database_maintenance_cleanup( + db_path=db_path, + now="2026-06-20T12:00:00Z", + ) + + self.assertEqual(payload["status"], "ok") + self.assertIn("database-maintenance-table-skipped", stream.getvalue()) + + +def _temp_db(*, create_schema: bool = True): + class _TempDbContext: + def __enter__(self) -> Path: + self._tmpdir = tempfile.TemporaryDirectory(ignore_cleanup_errors=True) + self.db_path = Path(self._tmpdir.name) / "maintenance.sqlite3" + if create_schema: + initialize_storage(db_path=self.db_path) + initialize_rcon_admin_log_storage(db_path=self.db_path) + initialize_rcon_materialized_storage(db_path=self.db_path) + return self.db_path + + def __exit__(self, exc_type, exc, tb) -> None: + self._tmpdir.cleanup() + + return _TempDbContext() + + +def _insert_server_snapshot(db_path: Path, *, snapshot_id: int, captured_at: str) -> None: + with closing(sqlite3.connect(db_path)) as connection: + connection.execute( + """ + INSERT OR IGNORE INTO game_sources ( + id, slug, display_name, provider_kind, is_active, created_at, updated_at + ) VALUES (1, 'current-hll', 'Current Hell Let Loose', 'development', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) + """ + ) + connection.execute( + """ + INSERT OR IGNORE INTO servers ( + id, game_source_id, external_server_id, server_name, region, first_seen_at, last_seen_at + ) VALUES (1, 1, 'server-1', 'Server 1', 'ES', ?, ?) + """, + (captured_at, captured_at), + ) + connection.execute( + """ + INSERT INTO server_snapshots ( + id, server_id, captured_at, status, players, max_players, current_map, source_name + ) VALUES (?, 1, ?, 'online', 10, 100, 'hurtgen', 'test') + """, + (snapshot_id, captured_at), + ) + connection.commit() + + +def _insert_admin_log_event( + db_path: Path, + *, + event_id: int, + event_type: str, + event_timestamp: str, + server_time: int, +) -> None: + with closing(sqlite3.connect(db_path)) as connection: + connection.execute( + """ + INSERT INTO rcon_admin_log_events ( + id, target_key, external_server_id, event_timestamp, server_time, + relative_time, event_type, raw_message, canonical_message, + parsed_payload_json, raw_entry_json + ) VALUES (?, 'comunidad-hispana-01', 'comunidad-hispana-01', ?, ?, '', ?, '', '', '{}', '{}') + """, + (event_id, event_timestamp, server_time, event_type), + ) + connection.commit() + + +def _insert_materialized_match( + db_path: Path, + *, + match_id: int, + match_key: str, + ended_at: str, + server_time_start: int, + server_time_end: int, +) -> None: + started_at = _shift_iso(ended_at, hours=-1) + with closing(sqlite3.connect(db_path)) as connection: + connection.execute( + """ + INSERT INTO rcon_materialized_matches ( + id, target_key, external_server_id, match_key, map_name, map_pretty_name, + game_mode, started_server_time, ended_server_time, started_at, ended_at, + allied_score, axis_score, winner, confidence_mode, source_basis + ) VALUES (?, 'comunidad-hispana-01', 'comunidad-hispana-01', ?, 'hurtgen', 'Hurtgen Forest', + 'warfare', ?, ?, ?, ?, 5, 3, 'allied', 'exact', ?) + """, + ( + match_id, + match_key, + server_time_start, + server_time_end, + started_at, + ended_at, + MATCH_RESULT_SOURCE, + ), + ) + connection.commit() + + +def _insert_player_stat(db_path: Path, *, match_key: str, player_id: str) -> None: + with closing(sqlite3.connect(db_path)) as connection: + connection.execute( + """ + INSERT INTO rcon_match_player_stats ( + target_key, match_key, player_id, player_name, team, + kills, deaths, teamkills, deaths_by_teamkill, + weapons_json, death_by_weapons_json, most_killed_json, death_by_json + ) VALUES ( + 'comunidad-hispana-01', ?, ?, ?, 'Allies', + 1, 1, 0, 0, '{}', '{}', '{}', '{}' + ) + """, + (match_key, player_id, player_id), + ) + connection.commit() + + +def _shift_iso(value: str, *, hours: int) -> str: + point = datetime.fromisoformat(value.replace("Z", "+00:00")).astimezone(timezone.utc) + shifted = point + timedelta(hours=hours) + return shifted.isoformat().replace("+00:00", "Z") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_historical_runner_maintenance.py b/backend/tests/test_historical_runner_maintenance.py new file mode 100644 index 0000000..10d0513 --- /dev/null +++ b/backend/tests/test_historical_runner_maintenance.py @@ -0,0 +1,153 @@ +from __future__ import annotations + +import io +import os +import unittest +from contextlib import nullcontext, redirect_stdout +from datetime import datetime, timezone +from unittest.mock import patch + +import app.historical_runner as historical_runner +from app.historical_runner import _maybe_run_database_maintenance, _run_refresh_with_retries + + +class HistoricalRunnerMaintenanceTests(unittest.TestCase): + def setUp(self) -> None: + historical_runner._LAST_DATABASE_MAINTENANCE_RUN_AT = None + + def tearDown(self) -> None: + historical_runner._LAST_DATABASE_MAINTENANCE_RUN_AT = None + + def test_scheduler_disabled_does_not_call_cleanup(self) -> None: + with ( + patch.dict(os.environ, {"HLL_DB_MAINTENANCE_ENABLED": "false"}, clear=False), + patch("app.historical_runner.run_database_maintenance_cleanup") as cleanup, + ): + result = _maybe_run_database_maintenance( + now=datetime(2026, 6, 20, 12, tzinfo=timezone.utc) + ) + + cleanup.assert_not_called() + self.assertEqual(result["status"], "skipped") + self.assertEqual(result["reason"], "disabled") + + def test_scheduler_enabled_but_not_due_does_not_call_cleanup(self) -> None: + with ( + patch.dict( + os.environ, + { + "HLL_DB_MAINTENANCE_ENABLED": "true", + "HLL_DB_MAINTENANCE_INTERVAL_SECONDS": "43200", + }, + clear=False, + ), + patch( + "app.historical_runner.run_database_maintenance_cleanup", + return_value={"status": "ok"}, + ) as cleanup, + ): + first = _maybe_run_database_maintenance( + now=datetime(2026, 6, 20, 0, tzinfo=timezone.utc) + ) + second = _maybe_run_database_maintenance( + now=datetime(2026, 6, 20, 1, tzinfo=timezone.utc) + ) + + self.assertEqual(first["status"], "ok") + self.assertEqual(second["status"], "skipped") + self.assertEqual(second["reason"], "not-due") + cleanup.assert_called_once() + + def test_scheduler_enabled_and_due_calls_cleanup(self) -> None: + with ( + patch.dict(os.environ, {"HLL_DB_MAINTENANCE_ENABLED": "true"}, clear=False), + patch( + "app.historical_runner.run_database_maintenance_cleanup", + return_value={"status": "ok"}, + ) as cleanup, + ): + result = _maybe_run_database_maintenance( + now=datetime(2026, 6, 20, 12, tzinfo=timezone.utc) + ) + + cleanup.assert_called_once() + self.assertEqual(result["status"], "ok") + + def test_cleanup_exception_is_logged_and_runner_continues(self) -> None: + stream = io.StringIO() + with ( + patch.dict(os.environ, {"HLL_DB_MAINTENANCE_ENABLED": "true"}, clear=False), + patch("app.historical_runner.backend_writer_lock", return_value=nullcontext()), + patch( + "app.historical_runner._run_primary_rcon_capture", + return_value={"status": "ok", "targets": []}, + ), + patch( + "app.historical_runner.run_incremental_refresh", + return_value={"status": "ok"}, + ), + patch( + "app.historical_runner.generate_historical_snapshots", + return_value={"status": "ok"}, + ), + patch( + "app.historical_runner.rebuild_elo_mmr_models", + return_value={"status": "ok"}, + ), + patch( + "app.historical_runner.run_database_maintenance_cleanup", + side_effect=RuntimeError("maintenance failed"), + ), + redirect_stdout(stream), + ): + result = _run_refresh_with_retries( + max_retries=0, + retry_delay_seconds=0, + server_slug="comunidad-hispana-01", + max_pages=None, + page_size=None, + run_number=1, + ) + + self.assertEqual(result["status"], "ok") + self.assertEqual(result["database_maintenance_result"]["status"], "error") + self.assertIn("database-maintenance-scheduler-failed", stream.getvalue()) + + def test_interval_parsing_handles_invalid_values_safely(self) -> None: + with patch.dict( + os.environ, + { + "HLL_DB_MAINTENANCE_ENABLED": "true", + "HLL_DB_MAINTENANCE_INTERVAL_SECONDS": "bad", + }, + clear=False, + ): + interval_seconds, source = historical_runner._resolve_db_maintenance_interval_seconds() + + self.assertEqual(interval_seconds, 43200) + self.assertEqual(source, "default-invalid-env-fallback") + + def test_maintenance_state_is_tracked_in_process(self) -> None: + with ( + patch.dict( + os.environ, + { + "HLL_DB_MAINTENANCE_ENABLED": "true", + "HLL_DB_MAINTENANCE_INTERVAL_SECONDS": "3600", + }, + clear=False, + ), + patch( + "app.historical_runner.run_database_maintenance_cleanup", + return_value={"status": "ok"}, + ), + ): + _maybe_run_database_maintenance(now=datetime(2026, 6, 20, 12, tzinfo=timezone.utc)) + self.assertEqual( + historical_runner._LAST_DATABASE_MAINTENANCE_RUN_AT, + datetime(2026, 6, 20, 12, tzinfo=timezone.utc), + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_historical_snapshot_refresh.py b/backend/tests/test_historical_snapshot_refresh.py new file mode 100644 index 0000000..06c8c47 --- /dev/null +++ b/backend/tests/test_historical_snapshot_refresh.py @@ -0,0 +1,126 @@ +"""Regression coverage for historical snapshot runner refreshes.""" + +from __future__ import annotations + +import io +import json +import os +import unittest +from contextlib import nullcontext, redirect_stdout +from datetime import datetime, timezone +from unittest.mock import patch + +from app.config import ( + get_historical_refresh_interval_seconds, + get_historical_refresh_max_retries, + get_historical_refresh_retry_delay_seconds, +) +from app.historical_runner import _run_refresh_with_retries, run_periodic_historical_refresh +from app.historical_snapshots import _normalize_snapshot_limit +from app.postgres_display_storage import _json_payload_default +from app.rcon_historical_read_model import ( + _calculate_coverage_hours, + _calculate_duration_seconds, +) + + +class HistoricalSnapshotRefreshTests(unittest.TestCase): + def test_runner_numeric_env_values_are_parsed_before_use(self) -> None: + with patch.dict( + os.environ, + { + "HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS": "300", + "HLL_HISTORICAL_REFRESH_MAX_RETRIES": "4", + "HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS": "0.5", + }, + clear=False, + ): + self.assertEqual(get_historical_refresh_interval_seconds(), 300) + self.assertEqual(get_historical_refresh_max_retries(), 4) + self.assertEqual(get_historical_refresh_retry_delay_seconds(), 0.5) + + def test_runner_numeric_env_values_fail_with_clear_names(self) -> None: + with patch.dict( + os.environ, + {"HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS": "hourly"}, + clear=False, + ): + with self.assertRaisesRegex( + ValueError, + "HLL_HISTORICAL_SNAPSHOT_REFRESH_INTERVAL_SECONDS must be an integer", + ): + get_historical_refresh_interval_seconds() + + def test_rcon_coverage_accepts_postgres_datetime_values(self) -> None: + start = datetime(2026, 5, 21, 10, 0, tzinfo=timezone.utc) + end = datetime(2026, 5, 21, 11, 30, tzinfo=timezone.utc) + + self.assertEqual(_calculate_coverage_hours(start, end), 1.5) + self.assertEqual(_calculate_duration_seconds(start, end), 5400) + + def test_snapshot_limits_are_numeric_before_snapshot_queries(self) -> None: + self.assertEqual(_normalize_snapshot_limit("recent_matches_limit", "10"), 10) + with self.assertRaisesRegex(ValueError, "recent_matches_limit"): + _normalize_snapshot_limit("recent_matches_limit", "ten") + + def test_postgres_snapshot_payload_serializes_datetime_values(self) -> None: + payload = { + "captured_at": datetime(2026, 5, 21, 20, 12, 54, tzinfo=timezone.utc), + } + + self.assertEqual( + json.loads(json.dumps(payload, default=_json_payload_default)), + {"captured_at": "2026-05-21T20:12:54Z"}, + ) + + def test_runner_failure_log_includes_exception_type_and_traceback(self) -> None: + stream = io.StringIO() + with ( + patch("app.historical_runner.backend_writer_lock", return_value=nullcontext()), + patch( + "app.historical_runner._run_primary_rcon_capture", + side_effect=TypeError("bad timestamp"), + ), + redirect_stdout(stream), + ): + result = _run_refresh_with_retries( + max_retries=0, + retry_delay_seconds=0, + server_slug=None, + max_pages=None, + page_size=None, + run_number=1, + ) + + self.assertEqual(result["status"], "error") + self.assertEqual(result["error_type"], "TypeError") + self.assertIn("Traceback", result["traceback"]) + self.assertIn('"event": "historical-refresh-attempt-failed"', stream.getvalue()) + + def test_runner_success_log_serializes_datetime_values(self) -> None: + stream = io.StringIO() + with ( + patch( + "app.historical_runner._run_refresh_with_retries", + return_value={ + "status": "ok", + "rcon_capture_result": { + "captured_at": datetime(2026, 5, 22, tzinfo=timezone.utc), + }, + }, + ), + redirect_stdout(stream), + ): + run_periodic_historical_refresh( + interval_seconds=1, + max_retries=0, + retry_delay_seconds=0, + max_runs=1, + ) + + self.assertIn('"status": "ok"', stream.getvalue()) + self.assertIn('"captured_at": "2026-05-22 00:00:00+00:00"', stream.getvalue()) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_json_serialization.py b/backend/tests/test_json_serialization.py new file mode 100644 index 0000000..be237e3 --- /dev/null +++ b/backend/tests/test_json_serialization.py @@ -0,0 +1,27 @@ +"""Regression coverage for API JSON encoding of PostgreSQL value types.""" + +from __future__ import annotations + +import json +import unittest +from datetime import date, datetime, timezone + +from app.main import _json_default + + +class JsonSerializationTests(unittest.TestCase): + def test_json_default_serializes_postgres_datetime_and_date_values(self) -> None: + payload = { + "started_at": datetime(2026, 5, 21, 10, 11, 12, tzinfo=timezone.utc), + "day": date(2026, 5, 21), + } + + encoded = json.loads(json.dumps(payload, default=_json_default)) + + self.assertEqual( + encoded, + { + "started_at": "2026-05-21T10:11:12+00:00", + "day": "2026-05-21", + }, + ) diff --git a/backend/tests/test_rcon_admin_log_parser.py b/backend/tests/test_rcon_admin_log_parser.py new file mode 100644 index 0000000..94176b6 --- /dev/null +++ b/backend/tests/test_rcon_admin_log_parser.py @@ -0,0 +1,166 @@ +from app.rcon_admin_log_parser import parse_rcon_admin_log_message + + +from app.rcon_admin_log_parser import parse_rcon_player_profile_snapshot + + +def test_parse_match_start(): + parsed = parse_rcon_admin_log_message( + "[2:09:15 hours (1779178245)] MATCH START UTAH BEACH Warfare" + ) + + assert parsed.event_type == "match_start" + assert parsed.server_time == 1779178245 + assert parsed.map_name == "UTAH BEACH" + assert parsed.game_mode == "Warfare" + + +def test_parse_match_end(): + parsed = parse_rcon_admin_log_message( + "[20:36:53 hours (1779111786)] MATCH ENDED `ST MARIE DU MONT Warfare` ALLIED (5 - 0) AXIS " + ) + + assert parsed.event_type == "match_end" + assert parsed.map_name == "ST MARIE DU MONT Warfare" + assert parsed.allied_score == 5 + assert parsed.axis_score == 0 + assert parsed.winner == "allied" + + +def test_parse_kill(): + parsed = parse_rcon_admin_log_message( + "[1:20:19 hours (1779181181)] KILL: AntonioPruna(Allies/76561198000000000) -> " + "[7DV] NEⓇA TACTICAL FEMB✡Y(Axis/76561199000000000) with M1 GARAND" + ) + + assert parsed.event_type == "kill" + assert parsed.killer_name == "AntonioPruna" + assert parsed.killer_team == "Allies" + assert parsed.killer_id == "76561198000000000" + assert parsed.victim_name == "[7DV] NEⓇA TACTICAL FEMB✡Y" + assert parsed.victim_team == "Axis" + assert parsed.victim_id == "76561199000000000" + assert parsed.weapon == "M1 GARAND" + + +def test_parse_team_switch(): + parsed = parse_rcon_admin_log_message( + "[21:34:19 hours (1779108340)] TEAMSWITCH Ekenef (None > Allies)" + ) + + assert parsed.event_type == "team_switch" + assert parsed.player_name == "Ekenef" + assert parsed.from_team == "None" + assert parsed.to_team == "Allies" + + +def test_parse_connected(): + parsed = parse_rcon_admin_log_message( + "[21:34:22 hours (1779108337)] CONNECTED Ekenef (76561198109813520)" + ) + + assert parsed.event_type == "connected" + assert parsed.player_name == "Ekenef" + assert parsed.player_id == "76561198109813520" + + +def test_parse_disconnected(): + parsed = parse_rcon_admin_log_message( + "[21:10:53 hours (1779109746)] DISCONNECTED [BxB] Rab◯l◯k◯ (76561198111111111)" + ) + + assert parsed.event_type == "disconnected" + assert parsed.player_name == "[BxB] Rab◯l◯k◯" + assert parsed.player_id == "76561198111111111" + + +def test_parse_chat(): + parsed = parse_rcon_admin_log_message( + "[18:38:35 hours (1779118884)] CHAT[Team][BXB Ivanxu(Axis/6215e24a1f05c5815ed9e8bf185f94fd)]: !vip" + ) + + assert parsed.event_type == "chat" + assert parsed.chat_scope == "Team" + assert parsed.player_name == "BXB Ivanxu" + assert parsed.chat_team == "Axis" + assert parsed.player_id == "6215e24a1f05c5815ed9e8bf185f94fd" + assert parsed.content == "!vip" + + +def test_parse_kick(): + parsed = parse_rcon_admin_log_message( + "[2:09:10 hours (1779178249)] KICK: [[7DV] NEⓇA TACTICAL FEMB✡Y] has been kicked. " + "[Making free spaces for members of the Spanish Discord community.]" + ) + + assert parsed.event_type == "kick" + assert parsed.player_name == "[7DV] NEⓇA TACTICAL FEMB✡Y" + assert "Making free spaces" in parsed.reason + + +def test_parse_message_profile(): + parsed = parse_rcon_admin_log_message( + "[21:34:19 hours (1779108340)] MESSAGE: player [Ekenef(76561198109813520)], " + "content [─ Ekenef ─\\n▒ Totales ▒\\nbajas : 141 (6 TKs)\\nmuertes : 268 (5 TKs)]" + ) + + assert parsed.event_type == "message" + assert parsed.player_name == "Ekenef" + assert parsed.player_id == "76561198109813520" + assert "bajas : 141" in parsed.content + + +def test_parse_player_profile_snapshot_spanish_sections(): + parsed = parse_rcon_admin_log_message( + "[21:34:19 hours (1779108340)] MESSAGE: player [Jugador Uno(steam-profile-1)], " + "content [─ Jugador Uno ─\n" + "▒ Totales ▒\n" + "Visto por primera vez : 2026-01-01\n" + "sesiones : 12\n" + "partidas jugadas : 9\n" + "tiempo jugado : 18 h 30 min\n" + "bajas : 141 (6 TKs)\n" + "muertes : 268 (5 TKs)\n" + "K/D : 0,53\n" + "▒ Víctimas ▒\n" + "Rival Dos : 7\n" + "▒ Némesis ▒\n" + "Rival Tres : 4\n" + "▒ Armas favoritas ▒\n" + "M1 GARAND : 31\n" + "▒ Promedios ▒\n" + "bajas por partida : 15,6\n" + "▒ Sanciones ▒\n" + "kicks : 1]" + ) + + snapshot = parse_rcon_player_profile_snapshot( + parsed, + event_timestamp="2026-05-19T10:00:00Z", + ) + + assert snapshot is not None + assert snapshot.player_name == "Jugador Uno" + assert snapshot.player_id == "steam-profile-1" + assert snapshot.source_server_time == 1779108340 + assert snapshot.sessions == 12 + assert snapshot.matches_played == 9 + assert snapshot.total_kills == 141 + assert snapshot.total_deaths == 268 + assert snapshot.teamkills_done == 6 + assert snapshot.teamkills_received == 5 + assert snapshot.kd_ratio == 0.53 + assert snapshot.favorite_weapons == {"M1 GARAND": 31} + assert snapshot.victims == {"Rival Dos": 7} + assert snapshot.nemesis == {"Rival Tres": 4} + assert snapshot.averages == {"bajas por partida": 15.6} + assert snapshot.sanctions == {"kicks": 1.0} + + +def test_non_profile_message_does_not_parse_as_profile_snapshot(): + parsed = parse_rcon_admin_log_message( + "[21:34:19 hours (1779108340)] MESSAGE: player [Jugador Uno(steam-profile-1)], " + "content [Bienvenido al servidor]" + ) + + assert parse_rcon_player_profile_snapshot(parsed) is None diff --git a/backend/tests/test_rcon_admin_log_storage.py b/backend/tests/test_rcon_admin_log_storage.py new file mode 100644 index 0000000..7e62b4e --- /dev/null +++ b/backend/tests/test_rcon_admin_log_storage.py @@ -0,0 +1,497 @@ +import gc +import json +import sqlite3 +from datetime import datetime, timezone +from unittest.mock import patch + +from app.rcon_admin_log_storage import ( + initialize_rcon_admin_log_storage, + list_current_match_kill_feed, + list_rcon_admin_log_event_counts, + persist_rcon_admin_log_entries, +) + + +TARGET = { + "target_key": "test-rcon-target", + "external_server_id": "test-rcon-target", +} + + +def test_initialize_rcon_admin_log_storage_creates_event_table(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + + resolved_path = initialize_rcon_admin_log_storage(db_path=db_path) + + assert resolved_path == db_path + connection = sqlite3.connect(db_path) + try: + table_names = { + row[0] + for row in connection.execute( + "SELECT name FROM sqlite_master WHERE type = 'table'" + ).fetchall() + } + columns = { + row[1] + for row in connection.execute("PRAGMA table_info(rcon_admin_log_events)") + } + finally: + connection.close() + gc.collect() + + assert "rcon_admin_log_events" in table_names + assert "rcon_player_profile_snapshots" in table_names + assert { + "target_key", + "event_type", + "raw_message", + "canonical_message", + "parsed_payload_json", + "raw_entry_json", + }.issubset(columns) + + +def test_persist_rcon_admin_log_entries_inserts_then_reports_duplicates(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + entries = [ + { + "timestamp": "2026-05-19T10:00:00Z", + "message": "[1:00 min (100)] CONNECTED Player One (steam-1)", + }, + { + "timestamp": "2026-05-19T10:01:00Z", + "message": "[2:00 min (120)] DISCONNECTED Player One (steam-1)", + }, + ] + + first_delta = persist_rcon_admin_log_entries( + target=TARGET, + entries=entries, + db_path=db_path, + ) + second_delta = persist_rcon_admin_log_entries( + target=TARGET, + entries=entries, + db_path=db_path, + ) + + assert first_delta == { + "events_seen": 2, + "events_inserted": 2, + "duplicate_events": 0, + } + assert second_delta == { + "events_seen": 2, + "events_inserted": 0, + "duplicate_events": 2, + } + gc.collect() + + +def test_profile_message_snapshots_are_materialized_and_deduped(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + entry = { + "timestamp": "2026-05-19T10:00:00Z", + "message": ( + "[21:34:19 hours (1779108340)] MESSAGE: player [Jugador Uno(steam-profile-1)], " + "content [─ Jugador Uno ─\n" + "▒ Totales ▒\n" + "sesiones : 12\n" + "partidas jugadas : 9\n" + "bajas : 141 (6 TKs)\n" + "muertes : 268 (5 TKs)\n" + "K/D : 0.53\n" + "▒ Víctimas ▒\n" + "Rival Dos : 7\n" + "▒ Némesis ▒\n" + "Rival Tres : 4\n" + "▒ Armas favoritas ▒\n" + "M1 GARAND : 31\n" + "▒ Promedios ▒\n" + "bajas por partida : 15.6\n" + "▒ Sanciones ▒\n" + "kicks : 1]" + ), + } + + persist_rcon_admin_log_entries(target=TARGET, entries=[entry], db_path=db_path) + persist_rcon_admin_log_entries(target=TARGET, entries=[entry], db_path=db_path) + + connection = sqlite3.connect(db_path) + connection.row_factory = sqlite3.Row + try: + rows = connection.execute("SELECT * FROM rcon_player_profile_snapshots").fetchall() + finally: + connection.close() + gc.collect() + + assert len(rows) == 1 + row = rows[0] + assert row["target_key"] == "test-rcon-target" + assert row["player_id"] == "steam-profile-1" + assert row["source_server_time"] == 1779108340 + assert row["sessions"] == 12 + assert row["matches_played"] == 9 + assert row["total_kills"] == 141 + assert row["total_deaths"] == 268 + assert row["teamkills_done"] == 6 + assert row["teamkills_received"] == 5 + assert row["kd_ratio"] == 0.53 + assert json.loads(row["favorite_weapons_json"]) == {"M1 GARAND": 31} + assert json.loads(row["victims_json"]) == {"Rival Dos": 7} + assert json.loads(row["nemesis_json"]) == {"Rival Tres": 4} + assert "bajas : 141" in row["raw_content"] + + +def test_non_profile_messages_do_not_create_profile_snapshots(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-19T10:00:00Z", + "message": "[1:00 min (100)] MESSAGE: player [Player One(steam-1)], content [hello]", + } + ], + db_path=db_path, + ) + + connection = sqlite3.connect(db_path) + try: + count = connection.execute( + "SELECT COUNT(*) FROM rcon_player_profile_snapshots" + ).fetchone()[0] + finally: + connection.close() + gc.collect() + + assert count == 0 + + +def test_canonical_message_dedupes_changing_relative_prefixes(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + original_entry = { + "timestamp": "2026-05-19T10:00:00Z", + "message": "[1:00 min (100)] MESSAGE: player [Player One(steam-1)], content [hello]", + } + repeated_read_entry = { + "timestamp": "2026-05-19T10:05:00Z", + "message": "[6:00 min (100)] MESSAGE: player [Player One(steam-1)], content [hello]", + } + + first_delta = persist_rcon_admin_log_entries( + target=TARGET, + entries=[original_entry], + db_path=db_path, + ) + second_delta = persist_rcon_admin_log_entries( + target=TARGET, + entries=[repeated_read_entry], + db_path=db_path, + ) + + assert first_delta["events_inserted"] == 1 + assert second_delta == { + "events_seen": 1, + "events_inserted": 0, + "duplicate_events": 1, + } + gc.collect() + + +def test_list_rcon_admin_log_event_counts_groups_by_target_and_event_type(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + other_target = { + "target_key": "other-rcon-target", + "external_server_id": "other-rcon-target", + } + + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-19T10:00:00Z", + "message": "[1:00 min (100)] CONNECTED Player One (steam-1)", + }, + { + "timestamp": "2026-05-19T10:01:00Z", + "message": "[2:00 min (120)] DISCONNECTED Player One (steam-1)", + }, + ], + db_path=db_path, + ) + persist_rcon_admin_log_entries( + target=other_target, + entries=[ + { + "timestamp": "2026-05-19T10:02:00Z", + "message": "[3:00 min (140)] CONNECTED Player Two (steam-2)", + } + ], + db_path=db_path, + ) + + counts = { + (row["target_key"], row["event_type"]): row + for row in list_rcon_admin_log_event_counts(db_path=db_path) + } + + assert counts == { + ("other-rcon-target", "connected"): { + "target_key": "other-rcon-target", + "event_type": "connected", + "event_count": 1, + "first_server_time": 140, + "last_server_time": 140, + }, + ("test-rcon-target", "connected"): { + "target_key": "test-rcon-target", + "event_type": "connected", + "event_count": 1, + "first_server_time": 100, + "last_server_time": 100, + }, + ("test-rcon-target", "disconnected"): { + "target_key": "test-rcon-target", + "event_type": "disconnected", + "event_count": 1, + "first_server_time": 120, + "last_server_time": 120, + }, + } + gc.collect() + + +def test_current_match_kill_feed_prefers_open_match_window_and_normalizes_rows(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-19T09:59:00Z", + "message": ( + "[0:59 min (90)] KILL: Old Killer(Allies/steam-old) -> " + "Old Victim(Axis/steam-victim-old) with M1 GARAND" + ), + }, + { + "timestamp": "2026-05-19T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-19T10:01:00Z", + "message": ( + "[2:00 min (120)] KILL: Alpha(Allies/steam-alpha) -> " + "Bravo(Allies/steam-bravo) with GRENADE" + ), + }, + ], + db_path=db_path, + ) + + feed = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + ) + + assert feed["scope"] == "open-admin-log-match-window" + assert feed["confidence"] == "admin-log-boundary" + assert len(feed["items"]) == 1 + assert feed["items"][0] == { + "event_id": "rcon-admin-log:test-rcon-target:3", + "event_timestamp": "2026-05-19T10:01:00Z", + "server_time": 120, + "killer_name": "Alpha", + "killer_team": "Allies", + "victim_name": "Bravo", + "victim_team": "Allies", + "weapon": "GRENADE", + "is_teamkill": True, + } + gc.collect() + + +def test_current_match_kill_feed_filters_stale_recent_fallback_rows(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-21T09:30:00Z", + "message": ( + "[1:00 min (1779355800)] KILL: Old Killer(Allies/steam-old) -> " + "Old Victim(Axis/steam-victim-old) with M1 GARAND" + ), + } + ], + db_path=db_path, + ) + + feed = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + now=datetime(2026, 5, 21, 10, 0, tzinfo=timezone.utc), + ) + + assert feed["scope"] == "no-current-match-events" + assert feed["confidence"] == "stale-filtered" + assert feed["stale_events_filtered"] == 1 + assert feed["items"] == [] + gc.collect() + + +def test_current_match_kill_feed_marks_fresh_recent_fallback_rows_partial(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-21T09:50:00Z", + "message": ( + "[1:00 min (1779357000)] KILL: Fresh Killer(Allies/steam-fresh) -> " + "Fresh Victim(Axis/steam-victim-fresh) with M1 GARAND" + ), + } + ], + db_path=db_path, + ) + + feed = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + now=datetime(2026, 5, 21, 10, 0, tzinfo=timezone.utc), + ) + + assert feed["scope"] == "recent-admin-log-window" + assert feed["confidence"] == "partial" + assert feed["stale_events_filtered"] == 0 + assert [item["killer_name"] for item in feed["items"]] == ["Fresh Killer"] + gc.collect() + + +def test_current_match_kill_feed_filters_rows_before_incremental_cursor(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": ( + "[2:00 min (120)] KILL: First Killer(Allies/steam-first) -> " + "First Victim(Axis/steam-first-victim) with M1 GARAND" + ), + }, + { + "timestamp": "2026-05-21T10:02:00Z", + "message": ( + "[3:00 min (140)] KILL: Next Killer(Axis/steam-next) -> " + "Next Victim(Allies/steam-next-victim) with MP40" + ), + }, + ], + db_path=db_path, + ) + + feed = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + since_event_id="rcon-admin-log:test-rcon-target:2", + ) + + assert [item["killer_name"] for item in feed["items"]] == ["Next Killer"] + gc.collect() + + +def test_current_match_kill_feed_without_cursor_omits_nullable_id_predicate(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": ( + "[2:00 min (120)] KILL: Cursor Killer(Allies/steam-cursor) -> " + "Cursor Victim(Axis/steam-cursor-victim) with M1 GARAND" + ), + }, + ], + db_path=db_path, + ) + traced_sql = [] + connect = sqlite3.connect + + def connect_with_trace(*args, **kwargs): + connection = connect(*args, **kwargs) + connection.set_trace_callback(traced_sql.append) + return connection + + with patch( + "app.rcon_admin_log_storage.sqlite3.connect", + side_effect=connect_with_trace, + ): + feed = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + ) + + kill_queries = [ + sql + for sql in traced_sql + if "FROM rcon_admin_log_events" in sql and "event_type = 'kill'" in sql + ] + assert [item["killer_name"] for item in feed["items"]] == ["Cursor Killer"] + assert kill_queries + assert all("IS NULL OR id >" not in sql for sql in kill_queries) + assert all("AND id >" not in sql for sql in kill_queries) + gc.collect() + + +def test_current_match_kill_feed_invalid_cursor_behaves_like_no_cursor(tmp_path): + db_path = tmp_path / "admin_log.sqlite3" + persist_rcon_admin_log_entries( + target=TARGET, + entries=[ + { + "timestamp": "2026-05-21T10:00:00Z", + "message": "[1:00 min (100)] MATCH START Mortain Warfare", + }, + { + "timestamp": "2026-05-21T10:01:00Z", + "message": ( + "[2:00 min (120)] KILL: First Killer(Allies/steam-first) -> " + "First Victim(Axis/steam-first-victim) with M1 GARAND" + ), + }, + { + "timestamp": "2026-05-21T10:02:00Z", + "message": ( + "[3:00 min (140)] KILL: Next Killer(Axis/steam-next) -> " + "Next Victim(Allies/steam-next-victim) with MP40" + ), + }, + ], + db_path=db_path, + ) + + without_cursor = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + ) + with_invalid_cursor = list_current_match_kill_feed( + server_key="test-rcon-target", + db_path=db_path, + since_event_id="not-an-admin-log-event", + ) + + assert with_invalid_cursor == without_cursor + gc.collect() diff --git a/backend/tests/test_rcon_historical_backfill.py b/backend/tests/test_rcon_historical_backfill.py new file mode 100644 index 0000000..aa4663a --- /dev/null +++ b/backend/tests/test_rcon_historical_backfill.py @@ -0,0 +1,171 @@ +from __future__ import annotations + +import json +import os +import sqlite3 +import tempfile +import unittest +from datetime import datetime, timezone +from pathlib import Path +from contextlib import closing +from unittest.mock import patch + +from app.rcon_admin_log_materialization import ( + MATCH_RESULT_SOURCE, + initialize_rcon_materialized_storage, +) +from app.rcon_historical_backfill import ( + count_recent_materialized_closed_matches, + run_rcon_historical_backfill, + select_backfill_targets, +) +from app.rcon_historical_leaderboards import list_rcon_materialized_leaderboard + + +TARGETS_JSON = json.dumps( + [ + { + "name": "Comunidad Hispana #01", + "slug": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + "host": "127.0.0.1", + "port": 7779, + "password": "secret", + }, + { + "name": "Comunidad Hispana #02", + "slug": "comunidad-hispana-02", + "external_server_id": "comunidad-hispana-02", + "host": "127.0.0.1", + "port": 7879, + "password": "secret", + }, + { + "name": "Comunidad Hispana #03", + "slug": "comunidad-hispana-03", + "external_server_id": "comunidad-hispana-03", + "host": "127.0.0.1", + "port": 7979, + "password": "secret", + }, + ] +) + + +class RconHistoricalBackfillTests(unittest.TestCase): + def test_monthly_window_selects_previous_month_on_days_1_to_7(self) -> None: + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir: + payload = list_rcon_materialized_leaderboard( + server_key="all-servers", + timeframe="monthly", + metric="kills", + db_path=Path(tmpdir) / "historical.sqlite3", + now=datetime(2026, 5, 7, 12, tzinfo=timezone.utc), + ) + + self.assertEqual(payload["window_kind"], "previous-month") + self.assertEqual(payload["selected_month_start"], "2026-04-01T00:00:00Z") + self.assertEqual(payload["selected_month_end"], "2026-05-01T00:00:00Z") + + def test_monthly_window_selects_current_month_on_day_8_plus(self) -> None: + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir: + payload = list_rcon_materialized_leaderboard( + server_key="all-servers", + timeframe="monthly", + metric="kills", + db_path=Path(tmpdir) / "historical.sqlite3", + now=datetime(2026, 5, 8, 12, tzinfo=timezone.utc), + ) + + self.assertEqual(payload["window_kind"], "current-month") + self.assertEqual(payload["selected_month_start"], "2026-05-01T00:00:00Z") + + def test_recent_match_ensure_stops_when_count_is_already_satisfied(self) -> None: + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir, _patched_targets(): + db_path = Path(tmpdir) / "historical.sqlite3" + _insert_closed_matches(db_path, 100) + + payload = run_rcon_historical_backfill( + servers="comunidad-hispana-01,comunidad-hispana-02", + ensure_recent_matches=100, + dry_run=True, + db_path=db_path, + ) + + self.assertEqual(payload["recent_materialized_closed_match_count_before"], 100) + self.assertEqual(payload["actual_windows_scanned"], []) + + def test_unknown_server_is_rejected(self) -> None: + with _patched_targets(): + with self.assertRaises(ValueError): + select_backfill_targets("unknown-server") + + def test_comunidad_hispana_03_is_not_included_by_default(self) -> None: + with _patched_targets(): + selected = select_backfill_targets(None) + + self.assertEqual( + [target.external_server_id for target in selected], + ["comunidad-hispana-01", "comunidad-hispana-02"], + ) + + def test_dry_run_does_not_insert_data(self) -> None: + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir, _patched_targets(): + db_path = Path(tmpdir) / "historical.sqlite3" + payload = run_rcon_historical_backfill( + servers="comunidad-hispana-01", + ensure_current_month=True, + dry_run=True, + db_path=db_path, + ) + + count_after = count_recent_materialized_closed_matches(db_path=db_path) + + self.assertEqual(payload["status"], "dry-run") + self.assertEqual(payload["events_inserted"], 0) + self.assertEqual(count_after, 0) + + def test_backfill_output_is_json_serializable(self) -> None: + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir, _patched_targets(): + payload = run_rcon_historical_backfill( + servers="comunidad-hispana-01", + ensure_current_month=True, + dry_run=True, + db_path=Path(tmpdir) / "historical.sqlite3", + ) + + json.dumps(payload, ensure_ascii=True) + + +def _insert_closed_matches(db_path: Path, count: int) -> None: + initialize_rcon_materialized_storage(db_path=db_path) + with closing(sqlite3.connect(db_path)) as connection: + for index in range(count): + connection.execute( + """ + INSERT INTO rcon_materialized_matches ( + target_key, external_server_id, match_key, map_name, map_pretty_name, + started_at, ended_at, confidence_mode, source_basis + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + "comunidad-hispana-01", + "comunidad-hispana-01", + f"match-{index}", + "stmariedumont", + "ST MARIE DU MONT", + "2026-05-01T10:00:00Z", + f"2026-05-{(index % 28) + 1:02d}T12:00:00Z", + "exact", + MATCH_RESULT_SOURCE, + ), + ) + connection.commit() + + +def _patched_targets(): + return patch.dict(os.environ, {"HLL_BACKEND_RCON_TARGETS": TARGETS_JSON}) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_rcon_materialization_pipeline.py b/backend/tests/test_rcon_materialization_pipeline.py new file mode 100644 index 0000000..6e1b9cf --- /dev/null +++ b/backend/tests/test_rcon_materialization_pipeline.py @@ -0,0 +1,400 @@ +"""Regression tests for the materialized RCON AdminLog pipeline.""" + +from __future__ import annotations + +import gc +import os +import tempfile +import unittest +from pathlib import Path + +from app.historical_storage import upsert_historical_match +from app.payloads import build_recent_historical_matches_payload +from app.rcon_admin_log_materialization import ( + get_materialized_rcon_match_detail, + materialize_rcon_admin_log, + summarize_rcon_materialization_status, +) +from app.rcon_admin_log_storage import persist_rcon_admin_log_entries +from app.rcon_historical_read_model import ( + get_rcon_historical_match_detail, + list_rcon_historical_recent_activity, +) +from app.scoreboard_origins import resolve_trusted_scoreboard_match_url + + +class RconMaterializationPipelineTests(unittest.TestCase): + def test_materializes_match_result_and_player_stats_idempotently(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + _persist_admin_log_fixture(db_path) + + first = materialize_rcon_admin_log(db_path=db_path) + second = materialize_rcon_admin_log(db_path=db_path) + detail = get_materialized_rcon_match_detail( + server_key="comunidad-hispana-01", + match_key="comunidad-hispana-01:100:500:stmariedumontwarfare", + db_path=db_path, + ) + status = summarize_rcon_materialization_status(db_path=db_path) + + self.assertEqual(first["matches_materialized"], 1) + self.assertEqual(second["matches_materialized"], 0) + self.assertEqual(second["matches_updated"], 1) + self.assertIsNotNone(detail) + match = detail["match"] + self.assertEqual(match["allied_score"], 5) + self.assertEqual(match["axis_score"], 0) + self.assertEqual(match["winner"], "allied") + players = {row["player_name"]: row for row in detail["players"]} + self.assertEqual(players["Alpha"]["kills"], 1) + self.assertEqual(players["Alpha"]["teamkills"], 1) + self.assertEqual(players["Bravo"]["deaths"], 1) + self.assertEqual(players["Charlie"]["deaths_by_teamkill"], 1) + self.assertEqual(status["materialized_matches"], 1) + self.assertEqual(status["matches_with_player_stats"], 1) + gc.collect() + + def test_match_detail_read_model_hides_raw_player_ids(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_admin_log_fixture(db_path) + materialize_rcon_admin_log(db_path=db_path) + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id="comunidad-hispana-01:100:500:stmariedumontwarfare", + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertIsNotNone(detail) + self.assertEqual(detail["result_source"], "admin-log-match-ended") + self.assertEqual(detail["result"]["allied_score"], 5) + self.assertEqual(detail["timestamp_confidence"], "absolute") + players = {row["player_name"]: row for row in detail["players"]} + self.assertNotIn("player_id", players["Alpha"]) + self.assertIn("kd_ratio", players["Alpha"]) + self.assertEqual(players["Alpha"]["steam_id_64"], "76561198000000001") + self.assertEqual(players["Alpha"]["platform"], "steam") + self.assertEqual( + players["Alpha"]["external_profile_links"]["hellor"], + "https://hellor.pro/player/76561198000000001", + ) + self.assertEqual(players["Charlie"]["platform"], "unknown") + self.assertNotIn("steam_id_64", players["Charlie"]) + self.assertNotIn("external_profile_links", players["Charlie"]) + gc.collect() + + def test_match_detail_marks_equal_materialized_timestamps_as_server_time_only(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-01T12:00:00Z", + "message": "[1 min (100)] MATCH START ST MARIE DU MONT Warfare", + }, + { + "timestamp": "2026-05-01T12:00:00Z", + "message": "[91 min (5500)] MATCH ENDED `ST MARIE DU MONT Warfare` ALLIED (5 - 0) AXIS", + }, + ], + db_path=db_path, + ) + materialize_rcon_admin_log(db_path=db_path) + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id="comunidad-hispana-01:100:5500:stmariedumontwarfare", + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertIsNotNone(detail) + self.assertIsNone(detail["started_at"]) + self.assertIsNone(detail["ended_at"]) + self.assertEqual(detail["closed_at"], "2026-05-01T12:00:00Z") + self.assertEqual(detail["timestamp_confidence"], "server-time-only") + self.assertEqual(detail["duration_seconds"], 5400) + gc.collect() + + def test_equal_timestamp_materialized_detail_uses_closed_at_window_for_scoreboard_link(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + upsert_historical_match( + server_slug="comunidad-hispana-02", + match_payload={ + "id": "1779183861", + "creation_time": "2026-05-01T10:30:00Z", + "start": "2026-05-01T10:30:00Z", + "end": "2026-05-01T12:00:00Z", + "map": {"name": "ST MARIE DU MONT Warfare"}, + "result": {"allied": 5, "axis": 0}, + "player_stats": [], + }, + db_path=db_path, + ) + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-02", + "external_server_id": "comunidad-hispana-02", + }, + entries=[ + { + "timestamp": "2026-05-01T12:00:00Z", + "message": "[1 min (100)] MATCH START ST MARIE DU MONT Warfare", + }, + { + "timestamp": "2026-05-01T12:00:00Z", + "message": "[91 min (5500)] MATCH ENDED `ST MARIE DU MONT Warfare` ALLIED (5 - 0) AXIS", + }, + ], + db_path=db_path, + ) + materialize_rcon_admin_log(db_path=db_path) + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-02", + match_id="comunidad-hispana-02:100:5500:stmariedumontwarfare", + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertIsNotNone(detail) + self.assertIsNone(detail["started_at"]) + self.assertIsNone(detail["ended_at"]) + self.assertEqual(detail["duration_seconds"], 5400) + self.assertEqual( + detail["match_url"], + "https://scoreboard.comunidadhll.es:5443/games/1779183861", + ) + gc.collect() + + def test_match_detail_adds_safe_profile_summary_when_snapshot_exists(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_admin_log_fixture(db_path) + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-01T10:30:00Z", + "message": ( + "[31 min (300)] MESSAGE: player [Alpha(76561198000000001)], " + "content [─ Alpha ─\n" + "▒ Totales ▒\n" + "sesiones : 12\n" + "partidas jugadas : 9\n" + "bajas : 141 (6 TKs)\n" + "muertes : 268 (5 TKs)\n" + "K/D : 0.53\n" + "▒ Armas favoritas ▒\n" + "M1 Garand : 31]" + ), + } + ], + db_path=db_path, + ) + materialize_rcon_admin_log(db_path=db_path) + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id="comunidad-hispana-01:100:500:stmariedumontwarfare", + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertIsNotNone(detail) + players = {row["player_name"]: row for row in detail["players"]} + self.assertIn("profile_summary", players["Alpha"]) + self.assertNotIn("profile_summary", players["Bravo"]) + profile_summary = players["Alpha"]["profile_summary"] + self.assertEqual(profile_summary["sessions"], 12) + self.assertEqual(profile_summary["matches_played"], 9) + self.assertEqual(profile_summary["totals"]["kills"], 141) + self.assertEqual(profile_summary["favorite_weapons"], {"M1 Garand": 31}) + self.assertNotIn("raw_content", profile_summary) + self.assertNotIn("player_id", players["Alpha"]) + gc.collect() + + def test_recent_matches_prefer_materialized_rcon_over_scoreboard_fallback(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_admin_log_fixture(db_path) + materialize_rcon_admin_log(db_path=db_path) + _persist_scoreboard_match(db_path) + + payload = build_recent_historical_matches_payload( + limit=5, + server_slug="comunidad-hispana-01", + ) + recent = list_rcon_historical_recent_activity( + server_key="comunidad-hispana-01", + limit=5, + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertEqual(payload["data"]["selected_source"], "rcon") + self.assertEqual(payload["data"]["items"][0]["result_source"], "admin-log-match-ended") + self.assertEqual(recent[0]["result_source"], "admin-log-match-ended") + self.assertNotEqual(payload["data"]["selected_source"], "public-scoreboard") + gc.collect() + + def test_recent_materialized_detail_id_resolves_through_detail_read_model(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_admin_log_fixture(db_path) + materialize_rcon_admin_log(db_path=db_path) + recent = list_rcon_historical_recent_activity( + server_key="comunidad-hispana-01", + limit=1, + )[0] + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id=str(recent["internal_detail_match_id"]), + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertIsNotNone(detail) + self.assertEqual(detail["match_id"], recent["internal_detail_match_id"]) + gc.collect() + + def test_public_scoreboard_fallback_used_only_without_rcon_activity(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_scoreboard_match(db_path) + payload = build_recent_historical_matches_payload( + limit=5, + server_slug="comunidad-hispana-01", + ) + finally: + _restore_env("HLL_BACKEND_STORAGE_PATH", previous_storage_path) + + self.assertTrue(payload["data"]["fallback_used"]) + self.assertEqual(payload["data"]["selected_source"], "public-scoreboard") + self.assertEqual(payload["data"]["items"][0]["result_source"], "public-scoreboard-fallback") + gc.collect() + + def test_safe_scoreboard_match_url_allowlist_for_active_origins(self) -> None: + self.assertEqual( + resolve_trusted_scoreboard_match_url( + "https://scoreboard.comunidadhll.es/games/1561515", + "comunidad-hispana-01", + ), + "https://scoreboard.comunidadhll.es/games/1561515", + ) + self.assertEqual( + resolve_trusted_scoreboard_match_url( + "https://scoreboard.comunidadhll.es:5443/games/222", + "comunidad-hispana-02", + ), + "https://scoreboard.comunidadhll.es:5443/games/222", + ) + self.assertIsNone( + resolve_trusted_scoreboard_match_url( + "https://example.com/games/222", + "comunidad-hispana-02", + ) + ) + self.assertIsNone( + resolve_trusted_scoreboard_match_url( + "https://scoreboard.comunidadhll.es:5443/admin/222", + "comunidad-hispana-02", + ) + ) + + +def _persist_admin_log_fixture(db_path: Path) -> None: + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + }, + entries=[ + { + "timestamp": "2026-05-01T10:00:00Z", + "message": "[1 min (100)] MATCH START ST MARIE DU MONT Warfare", + }, + { + "timestamp": "2026-05-01T10:05:00Z", + "message": "[6 min (150)] CONNECTED Alpha (76561198000000001)", + }, + { + "timestamp": "2026-05-01T10:06:00Z", + "message": "[7 min (160)] TEAMSWITCH Alpha (None > Allies)", + }, + { + "timestamp": "2026-05-01T10:10:00Z", + "message": ( + "[11 min (200)] KILL: Alpha(Allies/76561198000000001) -> " + "Bravo(Axis/76561198000000002) with M1 Garand" + ), + }, + { + "timestamp": "2026-05-01T10:12:00Z", + "message": ( + "[13 min (220)] KILL: Alpha(Allies/76561198000000001) -> " + "Charlie(Allies/nonsteam-local) with M1 Garand" + ), + }, + { + "timestamp": "2026-05-01T11:20:00Z", + "message": "[81 min (500)] MATCH ENDED `ST MARIE DU MONT Warfare` ALLIED (5 - 0) AXIS", + }, + ], + db_path=db_path, + ) + + +def _persist_scoreboard_match(db_path: Path) -> None: + upsert_historical_match( + server_slug="comunidad-hispana-01", + match_payload={ + "id": "1561515", + "creation_time": "2026-05-01T10:00:00Z", + "start": "2026-05-01T10:00:00Z", + "end": "2026-05-01T11:20:00Z", + "map": {"name": "ST MARIE DU MONT Warfare"}, + "result": {"allied": 2, "axis": 3}, + "player_stats": [], + }, + db_path=db_path, + ) + + +def _restore_env(name: str, previous_value: str | None) -> None: + if previous_value is None: + os.environ.pop(name, None) + else: + os.environ[name] = previous_value + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_scoreboard_match_links.py b/backend/tests/test_scoreboard_match_links.py new file mode 100644 index 0000000..2d30d9a --- /dev/null +++ b/backend/tests/test_scoreboard_match_links.py @@ -0,0 +1,436 @@ +"""Regression checks for persisted public-scoreboard match links.""" + +from __future__ import annotations + +import gc +import os +import sqlite3 +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from app.scoreboard_candidate_backfill import run_backfill +from app.historical_storage import ( + get_historical_match_detail, + initialize_historical_storage, + list_recent_historical_matches, + upsert_historical_match, +) +from app.rcon_historical_storage import initialize_rcon_historical_storage +from app.rcon_historical_storage import persist_rcon_historical_sample +from app.rcon_historical_storage import start_rcon_historical_capture_run +from app.rcon_historical_read_model import get_rcon_historical_match_detail +from app.rcon_admin_log_materialization import materialize_rcon_admin_log +from app.rcon_admin_log_storage import persist_rcon_admin_log_entries +from app.rcon_scoreboard_relink import relink_materialized_matches +from app.scoreboard_correlation_diagnostics import inspect_materialized_match_correlation + + +class PersistedScoreboardMatchLinkTests(unittest.TestCase): + def test_list_backfill_persists_foy_candidate_before_detail_fetch_failure(self) -> None: + stored: dict[tuple[str, str], dict[str, object]] = {} + + class FoyListProvider: + def fetch_match_page(self, *, base_url: str, page: int, limit: int) -> dict[str, object]: + return {"maps": [_foy_list_match()]} if page == 1 else {"maps": []} + + def fetch_match_details( + self, + *, + base_url: str, + match_ids: list[str], + max_workers: int, + ) -> list[dict[str, object]]: + raise RuntimeError("detail endpoint unavailable") + + def fake_upsert(*, server_slug: str, candidate: dict[str, object]) -> str: + key = (server_slug, str(candidate["external_match_id"])) + outcome = "updated" if key in stored else "inserted" + stored[key] = dict(candidate) + return outcome + + server = { + "slug": "comunidad-hispana-02", + "scoreboard_base_url": "https://scoreboard.comunidadhll.es:5443", + "server_number": 2, + } + with ( + patch("app.scoreboard_candidate_backfill.initialize_historical_storage"), + patch( + "app.scoreboard_candidate_backfill.PublicScoreboardHistoricalDataSource", + return_value=FoyListProvider(), + ), + patch( + "app.scoreboard_candidate_backfill.upsert_scoreboard_candidate", + side_effect=fake_upsert, + ), + ): + first = run_backfill( + server=server, + start_at=_backfill_timestamp("2026-05-20T00:00:00Z"), + end_at=_backfill_timestamp("2026-05-21T23:59:59Z"), + max_pages=2, + page_size=100, + detail_workers=1, + ) + second = run_backfill( + server=server, + start_at=_backfill_timestamp("2026-05-20T00:00:00Z"), + end_at=_backfill_timestamp("2026-05-21T23:59:59Z"), + max_pages=2, + page_size=100, + detail_workers=1, + ) + + candidate = stored[("comunidad-hispana-02", "1562115")] + self.assertEqual( + candidate["match_url"], + "https://scoreboard.comunidadhll.es:5443/games/1562115", + ) + self.assertEqual(first["list_candidates_inserted"], 1) + self.assertEqual(first["list_candidates_updated"], 0) + self.assertEqual(first["errors"][0]["stage"], "fetch_match_details") + self.assertEqual(second["list_candidates_inserted"], 0) + self.assertEqual(second["list_candidates_updated"], 1) + self.assertEqual(len(stored), 1) + + def test_recent_and_detail_payloads_expose_safe_persisted_match_url(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + match_url = "https://scoreboard.comunidadhll.es:5443/games/12345" + _persist_match(db_path, server_slug="comunidad-hispana-02", match_id="12345") + + recent_items = list_recent_historical_matches( + server_slug="comunidad-hispana-02", + limit=5, + db_path=db_path, + ) + detail = get_historical_match_detail( + server_slug="comunidad-hispana-02", + match_id="12345", + db_path=db_path, + ) + + self.assertEqual(recent_items[0]["match_url"], match_url) + self.assertIsNotNone(detail) + self.assertEqual(detail["match_url"], match_url) + gc.collect() + + def test_untrusted_persisted_match_url_is_not_exposed(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + _persist_match(db_path, server_slug="comunidad-hispana-01", match_id="999") + _set_raw_payload_ref( + db_path, + match_id="999", + raw_payload_ref="https://scoreboard.comunidadhll.es:3443/games/999", + ) + + recent_items = list_recent_historical_matches( + server_slug="comunidad-hispana-01", + limit=5, + db_path=db_path, + ) + detail = get_historical_match_detail( + server_slug="comunidad-hispana-01", + match_id="999", + db_path=db_path, + ) + + self.assertIsNone(recent_items[0]["match_url"]) + self.assertIsNotNone(detail) + self.assertIsNone(detail["match_url"]) + gc.collect() + + def test_detail_player_links_use_trusted_scoreboard_steam_id(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + _persist_match( + db_path, + server_slug="comunidad-hispana-02", + match_id="steam-player-match", + player_stats=[ + { + "player": "Steam Player", + "steaminfo": {"profile": {"steamid": "76561198000000009"}}, + "team": {"side": "allies"}, + "kills": 4, + "deaths": 2, + } + ], + ) + + detail = get_historical_match_detail( + server_slug="comunidad-hispana-02", + match_id="steam-player-match", + db_path=db_path, + ) + + self.assertIsNotNone(detail) + player = detail["players"][0] + self.assertEqual(player["steam_id_64"], "76561198000000009") + self.assertEqual(player["platform"], "steam") + self.assertEqual( + player["external_profile_links"]["hll_records"], + "https://hllrecords.com/profiles/76561198000000009", + ) + gc.collect() + + def test_rcon_match_detail_does_not_fabricate_external_scoreboard_url(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + initialize_rcon_historical_storage(db_path=db_path) + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id="rcon:synthetic-window", + ) + finally: + if previous_storage_path is None: + os.environ.pop("HLL_BACKEND_STORAGE_PATH", None) + else: + os.environ["HLL_BACKEND_STORAGE_PATH"] = previous_storage_path + + self.assertIsNone(detail) + gc.collect() + + def test_rcon_match_detail_exposes_correlated_scoreboard_url_on_strong_evidence(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_match( + db_path, + server_slug="comunidad-hispana-01", + match_id="1561515", + map_name="St. Mere Eglise", + started_at="2026-04-12T16:20:00Z", + ended_at="2026-04-12T17:45:00Z", + ) + session_key = _persist_rcon_window( + db_path, + map_name="St. Mere Eglise", + first_seen_at="2026-04-12T16:28:55.761810Z", + last_seen_at="2026-04-12T16:43:55.761810Z", + players=94, + max_players=98, + ) + + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id=session_key, + ) + finally: + if previous_storage_path is None: + os.environ.pop("HLL_BACKEND_STORAGE_PATH", None) + else: + os.environ["HLL_BACKEND_STORAGE_PATH"] = previous_storage_path + + self.assertIsNotNone(detail) + self.assertEqual( + detail["match_url"], + "https://scoreboard.comunidadhll.es/games/1561515", + ) + gc.collect() + + def test_rcon_match_detail_keeps_low_confidence_correlation_unlinked(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_match( + db_path, + server_slug="comunidad-hispana-01", + match_id="1561515", + map_name="Carentan", + started_at="2026-04-12T10:00:00Z", + ended_at="2026-04-12T11:30:00Z", + ) + session_key = _persist_rcon_window( + db_path, + map_name="St. Mere Eglise", + first_seen_at="2026-04-12T16:28:55.761810Z", + last_seen_at="2026-04-12T16:43:55.761810Z", + players=94, + max_players=98, + ) + + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-01", + match_id=session_key, + ) + finally: + if previous_storage_path is None: + os.environ.pop("HLL_BACKEND_STORAGE_PATH", None) + else: + os.environ["HLL_BACKEND_STORAGE_PATH"] = previous_storage_path + + self.assertIsNotNone(detail) + self.assertIsNone(detail["match_url"]) + gc.collect() + + def test_foy_relink_reports_existing_materialized_match_url(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + db_path = Path(tmpdir) / "historical.sqlite3" + previous_storage_path = os.environ.get("HLL_BACKEND_STORAGE_PATH") + os.environ["HLL_BACKEND_STORAGE_PATH"] = str(db_path) + try: + _persist_match( + db_path, + server_slug="comunidad-hispana-02", + match_id="1562115", + map_name="Foy Warfare", + started_at="2026-05-20T20:54:11Z", + ended_at="2026-05-20T22:24:11Z", + ) + persist_rcon_admin_log_entries( + target={ + "target_key": "comunidad-hispana-02", + "external_server_id": "comunidad-hispana-02", + }, + entries=[ + { + "timestamp": "2026-05-20T20:54:11Z", + "message": "[1 min (1779310451)] MATCH START Foy Warfare", + }, + { + "timestamp": "2026-05-20T22:24:11Z", + "message": "[91 min (1779315851)] MATCH ENDED `Foy Warfare` ALLIED (4 - 1) AXIS", + }, + ], + db_path=db_path, + ) + materialize_rcon_admin_log(db_path=db_path) + report = relink_materialized_matches( + server_key="comunidad-hispana-02", + db_path=db_path, + ) + detail = get_rcon_historical_match_detail( + server_key="comunidad-hispana-02", + match_id="comunidad-hispana-02:1779310451:1779315851:foywarfare", + ) + diagnostics = inspect_materialized_match_correlation( + server_key="comunidad-hispana-02", + match_key="comunidad-hispana-02:1779310451:1779315851:foywarfare", + db_path=db_path, + ) + finally: + if previous_storage_path is None: + os.environ.pop("HLL_BACKEND_STORAGE_PATH", None) + else: + os.environ["HLL_BACKEND_STORAGE_PATH"] = previous_storage_path + + self.assertEqual(report["matches_scanned"], 1) + self.assertEqual(report["matches_linked"], 1) + self.assertGreaterEqual(report["candidates_scanned"], 1) + self.assertIsNotNone(detail) + self.assertEqual( + detail["match_url"], + "https://scoreboard.comunidadhll.es:5443/games/1562115", + ) + self.assertEqual(diagnostics["final_reason"], "linked") + self.assertEqual(diagnostics["selected_candidate"]["external_match_id"], "1562115") + self.assertEqual(diagnostics["top_candidates"][0]["map"], "Foy Warfare") + gc.collect() + + +def _persist_match( + db_path: Path, + *, + server_slug: str, + match_id: str, + map_name: str = "carentan", + started_at: str = "2026-05-01T10:00:00Z", + ended_at: str = "2026-05-01T11:20:00Z", + player_stats: list[dict[str, object]] | None = None, +) -> None: + upsert_historical_match( + server_slug=server_slug, + match_payload={ + "id": match_id, + "creation_time": started_at, + "start": started_at, + "end": ended_at, + "map": {"name": map_name}, + "result": {"allied": 3, "axis": 2}, + "player_stats": player_stats or [], + }, + db_path=db_path, + ) + + +def _foy_list_match() -> dict[str, object]: + return { + "id": 1562115, + "server_number": 2, + "start": "2026-05-20T20:54:11+00:00", + "end": "2026-05-20T22:24:11+00:00", + "map": {"id": "foywarfare", "pretty_name": "Foy Warfare"}, + "result": {"allied": 4, "axis": 1}, + } + + +def _backfill_timestamp(raw_value: str): + from app.scoreboard_candidate_backfill import _parse_timestamp + + return _parse_timestamp(raw_value, option_name="test") + + +def _persist_rcon_window( + db_path: Path, + *, + map_name: str, + first_seen_at: str, + last_seen_at: str, + players: int, + max_players: int, +) -> str: + initialize_rcon_historical_storage(db_path=db_path) + run_id = start_rcon_historical_capture_run( + mode="test", + target_scope="comunidad-hispana-01", + db_path=db_path, + ) + target = { + "target_key": "comunidad-hispana-01", + "external_server_id": "comunidad-hispana-01", + "name": "Comunidad Hispana #01", + "host": "127.0.0.1", + "port": 7779, + } + for captured_at in (first_seen_at, last_seen_at): + persist_rcon_historical_sample( + run_id=run_id, + captured_at=captured_at, + target=target, + normalized_payload={ + "status": "online", + "players": players, + "max_players": max_players, + "current_map": map_name, + }, + raw_payload={}, + db_path=db_path, + ) + return f"1:{first_seen_at}" + + +def _set_raw_payload_ref(db_path: Path, *, match_id: str, raw_payload_ref: str) -> None: + with sqlite3.connect(db_path) as connection: + connection.execute( + """ + UPDATE historical_matches + SET raw_payload_ref = ? + WHERE external_match_id = ? + """, + (raw_payload_ref, match_id), + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/deploy/jta/.env.example b/deploy/jta/.env.example new file mode 100644 index 0000000..42d7fab --- /dev/null +++ b/deploy/jta/.env.example @@ -0,0 +1,25 @@ +POSTGRES_DB=hll_vietnam +POSTGRES_USER=hll_vietnam +POSTGRES_PASSWORD=change-me +POSTGRES_PORT=5432 + +BACKEND_PORT=8000 +FRONTEND_PORT=8080 +FRONTEND_BACKEND_BASE_URL=http://127.0.0.1:8000 +HLL_BACKEND_ALLOWED_ORIGINS=http://127.0.0.1:8080,http://localhost:8080 + +HLL_BACKEND_DATABASE_URL=postgresql://hll_vietnam:change-me@postgres:5432/hll_vietnam +HLL_BACKEND_LIVE_DATA_SOURCE=rcon +HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon +HLL_BACKEND_RCON_TARGETS='[{"name":"Comunidad Hispana #01","slug":"comunidad-hispana-01","external_server_id":"comunidad-hispana-01","host":"203.0.113.10","port":7779,"password":"replace-me-01","source_name":"community-hispana-rcon","region":"ES","game_port":7777,"query_port":7778}]' + +HLL_DB_MAINTENANCE_ENABLED=false +HLL_DB_MAINTENANCE_INTERVAL_SECONDS=43200 +HLL_RECENT_MATCHES_KEEP=100 +HLL_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS=30 +HLL_ADMIN_LOG_CRITICAL_RETENTION_DAYS=90 +HLL_SERVER_SNAPSHOT_RETENTION_DAYS=14 +HLL_DB_MAINTENANCE_BATCH_SIZE=5000 + +HLL_BACKEND_RCON_HISTORICAL_INTERVAL_SECONDS=600 +HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES=10 diff --git a/deploy/jta/README.md b/deploy/jta/README.md new file mode 100644 index 0000000..8008391 --- /dev/null +++ b/deploy/jta/README.md @@ -0,0 +1,164 @@ +# JTA Docker Compose Deploy + +Este despliegue prepara una variante directa para JTA sin Portainer y sin tocar +la logica funcional del proyecto. + +## Archivos + +- `docker-compose.yml`: stack directo para JTA +- `.env.example`: plantilla de variables sin credenciales reales +- `backups/`: carpeta local para dumps `.dump` o `.sql` + +## Preparacion + +1. Copia la plantilla: + + ```powershell + Copy-Item deploy/jta/.env.example deploy/jta/.env + ``` + +2. Ajusta como minimo: + +- `POSTGRES_PASSWORD` +- `HLL_BACKEND_RCON_TARGETS` +- `FRONTEND_BACKEND_BASE_URL` +- `HLL_BACKEND_ALLOWED_ORIGINS` + +Notas: + +- `HLL_BACKEND_RCON_TARGETS` debe ser un JSON valido en una sola linea. +- en `.env` conviene dejar ese JSON entre comillas simples para preservar los espacios +- `HLL_DB_MAINTENANCE_ENABLED=false` queda desactivado por defecto. +- `FRONTEND_BACKEND_BASE_URL` debe apuntar a la URL que vera el navegador. + Ejemplo remoto: `http://IP_O_DOMINIO_JTA:8000`. +- `HLL_BACKEND_ALLOWED_ORIGINS` debe incluir la URL publica del frontend. + Ejemplo remoto: `http://IP_O_DOMINIO_JTA:8080`. + +## Arranque + +Desde la raiz del repo: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env up -d --build +``` + +Alternativa equivalente desde `deploy/jta`: + +```powershell +cd deploy/jta +docker compose --env-file .env up -d --build +``` + +Ambas funcionan porque los contextos de build y los bind mounts se resuelven +relativos a `deploy/jta/docker-compose.yml`. + +## Arranque Con Workers Advanced + +Desde raiz: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env --profile advanced up -d --build +``` + +Desde `deploy/jta`: + +```powershell +docker compose --env-file .env --profile advanced up -d --build +``` + +Servicios: + +- normales: `postgres`, `backend`, `frontend` +- perfil `advanced`: `historical-runner`, `rcon-historical-worker` + +## Parada + +Parada sin borrar datos: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env down +``` + +Advertencia: + +- no usar `docker compose down -v` +- no borrar el volumen `jta-postgres-data` + +## Backup Y Restore + +Esta task no ejecuta backup ni restore real. Los comandos siguientes son solo +runbook operativo. + +### 1. Crear dump desde el PostgreSQL actual + +Ejemplo usando el contenedor PostgreSQL actual: + +```powershell +docker exec -t hll-vietnam-postgres pg_dump -U hll_vietnam -d hll_vietnam -Fc -f /tmp/hll_vietnam_jta.dump +docker cp hll-vietnam-postgres:/tmp/hll_vietnam_jta.dump .\hll_vietnam_jta.dump +Copy-Item .\hll_vietnam_jta.dump deploy\jta\backups\ +``` + +Si el nombre del contenedor actual es distinto, sustituirlo por el real. + +### 2. Levantar solo PostgreSQL en JTA + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env up -d postgres +``` + +### 3. Restaurar dump en JTA + +Con el dump ya copiado a `deploy/jta/backups/`: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env exec postgres sh -c "pg_restore --clean --if-exists -U \"$POSTGRES_USER\" -d \"$POSTGRES_DB\" /backups/hll_vietnam_jta.dump" +``` + +## Validacion De Datos Tras Restore + +Comprobar tablas clave: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env exec postgres sh -c "psql -U \"$POSTGRES_USER\" -d \"$POSTGRES_DB\" -c 'select count(*) from rcon_materialized_matches;'" +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env exec postgres sh -c "psql -U \"$POSTGRES_USER\" -d \"$POSTGRES_DB\" -c 'select count(*) from rcon_admin_log_events;'" +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env exec postgres sh -c "psql -U \"$POSTGRES_USER\" -d \"$POSTGRES_DB\" -c 'select count(*) from displayed_historical_snapshots;'" +``` + +## Endpoints A Probar + +- frontend: `http://IP_O_DOMINIO_JTA:8080` +- backend health: `http://IP_O_DOMINIO_JTA:8000/health` +- `http://IP_O_DOMINIO_JTA:8000/api/servers` +- `http://IP_O_DOMINIO_JTA:8000/api/historical/server-summary?server=comunidad-hispana-01` +- `http://IP_O_DOMINIO_JTA:8000/api/historical/recent-matches?limit=20&server=comunidad-hispana-01` + +## Logs A Revisar + +Basicos: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env logs --tail=200 postgres backend frontend +``` + +Advanced: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env logs --tail=200 historical-runner rcon-historical-worker +``` + +Eventos utiles a buscar: + +- `database-maintenance-scheduler-*` +- `historical-refresh-*` +- `database-maintenance-*` +- errores de conexion RCON + +## Validacion Del Compose + +La plantilla incluida usa valores de ejemplo sintacticamente validos, incluido +el JSON de `HLL_BACKEND_RCON_TARGETS`, para permitir: + +```powershell +docker compose -f deploy/jta/docker-compose.yml --env-file deploy/jta/.env.example config +``` diff --git a/deploy/jta/backups/.gitkeep b/deploy/jta/backups/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/deploy/jta/backups/.gitkeep @@ -0,0 +1 @@ + diff --git a/deploy/jta/docker-compose.yml b/deploy/jta/docker-compose.yml new file mode 100644 index 0000000..09fa43c --- /dev/null +++ b/deploy/jta/docker-compose.yml @@ -0,0 +1,140 @@ +services: + postgres: + image: postgres:16-alpine + command: + - postgres + - -p + - ${POSTGRES_PORT:-5432} + environment: + POSTGRES_DB: ${POSTGRES_DB:-hll_vietnam} + POSTGRES_USER: ${POSTGRES_USER:-hll_vietnam} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me} + POSTGRES_PORT: ${POSTGRES_PORT:-5432} + TZ: Europe/Madrid + ports: + - "${POSTGRES_PORT:-5432}:${POSTGRES_PORT:-5432}" + volumes: + - jta-postgres-data:/var/lib/postgresql/data + - ./backups:/backups + healthcheck: + test: + - CMD-SHELL + - pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB" -p "$$POSTGRES_PORT" + interval: 10s + timeout: 5s + retries: 12 + restart: unless-stopped + + backend: + image: hll-vietnam-backend:jta + build: + context: ../../backend + dockerfile: Dockerfile + environment: &backend_environment + HLL_BACKEND_HOST: 0.0.0.0 + HLL_BACKEND_PORT: ${BACKEND_PORT:-8000} + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:?HLL_BACKEND_DATABASE_URL is required} + HLL_BACKEND_ALLOWED_ORIGINS: ${HLL_BACKEND_ALLOWED_ORIGINS:?HLL_BACKEND_ALLOWED_ORIGINS is required} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TARGETS: ${HLL_BACKEND_RCON_TARGETS:?HLL_BACKEND_RCON_TARGETS is required} + HLL_DB_MAINTENANCE_ENABLED: ${HLL_DB_MAINTENANCE_ENABLED:-false} + HLL_DB_MAINTENANCE_INTERVAL_SECONDS: ${HLL_DB_MAINTENANCE_INTERVAL_SECONDS:-43200} + HLL_RECENT_MATCHES_KEEP: ${HLL_RECENT_MATCHES_KEEP:-100} + HLL_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS: ${HLL_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS:-30} + HLL_ADMIN_LOG_CRITICAL_RETENTION_DAYS: ${HLL_ADMIN_LOG_CRITICAL_RETENTION_DAYS:-90} + HLL_SERVER_SNAPSHOT_RETENTION_DAYS: ${HLL_SERVER_SNAPSHOT_RETENTION_DAYS:-14} + HLL_DB_MAINTENANCE_BATCH_SIZE: ${HLL_DB_MAINTENANCE_BATCH_SIZE:-5000} + ports: + - "${BACKEND_PORT:-8000}:${BACKEND_PORT:-8000}" + depends_on: + postgres: + condition: service_healthy + volumes: + - jta-backend-data:/app/data + restart: unless-stopped + + frontend: + build: + context: ../../frontend + dockerfile: Dockerfile + command: + - sh + - -c + - | + python - <<'PY' + import os + import re + from pathlib import Path + + base_url = os.environ.get("FRONTEND_BACKEND_BASE_URL", "http://127.0.0.1:8000") + pattern = re.compile(r'data-backend-base-url="[^"]*"') + replacement = f'data-backend-base-url="{base_url}"' + + for path in Path("/srv/frontend").glob("*.html"): + text = path.read_text(encoding="utf-8") + text = pattern.sub(replacement, text) + path.write_text(text, encoding="utf-8") + PY + python -m http.server "${FRONTEND_PORT:-8080}" --bind 0.0.0.0 --directory /srv/frontend + environment: + FRONTEND_PORT: ${FRONTEND_PORT:-8080} + FRONTEND_BACKEND_BASE_URL: ${FRONTEND_BACKEND_BASE_URL:?FRONTEND_BACKEND_BASE_URL is required} + ports: + - "${FRONTEND_PORT:-8080}:${FRONTEND_PORT:-8080}" + depends_on: + backend: + condition: service_started + restart: unless-stopped + + historical-runner: + profiles: + - advanced + image: hll-vietnam-backend:jta + build: + context: ../../backend + dockerfile: Dockerfile + command: + - python + - -m + - app.historical_runner + - --hourly + environment: + <<: *backend_environment + depends_on: + postgres: + condition: service_healthy + backend: + condition: service_started + volumes: + - jta-backend-data:/app/data + restart: unless-stopped + + rcon-historical-worker: + profiles: + - advanced + image: hll-vietnam-backend:jta + build: + context: ../../backend + dockerfile: Dockerfile + command: + - python + - -m + - app.rcon_historical_worker + - loop + environment: + <<: *backend_environment + HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS: ${HLL_BACKEND_RCON_HISTORICAL_INTERVAL_SECONDS:-600} + HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES: ${HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES:-10} + depends_on: + postgres: + condition: service_healthy + backend: + condition: service_started + volumes: + - jta-backend-data:/app/data + restart: unless-stopped + +volumes: + jta-postgres-data: + jta-backend-data: diff --git a/deploy/portainer/Caddyfile.example b/deploy/portainer/Caddyfile.example new file mode 100644 index 0000000..58d7dd5 --- /dev/null +++ b/deploy/portainer/Caddyfile.example @@ -0,0 +1,8 @@ +comunidadhll.devzamode.es { + encode zstd gzip + + reverse_proxy /health hll-vietnam-backend-1:8000 + reverse_proxy /api/* hll-vietnam-backend-1:8000 + + reverse_proxy hll-vietnam-frontend-1:8080 +} diff --git a/deploy/portainer/docker-compose.nas.yml b/deploy/portainer/docker-compose.nas.yml new file mode 100644 index 0000000..c01edde --- /dev/null +++ b/deploy/portainer/docker-compose.nas.yml @@ -0,0 +1,128 @@ +services: + postgres: + image: postgres:16-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB:-hll_vietnam} + POSTGRES_USER: ${POSTGRES_USER:-hll_vietnam} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} + volumes: + - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 12 + networks: + - hll-internal + restart: unless-stopped + + backend: + build: + context: ../../backend + environment: + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:?HLL_BACKEND_DATABASE_URL is required} + HLL_BACKEND_HOST: ${HLL_BACKEND_HOST:-0.0.0.0} + HLL_BACKEND_PORT: ${HLL_BACKEND_PORT:-8000} + HLL_BACKEND_ALLOWED_ORIGINS: ${HLL_BACKEND_ALLOWED_ORIGINS:-https://comunidadhll.devzamode.es} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TIMEOUT_SECONDS: ${HLL_BACKEND_RCON_TIMEOUT_SECONDS:-20} + HLL_BACKEND_RCON_TARGETS: ${HLL_BACKEND_RCON_TARGETS:?HLL_BACKEND_RCON_TARGETS is required} + expose: + - "8000" + depends_on: + postgres: + condition: service_healthy + volumes: + - backend-data:/app/data + networks: + - hll-internal + - caddy + restart: unless-stopped + + frontend: + build: + context: ../../frontend + command: + - sh + - -c + - | + python - <<'PY' + from pathlib import Path + for path in Path('/srv/frontend').glob('*.html'): + text = path.read_text(encoding='utf-8') + text = text.replace('data-backend-base-url="http://127.0.0.1:8000"', 'data-backend-base-url=""') + path.write_text(text, encoding='utf-8') + PY + python -m http.server 8080 --bind 0.0.0.0 --directory /srv/frontend + expose: + - "8080" + depends_on: + - backend + networks: + - caddy + restart: unless-stopped + + historical-runner: + profiles: + - advanced + build: + context: ../../backend + command: ["python", "-m", "app.historical_runner", "--hourly"] + environment: + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:?HLL_BACKEND_DATABASE_URL is required} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TIMEOUT_SECONDS: ${HLL_BACKEND_RCON_TIMEOUT_SECONDS:-20} + HLL_BACKEND_RCON_TARGETS: ${HLL_BACKEND_RCON_TARGETS:?HLL_BACKEND_RCON_TARGETS is required} + HLL_HISTORICAL_REFRESH_INTERVAL_SECONDS: ${HLL_HISTORICAL_REFRESH_INTERVAL_SECONDS:-3600} + HLL_HISTORICAL_REFRESH_MAX_RETRIES: ${HLL_HISTORICAL_REFRESH_MAX_RETRIES:-2} + HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS: ${HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS:-15} + depends_on: + postgres: + condition: service_healthy + backend: + condition: service_started + volumes: + - backend-data:/app/data + networks: + - hll-internal + restart: unless-stopped + + rcon-historical-worker: + profiles: + - advanced + build: + context: ../../backend + command: ["python", "-m", "app.rcon_historical_worker", "loop"] + environment: + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:?HLL_BACKEND_DATABASE_URL is required} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TIMEOUT_SECONDS: ${HLL_BACKEND_RCON_TIMEOUT_SECONDS:-20} + HLL_BACKEND_RCON_TARGETS: ${HLL_BACKEND_RCON_TARGETS:?HLL_BACKEND_RCON_TARGETS is required} + HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS: ${HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS:-600} + HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES: ${HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES:-2} + HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS: ${HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS:-15} + HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES: ${HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES:-10} + depends_on: + postgres: + condition: service_healthy + backend: + condition: service_started + volumes: + - backend-data:/app/data + networks: + - hll-internal + restart: unless-stopped + +volumes: + postgres-data: + backend-data: + +networks: + hll-internal: + driver: bridge + caddy: + external: true + name: ${CADDY_NETWORK:-stack-caddy} diff --git a/deploy/portainer/stack.env.example b/deploy/portainer/stack.env.example new file mode 100644 index 0000000..dc1f5fe --- /dev/null +++ b/deploy/portainer/stack.env.example @@ -0,0 +1,29 @@ +# Copy these values into Portainer Stack environment variables. +# Do not commit real production secrets. + +POSTGRES_DB=hll_vietnam +POSTGRES_USER=hll_vietnam +POSTGRES_PASSWORD=replace-with-strong-postgres-password + +HLL_BACKEND_DATABASE_URL=postgresql://hll_vietnam:replace-with-strong-postgres-password@postgres:5432/hll_vietnam +HLL_BACKEND_HOST=0.0.0.0 +HLL_BACKEND_PORT=8000 +HLL_BACKEND_ALLOWED_ORIGINS=https://comunidadhll.devzamode.es +HLL_BACKEND_LIVE_DATA_SOURCE=rcon +HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon +HLL_BACKEND_RCON_TIMEOUT_SECONDS=20 +HLL_BACKEND_RCON_TARGETS=[{"name":"Comunidad Hispana #01","slug":"comunidad-hispana-01","external_server_id":"comunidad-hispana-01","host":"replace-me-01.example","port":7779,"password":"replace-me-01","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null},{"name":"Comunidad Hispana #02","slug":"comunidad-hispana-02","external_server_id":"comunidad-hispana-02","host":"replace-me-02.example","port":7879,"password":"replace-me-02","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null}] + +CADDY_NETWORK=stack-caddy + +# Advanced profile only. Leave disabled unless you intentionally start the profile. +HLL_HISTORICAL_REFRESH_INTERVAL_SECONDS=3600 +HLL_HISTORICAL_REFRESH_MAX_RETRIES=2 +HLL_HISTORICAL_REFRESH_RETRY_DELAY_SECONDS=15 +HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS=600 +HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES=2 +HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS=15 +HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES=10 +HLL_RCON_BACKFILL_CHUNK_HOURS=6 +HLL_RCON_BACKFILL_SLEEP_SECONDS=1 +HLL_RCON_BACKFILL_MAX_DAYS_BACK=45 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..557c60c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,107 @@ +services: + postgres: + image: postgres:16-alpine + container_name: hll-vietnam-postgres + environment: + POSTGRES_DB: hll_vietnam + POSTGRES_USER: hll_vietnam + POSTGRES_PASSWORD: hll_vietnam_dev + ports: + - "5432:5432" + volumes: + - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U hll_vietnam -d hll_vietnam"] + interval: 5s + timeout: 5s + retries: 12 + restart: unless-stopped + + backend: + build: + context: ./backend + container_name: hll-vietnam-backend + env_file: + - ./backend/.env.example + environment: + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:-postgresql://hll_vietnam:hll_vietnam_dev@postgres:5432/hll_vietnam} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TIMEOUT_SECONDS: ${HLL_BACKEND_RCON_TIMEOUT_SECONDS:-20} + HLL_BACKEND_RCON_TARGETS: >- + ${HLL_BACKEND_RCON_TARGETS:-[{"name":"Comunidad Hispana #01","slug":"comunidad-hispana-01","external_server_id":"comunidad-hispana-01","host":"152.114.195.174","port":7779,"password":"replace-me-01","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null},{"name":"Comunidad Hispana #02","slug":"comunidad-hispana-02","external_server_id":"comunidad-hispana-02","host":"152.114.195.150","port":7879,"password":"replace-me-02","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null}]} + ports: + - "8000:8000" + depends_on: + postgres: + condition: service_healthy + volumes: + - ./backend/data:/app/data + restart: unless-stopped + + historical-runner: + profiles: + - advanced + build: + context: ./backend + container_name: hll-vietnam-historical-runner + command: ["python", "-m", "app.historical_runner", "--hourly"] + env_file: + - ./backend/.env.example + environment: + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:-postgresql://hll_vietnam:hll_vietnam_dev@postgres:5432/hll_vietnam} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TIMEOUT_SECONDS: ${HLL_BACKEND_RCON_TIMEOUT_SECONDS:-20} + HLL_BACKEND_RCON_TARGETS: >- + ${HLL_BACKEND_RCON_TARGETS:-[{"name":"Comunidad Hispana #01","slug":"comunidad-hispana-01","external_server_id":"comunidad-hispana-01","host":"152.114.195.174","port":7779,"password":"replace-me-01","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null},{"name":"Comunidad Hispana #02","slug":"comunidad-hispana-02","external_server_id":"comunidad-hispana-02","host":"152.114.195.150","port":7879,"password":"replace-me-02","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null}]} + depends_on: + postgres: + condition: service_healthy + backend: + condition: service_started + volumes: + - ./backend/data:/app/data + restart: unless-stopped + + rcon-historical-worker: + profiles: + - advanced + build: + context: ./backend + container_name: hll-vietnam-rcon-historical-worker + command: ["python", "-m", "app.rcon_historical_worker", "loop"] + env_file: + - ./backend/.env.example + environment: + HLL_BACKEND_DATABASE_URL: ${HLL_BACKEND_DATABASE_URL:-postgresql://hll_vietnam:hll_vietnam_dev@postgres:5432/hll_vietnam} + HLL_BACKEND_LIVE_DATA_SOURCE: ${HLL_BACKEND_LIVE_DATA_SOURCE:-rcon} + HLL_BACKEND_HISTORICAL_DATA_SOURCE: ${HLL_BACKEND_HISTORICAL_DATA_SOURCE:-rcon} + HLL_BACKEND_RCON_TIMEOUT_SECONDS: ${HLL_BACKEND_RCON_TIMEOUT_SECONDS:-20} + HLL_BACKEND_RCON_TARGETS: >- + ${HLL_BACKEND_RCON_TARGETS:-[{"name":"Comunidad Hispana #01","slug":"comunidad-hispana-01","external_server_id":"comunidad-hispana-01","host":"152.114.195.174","port":7779,"password":"replace-me-01","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null},{"name":"Comunidad Hispana #02","slug":"comunidad-hispana-02","external_server_id":"comunidad-hispana-02","host":"152.114.195.150","port":7879,"password":"replace-me-02","source_name":"community-hispana-rcon","region":"ES","game_port":null,"query_port":null}]} + HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS: ${HLL_RCON_HISTORICAL_CAPTURE_INTERVAL_SECONDS:-600} + HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES: ${HLL_RCON_HISTORICAL_CAPTURE_MAX_RETRIES:-2} + HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS: ${HLL_RCON_HISTORICAL_CAPTURE_RETRY_DELAY_SECONDS:-15} + HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES: ${HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES:-10} + depends_on: + postgres: + condition: service_healthy + backend: + condition: service_started + volumes: + - ./backend/data:/app/data + restart: unless-stopped + + frontend: + build: + context: ./frontend + container_name: hll-vietnam-frontend + depends_on: + - backend + ports: + - "8080:8080" + restart: unless-stopped + +volumes: + postgres-data: diff --git a/docs/crcon-advanced-metrics-origin-audit.md b/docs/crcon-advanced-metrics-origin-audit.md new file mode 100644 index 0000000..9709f30 --- /dev/null +++ b/docs/crcon-advanced-metrics-origin-audit.md @@ -0,0 +1,223 @@ +# CRCON Advanced Metrics Origin Audit + +## Validation Date + +- 2026-03-24 + +## Scope + +Auditoria tecnica del origen probable de metricas avanzadas visibles en +ecosistemas tipo CRCON / HLL Records, separando: + +- RCON directo implementado hoy en esta repo +- campos historicos ya visibles en la capa publica tipo scoreboard +- metricas que solo resultan plausibles con eventos/logs y agregacion propia + +No se implementa captura nueva, tablas nuevas ni cambios de producto. + +## Evidence Reviewed + +- `docs/rcon-data-capability-audit.md` +- `docs/monthly-player-ranking-data-audit.md` +- `docs/historical-crcon-source-discovery.md` +- `backend/README.md` +- `backend/app/rcon_client.py` +- `backend/app/providers/rcon_provider.py` +- `backend/app/data_sources.py` + +## Confirmed Boundary In This Repository + +La evidencia local confirma dos superficies distintas: + +- RCON live directo para estado actual del servidor +- historico CRCON / scoreboard publico para partidas cerradas y metricas ricas + +El cliente RCON implementado en `backend/app/rcon_client.py` solo usa: + +- `ServerConnect` +- `Login` +- `GetServerInformation` + +El proveedor `RconLiveDataSource` solo convierte eso en: + +- nombre del servidor +- estado online +- jugadores actuales +- capacidad maxima +- mapa actual +- metadata de procedencia del snapshot + +La repo no contiene hoy evidencia de comandos RCON integrados para: + +- killer -> victim +- kills por arma +- teamkills por evento +- duelos jugador contra jugador +- ledger tactico de acciones +- reconstruccion historica de partidas cerradas + +## What The Historical Source Already Exposes + +La discovery historica local ya documenta que el detalle CRCON / scoreboard +publico expone campos avanzados como: + +- `kills_by_type` +- `most_killed` +- `death_by` +- `weapons` +- `death_by_weapons` + +Ademas, `docs/monthly-player-ranking-data-audit.md` confirma que esos campos +existen en el origen, aunque la persistencia actual del proyecto todavia no los +guarda. + +## Technical Interpretation + +La mejor lectura tecnica basada en la repo es esta: + +- RCON puro hoy solo cubre estado live operativo +- metricas como `most_killed` y `death_by` no salen del cliente RCON actual +- esas metricas ya existen en una capa historica enriquecida externa al cliente + RCON local +- para reproducirlas dentro del proyecto haria falta una persistencia propia o + una fuente historica equivalente que conserve eventos o agregados avanzados + +Esto no demuestra por si solo el mecanismo interno exacto de CRCON o HLL +Records, pero si permite descartar algo importante: en esta repo no hay base +para afirmar que esas metricas provengan de RCON directo ya listo para usar. + +## Plausible Origin Paths + +### 1. Direct RCON Commands + +Plausibilidad en esta repo: baja para metricas avanzadas. + +Motivo: + +- no hay comandos RCON avanzados integrados en codigo +- no hay provider historico RCON operativo +- `RconHistoricalDataSource` es solo un placeholder que falla con + `Historical RCON provider is not implemented yet.` + +Conclusion: + +- RCON directo es plausible para live state +- no hay evidencia local suficiente para atribuirle `most_killed`, + `death_by`, killer/victim o kills por arma + +### 2. Event Stream Or Server Logs + +Plausibilidad en esta repo: alta como origen tecnico necesario si el proyecto +quisiera reconstruir esas metricas por cuenta propia. + +Motivo: + +- killer/victim requiere granularidad por evento o al menos por encounter +- kills por arma requieren capturar el arma asociada al kill +- teamkills por evento requieren distinguir el evento individual +- clasificaciones como infantry / tank / artillery requieren una senal por tipo + de kill o contexto del evento + +Conclusion: + +- para producir estas metricas dentro de HLL Vietnam, un pipeline de eventos o + logs es la hipotesis tecnica mas consistente + +### 3. CRCON Internal Storage / Enriched Aggregation + +Plausibilidad en esta repo: alta para explicar lo que ya se observa en el +scoreboard publico. + +Motivo: + +- la fuente publica ya devuelve campos agregados que el proyecto no calcula +- esos campos no se derivan del snapshot live RCON implementado hoy +- `most_killed` y `death_by` parecen vistas agregadas de encounters, no simples + contadores live del servidor + +Conclusion: + +- CRCON / HLL Records probablemente sirve esos campos desde una capa historica + propia ya enriquecida y persistida, no desde la llamada live minima que esta + repo usa por RCON + +## Origin Matrix By Metric + +| Metrica | RCON directo hoy en esta repo | Requiere eventos/logs para reproducirla | Requiere agregacion/persistencia propia | Origen probable segun evidencia local | +| --- | --- | --- | --- | --- | +| Estado live del servidor | Si | No | No | RCON directo | +| Jugadores actuales | Si | No | No | RCON directo | +| Mapa actual | Si | No | No | RCON directo | +| Scoreboard live basico por jugador | No confirmado | Posiblemente no siempre | Posiblemente no | No confirmado en la repo | +| `most_killed` | No | Si o fuente historica equivalente | Si | Capa historica enriquecida | +| `death_by` | No | Si o fuente historica equivalente | Si | Capa historica enriquecida | +| killer -> victim | No | Si | Si | Eventos/logs + persistencia | +| kills por arma | No | Si | Si | Eventos/logs + persistencia | +| `kills_by_type` | No | Si | Si | Eventos/logs + persistencia | +| `death_by_weapons` | No | Si | Si | Eventos/logs + persistencia | +| teamkills por evento | No | Si | Si | Eventos/logs + persistencia | +| teamkills agregados historicos | No desde RCON actual | Si | Si | Agregacion historica | +| duelos reutilizables | No | Si | Si | Eventos/logs + persistencia | +| distincion infantry / tank / artillery | No | Si | Si | Eventos/logs + clasificacion propia | +| acciones tacticas finas | No confirmadas | Si | Si | No confirmadas, pero no salen del RCON actual | + +## What RCON Purely Can Plausibly Provide + +Con evidencia local, RCON puro queda limitado a: + +- estado actual del servidor +- jugadores presentes +- capacidad maxima +- mapa actual +- metadata live util para un panel operativo + +Eso sirve para monitoreo live, no para un MVP mensual V2 con rivalidades, +armas, killers, victims o taxonomias tacticas. + +## What Seems To Require Event Capture Or Logs + +Las metricas siguientes solo son defendibles si el proyecto capta eventos o +logs con granularidad suficiente: + +- killer -> victim +- `most_killed` +- `death_by` +- kills por arma +- `kills_by_type` +- `death_by_weapons` +- teamkills por evento +- segmentacion infantry / tank / artillery + +La razon comun es que todas dependen de relaciones o atributos de eventos +individuales, no solo de un snapshot agregado del servidor. + +## What Seems To Require Historical Aggregation + +Incluso con eventos capturados, haria falta una capa propia de persistencia y +agregacion para exponer de forma estable: + +- rivales mas frecuentes +- resumen `most_killed` +- resumen `death_by` +- perfiles de armas por jugador +- acumulados mensuales auditables por servidor + +Sin esa capa, la señal estaria dispersa en eventos crudos y no seria operativa +para un ranking MVP V2. + +## Final Conclusion + +La conclusion mas solida que soporta esta repo es: + +- `most_killed`, `death_by`, killer/victim y kills por arma no salen del RCON + directo implementado hoy +- esas metricas ya son visibles en una fuente historica enriquecida externa al + cliente RCON local +- para reproducirlas dentro del proyecto haria falta una canalizacion nueva de + eventos/logs y una persistencia historica propia con agregados derivados + +## Recommended Follow-Up + +La siguiente task tecnica correcta es disenar el pipeline minimo de eventos de +jugador necesario para alimentar una V2 del ranking mensual sin asumir que RCON +directo ya entrega esas metricas listas. diff --git a/docs/current-hll-data-ingestion-plan.md b/docs/current-hll-data-ingestion-plan.md new file mode 100644 index 0000000..f6026cc --- /dev/null +++ b/docs/current-hll-data-ingestion-plan.md @@ -0,0 +1,130 @@ +# Current HLL Data Ingestion Plan + +## Objective + +Definir una estrategia tecnica reutilizable para ingerir datos del Hell Let +Loose actual como banco de pruebas del futuro ecosistema HLL Vietnam, sin +implementar todavia una ingesta productiva completa. + +## Initial Data Scope + +Los primeros campos a capturar deben cubrir el bloque provisional de +servidores y preparar historicos minimos: + +- `server_name` +- `status` +- `players` +- `max_players` +- `current_map` si la fuente lo permite +- `captured_at` +- `source` +- `external_server_id` o identificador equivalente si la fuente lo ofrece + +Campos como `queue`, `ping`, `rotation` o `notes` quedan como opcionales para +fases posteriores y no deben bloquear el bootstrap. + +## Snapshot Concept + +Un snapshot representa el estado observado de un servidor en un momento +concreto. No es un perfil estatico del servidor, sino una captura puntual con +timestamp. + +Cada snapshot debe permitir: + +- reconstruir una serie temporal simple por servidor +- detectar cambios de estado online u offline +- medir evolucion basica de jugadores y capacidad +- conservar la procedencia de la captura + +El identificador estable del servidor y el `captured_at` deben separar la +identidad del servidor de cada observacion historica. + +## Ingestion Source Options + +### Phase-safe controlled payload + +- Fuente recomendada para el inicio. +- Permite probar el pipeline con datos mock o manuales servidos por backend. +- Fija el contrato de entrada y la normalizacion sin depender de terceros. + +### Public external source + +- Puede ser una API publica o un listado mantenido por terceros. +- Acerca el banco de pruebas a datos reales. +- Exige validar formato, disponibilidad, limites de uso y estabilidad antes de + consolidarlo. + +### Direct server query or intermediary adapter + +- Puede ofrecer datos mas cercanos al estado real del servidor. +- Introduce mayor complejidad tecnica, posibles timeouts y dependencia del + protocolo soportado. +- Debe encapsularse detras de un adaptador backend, no exponerse al frontend. + +## Normalization Baseline + +La captura y la fuente no deben definir el contrato interno final. La +arquitectura debe separar: + +1. lectura de datos crudos +2. normalizacion a un modelo comun +3. produccion de snapshots consistentes + +La normalizacion inicial debe garantizar: + +- naming estable en `snake_case` +- `status` reducido a valores controlados como `online`, `offline` o `unknown` +- enteros para `players` y `max_players` cuando existan +- `captured_at` generado en backend +- conservacion del nombre de fuente para trazabilidad + +## Risks And Limits + +- Disponibilidad de terceros: una fuente publica puede dejar de responder sin + aviso. +- Cambios de formato: scraping o APIs no oficiales pueden romper el adaptador. +- Rate limits: las consultas frecuentes pueden exigir cache o polling mas + espaciado. +- Latencia: una consulta lenta no debe trasladarse directamente al frontend. +- CORS: el frontend no debe llamar a fuentes externas para este flujo. +- Fiabilidad: diferentes fuentes pueden discrepar en jugadores, mapa o estado. +- Dependencia no oficial: una integracion fragil no debe convertirse en pieza + critica del producto. + +## Phased Architecture + +### Phase 1: controlled payload and stable structure + +- Mantener un payload controlado como base de `/api/servers`. +- Definir el modelo normalizado esperado para servidores y snapshots. +- No almacenar historico real todavia. + +### Phase 2: snapshot collector with real or near-real source + +- Introducir un colector backend desacoplado de la fuente concreta. +- Permitir ejecucion manual o periodica en entorno de desarrollo. +- Generar snapshots consistentes listos para futura persistencia. + +### Phase 3: historical use and basic statistics + +- Persistir snapshots. +- Calcular metricas iniciales como actividad por servidor, picos de jugadores o + ultima vez visto online. +- Mantener el modelo generico para reutilizarlo con HLL Vietnam cuando existan + datos mas representativos. + +## Explicitly Out Of Scope Now + +- ingesta real completa en produccion +- scraping productivo +- base de datos funcional +- tareas periodicas operativas +- metricas avanzadas o paneles analiticos +- cambios visibles en frontend + +## Handoff To Following Tasks + +- `TASK-019` debe convertir este plan en una base de esquema para persistir + servidores y snapshots. +- `TASK-020` debe preparar un bootstrap pequeno del colector en Python con + separacion entre fuente, normalizacion y snapshot. diff --git a/docs/current-hll-servers-source-plan.md b/docs/current-hll-servers-source-plan.md new file mode 100644 index 0000000..42883fe --- /dev/null +++ b/docs/current-hll-servers-source-plan.md @@ -0,0 +1,130 @@ +# Current HLL Servers Source Plan + +## Objective + +Definir como mostrar en la web de HLL Vietnam un bloque provisional con +servidores actuales de Hell Let Loose sin presentarlos como si fueran datos de +HLL Vietnam ni depender todavia de una integracion real externa. + +## Product Framing + +- El bloque debe presentarse como referencia provisional para la comunidad. +- El copy debe mencionar de forma explicita "servidores actuales de Hell Let + Loose" y evitar formulas ambiguas como "servidores HLL Vietnam". +- La UI debe dejar claro que el bloque sirve mientras no existan datos propios o + mas cercanos al contexto final de HLL Vietnam. +- Si no hay datos disponibles, el estado vacio debe ser neutral y honesto, sin + simular actividad inexistente. + +## Recommended Fields For This Phase + +Campos utiles para un bloque pequeno y entendible: + +- `server_name` +- `status` +- `players` +- `max_players` +- `current_map` +- `region` + +Campos opcionales solo si una fuente futura los ofrece de forma estable: + +- `queue` +- `ping` +- `notes` +- `last_updated` + +## Source Options + +### Public external source + +- Puede ser una API publica especializada, un listado publico o una consulta de + servidor compatible con el juego actual. +- Ventaja: acerca la web a datos mas reales. +- Riesgo: cambios de formato, limites de uso, CORS, disponibilidad y dependencia + de terceros. + +### Controlled placeholder data + +- Fuente recomendada para la primera implementacion. +- El backend expone un payload manual con forma realista y semantica estable. +- Permite validar UI, contrato y estados de error sin acoplar la web a una + fuente externa todavia no validada. + +### Stronger future integration + +- Un adaptador backend dedicado podra sustituir el placeholder cuando exista una + fuente fiable o un dataset controlado mantenido por la comunidad. +- La sustitucion debe preservar el contrato JSON para no romper al frontend. + +## Risks And Restrictions + +- Disponibilidad: una fuente externa puede caer o degradarse sin aviso. +- CORS: el frontend no debe depender de llamadas directas a terceros. +- Rate limits: una API publica puede limitar frecuencia o volumen. +- Formato: scraping o endpoints no oficiales pueden cambiar sin contrato. +- Mantenimiento: una integracion fragil crearia coste operativo prematuro. +- Identidad: el bloque no puede inducir a pensar que HLL Vietnam ya dispone de + servidores propios o datos oficiales. + +## Phased Strategy + +### Phase 1: controlled mock + +- `GET /api/servers` devuelve datos manuales con estructura estable. +- El payload debe incluir una marca de contexto provisional para indicar que los + datos pertenecen al HLL actual. +- La landing puede consumir el endpoint con fallback local si el backend no esta + disponible. + +### Phase 2: backend adapter + +- Sustituir el mock por un adaptador backend desacoplado de la fuente concreta. +- Mantener el mismo contrato principal de `items`. +- Introducir validacion basica de campos y fallback controlado si falla la + fuente. + +### Phase 3: replacement toward HLL Vietnam + +- Reemplazar o mezclar progresivamente el bloque cuando existan datos mas + representativos del contexto HLL Vietnam. +- Revisar naming, copy y campos para no arrastrar supuestos del juego actual. + +## Explicitly Out Of Scope Now + +- Integrar una fuente externa real. +- Hacer scraping. +- Consultar servidores reales desde el frontend. +- Anadir base de datos, cache o panel administrativo. +- Presentar el bloque como caracteristica definitiva del producto. + +## Recommended Contract Shape + +Ejemplo minimo de respuesta provisional: + +```json +{ + "status": "ok", + "data": { + "title": "Servidores actuales de Hell Let Loose", + "context": "current-hll-reference", + "source": "controlled-placeholder", + "items": [ + { + "server_name": "HLL ESP Tactical Rotation", + "status": "online", + "players": 74, + "max_players": 100, + "current_map": "Sainte-Marie-du-Mont", + "region": "EU" + } + ] + } +} +``` + +## Handoff To Following Tasks + +- Backend task: preparar el adaptador placeholder estable sobre este contrato. +- Frontend task: anadir un panel visual sobrio con etiqueta provisional y + fallback seguro si el endpoint falla o no devuelve items. diff --git a/docs/database-maintenance.md b/docs/database-maintenance.md new file mode 100644 index 0000000..ce0a521 --- /dev/null +++ b/docs/database-maintenance.md @@ -0,0 +1,307 @@ +# Database Maintenance + +## Overview + +HLL Vietnam keeps database cleanup at the application level. + +The current maintenance scope is intentionally narrow: + +- old `server_snapshots`; +- old non-critical `rcon_admin_log_events`; +- old critical `rcon_admin_log_events` only after retention and protected-match checks; +- old non-protected `rcon_materialized_matches`; +- dependent `rcon_match_player_stats` for deleted matches. + +The first maintenance pass does not routinely delete: + +- `displayed_historical_snapshots`; +- file-based snapshots under `backend/data/snapshots/`; +- public-scoreboard `historical_*` fallback tables; +- `player_event_raw_ledger` and its worker metadata; +- Elo/MMR tables; +- Comunidad Hispana #03 data reactivation or targets. + +## Why Application-Level And Not `pg_cron` + +Cleanup is versioned in backend code instead of delegated to `pg_cron`, host cron, or a separate container because the retention logic depends on product rules: + +- keep the latest 100 closed materialized matches; +- keep the current month; +- keep the previous month during the first 7 days of a new month; +- keep the current week; +- keep the previous week when weekly fallback may still need it; +- keep child stats for protected matches; +- avoid breaking current/live pages that still read recent AdminLog data. + +Those rules belong with the application’s read and write model, not inside database-only scheduling. + +## Scheduled Cleanup Inside `historical-runner` + +Database maintenance is scheduled inside `app.historical_runner`. + +Behavior: + +- disabled by default; +- no extra Docker service is added for maintenance; +- the runner checks whether maintenance is due; +- when enabled and due, the runner invokes `python -m app.database_maintenance cleanup --apply` behavior through the shared Python function; +- failures are logged and do not crash the historical runner loop; +- cleanup runs under the same writer-lock coordination used by the historical writer flows. + +Relevant structured log events: + +- `database-maintenance-scheduler-skipped-disabled` +- `database-maintenance-scheduler-skipped-not-due` +- `database-maintenance-scheduler-started` +- `database-maintenance-scheduler-completed` +- `database-maintenance-scheduler-failed` + +## Environment Variables + +Required maintenance-related variables: + +```text +HLL_DB_MAINTENANCE_ENABLED=false +HLL_DB_MAINTENANCE_INTERVAL_SECONDS=43200 +HLL_RECENT_MATCHES_KEEP=100 +HLL_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS=30 +HLL_ADMIN_LOG_CRITICAL_RETENTION_DAYS=90 +HLL_SERVER_SNAPSHOT_RETENTION_DAYS=14 +HLL_DB_MAINTENANCE_BATCH_SIZE=5000 +``` + +Meaning: + +- `HLL_DB_MAINTENANCE_ENABLED` + Enables scheduled apply mode inside `historical-runner`. +- `HLL_DB_MAINTENANCE_INTERVAL_SECONDS` + Default scheduler interval. `43200` means every 12 hours. +- `HLL_RECENT_MATCHES_KEEP` + Number of latest closed materialized matches that must always be protected. +- `HLL_ADMIN_LOG_NONCRITICAL_RETENTION_DAYS` + Retention for non-critical AdminLog events such as chat/connect/disconnect. +- `HLL_ADMIN_LOG_CRITICAL_RETENTION_DAYS` + Retention for critical AdminLog events such as `kill`, `match_start`, `match_end`. +- `HLL_SERVER_SNAPSHOT_RETENTION_DAYS` + Retention for live server snapshots. +- `HLL_DB_MAINTENANCE_BATCH_SIZE` + Delete batch size for apply mode. + +## Protected Data + +The cleanup command protects: + +- latest 100 closed materialized matches by default; +- current month materialized matches; +- previous month materialized matches when the current day is `1` through `7`; +- current week materialized matches; +- previous week materialized matches when weekly fallback may still need them; +- `rcon_match_player_stats` belonging to protected matches; +- current/live AdminLog data required for visible current-match surfaces; +- `displayed_historical_snapshots`; +- file snapshots in `backend/data/snapshots/`. + +If a match timestamp cannot be interpreted safely, that match is skipped and protected instead of deleted. + +## Deleted Data + +Apply mode is currently allowed to delete: + +- `server_snapshots` older than retention; +- non-critical `rcon_admin_log_events` older than retention; +- critical `rcon_admin_log_events` older than retention only when they are not required by protected materialized match ranges; +- non-protected `rcon_materialized_matches`; +- dependent `rcon_match_player_stats` for deleted matches. + +Current critical AdminLog event types: + +- `kill` +- `match_start` +- `match_end` + +## Dry-Run Command + +From `backend/`: + +```powershell +python -m app.database_maintenance cleanup --dry-run +``` + +From the repository root with the backend package on `PYTHONPATH`: + +```powershell +$env:PYTHONPATH='backend' +python -m app.database_maintenance cleanup --dry-run +``` + +Inside Docker Compose: + +```powershell +docker compose exec backend python -m app.database_maintenance cleanup --dry-run +``` + +Useful dry-run options: + +```powershell +docker compose exec backend python -m app.database_maintenance cleanup --dry-run ` + --recent-matches-keep 100 ` + --admin-log-noncritical-retention-days 30 ` + --admin-log-critical-retention-days 90 ` + --server-snapshot-retention-days 14 ` + --batch-size 5000 +``` + +Dry-run is the safe preview path and should be reviewed before any production apply. + +## Apply Command + +Local module execution: + +```powershell +python -m app.database_maintenance cleanup --apply +``` + +Docker Compose: + +```powershell +docker compose exec backend python -m app.database_maintenance cleanup --apply +``` + +One-off local validation with a fixed time anchor: + +```powershell +python -m app.database_maintenance cleanup --apply --now 2026-06-20T12:00:00Z +``` + +Optional maintenance vacuum/analyze: + +```powershell +python -m app.database_maintenance cleanup --apply --vacuum-analyze +``` + +## Table-Size Audit SQL + +```sql +select + schemaname, + relname as table_name, + pg_size_pretty(pg_total_relation_size(relid)) as total_size, + pg_size_pretty(pg_relation_size(relid)) as table_size, + pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as indexes_size, + n_live_tup as estimated_rows, + n_dead_tup as estimated_dead_rows +from pg_stat_user_tables +order by pg_total_relation_size(relid) desc; +``` + +## Row-Count And Age Audit SQL + +### AdminLog events by type/date + +```sql +select + event_type, + count(*) as row_count, + min(event_timestamp) as first_event_timestamp, + max(event_timestamp) as last_event_timestamp, + min(server_time) as first_server_time, + max(server_time) as last_server_time +from rcon_admin_log_events +group by event_type +order by row_count desc, event_type asc; +``` + +### Materialized matches by server/date + +```sql +select + target_key, + source_basis, + count(*) as matches, + min(coalesce(ended_at, started_at)) as first_closed_at, + max(coalesce(ended_at, started_at)) as last_closed_at +from rcon_materialized_matches +group by target_key, source_basis +order by target_key asc, source_basis asc; +``` + +### Server snapshots by date + +```sql +select + server_id, + min(captured_at) as first_captured_at, + max(captured_at) as last_captured_at, + count(*) as snapshot_rows +from server_snapshots +group by server_id +order by last_captured_at desc; +``` + +### Displayed snapshots count + +```sql +select + snapshot_type, + metric, + snapshot_window, + count(*) as snapshot_rows, + min(generated_at) as first_generated_at, + max(generated_at) as last_generated_at +from displayed_historical_snapshots +group by snapshot_type, metric, snapshot_window +order by snapshot_type asc, metric asc, snapshot_window asc; +``` + +## Logs To Inspect + +The cleanup command emits JSON logs. Minimum events to look for: + +- `database-maintenance-started` +- `database-maintenance-plan` +- `database-maintenance-table-skipped` +- `database-maintenance-delete-batch` +- `database-maintenance-completed` +- `database-maintenance-error` + +Examples: + +```powershell +docker compose logs --tail=200 backend +docker compose logs --tail=200 historical-runner +``` + +If scheduled cleanup is enabled: + +```powershell +docker compose logs --tail=200 historical-runner +``` + +## Docker And Portainer Warnings + +- Never use `docker compose down -v` unless you intentionally want to delete PostgreSQL and mounted volume data. +- Always review dry-run output before enabling apply in production. +- Do not manually delete protected match or player-stat rows from PostgreSQL. +- Keep backups before changing retention settings. +- Do not add Comunidad Hispana #03 back into RCON targets in this task. +- Do not add a separate maintenance container, host cron, or `pg_cron` job for this feature. + +For Portainer-style operations the same warning applies: + +- deleting volumes is destructive; +- maintenance should run through the application command, not through manual table purges. + +## Rollback And Restore Considerations + +- Retention changes are destructive when apply mode runs. +- Keep a PostgreSQL backup before enabling scheduled apply in production. +- If cleanup removes too much data, recovery is restore-based, not “undo last delete.” +- Favor dry-run, smaller batch sizes, and reviewed retention values before long-running scheduled apply. + +## Safe Operator Flow + +1. Audit table size and row ages with the SQL above. +2. Run dry-run locally or in Compose. +3. Review protected counts and candidate counts in JSON output. +4. Enable `HLL_DB_MAINTENANCE_ENABLED=true` only after dry-run review. +5. Monitor `historical-runner` logs for scheduler events and cleanup completion. diff --git a/docs/decisions.md b/docs/decisions.md new file mode 100644 index 0000000..293f7d6 --- /dev/null +++ b/docs/decisions.md @@ -0,0 +1,242 @@ +# Technical Decisions + +## Decision 001: frontend simple HTML/CSS/JS + +Se adopta una base estatica con HTML, CSS y JavaScript puro para priorizar simplicidad, velocidad de arranque y compatibilidad total al abrir el frontend directamente en navegador. + +## Decision 002: backend previsto en Python + +La estructura del repositorio reserva desde el inicio una carpeta de backend porque la implementacion futura se realizara en Python. + +## Decision 003: estructura preparada para orquestacion por agentes + +Se incluye una carpeta `ai/` y un documento `AGENTS.md` para facilitar una futura organizacion del trabajo por roles, tareas y orquestacion. + +## Decision 004: branding militar Vietnam + +La direccion visual inicial se alinea con una estetica sobria, tactica y militar inspirada en el contexto Vietnam para mantener coherencia tematica desde la primera iteracion. + +## Decision 005: AI Development Platform integrada de forma adaptada + +Se integra una capa de orquestacion por tasks inspirada en la plantilla de AI Development Platform, pero adaptada al contexto real de HLL Vietnam y sin arrastrar supuestos genericos de otros stacks. La plataforma se usa como soporte operativo del repositorio, no como funcionalidad del producto. + +## Decision 006: contrato API pequeno antes de integraciones reales + +Antes de implementar endpoints de comunidad o integraciones externas, se fija un contrato JSON minimo entre frontend y backend para evitar que la landing y el backend evolucionen con supuestos incompatibles. + +La unica ruta implementada hoy es `GET /health`. Las rutas `/api/community`, `/api/trailer`, `/api/discord` y `/api/servers` quedan definidas como contrato previsto o placeholder en `docs/frontend-backend-contract.md`, manteniendo el backend en Python y sin introducir todavia Discord real, servidores reales ni base de datos. + +## Decision 007: estrategia por fases para Discord y servidores + +Los datos de Discord y de servidores de juego se incorporaran por fases para evitar dependencias prematuras de credenciales, APIs externas o consultas de red todavia no validadas. + +La fase inicial debe usar datos manuales o placeholder controlados por el backend para mantener estable el contrato del frontend. Una fase intermedia podra anadir una integracion limitada con fuentes publicas o consultas tecnicas de bajo riesgo. Solo una fase posterior evaluara integraciones mas reales, siempre que queden claras las restricciones de seguridad, disponibilidad, latencia y mantenimiento. + +La estrategia detallada de bloques de datos, fuentes posibles, riesgos y orden recomendado de implementacion queda documentada en `docs/discord-and-server-data-plan.md`. + +## Decision 008: consumo frontend progresivo con fallback estatico + +El frontend no debe depender de datos dinamicos para renderizar la landing base mientras el proyecto siga en fase fundacional. + +Cuando se incorporen endpoints del backend, el consumo debe hacerse con `fetch` y JavaScript simple, priorizando bloques independientes y manteniendo contenido estatico o placeholders visuales si falla una llamada. `GET /health` queda reservado para comprobaciones tecnicas y no debe bloquear el render principal. + +La estrategia detallada de prioridades de endpoints, estados de carga, errores y orden de migracion queda en `docs/frontend-data-consumption-plan.md`. + +## Decision 009: servidores actuales de HLL como referencia provisional + +Mientras no existan datos reales o representativos de HLL Vietnam, la web puede +mostrar un bloque provisional con servidores actuales de Hell Let Loose siempre +que quede claramente etiquetado como referencia temporal. + +La primera version de ese bloque debe salir de un payload controlado del backend +Python, no de una integracion directa desde frontend ni de scraping prematuro. +Esto permite fijar campos utiles, preservar el tono del producto y evitar que la +landing dependa de una fuente externa aun no validada. + +La estrategia de campos, riesgos, fases y sustitucion futura queda documentada +en `docs/current-hll-servers-source-plan.md`. + +## Decision 010: ingesta por snapshots y adaptadores desacoplados + +La evolucion desde payloads placeholder hacia datos mas realistas debe hacerse +con una arquitectura de snapshots de servidor, no conectando el frontend a una +fuente externa ni acoplando el backend a una integracion unica desde el inicio. + +La unidad tecnica base sera un snapshot con `captured_at` y campos normalizados +como estado, jugadores, capacidad y mapa actual cuando exista. La lectura de +fuente, la normalizacion y la produccion del snapshot deben quedar separadas +para poder sustituir mocks por una fuente publica o consulta tecnica posterior +sin romper el contrato interno. + +La estrategia detallada de fuentes, riesgos, fases y limites queda documentada +en `docs/current-hll-data-ingestion-plan.md`. + +## Decision 011: modelo de almacenamiento logico antes de fijar tecnologia + +Antes de introducir una base de datos concreta, el proyecto debe fijar un +modelo logico minimo para identidad de servidores y snapshots historicos. + +La base inicial se apoya en entidades genericas como `game_sources`, `servers` +y `server_snapshots`. Las metricas iniciales deben derivarse primero de esos +snapshots en vez de materializar agregados prematuros. Esto mantiene el diseno +reutilizable para HLL actual y para futuras fuentes mas cercanas a HLL Vietnam. + +El modelo base y las preguntas abiertas quedan documentados en +`docs/stats-database-schema-foundation.md`. + +## Decision 012: historico de partidas desde CRCON scoreboard JSON + +El historico reutilizable para estadisticas por partida y por jugador debe +salir de la capa JSON publica expuesta por los scoreboards CRCON de la +comunidad, no de A2S ni del HTML renderizado de `/games`. + +La discovery tecnica confirma que ambos scoreboards sirven una SPA cuya fuente +real de datos usa `baseURL: "/api"` y endpoints como +`/get_scoreboard_maps` y `/get_map_scoreboard`. Esa capa permite obtener listas +de partidas, detalle por `map_id` y metricas por jugador suficientes para una +futura agregacion semanal por servidor. + +A2S se mantiene como fuente de estado actual de servidores. El historico de +partidas y rankings debe construirse en una linea separada basada en CRCON. La +discovery detallada queda en `docs/historical-crcon-source-discovery.md`. + +## Decision 013: persistencia historica local separada del flujo live + +El backend mantiene el estado live de servidores y el historico CRCON en el +mismo SQLite local de desarrollo para no introducir infraestructura prematura, +pero ambas lineas quedan separadas por tablas y contratos distintos. + +El flujo live sigue usando `server_snapshots` via A2S. El flujo historico usa +tablas `historical_*` para: + +- servidores historicos configurados +- partidas +- mapas +- jugadores +- estadisticas por jugador y partida +- ejecuciones de ingesta + +Las claves estables son: + +- servidor: `historical_servers.slug` +- partida: `(historical_server_id, external_match_id)` +- jugador: `stable_player_key` +- estadistica por partida: `(historical_match_id, historical_player_id)` + +Esto permite bootstrap, refresco incremental e idempotencia sin mezclar +semanticas de estado actual con historico persistido. El modelo detallado queda +en `docs/historical-domain-model.md`. + +## Decision 014: despliegue normal simplificado sin servidor #03 + +El despliegue operativo normal vuelve a quedar reducido a `backend` + +`frontend`. Los servicios `historical-runner` y `rcon-historical-worker` se +mantienen disponibles solo para uso avanzado y explicito mediante el perfil +Compose `advanced`. + +Comunidad Hispana #03 deja de formar parte de los targets RCON por defecto +porque ya no es una fuente operativa vigente. El codigo historico, los datos +persistidos, las migraciones y las piezas Elo/MMR no se eliminan; quedan +pausadas operativamente para esta fase y pueden reintroducirse mediante una +task futura si se valida de nuevo la fuente y el coste de mantenimiento. + +## Decision 015: historico RCON-first con fallback publico + +La politica por defecto para historico vuelve a ser RCON-first: +`HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon`. El scoreboard publico de CRCON se +mantiene como fallback controlado cuando RCON falla, no tiene cobertura util o +no soporta todavia una operacion competitiva concreta. + +La arquitectura historica RCON-first se compone de captura de sesiones RCON, +ingesta de AdminLog, parser de eventos, almacenamiento de eventos/snapshots y +materializacion de partidas y estadisticas por jugador. Los snapshots de perfil +procedentes de `MESSAGE` enriquecen lecturas de jugador, pero no sustituyen los +hechos de partida derivados de eventos RCON. + +Comandos operativos manuales: + +```powershell +docker compose exec backend python -m app.rcon_admin_log_ingestion --minutes 1440 +docker compose exec backend python -m app.rcon_historical_worker capture +``` + +Esta decision no reactiva Elo/MMR dentro del arranque normal del backend. Las +piezas Elo/MMR, migraciones, datos persistidos y modulos historicos se +conservan, pero su operativa compleja sigue pausada y desacoplada salvo task +explicita. + +## Decision 016: catalogo confiable de scoreboards publicos activos + +Los origenes publicos de scoreboard que el backend puede exponer o validar se +centralizan en un catalogo explicito de servidores activos. En esta fase solo +son confiables `comunidad-hispana-01`, con origen +`https://scoreboard.comunidadhll.es`, y `comunidad-hispana-02`, con origen +`https://scoreboard.comunidadhll.es:5443`. + +`comunidad-hispana-03` no forma parte de ese catalogo ni de los seeds por +defecto nuevos. Los datos historicos ya persistidos no se eliminan, pero las +URLs publicas de partidas solo se aceptan si el `raw_payload_ref` usa HTTP(S), +apunta al origen confiable del servidor activo y mantiene una ruta `/games/`. + +## Decision 017: PostgreSQL phase 1 for RCON historical persistence + +La primera migracion de persistencia a PostgreSQL cubre el camino que sufria +contencion SQLite entre `backend`, `historical-runner` y +`rcon-historical-worker`: + +- captura prospectiva RCON, muestras y ventanas competitivas +- eventos AdminLog deduplicados y snapshots de perfil derivados +- partidas RCON materializadas y estadisticas por jugador +- candidatos confiables de URL de scoreboard que puedan poblarse para + correlacion de detalle + +Docker Compose configura `HLL_BACKEND_DATABASE_URL` y usa PostgreSQL como +backend autoritativo para esas tablas. La ejecucion local sin esa variable sigue +usando SQLite como fallback temporal para preservar comandos y tests locales. + +Quedan SQLite-backed en esta fase porque no forman parte del lock-prone writer +path migrado y siguen cubriendo fallback publico o caches locales: + +- snapshots live y cache de `/api/servers` +- tablas `historical_*` de scoreboard publico, rankings y correlacion legacy +- snapshots historicos precalculados, ledger player-event y Elo/MMR pausado + +La correlacion de URL publica en detalle usa primero candidatos PostgreSQL +confiables cuando existan y puede seguir leyendo filas `historical_*` +persistidas en SQLite durante la transicion. El diagnostico operativo se expone +con `python -m app.storage_diagnostics`. + +## Decision 018: PostgreSQL phase 2 for displayed historical data + +PostgreSQL pasa a ser la fuente de lectura para los datos historicos visibles: + +- fallback publico `historical_*` de partidas, detalle y rankings +- snapshots historicos precalculados que consume `historico.html` +- cache live de servidores que consume `/api/servers` +- ledger player-event usado para reconstruir snapshots visibles +- tablas RCON de AdminLog, perfiles, ventanas, partidas materializadas, + estadisticas y candidatos seguros ya migradas en phase 1 + +La migracion se ejecuta de forma idempotente con: + +```powershell +cd backend +python -m app.sqlite_to_postgres_migration +python -m app.storage_diagnostics +``` + +El comando conserva IDs y `external_match_id` del scoreboard publico, claves +`match_key` materializadas y URLs seguras existentes. Copia SQLite y los JSON +historicos de `backend/data/snapshots` como fuentes legacy; no los vuelve a +usar como read model visible cuando `HLL_BACKEND_DATABASE_URL` esta definido. +Las filas legacy de `comunidad-hispana-03` se omiten en el read model visible +de esta migracion para no reactivar ese target. + +Permanecen fuera de phase 2: + +- checkpoints y runs operativos del import publico que no aparecen en frontend +- Elo/MMR pausado y oculto en la UI actual + +`app.storage_diagnostics` muestra conteos PostgreSQL, ultimas partidas +materializadas, ultimos `match_end`, dominios restantes y un resumen de paridad +para verificar la migracion antes de retirar fuentes legacy. diff --git a/docs/deployment/nas-portainer.md b/docs/deployment/nas-portainer.md new file mode 100644 index 0000000..72bd94f --- /dev/null +++ b/docs/deployment/nas-portainer.md @@ -0,0 +1,130 @@ +# NAS / Portainer deployment + +This deployment path is for the Proxmox NAS Docker/Portainer environment. It keeps the development `docker-compose.yml` unchanged and adds a production compose file under `deploy/portainer/`. + +## Files + +- `deploy/portainer/docker-compose.nas.yml`: production compose for Portainer. +- `deploy/portainer/stack.env.example`: safe environment template. Copy values into Portainer and replace placeholders. +- `deploy/portainer/Caddyfile.example`: Caddy reverse proxy block for `comunidadhll.devzamode.es`. + +## Portainer stack + +1. In Portainer, create a new Stack from the cloned repository. +2. Use compose file path: + + ```text + deploy/portainer/docker-compose.nas.yml + ``` + +3. Paste variables from `deploy/portainer/stack.env.example` into the stack environment editor. +4. Replace all placeholders, especially: + - `POSTGRES_PASSWORD` + - `HLL_BACKEND_DATABASE_URL` + - `HLL_BACKEND_RCON_TARGETS` + +The production compose does not publish host ports. Caddy is the only public entrypoint. Backend and frontend are attached to the external Docker network configured by `CADDY_NETWORK`, defaulting to `stack-caddy`. + +## External Caddy network + +Make sure the Caddy network exists: + +```bash +docker network ls | grep stack-caddy +``` + +If the network does not exist, create it from the Caddy stack or manually: + +```bash +docker network create stack-caddy +``` + +## Caddy configuration + +Add this block to `/mnt/data8tb/NAS/stack-caddy/Caddyfile`: + +```caddyfile +comunidadhll.devzamode.es { + encode zstd gzip + + reverse_proxy /health hll-vietnam-backend-1:8000 + reverse_proxy /api/* hll-vietnam-backend-1:8000 + + reverse_proxy hll-vietnam-frontend-1:8080 +} +``` + +Then format and reload Caddy: + +```bash +docker exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile +docker exec caddy caddy reload --config /etc/caddy/Caddyfile +``` + +## Verification + +From the NAS or another machine: + +```bash +curl -I https://comunidadhll.devzamode.es +curl https://comunidadhll.devzamode.es/health +curl https://comunidadhll.devzamode.es/api/servers +``` + +In Portainer, check logs for: + +- backend +- frontend +- postgres + +With Docker CLI: + +```bash +docker compose -f deploy/portainer/docker-compose.nas.yml ps +docker compose -f deploy/portainer/docker-compose.nas.yml logs --tail=100 backend +docker compose -f deploy/portainer/docker-compose.nas.yml logs --tail=100 frontend +``` + +## Updating after git pull + +From the repository directory on the NAS: + +```bash +git pull origin main +docker compose -f deploy/portainer/docker-compose.nas.yml build +docker compose -f deploy/portainer/docker-compose.nas.yml up -d +``` + +Or redeploy the stack from Portainer. + +## Advanced historical workers + +Normal production startup includes only: + +- postgres +- backend +- frontend + +Historical workers are opt-in through the `advanced` profile: + +```bash +docker compose -f deploy/portainer/docker-compose.nas.yml --profile advanced up -d historical-runner rcon-historical-worker +``` + +Stop them before running manual backfills or other long writer jobs: + +```bash +docker compose -f deploy/portainer/docker-compose.nas.yml --profile advanced stop historical-runner rcon-historical-worker +``` + +## Local validation commands + +Run from repository root: + +```bash +docker compose config +docker compose -f deploy/portainer/docker-compose.nas.yml config +docker compose -f deploy/portainer/docker-compose.nas.yml build +``` + +The development compose still exposes local ports for `http://localhost:8080` and `http://localhost:8000`. The NAS compose intentionally exposes no host ports. diff --git a/docs/discord-and-server-data-plan.md b/docs/discord-and-server-data-plan.md new file mode 100644 index 0000000..8cd37b6 --- /dev/null +++ b/docs/discord-and-server-data-plan.md @@ -0,0 +1,119 @@ +# Discord And Server Data Plan + +## Objective + +Definir una base tecnica para exponer en la web datos de Discord y de futuros servidores de juego sin implementar todavia integraciones reales ni depender de servicios externos en esta fase. + +## Discord Data Candidates + +Bloques con sentido para la web: + +- `invite_url`: enlace principal para entrar en la comunidad. +- `community_name`: nombre visible de la comunidad o del servidor. +- `cta_label`: texto de llamada a la accion para el boton de acceso. +- `approx_presence`: presencia aproximada o estado publico solo si existe una fuente publica fiable. +- `public_summary`: breve descripcion publica, reglas resumidas o mensaje de bienvenida. + +## Game Server Data Candidates + +Bloques con sentido para la web: + +- `server_name`: nombre visible del servidor. +- `status`: online u offline. +- `current_map`: mapa actual si la fuente lo permite. +- `rotation`: rotacion o proximo mapa si la fuente es estable. +- `players`: jugadores conectados. +- `max_players`: capacidad maxima. +- `ping`: latencia aproximada si la consulta la devuelve. +- `region` o `notes`: metadatos operativos simples para la comunidad. + +## Possible Discord Sources + +### Public widget + +- Util para obtener datos publicos basicos si el servidor lo tiene habilitado. +- Bueno para presencia aproximada o nombre visible. +- Limitado por la configuracion del propio servidor y por el alcance real del widget. + +### External API or third-party integration + +- Puede simplificar algunas lecturas, pero introduce dependencia de terceros, cambios de servicio y posibles limites de uso. +- Debe considerarse solo si aporta estabilidad y evita exponer credenciales en frontend. + +### Own bot + +- Da mas control a largo plazo. +- Exige credenciales, despliegue, permisos y operacion continua. +- No encaja en la fase actual del repositorio. + +### Manual configured data + +- Fuente mas segura para la primera fase. +- Sirve para `invite_url`, nombre de comunidad y textos publicos. +- Permite validar el contrato API y el consumo frontend sin depender de Discord real. + +## Possible Game Server Sources + +### Direct server queries + +- Pueden dar estado, jugadores, mapa o ping segun el protocolo disponible. +- Exigen validar compatibilidad real con el juego, frecuencia de consulta y tolerancia a timeouts. + +### External API + +- Puede simplificar el acceso si existe una fuente especializada. +- Introduce dependencia externa, disponibilidad ajena y posible coste o rate limit. + +### Mock or placeholder data + +- Opcion recomendada para la primera fase. +- Permite fijar formato JSON, estados y experiencia de frontend sin acoplarse a infraestructura real. + +### Manual updates + +- Util para mostrar estado controlado o informacion operativa minima mientras no exista integracion tecnica fiable. +- Reduce riesgo en una etapa donde el backend aun es preparatorio. + +## Risks And Restrictions + +- Credenciales: bots o APIs privadas requieren secretos y una estrategia de almacenamiento segura. +- Rate limits: Discord o terceros pueden limitar frecuencia de consulta. +- Availability: widgets, APIs o consultas de servidor pueden fallar o cambiar sin previo aviso. +- Security: nunca debe exponerse en frontend una credencial ni una ruta administrativa. +- CORS: el frontend no deberia depender de llamadas directas a servicios externos si eso obliga a resolver CORS en cliente. +- Latency: consultas en tiempo real pueden degradar la web si no se amortiguan en backend. +- External dependency: cada integracion nueva aumenta coste operativo y puntos de fallo. + +## Phased Strategy + +### Phase 1: controlled placeholders + +- Backend Python devuelve datos manuales o mock para `/api/discord` y `/api/servers`. +- La web usa esos datos solo cuando futuras tasks lo indiquen. +- No hay consultas reales a Discord ni a servidores. + +### Phase 2: limited technical integration + +- Evaluar una unica fuente publica o consulta sencilla por dominio. +- Mantener fallback manual si la fuente falla. +- Introducir observabilidad minima antes de ampliar alcance. + +### Phase 3: real integration if justified + +- Considerar bot propio, polling controlado o una integracion mas rica solo si aporta valor real a la comunidad. +- Revisar seguridad, operacion, cache y mantenimiento antes de consolidarlo. + +## What Is Explicitly Out Of Scope Now + +- Integrar Discord real. +- Consultar servidores reales de juego. +- Anadir base de datos. +- Implementar autenticacion o panel administrativo. +- Hacer llamadas directas desde el frontend a servicios externos. + +## Recommended Implementation Order + +1. Consolidar placeholders backend para `community`, `discord`, `trailer` y `servers`. +2. Definir consumo frontend con fallbacks visuales y orden de prioridad. +3. Validar una fuente publica o consulta tecnica pequena para Discord o servidores. +4. Decidir si merece la pena ampliar integraciones reales. diff --git a/docs/elo-mmr-monthly-ranking-design.md b/docs/elo-mmr-monthly-ranking-design.md new file mode 100644 index 0000000..9c3a896 --- /dev/null +++ b/docs/elo-mmr-monthly-ranking-design.md @@ -0,0 +1,214 @@ +# Elo/MMR Monthly Ranking Design + +## Scope + +This repository now exposes a first operational Elo/MMR-like system inspired by +`sistema_elo_mensual_hll.pdf`, but constrained to signals that are really +available today. + +The implementation keeps the same conceptual split: + +- persistent `MMR` +- monthly `MonthlyRankScore` + +It does **not** claim full parity with the PDF. Every major signal is labeled as: + +- `exact` +- `approximate` +- `not_available` + +## Real Inputs Available Today + +Exact today from persisted historical CRCON/public-scoreboard data: + +- closed match identity +- server scope +- player identity +- team side +- kills +- deaths +- support +- teamkills +- combat score +- offense score +- defense score +- match timestamps when present +- final allied/axis score + +Exact today from current product state but not required by the core engine: + +- player-event V2 summaries for duels, most-killed, death-by and weapon summaries + +Approximate only: + +- `role_bucket` + - inferred from the dominant scoreboard axis among `combat`, `offense`, + `defense` and `support` +- `ObjectiveIndex` + - proxied with `offense + defense` because there is no tactical event feed +- `StrengthOfSchedule` + - proxied with match quality and lobby density because there is no opponent MMR + model yet + +Not available today: + +- explicit squad role / commander / SL role +- garrisons and OPs destroyed +- revives +- AFK and leave events +- precise leadership telemetry +- exact tactical objective event stream +- exact opponent-strength graph by roster + +## Current Capability Contract + +### Match validity + +Current rule: + +- match must be closed +- match duration must be at least `15` minutes +- match must have at least `20` persisted player rows + +Duration source: + +- `exact` if `started_at` and `ended_at` exist +- `approximate` if we must fall back to max player `time_seconds` + +### Quality factor Q + +Current `Q` is a bounded mix of: + +- player density +- match duration +- score completeness + +This is an operational approximation of the PDF quality factor and is labelled: + +- `exact` for the density and score-completeness inputs +- `exact` or `approximate` for duration depending on timestamp availability + +### Buckets + +Implemented: + +- duration bucket +- mode retention through `game_mode` +- approximate `role_bucket` + +Not implemented yet: + +- literal class role bucket + +### Subindices + +Implemented now: + +- `OutcomeScore`: `exact` +- `CombatIndex`: `exact` +- `ObjectiveIndex`: `approximate` +- `UtilityIndex`: `exact` +- `LeadershipIndex`: `not_available` +- `DisciplineIndex`: `exact` for teamkills only + +### ImpactScore + +Implemented with role-inspired weights, but the role itself is approximate, so +the final `ImpactScore` is operationally `approximate`. + +### DeltaMMR + +Implemented from: + +- `OutcomeScore` +- `ImpactScore` +- quality factor `Q` + +The resulting `DeltaMMR` is real and persisted, but inherits the mixed +availability of the inputs above. + +## Storage Model + +Tables added in backend SQLite: + +- `elo_mmr_player_ratings` +- `elo_mmr_match_results` +- `elo_mmr_monthly_rankings` +- `elo_mmr_monthly_checkpoints` + +Meaning: + +- `elo_mmr_player_ratings` + - current persistent rating per player and scope +- `elo_mmr_match_results` + - per-match scoring trace used to explain rating movement +- `elo_mmr_monthly_rankings` + - monthly ranking rows ready for product/API +- `elo_mmr_monthly_checkpoints` + - generated-at metadata plus source policy and capability summary + +Scopes persisted: + +- per historical server +- `all-servers` + +## Runtime Source Policy + +The Elo/MMR engine follows the same historical policy as the rest of backend: + +- primary intent: `rcon` +- current competitive calculation fallback: `public-scoreboard` + +Why fallback still exists here: + +- the current RCON historical read model only supports coverage and recent + activity +- it does not yet expose enough competitive match detail to support this Elo/MMR + engine directly + +That fallback is exposed in API metadata through: + +- `primary_source` +- `selected_source` +- `fallback_used` +- `fallback_reason` +- `source_attempts` + +## Product Read Model + +Current API surfaces: + +- `/api/historical/elo-mmr/leaderboard` +- `/api/historical/elo-mmr/player` + +These payloads expose: + +- persistent rating +- monthly ranking score +- eligibility +- component breakdown +- exact/approximate/partial capability metadata + +## Important Limitations + +This first version should be treated as: + +- operational +- honest about accuracy +- compatible with future expansion + +It should **not** be described as: + +- a perfect Elo system +- full parity with the PDF +- a complete tactical rating model + +## Planned Expansion Path + +The current design is compatible with future upgrades once real telemetry exists: + +- replace approximate `ObjectiveIndex` with event-driven tactical signals +- add `LeadershipIndex` when squad/command telemetry exists +- replace approximate `StrengthOfSchedule` with opponent MMR graph logic +- feed V2 duels and weapon signals into richer combat weighting when their + coverage is sufficient diff --git a/docs/frontend-backend-contract.md b/docs/frontend-backend-contract.md new file mode 100644 index 0000000..00f21db --- /dev/null +++ b/docs/frontend-backend-contract.md @@ -0,0 +1,263 @@ +# Frontend Backend Contract + +## Objetivo + +Definir un contrato inicial y pequeno entre la landing actual y el futuro backend Python sin implementar todavia integraciones reales ni comprometer detalles de infraestructura antes de tiempo. + +## Estado actual + +- Frontend: landing estatica sin consumo de API +- Backend: bootstrap Python con `GET /health` +- Integraciones reales: no implementadas + +## Convenciones generales + +- Todas las respuestas usan JSON. +- Los nombres de campos usan `snake_case`. +- `status` es obligatorio en todas las respuestas. +- Las respuestas exitosas usan `status: "ok"`. +- Las respuestas de error usan `status: "error"` y un campo `message`. +- Cuando un endpoint sea solo placeholder o aun no tenga datos reales, puede responder datos controlados o quedar documentado como previsto hasta una task posterior. + +## Estructura base de respuesta + +Respuesta correcta: + +```json +{ + "status": "ok", + "data": {} +} +``` + +Respuesta de error minima: + +```json +{ + "status": "error", + "message": "Route not found" +} +``` + +## Endpoints + +### `GET /health` + +- Proposito: comprobar que el backend bootstrap esta levantado. +- Metodo HTTP: `GET` +- Ruta: `/health` +- Estado actual: implementado + +Ejemplo JSON: + +```json +{ + "status": "ok", + "service": "hll-vietnam-backend", + "phase": "bootstrap" +} +``` + +### `GET /api/community` + +- Proposito: devolver contenido resumido de presentacion de la comunidad para bloques de texto o estadisticas futuras. +- Metodo HTTP: `GET` +- Ruta: `/api/community` +- Estado actual: previsto + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "title": "Comunidad Hispana HLL Vietnam", + "summary": "Punto de encuentro para jugadores, escuadras y comunidad.", + "discord_invite_url": "https://discord.com/invite/PedEqZ2Xsa" + } +} +``` + +### `GET /api/trailer` + +- Proposito: exponer la informacion del trailer que hoy esta fija en la landing. +- Metodo HTTP: `GET` +- Ruta: `/api/trailer` +- Estado actual: previsto + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "video_url": "https://www.youtube.com/embed/JzYzYNVWZ_A", + "title": "Trailer HLL Vietnam", + "provider": "youtube" + } +} +``` + +### `GET /api/discord` + +- Proposito: centralizar la informacion publica del acceso a Discord sin integrar todavia datos reales del servidor. +- Metodo HTTP: `GET` +- Ruta: `/api/discord` +- Estado actual: placeholder + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "invite_url": "https://discord.com/invite/PedEqZ2Xsa", + "label": "Unirse al Discord", + "availability": "manual" + } +} +``` + +### `GET /api/servers` + +- Proposito: exponer el estado actual de los 2 servidores reales de la comunidad desde backend, usando el ultimo snapshot valido y forzando refresco real cuando el cache local supere el objetivo de 120 segundos. +- Metodo HTTP: `GET` +- Ruta: `/api/servers` +- Estado actual: implementado con refresco A2S bajo demanda y fallback a snapshot persistido stale + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "title": "Estado actual de servidores", + "context": "current-hll-status", + "source": "real-time-a2s-refresh", + "last_snapshot_at": "2026-03-20T18:37:58.628122Z", + "snapshot_age_seconds": 0, + "snapshot_age_minutes": 0, + "max_snapshot_age_seconds": 120, + "is_stale": false, + "freshness": "fresh", + "refresh_attempted": true, + "refresh_status": "success", + "refresh_errors": [], + "items": [ + { + "external_server_id": "comunidad-hispana-01", + "server_name": "Comunidad Hispana #01", + "status": "online", + "players": 74, + "max_players": 100, + "current_map": "Sainte-Marie-du-Mont", + "region": "ES", + "snapshot_origin": "real-a2s", + "captured_at": "2026-03-20T18:37:58.628122Z" + } + ] + } +} +``` + +Notas del comportamiento actual: + +- Si el snapshot persistido tiene `120` segundos o menos, puede reutilizarse sin refresco inmediato. +- Si el snapshot supera ese umbral, backend intenta una consulta A2S real antes de responder. +- Si la consulta real falla, backend devuelve el ultimo snapshot valido con `is_stale: true`. +- Si no existe ningun snapshot valido, backend responde `items: []` y no inventa servidores de referencia. + +### `GET /api/servers/latest` + +- Proposito: devolver el ultimo snapshot conocido por servidor desde la persistencia local. +- Metodo HTTP: `GET` +- Ruta: `/api/servers/latest` +- Estado actual: implementado para validacion tecnica + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "title": "Ultimo estado conocido de servidores", + "context": "current-hll-history", + "source": "local-snapshot-storage", + "items": [ + { + "server_id": 1, + "external_server_id": "hll-esp-tactical-rotation", + "server_name": "HLL ESP Tactical Rotation", + "region": "EU", + "captured_at": "2026-03-20T08:45:20.802006Z", + "status": "online", + "players": 74, + "max_players": 100, + "current_map": "Sainte-Marie-du-Mont" + } + ] + } +} +``` + +### `GET /api/servers/history` + +- Proposito: devolver una ventana simple de snapshots recientes desde la persistencia local. +- Metodo HTTP: `GET` +- Ruta: `/api/servers/history` +- Parametros opcionales: `limit` entre `1` y `100` +- Estado actual: implementado para validacion tecnica + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "title": "Historial reciente de servidores", + "context": "current-hll-history", + "source": "local-snapshot-storage", + "limit": 20, + "items": [] + } +} +``` + +### `GET /api/servers/{id}/history` + +- Proposito: devolver una historia basica de snapshots para un servidor concreto. +- Metodo HTTP: `GET` +- Ruta: `/api/servers/{id}/history` +- Parametros opcionales: `limit` entre `1` y `100` +- Identificadores aceptados: `server_id` numerico interno o `external_server_id` +- Estado actual: implementado para validacion tecnica + +Ejemplo JSON: + +```json +{ + "status": "ok", + "data": { + "title": "Historial por servidor", + "context": "current-hll-history", + "source": "local-snapshot-storage", + "server_id": "hll-esp-tactical-rotation", + "limit": 20, + "items": [] + } +} +``` + +## Consumo previsto desde frontend + +- El frontend deberia llamar primero a `GET /health` solo para comprobaciones tecnicas o entornos de desarrollo, no para condicionar el render basico de la landing. +- Los endpoints de contenido (`/api/community`, `/api/trailer`, `/api/discord`, `/api/servers`) deberian consumirse con `fetch`. +- Si una llamada falla, la landing debe conservar un fallback estatico mientras exista contenido fijo en `index.html`. +- La futura migracion debe reemplazar valores hardcoded de forma incremental, endpoint por endpoint. + +## Notas de alcance + +- Este contrato no introduce autenticacion. +- Este contrato no define base de datos. +- Este contrato no integra Discord ni servidores reales. +- La implementacion de estos endpoints queda para tasks posteriores. diff --git a/docs/frontend-data-consumption-plan.md b/docs/frontend-data-consumption-plan.md new file mode 100644 index 0000000..e9c487a --- /dev/null +++ b/docs/frontend-data-consumption-plan.md @@ -0,0 +1,73 @@ +# Frontend Data Consumption Plan + +## Objective + +Definir como evolucionara la landing de HLL Vietnam desde contenido estatico hacia bloques alimentados por el backend sin romper simplicidad, branding ni compatibilidad al abrir `frontend/index.html` directamente. + +## Current Frontend Blocks With Future Dynamic Potential + +- Hero principal: titulo, resumen y CTA de Discord podran leer `community` y `discord`. +- Bloque de trailer: podra leer `trailer` para desacoplar video y titulo del HTML. +- Estado de servidores: queda reservado para una futura seccion y no debe forzarse en la landing actual. + +## Recommended Consumption Strategy + +- Usar `fetch` nativo cuando una task habilite consumo real. +- Mantener JavaScript simple en `frontend/assets/js/main.js` o dividir en modulos ligeros solo si el numero de bloques dinamicos ya lo justifica. +- Centralizar la URL base del backend en una configuracion minima si el frontend deja de ser puramente estatico en un entorno concreto. +- No llamar a servicios externos desde el navegador; el frontend debe hablar con el backend Python. + +## UI State Rules + +### Loading + +- No bloquear el render inicial de la landing. +- Mostrar skeletons o placeholders ligeros solo en bloques futuros que ya dependan del backend. + +### Error + +- Si falla una llamada, conservar el contenido estatico existente o un mensaje tactico breve y no intrusivo. +- Registrar el error en consola durante desarrollo sin degradar toda la pagina. + +### Empty state + +- Si `servers.items` llega vacio, mostrar un estado neutral de "informacion disponible mas adelante". +- Si un bloque opcional no tiene datos, ocultarlo o dejar un placeholder discreto en lugar de mostrar errores tecnicos. + +### Fallback + +- Mantener el Discord CTA hardcoded hasta que `/api/discord` sea estable. +- Mantener el iframe del trailer fijo hasta validar `/api/trailer`. +- No hacer depender el hero de `/health`. + +## Endpoint Priority + +1. `/api/community` +2. `/api/trailer` +3. `/api/discord` +4. `/api/servers` +5. `/health` solo para checks tecnicos o diagnostico en desarrollo + +## Progressive Migration Path + +### Step 1 + +- Introducir una capa minima de lectura para `community` y `trailer`. +- Reutilizar el HTML actual como fallback. + +### Step 2 + +- Sustituir el CTA de Discord por datos de `/api/discord` cuando el placeholder backend sea estable. +- Mantener la URL actual como respaldo local. + +### Step 3 + +- Anadir una seccion de servidores solo cuando exista diseno, contrato y placeholder suficientemente claros. +- Evitar reservar complejidad en la landing antes de que ese bloque aporte valor real. + +## Explicitly Out Of Scope Now + +- Implementar `fetch` real. +- Cambiar el comportamiento visible de la landing. +- Introducir librerias de estado o frameworks frontend. +- Conectar el navegador directamente con Discord o con APIs de servidores. diff --git a/docs/historical-coverage-report.md b/docs/historical-coverage-report.md new file mode 100644 index 0000000..5000190 --- /dev/null +++ b/docs/historical-coverage-report.md @@ -0,0 +1,120 @@ +# Historical Coverage Report + +## Validation Date + +- 2026-03-21 +- 2026-03-23 + +## Scope + +Estado real de la cobertura historica persistida localmente en +`backend/data/hll_vietnam_dev.sqlite3` tras ejecutar el bootstrap CRCON con el +flujo reforzado de `backend/app/historical_ingestion.py`. + +## Commands Used + +Desde `backend/`: + +```powershell +python -m app.historical_ingestion bootstrap --max-pages 3 --detail-workers 16 +``` + +Bootstrap acotado y reanudable para `comunidad-hispana-03`: + +```powershell +python -m app.historical_ingestion bootstrap --server comunidad-hispana-03 --page-size 10 --max-pages 1 --detail-workers 8 +``` + +Verificacion puntual previa de idempotencia sobre la primera pagina ya +importada: + +```powershell +python -m app.historical_ingestion bootstrap --max-pages 1 --detail-workers 8 +``` + +Esa reejecucion devolvio `matches_inserted: 0` y solo `matches_updated` para +los matches ya persistidos, confirmando el comportamiento idempotente en el +tramo reimportado. + +## Source Depth Discovered + +La propia API CRCON reporto en pagina 1: + +- `comunidad-hispana-01`: `23029` matches historicos disponibles +- `comunidad-hispana-02`: `18221` matches historicos disponibles + +Esto confirma que la fuente publica tiene un archivo mucho mas profundo que la +semana movil usada por la UI y que un bootstrap completo real es una operacion +larga incluso con paralelismo. + +## Persisted Coverage After Bootstrap Validation + +### comunidad-hispana-01 + +- matches importados: `150` +- jugadores unicos: `3986` +- filas de estadisticas por jugador: `12650` +- primera partida persistida: `2026-03-04T22:11:18Z` +- ultima partida persistida: `2026-03-20T21:41:18Z` +- rango cubierto: `15.98` dias + +### comunidad-hispana-02 + +- matches importados: `150` +- jugadores unicos: `4468` +- filas de estadisticas por jugador: `12665` +- primera partida persistida: `2026-03-01T16:59:10Z` +- ultima partida persistida: `2026-03-20T21:14:21Z` +- rango cubierto: `19.18` dias + +### comunidad-hispana-03 + +- matches importados: `33` +- jugadores unicos: `1161` +- filas de estadisticas por jugador: `2547` +- primera partida persistida: `2026-02-24T18:16:11Z` +- ultima partida persistida: `2026-03-08T18:11:52Z` +- rango cubierto: `12.0` dias +- total descubierto en la fuente publica: `11652` matches +- checkpoint actual de bootstrap: `next_page = 2`, `last_completed_page = 1` + +## Interpretation + +- La base persistida ya supera claramente la ventana semanal en ambos + servidores, por lo que la UI historica ya puede distinguir entre "ranking de + ultimos 7 dias" y "cobertura total importada" sin fingir que ambos conceptos + son lo mismo. +- `comunidad-hispana-03` ya no esta vacio: existe historico real persistido, + snapshots de resumen y partidas recientes, y un checkpoint reanudable para + seguir ampliando cobertura sin repetir desde cero. +- El historico local sigue siendo parcial respecto al total reportado por la + fuente. Lo importado hoy es suficiente para seguir con semantica y revisiones + de UI, pero no representa aun el archivo completo disponible en CRCON. + +## Source Limits Observed + +- Bajo replays repetidos del mismo bootstrap, la fuente CRCON devolvio errores + `502 Bad Gateway` intermitentes en `get_public_info` y `get_map_scoreboard`. +- Con `--detail-workers 16` la carga validada fue estable para `3` paginas por + servidor. Con concurrencia mas alta se observaron payloads no validos con mas + frecuencia. + +## Operational Conclusion + +- El bootstrap queda reanudable por checkpoint persistido en + `historical_backfill_progress`; si no se pasa `--start-page`, una nueva + sesion continua desde `next_page`. +- Cada pagina completada actualiza por servidor: + - `last_completed_page` + - `next_page` + - `discovered_total_matches` + - `discovered_total_pages` + - `last_run` +- La estrategia operativa razonable para completar todo el archivo es ejecutar + varias sesiones consecutivas con el mismo comando hasta que + `archive_exhausted` pase a `true`. +- `--start-page` se conserva solo como override manual cuando haga falta + reprocesar un tramo concreto. +- Mientras no se complete todo el archivo, cualquier UI o API debe mostrar la + cobertura importada como cobertura real disponible y no como historico total + del servidor. diff --git a/docs/historical-crcon-source-discovery.md b/docs/historical-crcon-source-discovery.md new file mode 100644 index 0000000..1291dcf --- /dev/null +++ b/docs/historical-crcon-source-discovery.md @@ -0,0 +1,243 @@ +# Historical CRCON Source Discovery + +## Objective + +Documentar la fuente historica real y mas estable para los 2 servidores de la comunidad a partir de sus scoreboards publicos basados en CRCON, dejando claro que el historico reutilizable debe venir de esa capa y no de A2S ni de una implementacion previa ya descartada. + +## Discovery Date + +- Verificado el 2026-03-20 contra: + - `https://scoreboard.comunidadhll.es/games` + - `https://scoreboard.comunidadhll.es:5443/games` + +## Main Finding + +La fuente historica reutilizable mas estable disponible hoy es una API JSON publica expuesta por cada scoreboard, no el HTML renderizado de `/games`. + +Las dos URLs de historial cargan una SPA con el mismo bundle frontend. Ese bundle usa `axios` con `baseURL: "/api"` y consulta endpoints JSON concretos: + +- `GET /api/get_public_info` +- `GET /api/get_live_scoreboard` +- `GET /api/get_live_game_stats` +- `GET /api/get_scoreboard_maps?page={page}&limit={limit}` +- `GET /api/get_map_scoreboard?map_id={map_id}` + +Por tanto, la estrategia recomendada no es parsear HTML de `/games`, sino consumir la capa JSON que alimenta ese frontend. + +## Server Mapping + +Cada scoreboard representa un servidor distinto: + +- `https://scoreboard.comunidadhll.es` + - `GET /api/get_public_info` identifica `#01 [ESP] Comunidad Hispana - discord.comunidadhll.es - Spa Onl` + - `public_stats_port`: `7010` + - `public_stats_port_https`: `7011` +- `https://scoreboard.comunidadhll.es:5443` + - `GET /api/get_public_info` identifica `#02 [ESP] Comunidad Hispana - discord.comunidadhll.es - Spa Onl` + - `public_stats_port`: `7012` + - `public_stats_port_https`: `7013` +- `https://scoreboard.comunidadhll.es:3443` + - tercer scoreboard comunitario reservado para la identidad estable `comunidad-hispana-03` + - la capa de backend ya debe tratarlo como otra fuente CRCON independiente de las de `#01` y `#02` + +## How Historical Data Is Loaded + +### 1. History list + +`GET /api/get_scoreboard_maps?page=1&limit=5` + +Devuelve una lista paginada de partidas finalizadas con estructura JSON. Campos verificados: + +- `page` +- `page_size` +- `total` +- `maps[]` + +Cada item de `maps[]` incluye al menos: + +- `id` +- `creation_time` +- `start` +- `end` +- `server_number` +- `map.id` +- `map.pretty_name` +- `map.image_name` +- `map.game_mode` +- `result.axis` +- `result.allied` + +Observacion importante: + +- `player_stats` aparece vacio en la lista. Para metricas de jugadores hay que ir al endpoint de detalle. + +### 2. Match detail + +`GET /api/get_map_scoreboard?map_id={map_id}` + +Devuelve el detalle historico de una partida concreta. Ejemplos verificados: + +- servidor `#01`: `map_id=1561077` +- servidor `#02`: `map_id=1561076` + +Campos verificados a nivel de partida: + +- `id` +- `creation_time` +- `start` +- `end` +- `server_number` +- `map_name` +- `map.pretty_name` +- `result.axis` +- `result.allied` +- `player_stats[]` + +Campos verificados a nivel de jugador dentro de `player_stats[]`: + +- `id` +- `player_id` +- `player` +- `steaminfo.id` +- `steaminfo.profile.steamid` cuando existe +- `map_id` +- `kills` +- `kills_by_type` +- `kills_streak` +- `deaths` +- `deaths_by_type` +- `teamkills` +- `time_seconds` +- `kills_per_minute` +- `deaths_per_minute` +- `kill_death_ratio` +- `longest_life_secs` +- `shortest_life_secs` +- `combat` +- `offense` +- `defense` +- `support` +- `most_killed` +- `death_by` +- `weapons` +- `death_by_weapons` +- `team.side` +- `level` + +Esto confirma que el scoreboard ya expone la base necesaria para rankings semanales por servidor como "top kills", junto con otras metricas reutilizables. + +## Detail URLs And IDs + +- La UI publica usa rutas tipo `/games/{id}`. +- `GET https://scoreboard.comunidadhll.es/games/1561077` responde `200`. +- `GET https://scoreboard.comunidadhll.es:5443/games/1561076` responde `200`. + +Inferencia razonable: + +- `/games/{id}` es la URL publica de detalle de partida. +- el dato real se resuelve desde frontend llamando a `GET /api/get_map_scoreboard?map_id={id}`. + +## Stable Historical Data Actually Available + +A dia 2026-03-20, la capa JSON permite obtener de forma estable: + +- servidor + - por host del scoreboard + - por `server_number` + - por `get_public_info.name` +- partida + - `id` + - `start` + - `end` + - `creation_time` +- mapa + - `map.id` + - `map.pretty_name` + - `game_mode` + - `environment` +- jugador + - `player_id` + - `player` + - `steaminfo` parcial cuando existe +- metricas + - `kills` + - `deaths` + - `teamkills` + - `kills_per_minute` + - `kill_death_ratio` + - `combat` + - `offense` + - `defense` + - `support` + - desglose por armas y tipos cuando aparece + +## Pagination And Historical Depth + +- La lista historica es paginada mediante `page` y `limit`. +- El bundle observado usa por defecto `page=1` y `limit=50`. +- En la verificacion: + - servidor `#01` reporto `total: 23027` + - servidor `#02` reporto `total: 18219` + +Esto sugiere una profundidad historica amplia y apta para ingesta incremental paginada. + +## Risks And Limits + +- La fuente es publica, pero no hay contrato formal versionado publicado; sigue siendo una API no documentada externamente. +- El frontend depende de rutas `/api/...` observadas en el bundle actual `v11.9.0`; una actualizacion futura podria renombrarlas. +- `player_id` no parece homogeneo al 100%: + - a veces coincide con SteamID + - a veces aparece como hash o identificador alternativo +- `steaminfo` puede venir completo, parcial o `null`; no debe asumirse como obligatorio. +- Existen valores de calidad irregular en algunas partidas: + - `shortest_life_secs` negativos + - jugadores con tiempos atipicos + - campos vacios o `unknown` +- El HTML de `/games` no debe tomarse como base tecnica porque solo sirve la SPA shell y es mas fragil que consumir el JSON directo. +- A2S sigue siendo util para estado actual, no para reconstruir historico de partidas ni ranking semanal retroactivo. + +## Recommended Strategy For Following Tasks + +### Ideal historical source + +Usar directamente la API JSON publica de cada scoreboard CRCON: + +- listar partidas con `GET /api/get_scoreboard_maps` +- obtener detalle por partida con `GET /api/get_map_scoreboard` + +### Realistic initial operating plan + +1. Mantener separados los 2 orígenes: + - `https://scoreboard.comunidadhll.es/api` + - `https://scoreboard.comunidadhll.es:5443/api` +2. Registrar por servidor: + - host base del scoreboard + - nombre publico devuelto por `get_public_info` + - `server_number` +3. Ingerir paginas historicas de forma incremental. +4. Persistir una entidad de partida externa con `match_id = id`. +5. Persistir filas de estadistica por jugador asociadas a `match_id` y servidor. +6. Calcular agregados semanales desde esos datos persistidos, no consultando el scoreboard en cada request de frontend. + +### Fallback if the JSON layer changes + +- primer fallback: revalidar el bundle SPA para localizar las nuevas rutas `/api` +- segundo fallback: parsear HTML solo como ultimo recurso y solo si el JSON deja de ser accesible + +## Explicitly Not Recommended + +- No basar el historico en A2S. +- No reutilizar como base de arquitectura una implementacion historica previa ya descartada. +- No tomar el HTML de `/games` como fuente principal. +- No disenar todavia la UI historica final. + +## Repository Impact + +El repositorio ya tenia una pista correcta en la landing al enlazar ambos scoreboards, pero no existia documentacion tecnica del origen real de historico. + +Tambien se detecto un rastro de implementacion previa no reutilizable: + +- `backend/app/payloads.py` importa `.historical_storage` para un flujo de `weekly_top_kills` +- el archivo `backend/app/historical_storage.py` no existe + +Ese estado confirma que cualquier intento previo de ranking historico no debe considerarse base valida para la siguiente fase. La nueva fase debe reconstruirse desde la fuente CRCON JSON documentada aqui. diff --git a/docs/historical-data-quality-notes.md b/docs/historical-data-quality-notes.md new file mode 100644 index 0000000..ecd5c23 --- /dev/null +++ b/docs/historical-data-quality-notes.md @@ -0,0 +1,66 @@ +# Historical Data Quality Notes + +## Validation Date + +- 2026-03-20 + +## Scope + +Validacion local del historico CRCON persistido en `backend/data/hll_vietnam_dev.sqlite3` +para los servidores: + +- `comunidad-hispana-01` +- `comunidad-hispana-02` + +## Findings Before Correction + +- habia jugadores fragmentados entre claves `steam:*`, `steaminfo:*`, + `crcon-player:*` e incluso claves legacy sin prefijo +- algunas filas usaban `steaminfo.id` corto como si fuera `steam_id`, lo que no + representaba un SteamID real +- existian partidas duplicadas por sesion cuando una partida en curso quedaba + persistida con id sintetico y luego aparecia cerrada con id CRCON numerico +- el ranking semanal podia contar esas partidas transitorias porque aceptaba + filas sin `ended_at` + +## Corrections Applied + +- la identidad de jugador ahora prioriza: + - `steaminfo.profile.steamid` + - `player_id` cuando ya parece un SteamID real + - `player_id` como `crcon-player:*` + - `steaminfo.id` solo como ultimo fallback +- la inicializacion del storage fusiona jugadores duplicados y reasigna sus + estadisticas por partida +- la inicializacion del storage fusiona partidas duplicadas por + `(servidor, started_at, mapa)` cuando la fila mas completa ya representa la + partida final cerrada +- `weekly-top-kills` filtra solo partidas cerradas con `ended_at` + +## Final Local Snapshot After Correction + +- partidas historicas: `12` +- jugadores historicos: `510` +- filas `historical_player_match_stats`: `914` +- distribucion: + - `comunidad-hispana-01`: `7` partidas, `487` jugadores unicos, `859` filas + - `comunidad-hispana-02`: `5` partidas, `44` jugadores unicos, `55` filas + +## Checks Performed + +- sin duplicados por `steam_id` +- sin duplicados por `source_player_id` +- sin duplicados de nombre normalizado en el dataset local actual +- sin partidas abiertas restantes (`ended_at IS NULL`) +- sin duplicados por misma combinacion de servidor, `started_at` y mapa +- el ranking semanal devuelve resultados separados por servidor y basados solo + en partidas cerradas dentro de la ventana movil de 7 dias + +## Notes + +- el volumen actual sigue siendo pequeno y claramente parcial; la calidad + estructural queda validada, pero no sustituye un bootstrap historico mas + profundo cuando se quiera construir UI historica propia +- siguen existiendo partidas con muy pocos jugadores en el dataset local + actual; por ahora se conservan porque no son un problema de integridad, sino + una caracteristica del muestreo ingerido hasta hoy diff --git a/docs/historical-domain-model.md b/docs/historical-domain-model.md new file mode 100644 index 0000000..d9c2864 --- /dev/null +++ b/docs/historical-domain-model.md @@ -0,0 +1,194 @@ +# Historical Domain Model + +## Objective + +Definir la base minima de dominio y persistencia para historico de partidas y +metricas por jugador obtenidas desde la capa JSON publica de los scoreboards +CRCON de Comunidad Hispana. + +## Scope + +Esta capa cubre solo historico persistido en backend: + +- identidad estable de los 3 servidores historicos +- partidas cerradas o actualizadas desde CRCON +- mapas asociados a esas partidas +- identidad reutilizable de jugadores +- estadisticas de jugador por partida +- trazabilidad de ejecuciones de ingesta +- snapshots precalculados para lectura rapida + +No sustituye ni modifica el flujo actual de snapshots live via A2S. + +## Stable Identities + +### Server + +- tabla: `historical_servers` +- clave estable: `slug` +- ejemplos: + - `comunidad-hispana-01` + - `comunidad-hispana-02` + - `comunidad-hispana-03` +- atributos de soporte: + - `scoreboard_base_url` + - `server_number` + - `source_kind` + +La capa de lectura y snapshots admite además una clave lógica adicional: + +- `all-servers` + +Esta clave no representa una fila física extra en `historical_servers`; es una +vista agregada sobre los tres servidores históricos reales para rankings y +resúmenes globales. + +### Match + +- tabla: `historical_matches` +- clave estable: `(historical_server_id, external_match_id)` +- `external_match_id` corresponde al `id` devuelto por CRCON para cada partida +- razon: + - el `id` de partida es estable dentro de cada scoreboard + - se conserva separado por servidor para evitar asumir unicidad global sin + contrato formal + +### Player + +- tabla: `historical_players` +- clave estable: `stable_player_key` +- estrategia de identidad: + 1. `steam:{steamid}` cuando existe `steaminfo.profile.steamid` + 2. `steaminfo:{id}` cuando existe `steaminfo.id` + 3. `crcon-player:{player_id}` cuando existe `player_id` + 4. `name:{normalized-name}` como ultimo fallback + +La prioridad evita perder continuidad cuando CRCON expone SteamID. Los +fallbacks quedan documentados porque la calidad del origen no es totalmente +uniforme. + +### Player Stats Per Match + +- tabla: `historical_player_match_stats` +- clave estable: `(historical_match_id, historical_player_id)` +- efecto: + - la misma partida puede reingestarse sin duplicar filas + - si una partida cambia despues, la fila se actualiza por `UPSERT` + +### Ingestion Run + +- tabla: `historical_ingestion_runs` +- registra: + - tipo de ejecucion (`bootstrap` o `incremental`) + - inicio y fin + - estado + - paginas procesadas + - matches vistos + - inserts y updates + +### Precomputed Snapshot + +- directorio: `backend/data/snapshots//` +- identidad estable: + - `server_key` + - `snapshot_type` + - `metric` + - `window` +- razon: + - permite exponer resumen, rankings y partidas recientes sin recalcular + agregados pesados en cada request + - mantiene metadatos operativos sobre frescura y rango fuente como artefactos + JSON inspeccionables + +## Data Model + +### `historical_servers` + +Fuente historica por scoreboard CRCON. + +### `historical_maps` + +Catalogo reutilizable de mapas usando `map.id` cuando existe. + +### `historical_matches` + +Partida historica persistida con: + +- servidor +- identidad externa +- tiempos (`creation_time`, `start`, `end`) +- mapa y metadatos visibles +- resultado axis/allied +- referencia de procedencia + +### `historical_players` + +Identidad reutilizable del jugador entre partidas y servidores. + +### `historical_player_match_stats` + +Metricas por jugador y partida con al menos: + +- kills +- deaths +- teamkills +- time_seconds +- kills_per_minute +- deaths_per_minute +- kill_death_ratio +- combat +- offense +- defense +- support + +### `historical_ingestion_runs` + +Trazabilidad operativa para bootstrap y refresh incremental. + +### `backend/data/snapshots//*.json` + +Payloads JSON precalculados listos para lectura rapida desde API/UI con: + +- `server_key` +- `snapshot_type` +- `metric` +- `window` +- `payload` +- `generated_at` +- `source_range_start` +- `source_range_end` +- `is_stale` + +## Idempotency Strategy + +- servidores sembrados de forma declarativa y actualizables por `slug` +- partidas persistidas con `UPSERT` por `(historical_server_id, external_match_id)` +- jugadores persistidos con `UPSERT` por `stable_player_key` +- estadisticas por jugador actualizadas con `UPSERT` por + `(historical_match_id, historical_player_id)` +- el refresco incremental usa una ventana de solape temporal para volver a leer + partidas recientes y absorber cambios tardios sin rehacer todo el historico +- los snapshots precalculados usan reemplazo por identidad logica de archivo + para refrescar el payload sin crear duplicados + +## Query Readiness + +La estructura soporta ya consultas futuras como: + +- top kills de la ultima semana por servidor +- top muertes, soporte y partidas de 100+ kills desde una capa cacheada +- partidas recientes por servidor +- rankings y resumenes globales con la clave logica `all-servers` +- mapas jugados y frecuencia +- agregados por jugador sobre ventanas temporales + +## Separation From Live State + +- live state actual: `server_snapshots` via A2S +- historico persistido: `historical_*` via CRCON scoreboard JSON +- snapshots precalculados: archivos JSON bajo `backend/data/snapshots/` + generados desde el mismo historico persistido + +Ambas lineas siguen compartiendo el mismo SQLite local para el estado live y el +historico bruto, pero la capa de snapshots UI queda desacoplada como archivos +en disco para simplificar inspeccion, servicio y depuracion. diff --git a/docs/historical-rcon-backfill.md b/docs/historical-rcon-backfill.md new file mode 100644 index 0000000..d5b48c9 --- /dev/null +++ b/docs/historical-rcon-backfill.md @@ -0,0 +1,57 @@ +# Historical RCON AdminLog Backfill + +The RCON/AdminLog backfill is an explicit operator command. It does not run on +backend startup or on web requests. + +Run it through the advanced worker image: + +```powershell +docker compose run --rm rcon-historical-worker python -m app.rcon_historical_backfill --ensure-recent-matches 100 --servers comunidad-hispana-01,comunidad-hispana-02 --dry-run +``` + +Before a real manual backfill, stop the writer services to avoid waiting on the +shared writer lock: + +```powershell +docker compose --profile advanced stop historical-runner rcon-historical-worker +``` + +Restart them afterwards: + +```powershell +docker compose --profile advanced up -d historical-runner rcon-historical-worker +``` + +Examples: + +```powershell +docker compose run --rm rcon-historical-worker python -m app.rcon_historical_backfill --ensure-recent-matches 100 --servers comunidad-hispana-01,comunidad-hispana-02 +docker compose run --rm rcon-historical-worker python -m app.rcon_historical_backfill --ensure-current-month --servers comunidad-hispana-01,comunidad-hispana-02 +docker compose run --rm rcon-historical-worker python -m app.rcon_historical_backfill --ensure-leaderboard-windows --servers comunidad-hispana-01,comunidad-hispana-02 +docker compose run --rm rcon-historical-worker python -m app.rcon_historical_backfill --ensure-recent-matches 100 --servers comunidad-hispana-01,comunidad-hispana-02 --chunk-hours 6 --sleep-seconds 1 --max-days-back 45 --regenerate-snapshots +``` + +Direct module examples: + +```powershell +python -m app.rcon_historical_backfill --from 2026-05-01 --to now --servers comunidad-hispana-01,comunidad-hispana-02 +python -m app.rcon_historical_backfill --ensure-recent-matches 100 --servers comunidad-hispana-01,comunidad-hispana-02 +python -m app.rcon_historical_backfill --ensure-current-month --servers comunidad-hispana-01,comunidad-hispana-02 +python -m app.rcon_historical_backfill --ensure-leaderboard-windows --servers comunidad-hispana-01,comunidad-hispana-02 +``` + +Useful configuration: + +- `HLL_RCON_BACKFILL_CHUNK_HOURS`, default `6` +- `HLL_RCON_BACKFILL_SLEEP_SECONDS`, default `1` +- `HLL_RCON_BACKFILL_MAX_DAYS_BACK`, default `45` +- `HLL_BACKEND_RCON_ADMIN_LOG_LOOKBACK_MINUTES`, for normal prospective worker capture only + +The command only selects `comunidad-hispana-01` and `comunidad-hispana-02` by +default. `comunidad-hispana-03` is not included unless it is configured in +`HLL_BACKEND_RCON_TARGETS` and explicitly passed with `--servers`. + +Monthly RCON leaderboards use the previous calendar month on days 1 through 7. +From day 8 onward they use the current calendar month. Weekly RCON leaderboards +use the current week only when the current week has enough closed materialized +matches; otherwise they fall back to the previous week. diff --git a/docs/monthly-mvp-ranking-scoring-design.md b/docs/monthly-mvp-ranking-scoring-design.md new file mode 100644 index 0000000..41f4099 --- /dev/null +++ b/docs/monthly-mvp-ranking-scoring-design.md @@ -0,0 +1,197 @@ +# Monthly MVP Ranking Scoring Design + +## Validation Date + +- 2026-03-24 + +## Objective + +Definir una formula V1 precisa y auditable para un ranking mensual de mejores +jugadores usando solo metricas ya persistidas y suficientemente fiables en el +repositorio. + +## Evidence Base + +This proposal is based on: + +- `docs/monthly-player-ranking-data-audit.md` +- `docs/historical-domain-model.md` +- `docs/historical-data-quality-notes.md` +- `backend/app/historical_models.py` +- `backend/app/historical_storage.py` +- `backend/app/payloads.py` + +The design assumes the existing monthly window already used by the backend: + +- UTC calendar month +- closed matches only +- fallback to the previous closed month only when the current month has no + closed matches at all + +## V1 Meaning Of "Best Player Of The Month" + +V1 should not mean "highest raw kills only" and should not pretend to measure +full tactical impact that the project does not persist yet. + +For this project, "monthly MVP" in V1 means: + +- sustained offensive contribution across the month +- meaningful team contribution through support +- good efficiency without rewarding one or two short outlier matches +- enough participation to make the result credible + +This is therefore a balanced MVP model with a light offensive bias. + +## Metrics Included In V1 + +Included metrics: + +- total kills +- total support +- total time played +- KPM derived from monthly totals +- KDA derived from monthly totals +- optional teamkill penalty +- matches played as an eligibility guard + +Derived metrics must be recomputed from monthly totals, not from the average of +per-match ratios: + +- `kpm = total_kills / max(total_time_minutes, 1)` +- `kda = total_kills / max(total_deaths, 1)` + +## Metrics Explicitly Out Of Scope For V1 + +Do not include in V1: + +- combat +- offense +- defense +- matches over 100 kills +- win/loss context +- weapons profile +- kill streaks or life-span fields +- duels, `most_killed`, `death_by` +- garrisons, OPs or tactical events not confirmed as persisted + +Reason: + +- some are useful but would complicate the first release without improving + reliability enough +- others are not persisted today or are not confirmed with stable semantics + +## Eligibility Rules + +A player is eligible for the monthly MVP ranking only if all conditions hold: + +- played at least `6` closed matches in the selected month and scope +- accumulated at least `21600` seconds (`6` hours) of play time in that month +- has non-null persisted stats for kills, deaths, support and time + +These gates are intentionally dual: + +- match count blocks one-match outliers +- time played blocks short-session inflation + +## Scope Recommendation + +V1 should be computed in both scopes from the same formula: + +- per server +- global aggregate using `all-servers` + +Publication recommendation: + +- default visible ranking: per server +- secondary comparable view: global aggregate + +Why: + +- per-server ranking is easier to interpret and fairer for each community shard +- the repository already supports the logical aggregate `all-servers` +- using one formula for both scopes avoids redesign later + +## Normalized Component Scores + +For each month and scope, first aggregate one row per eligible player. + +Then calculate these normalized component scores on a `0..100` scale: + +- `kills_score = 100 * ln(1 + total_kills) / ln(1 + max_total_kills_eligible)` +- `support_score = 100 * ln(1 + total_support) / ln(1 + max_total_support_eligible)` +- `kpm_score = 100 * ln(1 + kpm) / ln(1 + max_kpm_eligible)` +- `kda_score = 100 * ln(1 + kda) / ln(1 + max_kda_eligible)` +- `participation_score = 100 * min(1, total_time_seconds / 28800)` + +Implementation notes: + +- `ln(1 + x)` dampens extreme leaders without hiding real advantage +- participation reaches full score at `8` hours +- all `max_*_eligible` references are calculated inside the same month and scope + +## V1 Scoring Formula + +Recommended V1 monthly MVP score: + +`mvp_score = 0.35 * kills_score + 0.20 * support_score + 0.20 * kpm_score + 0.15 * kda_score + 0.10 * participation_score - teamkill_penalty` + +Weight rationale: + +- `35%` kills: offensive impact should matter most in a first public ranking +- `20%` support: keeps the model closer to MVP than to a pure frag ranking +- `20%` KPM: rewards productive time, not only volume +- `15%` KDA: rewards cleaner performance but keeps it below kills volume +- `10%` participation: favors sustained monthly presence without turning the + ranking into a pure grind chart + +## Teamkill Penalty + +Use a small optional penalty in V1: + +- `teamkill_penalty = min(6, total_teamkills * 0.5)` + +Effect: + +- `1` teamkill subtracts `0.5` +- `4` teamkills subtract `2` +- penalty caps at `6` + +This keeps the penalty visible without letting it dominate the ranking. + +## Tie-Break Rules + +If two players have the same `mvp_score`, resolve ties in this order: + +1. higher `participation_score` +2. higher `kills_score` +3. higher `support_score` +4. lower `total_teamkills` +5. alphabetical `display_name` +6. stable player key as final deterministic fallback + +## Why This V1 Is Reasonable + +This design is defendable for a first release because it: + +- uses only metrics already persisted with strong coverage +- recomputes efficiency from totals instead of averaging noisy per-match ratios +- blocks absurd winners from tiny samples with explicit eligibility gates +- stays interpretable enough to explain in product copy +- can be implemented from current monthly aggregates without new ingestion or + schema work + +## V2 Expansion Path + +V2 can extend the same structure without redesigning the whole ranking: + +- add combat, offense and defense as extra weighted components +- add win/loss context only where team scores are present and validated +- review whether teamkill penalty should become rate-based instead of absolute +- later add tactical metrics only after deliberate persistence work + +The important constraint for V2 is to preserve the same shape: + +- explicit eligibility +- normalized component scores +- weighted sum +- deterministic tie-breaks diff --git a/docs/monthly-mvp-v2-scoring-design.md b/docs/monthly-mvp-v2-scoring-design.md new file mode 100644 index 0000000..fb1ef68 --- /dev/null +++ b/docs/monthly-mvp-v2-scoring-design.md @@ -0,0 +1,243 @@ +# Monthly MVP V2 Scoring Design + +## Validation Date + +- 2026-03-24 + +## Objective + +Definir una formula V2 precisa, explicable e implementable para el MVP mensual +usando la base V1 ya aprobada y solo las senales avanzadas V2 que hoy tienen +soporte real en la repo. + +## Evidence Base + +This proposal is based on: + +- `docs/monthly-mvp-ranking-scoring-design.md` +- `docs/monthly-player-ranking-data-audit.md` +- `docs/player-event-pipeline-v2-design.md` +- `backend/app/monthly_mvp.py` +- `backend/app/player_event_aggregates.py` +- `backend/app/historical_snapshots.py` +- `backend/app/payloads.py` + +## Design Position + +V2 should not replace the V1 logic with a radically different opaque model. + +The correct direction is: + +- keep V1 as the stable baseline +- preserve the same monthly UTC window and closed-match policy +- add a small set of advanced event-derived signals with limited weight +- avoid weapon-type or kill-type complexity until the source is richer + +## Meaning Of MVP In V2 + +V2 still means "best monthly player", not "best fragger only". + +Compared with V1, V2 should reward: + +- sustained offensive output +- team contribution +- efficiency over the month +- cleaner player-vs-player control in repeated encounters +- better discipline through a stricter teamkill penalty + +## Signals Included In V2 + +V2 keeps these V1 signals: + +- total kills +- total support +- KPM recomputed from monthly totals +- KDA recomputed from monthly totals +- participation based on monthly time played +- monthly teamkills as penalty input + +V2 adds these advanced signals: + +- `most_killed` +- `death_by` +- net duel summaries + +These signals are used only as modest scoring components, not as the core of +the ranking. + +## Signals Explicitly Excluded From V2 Formula + +Do not score these yet: + +- weapon-type weighting +- kill-category weighting +- weapon variety bonus +- `death_by_weapons` +- combat, offense and defense +- win/loss context + +Reason: + +- the current CRCON-derived V2 layer is partial and summary-based +- weapon and type semantics are not robust enough for a serious weighted score +- adding too many low-confidence knobs would make V2 harder to defend than V1 + +Weapon kills remain useful for product readouts and future analysis, but not as +a weighted scoring factor in this phase. + +## Eligibility Rules + +Player eligibility for V2 should remain identical to V1: + +- at least `6` closed matches in the selected month and scope +- at least `21600` seconds (`6` hours) played in the selected month and scope +- non-null monthly totals for kills, deaths, support and time + +Additional publication gate for the ranking itself: + +- publish V2 only when the selected month and scope have matching player-event + coverage for that same `month_key` + +This avoids ranking a month with V1 totals but missing V2 event coverage. + +## Derived Advanced Metrics + +For each eligible player-month, derive: + +- `most_killed_count` + - kills against the player most often killed by this player in the month +- `death_by_count` + - deaths suffered from the player that killed this player most often in the + month +- `rivalry_edge_raw = max(0, most_killed_count - death_by_count)` +- `duel_control_raw` + - sum of positive `net_duel_value` across the player's top `3` duel pairs in + the selected month and scope + +Then normalize: + +- `rivalry_edge_score = 100 * ln(1 + rivalry_edge_raw) / ln(1 + max_rivalry_edge_raw_eligible)` +- `duel_control_score = 100 * ln(1 + duel_control_raw) / ln(1 + max_duel_control_raw_eligible)` + +## Small-Sample Treatment + +Advanced event signals should be damped on low-volume months. + +Use: + +- `advanced_confidence = min(1, total_kills / 35)` + +Effect: + +- under `35` kills, advanced components contribute only partially +- at `35+` kills, the full advanced weight is available + +This keeps V2 from overreacting to tiny rivalry samples. + +## Normalized Core Component Scores + +V2 keeps the same V1 normalization style on a `0..100` scale: + +- `kills_score = 100 * ln(1 + total_kills) / ln(1 + max_total_kills_eligible)` +- `support_score = 100 * ln(1 + total_support) / ln(1 + max_total_support_eligible)` +- `kpm_score = 100 * ln(1 + kpm) / ln(1 + max_kpm_eligible)` +- `kda_score = 100 * ln(1 + kda) / ln(1 + max_kda_eligible)` +- `participation_score = 100 * min(1, total_time_seconds / 28800)` + +## V2 Teamkill Penalty + +V2 should be slightly stricter than V1 on discipline. + +Use: + +- `teamkill_penalty_v2 = min(8, total_teamkills * 0.75)` + +Effect: + +- `1` teamkill subtracts `0.75` +- `4` teamkills subtract `3` +- penalty caps at `8` + +## V2 Scoring Formula + +Recommended V2 monthly MVP score: + +`mvp_v2_score = 0.30 * kills_score + 0.18 * support_score + 0.18 * kpm_score + 0.12 * kda_score + 0.10 * participation_score + advanced_confidence * (0.07 * rivalry_edge_score + 0.05 * duel_control_score) - teamkill_penalty_v2` + +Weight rationale: + +- `30%` kills keeps offense as the main visible driver +- `18%` support preserves MVP rather than pure frag logic +- `18%` KPM rewards productive time +- `12%` KDA rewards cleaner performance without dominating the table +- `10%` participation keeps monthly presence relevant +- `7%` rivalry edge rewards players who repeatedly finish ahead in their + strongest recurring encounter +- `5%` duel control adds a second advanced signal but keeps it clearly bounded + +## Why Weapon Kills Are Not Weighted Yet + +The repository can already expose kills by weapon, but the current source layer: + +- is summary-based, not a full raw kill feed +- does not yet prove a stable weapon taxonomy for competitive weighting +- would invite fragile distinctions such as tank vs infantry vs artillery too + early + +Decision: + +- do not weight kills by weapon in V2 +- do not assign bonus or penalty by weapon type +- keep weapon-kill outputs as audit and UI-facing data only + +## Tie-Break Rules + +If two players have the same `mvp_v2_score`, resolve ties in this order: + +1. higher `advanced_confidence` +2. higher `participation_score` +3. higher `kills_score` +4. higher `rivalry_edge_score` +5. lower `total_teamkills` +6. alphabetical `display_name` +7. stable player key as final deterministic fallback + +## Coexistence With V1 + +V1 and V2 should coexist explicitly: + +- `V1` remains the stable default ranking +- `V2` is a separate ranking version with its own `ranking_version` +- both versions should use the same month and scope selectors +- V2 should never overwrite or reinterpret the V1 payload contract + +## Implementation Guidance For Next Task + +The backend task should compute V2 from: + +- the same monthly player totals already used by V1 +- direct player-event monthly aggregates derived from the raw ledger + +Required per-player V2 outputs: + +- `mvp_v2_score` +- `advanced_confidence` +- `rivalry_edge_raw` +- `duel_control_raw` +- `component_scores` +- `teamkill_penalty_v2` + +Recommended `ranking_version`: + +- `v2` + +## Final Recommendation + +The correct V2 for the current repository is an incremental evolution of V1: + +- keep the same explainable weighted-score structure +- add only `most_killed` / `death_by` / duel-derived pressure signals +- make discipline stricter +- refuse weapon-type weighting until the signal quality improves + +This yields a V2 that is materially richer than V1 without becoming speculative. diff --git a/docs/monthly-player-ranking-data-audit.md b/docs/monthly-player-ranking-data-audit.md new file mode 100644 index 0000000..b39b8d6 --- /dev/null +++ b/docs/monthly-player-ranking-data-audit.md @@ -0,0 +1,246 @@ +# Monthly Player Ranking Data Audit + +## Validation Date + +- 2026-03-24 + +## Scope + +Auditoria tecnica del estado real de datos para un futuro ranking mensual de +"mejores jugadores" usando: + +- codigo y esquema historico del backend +- persistencia local en `backend/data/hll_vietnam_dev.sqlite3` +- snapshots historicos ya generados en `backend/data/snapshots/` +- discovery ya documentada de la fuente CRCON/scoreboard + +No se implementa todavia ninguna formula de ranking, tabla nueva ni cambio de +UI. + +## Evidence Reviewed + +- `backend/app/historical_models.py` +- `backend/app/historical_storage.py` +- `backend/app/historical_ingestion.py` +- `backend/app/historical_snapshots.py` +- `backend/app/historical_snapshot_storage.py` +- `backend/app/payloads.py` +- `docs/historical-domain-model.md` +- `docs/historical-data-quality-notes.md` +- `docs/historical-crcon-source-discovery.md` +- `docs/historical-coverage-report.md` + +## Current Persisted State + +Local SQLite currently contains: + +- `historical_servers`: `3` +- `historical_matches`: `9638` +- `historical_players`: `163506` +- `historical_player_match_stats`: `1062244` +- `historical_ingestion_runs`: `32` + +Coverage visible in the local database today: + +- `comunidad-hispana-01`: `8602` matches, from `2024-05-17T20:48:40Z` to `2026-03-23T16:01:20Z` +- `comunidad-hispana-02`: `753` matches, from `2025-11-04T17:10:19Z` to `2026-03-23T18:58:06Z` +- `comunidad-hispana-03`: `283` matches, from `2026-01-14T22:34:18Z` to `2026-03-08T18:11:52Z` + +Important quality notes from the local dataset: + +- all `historical_player_match_stats` rows have populated values for kills, + deaths, teamkills, time, KPM, KDA, combat, offense, defense, support, level + and team side +- `85,270 / 163,506` players have SteamID; the rest currently depend on + `crcon-player:*` identity, so identity continuity is usable but not equally + strong for every player +- all persisted matches have start/end timestamps, map and game mode +- `7,961 / 9,638` persisted matches currently have both allied/axis score + +## What Is Persisted Today + +### Match level + +Persisted per match: + +- server +- external match id +- creation/start/end timestamps +- map name, pretty name, game mode, image +- allied score +- axis score + +Not persisted at match level: + +- raw full CRCON JSON payload +- derived win/loss per player +- any tactical event ledger + +### Player identity level + +Persisted per player: + +- stable player key +- display name +- SteamID when available +- source player id +- first seen / last seen + +### Player per match level + +Persisted per player-match row: + +- level +- team side +- kills +- deaths +- teamkills +- time seconds +- kills per minute +- deaths per minute +- kill/death ratio +- combat +- offense +- defense +- support + +## What Exists In CRCON Source But Is Not Persisted + +The documented CRCON detail payload already exposes fields that the project does +not currently store: + +- `kills_by_type` +- `kills_streak` +- `longest_life_secs` +- `shortest_life_secs` +- `most_killed` +- `death_by` +- `weapons` +- `death_by_weapons` + +These fields are visible in the source discovery, but the current upsert logic +only persists the smaller normalized subset listed above. + +## What Was Not Confirmed As Available + +The current repository evidence does not confirm any stable source fields for: + +- garrisons destroyed +- outposts destroyed +- direct duel history in a structured reusable form +- tactical actions such as node building, dismantling or commander abilities + +For direct encounters, the source does expose `most_killed` and `death_by`, but +that is not the same thing as a complete duel graph and is not stored today. + +## Availability And Reliability Matrix + +| Metric / signal | Exists in source | Persisted today | Reliability for ranking | Extra work | V1? | +| --- | --- | --- | --- | --- | --- | +| Kills | Yes | Yes | High | None | Yes | +| Deaths | Yes | Yes | High | None | Yes | +| Support | Yes | Yes | High | None | Yes | +| Combat | Yes | Yes | Medium-High | Query only | Maybe | +| Offense | Yes | Yes | Medium-High | Query only | Maybe | +| Defense | Yes | Yes | Medium-High | Query only | Maybe | +| Teamkills | Yes | Yes | High as penalty signal | Query only | Maybe | +| Match count | Yes | Derivable | High | Query only | Yes | +| Time played | Yes | Yes | High | Query only | Yes | +| KPM | Yes | Yes | Medium-High if computed from totals, lower if averaging raw per-match KPM | Query only | Yes | +| KDA / KD ratio | Yes | Yes | Medium-High if computed from totals, lower if averaging raw per-match KDA | Query only | Yes | +| 100+ kill matches | Derivable | Exposed in leaderboard | Medium | None | No | +| Win/loss context | Partially | Derivable from team side + scores when scores exist | Medium | Query and validation | Maybe | +| Weapons profile | Yes | No | Medium-Low for V1 | New persistence/modeling | No | +| Kill streak / life metrics | Yes | No | Medium-Low for V1 | New persistence/modeling | No | +| Direct encounters / duels | Partial only | No | Low today | New extraction plus modeling | No | +| Garrisons destroyed | Not confirmed | No | Unknown | Source validation first | No | +| OPs destroyed | Not confirmed | No | Unknown | Source validation first | No | +| Tactical impact composite | Partial proxies only | Partial | Medium after design work | Query/design | No for strict V1 | + +## Current Product Readiness + +The backend is already able to expose monthly leaderboard snapshots, but only +for these metrics: + +- `kills` +- `deaths` +- `support` +- `matches_over_100_kills` + +This means: + +- the project already supports a monthly ranking surface operationally +- the current ranking surface is narrower than the real data persisted in SQLite +- offense, defense, combat, KPM and KDA are available in the database but not + yet wired as first-class monthly leaderboard metrics + +## Recommendation For Ranking V1 + +A realistic V1 should use only metrics already persisted with strong coverage +and low modeling risk: + +- total kills +- total support +- KPM recomputed from `SUM(kills) / SUM(time_seconds)` +- KDA recomputed from `SUM(kills) / NULLIF(SUM(deaths), 0)` +- minimum participation gate based on matches played and/or minutes played +- optional small penalty for teamkills + +Why this is the safest V1: + +- no new ingestion is required +- all needed raw fields already exist locally +- the ranking can avoid inflated outliers by requiring minimum activity +- KPM and KDA become more defensible when derived from totals, not from average + of precomputed per-match ratios + +## Recommendation For Ranking V2 + +A stronger V2 can expand the model with already persisted but not yet surfaced +signals: + +- offense +- defense +- combat +- win/loss context derived from player side and match result when scores exist + +V2 may also evaluate source-only fields if a later task decides to persist them: + +- weapons-based detail +- kill streak and life-span signals +- partial rivalry/encounter signals from `most_killed` and `death_by` + +## Metrics Not Recommended For Early Use + +Not recommended for V1 and not yet defensible for a serious monthly ranking: + +- garrisons destroyed +- OPs destroyed +- duel ranking +- generic "impact in match" as a single opaque score + +Reason: + +- either the source availability is not confirmed +- or the source exists but the project does not yet persist enough structure to + make the metric auditable and stable + +## Final Conclusion + +The repository already has enough persisted historical data for a credible +monthly Top 3 V1 without touching ingestion: + +- kills +- support +- time played +- deaths +- teamkills +- offense +- defense +- combat + +The most realistic first release is a constrained monthly ranking based on +volume plus efficiency, using only persisted fields and explicit participation +thresholds. Tactical metrics such as garrisons, OPs and real duel graphs should +stay out of scope until the source is revalidated and the missing structures are +persisted deliberately. diff --git a/docs/player-event-pipeline-v2-design.md b/docs/player-event-pipeline-v2-design.md new file mode 100644 index 0000000..c5b63d0 --- /dev/null +++ b/docs/player-event-pipeline-v2-design.md @@ -0,0 +1,340 @@ +# Player Event Pipeline V2 Design + +## Validation Date + +- 2026-03-24 + +## Scope + +Diseno tecnico minimo de una futura canalizacion de eventos de jugador para +alimentar una V2 del ranking MVP mensual con metricas avanzadas. + +Fuera de alcance: + +- implementacion real del pipeline +- nuevas tablas o migraciones +- nuevos endpoints +- cambios de UI + +## Inputs Reviewed + +- `docs/rcon-data-capability-audit.md` +- `docs/crcon-advanced-metrics-origin-audit.md` +- `docs/monthly-mvp-ranking-scoring-design.md` +- `backend/README.md` +- `backend/app/historical_models.py` +- `backend/app/historical_storage.py` +- `backend/app/rcon_client.py` + +## Problem Statement + +La capa historica actual persiste bien metricas agregadas por jugador y partida: + +- kills +- deaths +- teamkills +- tiempo +- combat +- offense +- defense +- support + +Eso basta para un MVP V1. No basta para una V2 que quiera exponer o puntuar: + +- killer -> victim +- `most_killed` +- `death_by` +- kills por arma +- `kills_by_type` +- `death_by_weapons` +- distincion infantry / tank / artillery + +La auditoria previa deja claro que esas senales no salen del RCON live minimo +implementado hoy. + +## Design Goals + +La V2 necesita una capa nueva con estos objetivos: + +- capturar eventos finos fuera del request path HTTP +- persistir eventos crudos con identidad suficiente para reprocess y auditoria +- derivar agregados reproducibles por partida, jugador y mes +- convivir con el modelo historico actual sin romper V1 + +## Minimal Architecture + +La arquitectura minima propuesta tiene cuatro capas: + +1. Source adapter + +- un adaptador futuro conectado a eventos, logs o feed equivalente +- responsable solo de leer senales crudas y normalizarlas + +2. Event ingestion worker + +- proceso batch o loop dedicado, separado de `app.main` +- valida, deduplica y persiste eventos crudos +- nunca calcula ranking dentro del request HTTP + +3. Raw event storage + +- ledger append-only por evento +- base de auditoria y reproceso + +4. Derived aggregates + +- jobs posteriores que resumen por partida, jugador y ventana mensual +- capa consumible por un futuro MVP V2 + +## Proposed Flow + +Flujo minimo: + +1. El source adapter recibe un evento crudo del servidor o del origen elegido. +2. El worker normaliza el evento a un contrato comun. +3. El evento se persiste en un ledger crudo con claves de deduplicacion. +4. Un agregador por partida resume los eventos cerrados del match. +5. Un agregador mensual construye metricas V2 por jugador y servidor. +6. El ranking MVP V2 consume solo agregados ya cerrados y auditables. + +## Minimum Event Types + +El subconjunto minimo recomendado es: + +- `player_kill` +- `player_death` +- `player_teamkill` +- `player_weapon_usage` + +En la practica, `player_death` y `player_weapon_usage` pueden modelarse como +parte del mismo evento de kill si la fuente trae toda la informacion en un solo +registro. Aun asi, conceptualmente la V2 debe capturar estas piezas: + +- match id o match scope +- timestamp del evento +- server slug +- killer player key +- victim player key +- killer team +- victim team +- weapon id o nombre de arma +- kill type o damage type +- contexto opcional de vehiculo, artilleria o explosivo +- indicador de teamkill + +## Event Contract Proposal + +Contrato minimo recomendado para un evento normalizado: + +- `event_id` +- `event_type` +- `occurred_at` +- `server_slug` +- `external_match_id` +- `source_kind` +- `source_ref` +- `killer_player_key` +- `victim_player_key` +- `killer_team_side` +- `victim_team_side` +- `weapon_name` +- `weapon_category` +- `kill_category` +- `is_teamkill` +- `raw_event_ref` + +Campos opcionales pero utiles desde el inicio: + +- `killer_display_name` +- `victim_display_name` +- `vehicle_name` +- `explosive_name` +- `match_phase` + +## High-Level Persistence Model + +No se crean tablas en esta task, pero la persistencia minima deberia separar: + +### 1. Raw player event ledger + +Rol: + +- guardar cada evento de forma append-only +- permitir reprocess y auditoria + +Campos minimos: + +- event key estable +- server +- match +- timestamp +- tipo de evento +- actor y target +- arma o categoria +- flags de clasificacion + +### 2. Match event aggregates + +Rol: + +- resumir por partida ya cerrada +- evitar recalcular toda la historia cada vez + +Ejemplos de campos: + +- kills por jugador +- deaths por jugador +- teamkills por jugador +- kills por arma +- kills por categoria +- tabla de killer -> victim mas frecuente +- tabla de victim <- killer mas frecuente + +### 3. Monthly player advanced aggregates + +Rol: + +- dejar lista la capa consumible por el ranking V2 + +Ejemplos de campos: + +- total kills por arma +- total kills por categoria +- rival mas matado (`most_killed`) +- rival que mas le mata (`death_by`) +- teamkills mensuales +- pesos o subscores avanzados V2 + +## Relationship With Current Historical Model + +La propuesta no sustituye el modelo existente `historical_player_match_stats`. + +Relacion recomendada: + +- `historical_*` sigue guardando el resumen estable V1 por partida +- el nuevo ledger de eventos guarda granularidad que hoy no existe +- los agregados V2 se derivan del ledger y se pueden unir despues al dominio + mensual existente + +Esto evita dos errores: + +- inflar `historical_player_match_stats` con JSON opaco o columnas prematuras +- mezclar captura cruda y vistas derivadas en la misma tabla + +## How Advanced Metrics Would Be Derived + +### `most_killed` + +Derivacion: + +- agrupar eventos de kill por `killer_player_key` y `victim_player_key` +- contar ocurrencias +- elegir el victim con mayor conteo por jugador y ventana + +### `death_by` + +Derivacion: + +- agrupar eventos de kill por `victim_player_key` y `killer_player_key` +- contar ocurrencias +- elegir el killer con mayor conteo recibido por jugador y ventana + +### Kills por arma + +Derivacion: + +- agrupar kills por `killer_player_key` y `weapon_name` + +### `kills_by_type` + +Derivacion: + +- clasificar cada kill en una categoria normalizada +- agrupar por `killer_player_key` y `kill_category` + +Categorias minimas sugeridas: + +- `infantry` +- `vehicle` +- `artillery` +- `explosive` +- `unknown` + +### `death_by_weapons` + +Derivacion: + +- agrupar eventos por `victim_player_key` y `weapon_name` + +### Distincion infantry / tank / artillery + +Solo es viable si el origen del evento trae senales suficientes para clasificar: + +- arma +- vehiculo +- damage type +- o una taxonomia equivalente ya normalizada + +Si la fuente no trae esa precision, la categoria debe quedarse en `unknown` y +la V2 no debe inventar inferencias fragiles. + +## Recommended Processing Policy + +Politica minima recomendada: + +- ingesta continua o semi-continua fuera de HTTP +- deduplicacion por `event_id` o hash determinista +- agregacion solo sobre partidas cerradas +- recomputacion idempotente por partida y por ventana mensual +- capacidad de rehidratar agregados desde el ledger crudo + +## Integration Point With Monthly MVP V2 + +La V2 mensual deberia seguir la misma forma general de la V1: + +- elegibilidad explicita +- componentes normalizados +- pesos auditables +- tie-breaks deterministas + +La diferencia es la entrada: + +- V1 consume agregados simples ya persistidos por partida +- V2 consumiria un agregado mensual enriquecido derivado del ledger de eventos + +Componentes plausibles para una futura V2: + +- kills totales +- support total +- eficiencia base +- variedad o efectividad por arma +- penalizacion por teamkills +- subscore de encounters a partir de killer/victim +- categoria de impacto por tipo de kill si la fuente lo soporta + +## Minimal Rollout Path + +Secuencia minima recomendada para futuras tasks: + +1. Validar la fuente real de eventos/logs reutilizable. +2. Definir el contrato normalizado del evento. +3. Implementar ledger crudo con deduplicacion. +4. Implementar agregador por partida cerrada. +5. Implementar agregado mensual avanzado por jugador. +6. Disenar formula MVP V2 sobre esos agregados. +7. Exponer lectura API solo cuando los agregados sean estables. + +## Main Risks + +- la fuente real puede no exponer todas las senales necesarias +- clasificar kills por tipo puede requerir un mapa de armas adicional +- sin deduplicacion robusta, los agregados V2 serian poco fiables +- mezclar eventos abiertos con partidas no cerradas inflaria metricas + +## Final Recommendation + +La arquitectura minima correcta para una V2 no es ampliar el snapshot live ni +sobrecargar `historical_player_match_stats`. Es anadir una capa separada de +eventos crudos, con agregacion derivada por partida y por mes, para producir de +forma auditable metricas como `most_killed`, `death_by`, kills por arma y +clasificaciones avanzadas. diff --git a/docs/project-overview.md b/docs/project-overview.md new file mode 100644 index 0000000..5b2ee7e --- /dev/null +++ b/docs/project-overview.md @@ -0,0 +1,42 @@ +# Project Overview + +## Vision del proyecto + +HLL Vietnam busca convertirse en la base de una web de comunidad para centralizar la presencia digital de una comunidad hispana alrededor del juego, con una identidad visual sobria, tactica y coherente con el universo Vietnam. + +## Objetivo inicial + +Publicar una landing simple que permita presentar la comunidad, mostrar el trailer del proyecto y facilitar el acceso directo al servidor de Discord. + +## Alcance actual + +- Estructura inicial del repositorio. +- Landing estatica en HTML, CSS y JavaScript. +- Documentacion base para organizar el crecimiento del proyecto. +- Preparacion de carpetas para backend y orquestacion futura. +- Plataforma de tasks y orquestacion integrada para coordinar trabajo tecnico. + +## Stack actual + +- HTML +- CSS +- JavaScript +- Git para control de versiones + +## Stack futuro previsto + +- Backend principal en Python +- Integraciones de comunidad y automatizacion +- Posible ampliacion de paneles administrativos y servicios internos + +## Contrato inicial frontend backend + +El repositorio define un contrato API inicial en `docs/frontend-backend-contract.md` para alinear la futura comunicacion entre la landing y el backend Python. + +En esta fase solo existe `GET /health` como endpoint implementado. Las rutas de comunidad, trailer, Discord y servidores quedan documentadas como contrato previsto para futuras tasks sin cambiar todavia el comportamiento visible del frontend. + +## Evolucion prevista del frontend + +La landing debe seguir siendo funcional al abrirse directamente en navegador mientras los datos dinamicos se introducen de forma incremental. La estrategia de consumo prevista usa `fetch` y JavaScript simple cuando una task lo requiera, siempre conservando fallbacks estaticos mientras se valida cada endpoint. + +La planificacion detallada de prioridades de consumo, estados de carga, errores y placeholders queda en `docs/frontend-data-consumption-plan.md`. diff --git a/docs/rcon-data-capability-audit.md b/docs/rcon-data-capability-audit.md new file mode 100644 index 0000000..4b115d9 --- /dev/null +++ b/docs/rcon-data-capability-audit.md @@ -0,0 +1,191 @@ +# RCON Data Capability Audit + +## Validation Date + +- 2026-03-24 + +## Scope + +Auditoria tecnica del alcance real de RCON en esta repo, separando con claridad: + +- RCON directo implementado hoy en el backend +- historico CRCON / scoreboard publico +- metricas que solo serian posibles con captura propia de eventos o logs + +No se implementa ninguna tabla, ruta, scoring ni captura adicional. + +## Evidence Reviewed + +- `backend/app/rcon_client.py` +- `backend/app/providers/rcon_provider.py` +- `backend/app/data_sources.py` +- `backend/app/payloads.py` +- `backend/README.md` +- `docs/historical-crcon-source-discovery.md` +- `docs/monthly-player-ranking-data-audit.md` +- `docs/monthly-mvp-ranking-scoring-design.md` + +## Current RCON Surface In This Repository + +La implementacion RCON actual es minima y solo cubre estado live. + +Capacidades confirmadas en codigo hoy: + +- handshake `ServerConnect` +- autenticacion `Login` +- consulta `GetServerInformation` + +No hay evidencia en la repo de otros comandos RCON ya integrados para: + +- eventos de kill +- detalle por arma +- relaciones killer -> victim +- teamkills por evento +- destruccion de garrisons u OPs +- historico de partidas cerradas + +## What The Current Live Provider Exposes Today + +El proveedor `RconLiveDataSource` solo normaliza estos campos para `/api/servers`: + +- `external_server_id` +- `server_name` +- `status` +- `players` +- `max_players` +- `current_map` +- `region` +- `source_name` +- `snapshot_origin` +- `source_ref` + +Esto significa que RCON directo hoy ya alimenta de forma confirmada: + +- disponibilidad online del servidor +- nombre del servidor +- numero de jugadores actual +- capacidad maxima +- mapa actual +- metadata de procedencia del snapshot + +## Data That Is Not Exposed By Direct RCON Today + +Aunque la task pide revisar equipos, scoreboard actual y otros campos live, la +repo no confirma que el proveedor actual los este devolviendo hoy. + +No quedan expuestos en el snapshot live actual: + +- composicion por equipos +- scoreboard de jugadores en tiempo real +- kills por jugador en la partida en curso +- deaths por jugador en la partida en curso +- support/combat/offense/defense live +- teamkills live + +Importante: + +- esto no prueba que el protocolo HLL RCON no pueda ofrecer mas cosas +- solo prueba que la implementacion actual de esta repo no las consulta ni las + serializa + +## Historical Boundary + +La separacion entre live e historico queda clara en la repo: + +- `get_live_data_source()` puede resolver `rcon` +- `get_historical_data_source()` devuelve un placeholder `RconHistoricalDataSource` +- ese proveedor historico lanza `RuntimeError("Historical RCON provider is not implemented yet.")` + +Conclusion operativa: + +- RCON esta operativo hoy para estado live de `/api/servers` +- RCON no esta operativo hoy para ingesta historica +- el historico reutilizable del proyecto sigue viniendo de CRCON / scoreboard publico + +## Capability Matrix For Future MVP V2 Metrics + +| Metrica / senal | RCON directo hoy en esta repo | Requeriria eventos/logs + persistencia | Estado actual | +| --- | --- | --- | --- | +| Estado del servidor | Si | No | Disponible | +| Jugadores actuales totales | Si | No | Disponible | +| Capacidad maxima | Si | No | Disponible | +| Mapa actual | Si | No | Disponible | +| Equipos live | No confirmado | Posiblemente no, depende de ampliar cliente | No expuesto hoy | +| Scoreboard live por jugador | No confirmado | Posiblemente no, depende de ampliar cliente | No expuesto hoy | +| Kills por arma | No | Si | Requiere pipeline nuevo | +| Distincion artillery / tank / infantry | No | Si | Requiere pipeline nuevo | +| Killer -> victim | No | Si | Requiere pipeline nuevo | +| `most_killed` | No | Si | Requiere pipeline nuevo | +| `death_by` | No | Si | Requiere pipeline nuevo | +| Teamkills por evento | No | Si | Requiere pipeline nuevo | +| Teamkills agregados por partida/mes | No desde RCON actual | Si | Requiere pipeline nuevo | +| Garrisons destruidos | No confirmado | Si como minimo | No confirmado | +| OPs destruidos | No confirmado | Si como minimo | No confirmado | +| Otras metricas tacticas finas | No | Si | Requiere pipeline nuevo | +| Partidas cerradas historicas | No | Si | No disponible hoy via RCON | + +## What Can Feed An MVP V2 From RCON + +Subset viable usando solo RCON directo ya implementado: + +- ninguno de los componentes avanzados de scoring MVP +- solo datos de presencia live del servidor, utiles para panel operativo pero no + para ranking mensual + +Subset viable si se amplia solo el cliente RCON pero sin pipeline historico: + +- quiza mas detalle live si el protocolo ofrece comandos adicionales +- aun asi no bastaria para un ranking mensual auditable, porque faltaria + persistencia por evento o por partida cerrada + +Subset viable si se construye una linea nueva de eventos/logs RCON: + +- kills por arma +- killer/victim +- teamkills por evento +- clasificacion artillery/tank/infantry +- senales tacticas si el origen real las emite + +Condiciones minimas para que eso sirva a un MVP V2: + +- ampliar el cliente RCON con comandos o feeds adicionales reales +- capturar eventos de forma continua fuera del request path HTTP +- persistir historico propio por partida, jugador y evento +- definir agregados reproducibles para mes y servidor + +## Separation From CRCON / Public Scoreboard + +La repo ya confirma que ciertas metricas avanzadas existen en CRCON publico, +pero eso no debe confundirse con RCON directo. + +La evidencia actual de CRCON/scoreboard publico incluye campos como: + +- `kills_by_type` +- `most_killed` +- `death_by` +- `weapons` +- `death_by_weapons` + +Eso pertenece al historico JSON publico ya documentado y no a la superficie +RCON hoy implementada en `rcon_client.py`. + +## Practical Conclusion + +Para esta repo, la respuesta precisa hoy es: + +- RCON directo sirve para estado live de servidores +- RCON directo no sirve todavia para alimentar un MVP mensual V2 +- cualquier MVP V2 con armas, duelos, teamkills por evento o tacticas requiere + una canalizacion nueva de eventos/logs y persistencia historica propia +- garrisons y OPs siguen sin evidencia confirmada en la repo como metrica + disponible por RCON + +## Recommended Next Step + +Antes de disenar scoring V2 sobre RCON, la siguiente decision tecnica correcta +seria una task separada de discovery para definir: + +- si el origen RCON real del servidor expone mas comandos aparte de `GetServerInformation` +- si existe flujo de eventos reutilizable +- que granularidad y frecuencia tendria la persistencia de esos eventos +- que subset minimo merece convertirse en modelo historico propio diff --git a/docs/rcon-historical-ingestion-design.md b/docs/rcon-historical-ingestion-design.md new file mode 100644 index 0000000..9992c53 --- /dev/null +++ b/docs/rcon-historical-ingestion-design.md @@ -0,0 +1,271 @@ +# RCON Historical Ingestion Design + +## Validation Date + +- 2026-03-25 + +## Scope + +Definir si la repo puede soportar historico por RCON con la implementacion +actual y, si no puede hacerlo de forma retroactiva, dejar una arquitectura +minima y defendible para una primera captura prospectiva. + +Este documento se limita a la evidencia local de la repo. No asume comandos +RCON no integrados ni capacidades externas no demostradas aqui. + +## Evidence Reviewed + +- `backend/app/data_sources.py` +- `backend/app/providers/rcon_provider.py` +- `backend/app/rcon_client.py` +- `backend/app/historical_ingestion.py` +- `backend/app/historical_storage.py` +- `backend/app/player_event_worker.py` +- `backend/app/player_event_storage.py` +- `backend/README.md` +- `docs/rcon-data-capability-audit.md` +- `docs/crcon-advanced-metrics-origin-audit.md` + +## Current State In Code + +La separacion entre live e historico ya existe en la seleccion de proveedores: + +- `get_live_data_source()` puede resolver `rcon` +- `get_historical_data_source()` puede resolver `rcon`, pero hoy devuelve un + placeholder que falla + +La implementacion RCON real disponible en la repo es minima y esta concentrada +en `backend/app/rcon_client.py`. + +Comandos soportados hoy en codigo: + +- `ServerConnect` +- `Login` +- `GetServerInformation` + +No hay evidencia local de otros comandos ya integrados para: + +- scoreboards por jugador +- detalle de partida cerrada +- eventos kill por kill +- logs tacticos +- historico retroactivo de matches cerrados + +## Payload Available Today + +La salida efectiva que la repo consume desde RCON hoy es la normalizada por +`query_live_server_state()`: + +- `external_server_id` +- `server_name` +- `status` +- `players` +- `max_players` +- `current_map` +- `region` +- `source_name` +- `snapshot_origin` +- `source_ref` + +Inferencia basada en `rcon_client.py`: + +- el payload remoto de `GetServerInformation` contiene como minimo + `serverName`, `playerCount`, `maxPlayerCount` y `mapId` o `mapName` +- la repo no persiste hoy el payload crudo ni deriva entidades historicas de + match o jugador a partir de RCON + +## Operational Frequency Assessment + +Inferencia basada en la implementacion actual: + +- cada pasada por target abre una conexion TCP +- realiza handshake `ServerConnect` +- autentica con `Login` +- ejecuta una consulta `GetServerInformation` + +Con este alcance, una frecuencia inicial razonable para captura prospectiva es: + +- cada `60` a `300` segundos para operativa normal +- `30` segundos solo como validacion o monitoreo puntual + +No hay evidencia en la repo para defender un polling mas agresivo de forma +sostenida ni para asegurar que aportaria historico competitivo util. + +## Viability Decision + +Conclusion principal: + +- no viable hoy para historico real retroactivo de partidas cerradas con el + cliente actual +- viable solo para captura prospectiva + +Motivos: + +- el cliente actual solo consulta estado live puntual +- no existe base local para reconstruir partidas ya cerradas +- no existe feed raw de eventos ni logs persistidos +- `RconHistoricalDataSource` sigue siendo un placeholder y no puede sustituir a + `public-scoreboard` + +Conclusion secundaria: + +- una capa historica parcial por RCON si es defendible, pero solo si se define + como captura prospectiva de muestras live y no como backfill de matches ya + perdidos + +## Recommended Minimal Architecture + +### Storage + +Separar completamente la persistencia prospectiva RCON del historico actual +`historical_*`. + +Tablas minimas recomendadas: + +- `rcon_historical_targets` + - identidad estable del target configurado + - ultimo estado conocido de configuracion +- `rcon_historical_capture_runs` + - una fila por ejecucion del worker + - estado, inicio, fin, errores y target scope +- `rcon_historical_samples` + - una fila por muestra y target + - `captured_at` + - identidad de target + - payload normalizado + - payload crudo opcional de `GetServerInformation` + +Si se quiere checkpoint explicito desde la primera version: + +- `rcon_historical_checkpoints` + - `target_key` + - `last_successful_capture_at` + - `last_sample_at` + - `last_error` + +### Workers + +Worker dedicado fuera del request path HTTP: + +- `python -m app.rcon_historical_worker capture` +- `python -m app.rcon_historical_worker loop --interval 120` + +Responsabilidades: + +- cargar `HLL_BACKEND_RCON_TARGETS` +- consultar cada target con el cliente RCON actual +- persistir run tracking +- persistir muestras idempotentes por target y timestamp +- actualizar checkpoints + +### Checkpoints + +Como no existe backfill retroactivo real, el checkpoint no debe modelarse como +pagina o offset de archivo historico. Debe modelarse como tiempo de captura. + +Checkpoint minimo defendible: + +- ultimo `captured_at` exitoso por target +- ultimo error por target +- ultimo run exitoso global + +### Compatibility With `public-scoreboard` + +Politica recomendada: + +- `public-scoreboard` sigue siendo la fuente historica principal para: + - leaderboards semanales y mensuales + - MVP V1 y V2 + - recent matches cerrados + - player events derivados de la capa publica actual +- RCON prospectivo convive en una linea paralela para: + - cobertura temporal hacia delante + - disponibilidad del servidor + - actividad reciente + - trazabilidad de frescura por target + +## Recommended Degradation Policy + +Si en una fase posterior se habilita `HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon`, +la degradacion minima correcta es esta: + +- solo exponer endpoints o bloques claramente soportados por la persistencia + prospectiva RCON +- no simular leaderboards completos cuando no existan +- devolver metadata de cobertura y frescura antes que rankings vacios + +Contratos defendibles en una primera lectura minima: + +- resumen de cobertura por servidor +- actividad reciente por servidor +- estado de frescura +- rango temporal disponible + +Contratos que deben seguir dependiendo de `public-scoreboard` hasta nueva +evidencia: + +- weekly leaderboards completos +- monthly leaderboards completos +- monthly MVP V1 +- monthly MVP V2 +- player profiles competitivos +- equivalencia completa con `historico.html` + +## Recommended Phases + +### Phase 1: Prospective Capture + +Objetivo: + +- empezar a guardar muestras live RCON hacia delante + +Incluye: + +- storage separado +- worker dedicado +- run tracking +- checkpoints temporales +- ejecucion manual y en loop + +No incluye: + +- backfill retroactivo +- paridad con `public-scoreboard` +- endpoints competitivos nuevos + +### Phase 2: Minimal Operational Read Model + +Objetivo: + +- leer la persistencia prospectiva RCON sin consultar RCON on-demand en HTTP + +Incluye: + +- resumen por servidor +- ultima muestra +- cobertura disponible +- actividad reciente + +### Phase 3: Competitive Metrics Only If Signal Improves + +Objetivo: + +- evaluar si aparecen comandos, eventos o logs suficientes para enriquecer la + capa historica RCON + +Solo deberia abrirse si existe evidencia real de: + +- eventos reutilizables +- scoreboards historificables +- granularidad por jugador o por encounter + +## Final Recommendation + +La decision tecnica correcta para esta repo es: + +- mantener `public-scoreboard` como fuente historica por defecto +- tratar RCON historico como una linea prospectiva separada +- no prometer reconstruccion retroactiva con el cliente actual +- abrir implementacion incremental en dos tasks: + - captura prospectiva persistida + - lectura minima sobre persistencia local diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 0000000..77277b7 --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,35 @@ +# Roadmap + +## Fase 1: base del repo + +- Crear estructura inicial profesional. +- Definir documentacion base del proyecto. +- Publicar la primera landing estatica. + +## Fase 2: landing mejorada + +- Incorporar branding definitivo y recursos visuales. +- Anadir mas secciones informativas de comunidad. +- Mejorar experiencia responsive y contenido. + +## Fase 3: backend Python + +- Definir arquitectura del backend. +- Incorporar servicios base en Python. +- Preparar configuracion, entornos y despliegue inicial. + +## Fase 4: integracion de datos de Discord/servidores + +- Documentar el plan tecnico de datos para Discord y servidores antes de integrar fuentes reales. +- Empezar por placeholders o datos manuales controlados desde el backend Python. +- Incorporar integraciones limitadas y trazables solo despues de validar fuentes, limites y seguridad. +- Diferenciar de forma explicita los servidores actuales de Hell Let Loose frente al futuro contexto HLL Vietnam. +- Sustituir el bloque provisional de servidores actuales cuando existan datos mas cercanos al producto final. +- Definir snapshots de servidores como unidad base para historicos y estadisticas basicas antes de persistir datos reales. +- Separar por fases la ingesta, la normalizacion y la futura explotacion historica para no acoplar el frontend a fuentes externas. + +## Fase 5: panel/admin y automatizacion + +- Construir panel interno o administrativo. +- Anadir flujos de gestion y publicacion. +- Ampliar y madurar el sistema de tasks y orquestacion ya integrado en el repositorio. diff --git a/docs/scoreboard-correlation-debugging.md b/docs/scoreboard-correlation-debugging.md new file mode 100644 index 0000000..0fee09e --- /dev/null +++ b/docs/scoreboard-correlation-debugging.md @@ -0,0 +1,45 @@ +# Scoreboard Correlation Debugging + +Use backend commands to debug a missing public scoreboard button on an RCON +historical match. Normal frontend payloads and pages should stay free of +correlation diagnostics. + +## Sequence + +1. Refresh trusted public scoreboard candidates for the relevant server: + + ```powershell + docker compose exec backend python -m app.scoreboard_candidate_backfill --server comunidad-hispana-02 --from 2026-05-20T00:00:00Z --to 2026-05-21T23:59:59Z --max-pages 5 --page-size 100 + ``` + +2. Scan existing materialized RCON matches against those candidates: + + ```powershell + docker compose exec backend python -m app.rcon_scoreboard_relink --server comunidad-hispana-02 + ``` + +3. Inspect one match correlation: + + ```powershell + docker compose exec backend python -m app.scoreboard_correlation_diagnostics --server comunidad-hispana-02 --match comunidad-hispana-02:1779310451:1779315851:foywarfare + ``` + +4. Verify the detail endpoint used by the match page: + + ```powershell + Invoke-WebRequest 'http://localhost:8000/api/historical/matches/detail?server=comunidad-hispana-02&match=comunidad-hispana-02%3A1779310451%3A1779315851%3Afoywarfare' | Select-Object -ExpandProperty Content + ``` + +## Reading Output + +The diagnostic JSON includes the RCON match window, score, candidate search +window, safe top candidate summaries, the selected candidate when one is strong +enough, and `final_reason`. + +- `linked` means the detail read model can expose the trusted `match_url`. +- `no-safe-candidate` means candidate persistence or map/window matching needs + inspection. +- `low-confidence` means candidates exist but evidence is insufficient. +- `ambiguous-candidate` means two candidates tie and no public URL is selected. +- `unsafe-url` in a candidate summary means the raw candidate URL is not emitted + or selected. diff --git a/docs/stats-database-schema-foundation.md b/docs/stats-database-schema-foundation.md new file mode 100644 index 0000000..660305a --- /dev/null +++ b/docs/stats-database-schema-foundation.md @@ -0,0 +1,151 @@ +# Stats Database Schema Foundation + +## Objective + +Definir una base de almacenamiento simple y reutilizable para snapshots de +servidores y estadisticas iniciales, sin comprometer todavia una base de datos +productiva concreta. + +## Design Principles + +- naming generico reutilizable para HLL actual y futuro HLL Vietnam +- separacion entre identidad de servidor y observaciones historicas +- persistir primero solo lo necesario para reconstruir actividad basica +- dejar espacio para multiples fuentes sin acoplar el modelo a una integracion + unica + +## Proposed Core Entities + +### `game_sources` + +Proposito: +describir el contexto del juego o dominio de origen de los datos. + +Campos principales: + +- `id` +- `slug` +- `display_name` +- `provider_kind` +- `is_active` +- `created_at` +- `updated_at` + +Notas: + +- `slug` puede tomar valores como `current-hll` y en el futuro otros contextos + mas cercanos a HLL Vietnam. +- Esta entidad evita incrustar el juego en cada nombre de tabla. + +### `servers` + +Proposito: +mantener la identidad estable de cada servidor observado. + +Campos principales: + +- `id` +- `game_source_id` +- `external_server_id` nullable +- `server_name` +- `region` nullable +- `first_seen_at` +- `last_seen_at` +- `created_at` +- `updated_at` + +Claves y relaciones: + +- primary key en `id` +- foreign key a `game_sources.id` +- unique recomendado sobre `game_source_id` + `external_server_id` cuando el + origen entregue identificador externo fiable + +Notas: + +- `server_name` no debe usarse como clave unica porque puede cambiar. +- `last_seen_at` resume la ultima observacion conocida sin sustituir a los + snapshots historicos. + +### `server_snapshots` + +Proposito: +registrar cada captura puntual normalizada de un servidor. + +Campos principales: + +- `id` +- `server_id` +- `captured_at` +- `status` +- `players` +- `max_players` +- `current_map` nullable +- `source_name` +- `raw_payload_ref` nullable +- `created_at` + +Claves y relaciones: + +- primary key en `id` +- foreign key a `servers.id` +- index recomendado sobre `server_id` + `captured_at` + +Notas: + +- `status`, `players`, `max_players` y `current_map` son la base a persistir + desde la primera fase. +- `raw_payload_ref` queda como referencia opcional para trazabilidad futura si + el backend decide guardar artefactos crudos fuera de esta tabla. + +## Initial Statistics Layer + +No es necesario persistir metricas complejas desde el inicio. La primera capa +de estadisticas puede documentarse como derivada de `server_snapshots`. + +Vistas o agregaciones recomendadas para una siguiente fase: + +- ultima observacion por servidor +- pico de jugadores por servidor en una ventana temporal +- numero de snapshots online por servidor +- ultima vez visto online + +Si mas adelante aparecen necesidades de rendimiento o cuadros de mando +persistentes, podra anadirse una tabla de agregados sin cambiar la base del +modelo. + +## What To Persist First + +Persistir por snapshot: + +- `server_id` +- `captured_at` +- `status` +- `players` +- `max_players` +- `current_map` cuando exista +- `source_name` + +Puede derivarse despues: + +- tendencias +- medias por periodo +- picos historicos +- porcentaje de disponibilidad +- rankings + +## Technology Position + +El repositorio todavia no fija una tecnologia de persistencia productiva. La +base del esquema debe entenderse como modelo logico compatible con el backend en +Python y trasladable despues a la opcion de almacenamiento que se valide en una +task especifica. + +En esta fase no se anaden migraciones, ORM ni ficheros de base de datos. + +## Open Questions For Future Tasks + +- que fuente aportara un identificador externo suficientemente estable +- con que frecuencia debe capturarse un snapshot +- si conviene guardar payload crudo completo o solo referencias +- cuando merece la pena materializar agregados persistentes diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..6d13b20 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,7 @@ +.git +.gitignore +.venv/ +__pycache__/ +*.pyc +*.pyo +*.pyd diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..849b258 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,12 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /srv/frontend + +COPY . /srv/frontend + +EXPOSE 8080 + +CMD ["python", "-m", "http.server", "8080", "--bind", "0.0.0.0", "--directory", "/srv/frontend"] diff --git a/frontend/assets/css/hero-header-compact.css b/frontend/assets/css/hero-header-compact.css new file mode 100644 index 0000000..a4febdd --- /dev/null +++ b/frontend/assets/css/hero-header-compact.css @@ -0,0 +1,92 @@ +@media (min-width: 1121px) { + .hero:not(.historical-hero) .hero__content { + padding-block: 54px 60px; + padding-inline: clamp(64px, 5.5vw, 104px); + } + + .hero:not(.historical-hero) .hero__brand { + width: 100%; + max-width: 1420px; + margin: 0 auto; + display: grid; + grid-template-columns: minmax(400px, 470px) minmax(48px, 1fr) minmax(640px, 820px); + column-gap: clamp(28px, 3vw, 56px); + align-items: center; + } + + .hero:not(.historical-hero) .logo-frame { + grid-column: 1; + justify-self: start; + width: min(470px, 100%); + min-height: 360px; + padding: 30px 34px; + } + + .hero:not(.historical-hero) .logo-frame__image { + max-height: 340px; + } + + .hero:not(.historical-hero) .hero__copy { + grid-column: 3; + justify-self: end; + width: 100%; + max-width: 820px; + align-content: center; + justify-items: start; + text-align: left; + transform: none; + } + + .hero:not(.historical-hero) .hero__title { + max-width: none; + font-size: clamp(4.2rem, 5.2vw, 6.35rem); + line-height: 1.02; + } + + .hero:not(.historical-hero) .hero__title-accent { + display: inline; + } + + .hero:not(.historical-hero) .hero__text { + max-width: 68ch; + } +} + +@media (min-width: 1121px) and (max-width: 1380px) { + .hero:not(.historical-hero) .hero__content { + padding-inline: clamp(44px, 4vw, 64px); + } + + .hero:not(.historical-hero) .hero__brand { + grid-template-columns: minmax(320px, 390px) minmax(28px, 1fr) minmax(560px, 720px); + column-gap: clamp(20px, 2.5vw, 40px); + } + + .hero:not(.historical-hero) .logo-frame { + width: min(390px, 100%); + min-height: 316px; + } + + .hero:not(.historical-hero) .logo-frame__image { + max-height: 298px; + } + + .hero:not(.historical-hero) .hero__copy { + grid-column: 3; + justify-self: end; + width: 100%; + max-width: 720px; + transform: none; + } + + .hero:not(.historical-hero) .hero__title { + font-size: clamp(3.7rem, 5.35vw, 5.15rem); + } +} + +@media (max-width: 1120px) { + .hero:not(.historical-hero) .hero__copy { + grid-column: auto; + transform: none; + } +} \ No newline at end of file diff --git a/frontend/assets/css/historico-scoreboard-detail.css b/frontend/assets/css/historico-scoreboard-detail.css new file mode 100644 index 0000000..180074f --- /dev/null +++ b/frontend/assets/css/historico-scoreboard-detail.css @@ -0,0 +1,752 @@ +.historical-summary-grid:has(.historical-scoreboard-layout) { + display: block; +} + +.historical-panel__note:empty { + display: none; +} + +#match-detail-timeline-section[hidden] { + display: none !important; +} + +.historical-table--players tbody tr.historical-player-row--allies td:first-child { + box-shadow: inset 4px 0 0 rgba(104, 162, 214, 0.82); +} + +.historical-table--players tbody tr.historical-player-row--axis td:first-child { + box-shadow: inset 4px 0 0 rgba(190, 82, 64, 0.82); +} + +.historical-table--players tbody tr.historical-player-row--unknown td:first-child { + box-shadow: inset 4px 0 0 rgba(159, 168, 141, 0.5); +} + +.historical-table--players tbody tr.historical-player-row--allies { + background: linear-gradient(90deg, rgba(74, 126, 178, 0.14), transparent 42%); +} + +.historical-table--players tbody tr.historical-player-row--axis { + background: linear-gradient(90deg, rgba(156, 66, 49, 0.16), transparent 42%); +} + +.historical-table--players tbody tr.historical-player-row--unknown { + background: linear-gradient(90deg, rgba(159, 168, 141, 0.08), transparent 42%); +} + +.historical-table--players { + min-width: 760px; +} + +.historical-player-controls { + display: grid; + grid-template-columns: minmax(220px, 1fr) repeat(3, minmax(150px, 190px)); + gap: 10px; + align-items: end; +} + +.historical-player-controls[hidden] { + display: none; +} + +.historical-player-control { + display: grid; + gap: 6px; + min-width: 0; +} + +.historical-player-control span { + color: var(--muted); + font-size: 0.66rem; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-player-control input, +.historical-player-control select { + width: 100%; + min-height: 42px; + padding: 0 12px; + border: 1px solid rgba(159, 168, 141, 0.28); + border-radius: 8px; + background: rgba(10, 13, 10, 0.82); + color: var(--text); + font: inherit; +} + +.historical-player-control input::placeholder { + color: var(--muted); +} + +.historical-player-control input:focus-visible, +.historical-player-control select:focus-visible { + outline: 2px solid rgba(210, 182, 118, 0.72); + outline-offset: 1px; +} + +.historical-player-row { + outline: 0; +} + +.historical-player-row.is-inactive { + color: var(--muted); +} + +.historical-player-row.is-inactive .historical-player-row__details-button span:first-child { + color: var(--text-soft); + font-style: italic; +} + +.historical-player-row:hover td, +.historical-player-row:focus-within td, +.historical-player-row.is-expanded td { + background: rgba(210, 182, 118, 0.06); +} + +.historical-player-row__details-button:focus-visible { + outline: 2px solid rgba(210, 182, 118, 0.78); + outline-offset: -2px; +} + +.historical-player-row__details-button { + display: flex; + width: 100%; + min-width: 220px; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 0; + border: 0; + background: transparent; + color: inherit; + font: inherit; + text-align: left; + cursor: pointer; +} + +.historical-player-row__details-button span:first-child { + overflow: hidden; + min-width: 0; + text-overflow: ellipsis; + white-space: nowrap; +} + +.historical-player-row__details-button span:last-child { + flex: 0 0 auto; + display: inline-flex; + width: 22px; + height: 22px; + align-items: center; + justify-content: center; + border: 1px solid rgba(210, 182, 118, 0.28); + border-radius: 999px; + color: var(--accent-strong); + font-size: 0.72rem; + font-weight: 900; + line-height: 1; + text-transform: uppercase; +} + +.historical-player-detail-row { + display: none; +} + +.historical-player-detail-row.is-open { + display: table-row; +} + +.historical-player-detail-row td { + padding: 0 12px 16px; + background: rgba(7, 9, 7, 0.76); + border-bottom-color: rgba(210, 182, 118, 0.16); +} + +.historical-player-stats-panel { + display: grid; + gap: 16px; + padding: 16px; + border: 1px solid rgba(210, 182, 118, 0.18); + border-radius: 16px; + background: + linear-gradient(180deg, rgba(19, 24, 17, 0.96), rgba(10, 13, 10, 0.98)), + rgba(10, 13, 10, 0.96); + box-shadow: 0 18px 34px rgba(0, 0, 0, 0.28); +} + +.historical-player-stats-panel__header { + display: grid; + grid-template-columns: minmax(180px, 1fr) minmax(0, 2fr); + gap: 16px; + align-items: start; +} + +.historical-player-stats-panel__header p, +.historical-player-stats-panel__section p, +.historical-player-stats-panel__empty { + margin: 0; + color: var(--muted); +} + +.historical-player-stats-panel__header p { + margin-bottom: 5px; + font-size: 0.72rem; + font-weight: 900; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.historical-player-stats-panel__header h4, +.historical-player-stats-panel__section h5 { + margin: 0; + color: var(--text); +} + +.historical-player-stats-panel__header h4 { + font-size: 1.08rem; +} + +.historical-player-stats-panel__summary { + display: grid; + grid-template-columns: repeat(5, minmax(70px, 1fr)); + gap: 8px; +} + +.historical-player-stats-panel__summary article { + padding: 9px 10px; + border: 1px solid rgba(159, 168, 141, 0.14); + border-radius: 10px; + background: rgba(13, 17, 12, 0.68); +} + +.historical-player-stats-panel__summary span { + display: block; + margin-bottom: 4px; + color: var(--muted); + font-size: 0.64rem; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-player-stats-panel__summary strong { + color: var(--text); +} + +.historical-player-stats-panel__grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px; +} + +.historical-player-stats-panel__section { + display: grid; + gap: 10px; + align-content: start; + padding: 13px; + border: 1px solid rgba(159, 168, 141, 0.14); + border-radius: 12px; + background: rgba(13, 17, 12, 0.52); +} + +.historical-player-stats-panel__section--wide { + grid-column: 1 / -1; +} + +.historical-player-stats-panel__profiles { + padding: 13px; +} + +.historical-player-profile-links { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.historical-player-profile-links a { + display: inline-flex; + min-height: 32px; + align-items: center; + padding: 0 11px; + border: 1px solid rgba(210, 182, 118, 0.34); + border-radius: 999px; + color: var(--accent-warm); + font-size: 0.72rem; + font-weight: 900; + letter-spacing: 0.08em; + text-decoration: none; + text-transform: uppercase; +} + +.historical-player-profile-links a:hover, +.historical-player-profile-links a:focus-visible { + border-color: rgba(210, 182, 118, 0.62); + color: var(--text); +} + +.historical-player-stats-panel__section h5 { + font-size: 0.78rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-player-stats-panel__section ol { + display: grid; + gap: 8px; + margin: 0; + padding: 0; + list-style: none; +} + +.historical-player-stats-panel__section li { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 10px; + align-items: baseline; +} + +.historical-player-stats-panel__section li span { + overflow: hidden; + min-width: 0; + color: var(--text-soft); + text-overflow: ellipsis; + white-space: nowrap; +} + +.historical-player-stats-panel__section li strong { + color: var(--accent-strong); +} + +.historical-player-matchups { + display: grid; + gap: 0; + overflow-x: auto; +} + +.historical-player-matchups [role="row"] { + display: grid; + grid-template-columns: minmax(180px, 1fr) repeat(3, minmax(72px, auto)); + gap: 10px; + padding: 8px 0; + border-bottom: 1px solid rgba(159, 168, 141, 0.1); +} + +.historical-player-matchups [role="row"]:last-child { + border-bottom: 0; +} + +.historical-player-matchups [role="columnheader"] { + color: var(--muted); + font-size: 0.66rem; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-player-matchups [role="cell"] { + color: var(--text-soft); +} + +.historical-player-matchups strong[role="cell"] { + color: var(--text); +} + +.historical-player-team-cell { + white-space: nowrap; +} + +.historical-player-team-badge { + display: inline-flex; + align-items: center; + min-width: 96px; + justify-content: center; + padding: 5px 10px; + border: 1px solid rgba(159, 168, 141, 0.24); + border-radius: 999px; + font-size: 0.72rem; + font-weight: 900; + letter-spacing: 0.08em; + line-height: 1; + text-transform: uppercase; +} + +.historical-player-team-badge--allies { + border-color: rgba(118, 175, 229, 0.46); + background: rgba(61, 109, 163, 0.2); + color: #c8e1ff; +} + +.historical-player-team-badge--axis { + border-color: rgba(213, 105, 83, 0.48); + background: rgba(129, 45, 35, 0.22); + color: #f2beb2; +} + +.historical-player-team-badge--unknown { + border-color: rgba(159, 168, 141, 0.28); + background: rgba(159, 168, 141, 0.1); + color: var(--muted); +} + +@media (max-width: 760px) { + .historical-player-controls { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .historical-player-control--search { + grid-column: 1 / -1; + } + + .historical-player-stats-panel__header, + .historical-player-stats-panel__grid { + grid-template-columns: 1fr; + } + + .historical-player-stats-panel__summary { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .historical-player-matchups [role="row"] { + min-width: 520px; + } +} + +.historical-scoreboard-layout { + display: grid; + gap: 18px; + margin-bottom: 18px; +} + +.historical-scoreboard-layout__main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(240px, 340px) minmax(0, 1fr); + align-items: center; + gap: 22px; + padding: 28px 30px; + border: 1px solid rgba(210, 182, 118, 0.2); + border-radius: 24px; + background: + radial-gradient(circle at 50% 10%, rgba(210, 182, 118, 0.1), transparent 44%), + linear-gradient(180deg, rgba(11, 14, 10, 0.72), rgba(11, 14, 10, 0.94)); + box-shadow: var(--shadow-soft); +} + +.historical-scoreboard-side { + display: grid; + grid-template-columns: 124px minmax(0, 1fr); + align-items: center; + gap: 18px; + min-height: 148px; +} + +.historical-scoreboard-side--axis { + grid-template-columns: minmax(0, 1fr) 124px; + text-align: right; +} + +.historical-scoreboard-side--axis .historical-scoreboard-side__emblem { + order: 2; +} + +.historical-scoreboard-side--axis .historical-scoreboard-side__text { + order: 1; +} + +.historical-scoreboard-side.is-emblem-missing, +.historical-scoreboard-side--axis.is-emblem-missing { + grid-template-columns: minmax(0, 1fr); +} + +.historical-scoreboard-side__emblem { + width: 124px; + height: 124px; + border-radius: 999px; + object-fit: contain; + padding: 10px; + border: 1px solid rgba(210, 182, 118, 0.26); + background: + radial-gradient(circle at center, rgba(210, 182, 118, 0.15), transparent 60%), + rgba(7, 9, 7, 0.72); +} + +.historical-scoreboard-side__text { + display: grid; + gap: 5px; +} + +.historical-scoreboard-side__text strong { + color: var(--text); + font-size: clamp(1.8rem, 4vw, 3.1rem); + line-height: 0.95; + text-transform: uppercase; +} + +.historical-scoreboard-side__text em { + color: var(--accent-strong); + font-style: normal; + font-size: 0.78rem; + font-weight: 900; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.historical-scoreboard-side.is-winner .historical-scoreboard-side__emblem { + border-color: rgba(210, 182, 118, 0.62); + box-shadow: 0 0 26px rgba(210, 182, 118, 0.14); +} + +.historical-scoreboard-center { + display: grid; + justify-items: center; + gap: 6px; + text-align: center; +} + +.historical-scoreboard-center__timer { + color: var(--text-soft); + font-size: 0.86rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-scoreboard-center__score { + color: var(--text); + font-size: clamp(4.6rem, 8.6vw, 7.6rem); + line-height: 0.9; + letter-spacing: 0.02em; +} + +.historical-scoreboard-center__map { + color: var(--text); + font-size: 1.05rem; + font-weight: 800; +} + +.historical-scoreboard-center__mode, +.historical-scoreboard-center__winner { + color: var(--text-soft); + font-size: 0.86rem; +} + +.historical-scoreboard-center__winner { + color: var(--accent-strong); + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-scoreboard-layout__meta { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 170px), 1fr)); + gap: 12px; +} + +.historical-scoreboard-layout__meta article { + padding: 13px 14px; + border: 1px solid rgba(159, 168, 141, 0.14); + border-radius: 16px; + background: rgba(13, 17, 12, 0.44); +} + +.historical-scoreboard-layout__meta span { + display: block; + margin-bottom: 7px; + color: var(--muted); + font-size: 0.72rem; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.historical-scoreboard-layout__meta strong { + display: block; + color: var(--text); + font-size: 1rem; + line-height: 1.35; +} + +@media (max-width: 920px) { + .historical-scoreboard-layout__main { + grid-template-columns: 1fr; + padding: 20px; + } + + .historical-scoreboard-center { + order: -1; + } + + .historical-scoreboard-side, + .historical-scoreboard-side--axis { + grid-template-columns: 96px minmax(0, 1fr); + text-align: left; + } + + .historical-scoreboard-side--axis .historical-scoreboard-side__emblem, + .historical-scoreboard-side--axis .historical-scoreboard-side__text { + order: initial; + } + + .historical-scoreboard-side__emblem { + width: 96px; + height: 96px; + } +} + + +.historical-player-control--team-toggle { + border: 0; + margin: 0; + padding: 0; +} + +.historical-player-control--team-toggle legend { + color: var(--muted); + display: block; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.14em; + margin-bottom: 0.45rem; + text-transform: uppercase; +} + +.historical-player-team-toggle { + display: flex; + flex-wrap: wrap; + gap: 0.45rem; +} + +.historical-player-team-toggle label { + cursor: pointer; +} + +.historical-player-team-toggle input { + position: absolute; + opacity: 0; + pointer-events: none; +} + +.historical-player-team-toggle span { + border: 1px solid rgba(210, 196, 130, 0.34); + border-radius: 999px; + color: var(--muted); + display: inline-flex; + font-size: 0.75rem; + font-weight: 800; + letter-spacing: 0.08em; + padding: 0.55rem 0.8rem; + text-transform: uppercase; +} + +.historical-player-team-toggle input:checked + span { + background: rgba(210, 196, 130, 0.12); + border-color: rgba(210, 196, 130, 0.72); + color: var(--text); +} + +.historical-player-team-toggle input:focus-visible + span { + outline: 2px solid rgba(210, 196, 130, 0.9); + outline-offset: 2px; +} + +.historical-player-stats-panel__profiles code { + color: var(--text); + font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace; + font-size: 0.82rem; + word-break: break-all; +} + + +/* Player controls refinement: team selector above search/sort. */ +.historical-player-control--team-toggle { + border: 0; + grid-column: 1 / -1; + margin: 0; + order: -1; + padding: 0; +} + +.historical-player-control--team-toggle legend { + color: var(--muted); + display: block; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.14em; + margin-bottom: 0.45rem; + text-transform: uppercase; +} + +.historical-player-team-toggle { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0.55rem; +} + +.historical-player-team-toggle label { + cursor: pointer; +} + +.historical-player-team-toggle input { + position: absolute; + opacity: 0; + pointer-events: none; +} + +.historical-player-team-toggle span { + border: 1px solid rgba(210, 196, 130, 0.34); + border-radius: 999px; + color: var(--muted); + display: inline-flex; + font-size: 0.75rem; + font-weight: 900; + letter-spacing: 0.08em; + padding: 0.58rem 0.9rem; + text-transform: uppercase; + transition: + background 160ms ease, + border-color 160ms ease, + color 160ms ease, + box-shadow 160ms ease; +} + +.historical-player-team-toggle__item--all input:checked + span { + background: rgba(210, 196, 130, 0.13); + border-color: rgba(210, 196, 130, 0.78); + color: var(--text); + box-shadow: 0 0 0 1px rgba(210, 196, 130, 0.18); +} + +.historical-player-team-toggle__item--allies span { + border-color: rgba(109, 171, 255, 0.42); + color: #b8d7ff; +} + +.historical-player-team-toggle__item--allies input:checked + span { + background: rgba(72, 135, 220, 0.24); + border-color: rgba(133, 190, 255, 0.9); + color: #e4f1ff; + box-shadow: 0 0 0 1px rgba(109, 171, 255, 0.22); +} + +.historical-player-team-toggle__item--axis span { + border-color: rgba(225, 113, 86, 0.48); + color: #ffb6a6; +} + +.historical-player-team-toggle__item--axis input:checked + span { + background: rgba(170, 72, 54, 0.28); + border-color: rgba(255, 143, 113, 0.92); + color: #ffe1d9; + box-shadow: 0 0 0 1px rgba(225, 113, 86, 0.24); +} + +.historical-player-team-toggle input:focus-visible + span { + outline: 2px solid rgba(210, 196, 130, 0.9); + outline-offset: 2px; +} + +.historical-player-stats-panel__profiles code { + color: var(--text); + font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace; + font-size: 0.82rem; + word-break: break-all; +} diff --git a/frontend/assets/css/historico.css b/frontend/assets/css/historico.css new file mode 100644 index 0000000..680ea74 --- /dev/null +++ b/frontend/assets/css/historico.css @@ -0,0 +1,1356 @@ +.historical-shell { + padding-bottom: 56px; +} + +.historical-hero { + min-height: auto; +} + +.historical-hero__content { + padding-top: 44px; + padding-bottom: 46px; +} + +.historical-hero__topline { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-bottom: 22px; +} + +.historical-hero__copy { + display: grid; + gap: 24px; + min-width: 0; +} + +.historical-hero__layout { + display: grid; + grid-template-columns: minmax(190px, 260px) minmax(0, 0.82fr) minmax(320px, 0.9fr); + align-items: center; + gap: 32px; +} + +.historical-hero__layout--registry { + grid-template-columns: minmax(220px, 330px) minmax(0, 1fr); + column-gap: clamp(72px, 7vw, 140px); +} + +.historical-hero__layout > * { + min-width: 0; +} + +.historical-logo-frame { + width: min(300px, 100%); + min-height: 220px; +} + +.historical-hero__title { + max-width: 12ch; +} + +.historical-hero__layout--registry .historical-hero__copy { + max-width: min(100%, 760px); +} + +.historical-hero__layout--registry .historical-hero__title { + max-width: 18ch; +} + +.historical-hero__text { + max-width: 60ch; + overflow-wrap: anywhere; +} + +/* Registry/historico hero: logo left, real flexible spacer, copy anchored right. */ +@media (min-width: 1121px) { + .historical-hero__layout--registry { + width: 100%; + max-width: 1420px; + margin: 0 auto; + display: grid; + grid-template-columns: minmax(400px, 470px) minmax(48px, 1fr) minmax(640px, 820px); + column-gap: clamp(28px, 3vw, 56px); + align-items: center; + } + + .historical-hero__layout--registry .historical-logo-frame { + grid-column: 1; + justify-self: start; + width: min(470px, 100%); + min-height: 360px; + padding: 30px 34px; + } + + .historical-hero__layout--registry .logo-frame__image { + max-height: 340px; + } + + .historical-hero__layout--registry .historical-hero__copy { + grid-column: 3; + justify-self: end; + width: 100%; + max-width: 820px; + align-content: center; + justify-items: start; + text-align: left; + } + + .historical-hero__layout--registry .historical-hero__title { + max-width: none; + font-size: clamp(4.2rem, 5.2vw, 6.35rem); + line-height: 1.02; + } + + .historical-hero__layout--registry .historical-hero__text { + max-width: 68ch; + } + + .historical-hero__layout--registry .historical-selector { + max-width: 760px; + } +} + +@media (min-width: 1121px) and (max-width: 1380px) { + .historical-hero__layout--registry { + grid-template-columns: minmax(320px, 390px) minmax(28px, 1fr) minmax(560px, 720px); + column-gap: clamp(20px, 2.5vw, 40px); + } + + .historical-hero__layout--registry .historical-logo-frame { + grid-column: 1; + width: min(390px, 100%); + min-height: 316px; + } + + .historical-hero__layout--registry .logo-frame__image { + max-height: 298px; + } + + .historical-hero__layout--registry .historical-hero__copy { + grid-column: 3; + width: 100%; + max-width: 720px; + justify-self: end; + } + + .historical-hero__layout--registry .historical-hero__title { + font-size: clamp(3.7rem, 5.35vw, 5.15rem); + } +} + +@media (max-width: 1120px) { + .historical-hero__layout--registry { + max-width: none; + } + + .historical-hero__layout--registry .historical-hero__copy, + .historical-hero__layout--registry .historical-hero__title, + .historical-hero__layout--registry .historical-hero__text { + width: auto; + max-width: none; + justify-self: stretch; + } +} + +.historical-map-hero { + position: relative; + overflow: hidden; + min-height: 220px; + margin: 0; + border: 1px solid rgba(210, 182, 118, 0.2); + border-radius: 18px; + background: + linear-gradient(180deg, rgba(19, 24, 16, 0.9), rgba(10, 13, 9, 0.72)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.04), + 0 18px 40px rgba(0, 0, 0, 0.24); +} + +.historical-map-hero[hidden] { + display: none; +} + +.historical-map-hero::before { + content: ""; + position: absolute; + inset: 0; + z-index: 1; + border: 1px solid rgba(210, 182, 118, 0.12); + border-radius: inherit; + background: + linear-gradient(90deg, rgba(7, 9, 7, 0.24), transparent 34%), + linear-gradient(180deg, transparent 54%, rgba(7, 9, 7, 0.44)); + pointer-events: none; +} + +.historical-map-hero__image { + width: 100%; + height: 100%; + min-height: 220px; + object-fit: cover; +} + +.current-match-map-hero { + display: grid; + isolation: isolate; +} + +.current-match-map-hero > * { + grid-area: 1 / 1; +} + +.current-match-map-placeholder { + z-index: 0; + display: grid; + align-content: end; + gap: 6px; + min-height: 220px; + padding: 24px; + color: var(--text); + background: + linear-gradient(135deg, rgba(183, 201, 125, 0.12), transparent 44%), + repeating-linear-gradient( + -28deg, + rgba(210, 182, 118, 0.06) 0 1px, + transparent 1px 20px + ); +} + +.current-match-map-placeholder strong { + font-size: 1.16rem; + text-transform: uppercase; +} + +.current-match-map-placeholder span { + color: var(--text-soft); +} + +.current-match-scoreboard-message { + max-width: 12ch; + font-size: clamp(2rem, 4vw, 3.3rem); + line-height: 1; +} + +.historical-content { + gap: 22px; +} + +.historical-panel { + backdrop-filter: blur(4px); +} + +.historical-panel__header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.historical-panel__note { + max-width: 58ch; + margin: 10px 0 0; + color: var(--muted); + line-height: 1.55; +} + +.historical-snapshot-meta { + margin: 8px 0 0; + color: var(--text-soft); + font-size: 0.86rem; + line-height: 1.5; +} + +.historical-selector { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.historical-selector__button { + min-height: 48px; + padding: 0 18px; + border: 1px solid rgba(183, 201, 125, 0.28); + border-radius: 999px; + background: linear-gradient(180deg, rgba(24, 30, 22, 0.94), rgba(11, 14, 10, 0.98)); + color: var(--text-soft); + font: inherit; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; + cursor: pointer; + transition: + transform 160ms ease, + border-color 160ms ease, + background 160ms ease, + color 160ms ease; +} + +.historical-selector__button:hover, +.historical-selector__button:focus-visible, +.historical-selector__button.is-active { + transform: translateY(-1px); + border-color: rgba(210, 182, 118, 0.5); + background: linear-gradient(180deg, rgba(183, 201, 125, 0.18), rgba(89, 101, 58, 0.24)); + color: var(--text); +} + +.historical-tabs { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin: 0 0 16px; +} + +.historical-tabs--timeframe { + margin-bottom: 10px; +} + +.historical-tab { + min-height: 42px; + padding: 0 16px; + border: 1px solid rgba(159, 168, 141, 0.2); + border-radius: 999px; + background: rgba(13, 17, 12, 0.62); + color: var(--muted); + font: inherit; + font-weight: 700; + letter-spacing: 0.05em; + text-transform: uppercase; + cursor: pointer; + transition: + transform 160ms ease, + border-color 160ms ease, + background 160ms ease, + color 160ms ease; +} + +.historical-tab:hover, +.historical-tab:focus-visible, +.historical-tab.is-active { + transform: translateY(-1px); + border-color: rgba(210, 182, 118, 0.46); + background: linear-gradient(180deg, rgba(183, 201, 125, 0.16), rgba(89, 101, 58, 0.18)); + color: var(--text); +} + +.historical-summary-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); + gap: 14px; +} + +.historical-mvp-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); + gap: 14px; +} + +.historical-elo-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); + gap: 14px; +} + +.historical-stat-card, +.historical-match-card, +.historical-mvp-card, +.historical-elo-card { + position: relative; + overflow: hidden; + padding: 18px; + border: 1px solid rgba(159, 168, 141, 0.16); + border-radius: 18px; + background: + linear-gradient(180deg, rgba(28, 34, 25, 0.94), rgba(12, 15, 11, 0.98)); + box-shadow: var(--shadow-soft); +} + +.historical-stat-card p, +.historical-stat-card strong, +.historical-match-card p, +.historical-match-card strong, +.historical-mvp-card p, +.historical-mvp-card strong, +.historical-mvp-card span, +.historical-elo-card p, +.historical-elo-card strong, +.historical-elo-card span { + margin: 0; +} + +.historical-stat-card p, +.historical-match-meta__label { + margin-bottom: 6px; + color: var(--muted); + font-size: 0.72rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-stat-card strong { + font-size: 1.05rem; + line-height: 1.4; +} + +.historical-mvp-card { + display: grid; + gap: 16px; +} + +.historical-mvp-card--v2 { + border-color: rgba(187, 143, 72, 0.26); + background: + radial-gradient(circle at top right, rgba(187, 143, 72, 0.12), transparent 40%), + linear-gradient(180deg, rgba(31, 27, 18, 0.96), rgba(12, 15, 11, 0.98)); +} + +.historical-mvp-card--rank-1 { + border-color: rgba(210, 182, 118, 0.34); + background: + radial-gradient(circle at top right, rgba(210, 182, 118, 0.16), transparent 42%), + linear-gradient(180deg, rgba(36, 32, 20, 0.96), rgba(12, 15, 11, 0.98)); +} + +.historical-mvp-card__top { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; +} + +.historical-mvp-card__rank { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 42px; + min-height: 42px; + padding: 0 12px; + border: 1px solid rgba(210, 182, 118, 0.26); + border-radius: 999px; + color: var(--accent-warm); + font-size: 0.76rem; + font-weight: 800; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-mvp-card__player { + font-size: 1.18rem; + line-height: 1.3; +} + +.historical-mvp-card__version { + display: inline-flex; + align-items: center; + min-height: 28px; + padding: 0 10px; + border: 1px solid rgba(187, 143, 72, 0.28); + border-radius: 999px; + color: var(--accent-warm); + font-size: 0.68rem; + font-weight: 800; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-mvp-card__score-label { + margin-bottom: 6px; + color: var(--muted); + font-size: 0.72rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-mvp-card__score-value { + color: var(--accent-strong); + font-size: 1.8rem; + line-height: 1; +} + +.historical-mvp-card__meta { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; +} + +.historical-mvp-card__meta span { + display: block; + margin-bottom: 6px; + color: var(--muted); + font-size: 0.7rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-mvp-card__footer { + padding-top: 12px; + border-top: 1px solid rgba(159, 168, 141, 0.12); + color: var(--text-soft); + font-size: 0.88rem; + line-height: 1.5; +} + +.historical-mvp-card__signals { + display: grid; + gap: 10px; +} + +.historical-elo-card { + display: grid; + gap: 16px; + border-color: rgba(96, 150, 124, 0.24); + background: + radial-gradient(circle at top right, rgba(96, 150, 124, 0.12), transparent 40%), + linear-gradient(180deg, rgba(21, 32, 27, 0.96), rgba(12, 15, 11, 0.98)); +} + +.historical-elo-card__top { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; +} + +.historical-elo-card__rank { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 42px; + min-height: 42px; + padding: 0 12px; + border: 1px solid rgba(96, 150, 124, 0.28); + border-radius: 999px; + color: #a8d4bf; + font-size: 0.76rem; + font-weight: 800; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-elo-card__accuracy { + display: inline-flex; + align-items: center; + min-height: 28px; + padding: 0 10px; + border: 1px solid rgba(96, 150, 124, 0.24); + border-radius: 999px; + color: #a8d4bf; + font-size: 0.68rem; + font-weight: 800; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-elo-card__meta, +.historical-elo-card__scores { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.historical-elo-card__meta article, +.historical-elo-card__scores article { + padding: 10px 12px; + border: 1px solid rgba(96, 150, 124, 0.14); + border-radius: 14px; + background: rgba(13, 17, 12, 0.42); +} + +.historical-elo-card__meta span, +.historical-elo-card__scores span { + display: block; + margin-bottom: 6px; + color: var(--muted); + font-size: 0.7rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-elo-card__summary { + color: var(--text-soft); + font-size: 0.9rem; + line-height: 1.5; +} + +.historical-elo-card__footer { + padding-top: 12px; + border-top: 1px solid rgba(159, 168, 141, 0.12); + color: var(--text-soft); + font-size: 0.88rem; + line-height: 1.5; +} + +.historical-mvp-card__signal-summary { + color: var(--text-soft); + font-size: 0.9rem; + line-height: 1.5; +} + +.historical-mvp-card__signal-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.historical-mvp-card__signal-grid article { + padding: 10px 12px; + border: 1px solid rgba(187, 143, 72, 0.14); + border-radius: 14px; + background: rgba(13, 17, 12, 0.42); +} + +.historical-mvp-card__signal-grid span { + display: block; + margin-bottom: 6px; + color: var(--muted); + font-size: 0.68rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-state { + margin: 0 0 16px; + padding: 14px 16px; + border: 1px dashed rgba(159, 168, 141, 0.28); + border-radius: 14px; + color: var(--text-soft); + background: rgba(13, 17, 12, 0.52); +} + +.historical-state.is-error { + border-style: solid; + border-color: rgba(210, 182, 118, 0.28); + color: var(--accent-warm); +} + +.historical-state[hidden] { + display: none; +} + +.historical-table-shell { + overflow-x: auto; +} + +.historical-detail-section { + display: grid; + gap: 14px; + margin-top: 18px; +} + +.historical-detail-section__header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.historical-detail-section__header h3 { + margin: 0; + font-size: 1.08rem; +} + +.historical-table { + width: 100%; + border-collapse: collapse; + min-width: 620px; +} + +.historical-table th, +.historical-table td { + padding: 14px 12px; + border-bottom: 1px solid rgba(159, 168, 141, 0.12); + text-align: left; +} + +.historical-table th { + color: var(--muted); + font-size: 0.72rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-table td { + color: var(--text); +} + +.historical-table tbody tr:last-child td { + border-bottom: 0; +} + +.historical-table--players { + min-width: 920px; +} + +.historical-table__position { + color: var(--accent-warm); + font-weight: 700; +} + +.historical-match-list { + display: grid; + gap: 14px; +} + +.historical-pagination { + display: flex; + align-items: center; + justify-content: space-between; + gap: 14px; + margin-top: 16px; +} + +.historical-pagination[hidden] { + display: none; +} + +.historical-pagination__size, +.historical-pagination__nav { + display: flex; + align-items: center; + gap: 10px; +} + +.historical-pagination__size { + color: var(--text-soft); + font-size: 0.86rem; + font-weight: 700; +} + +.historical-pagination__size select { + min-height: 42px; + padding: 0 34px 0 12px; + border: 1px solid rgba(159, 168, 141, 0.2); + border-radius: 6px; + color: var(--text); + background: rgba(13, 17, 12, 0.72); + font: inherit; +} + +.historical-pagination__nav p { + margin: 0; + min-width: 110px; + color: var(--text-soft); + font-size: 0.86rem; + font-weight: 700; + text-align: center; +} + +.historical-pagination .historical-tab { + margin: 0; +} + +.historical-pagination .historical-tab:disabled { + transform: none; + border-color: rgba(159, 168, 141, 0.12); + color: rgba(169, 173, 154, 0.48); + cursor: default; +} + +.current-match-killfeed-screen { + position: relative; + width: 100%; + min-height: 180px; + max-height: 520px; + padding: 10px; + overflow: hidden; + border: 1px solid rgba(159, 168, 141, 0.2); + border-radius: 6px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent 24%), + rgba(7, 9, 9, 0.94); + box-shadow: + inset 0 0 0 1px rgba(0, 0, 0, 0.44), + inset 0 18px 48px rgba(0, 0, 0, 0.24); +} + +.current-match-killfeed-screen::after { + position: absolute; + inset: 0; + z-index: 1; + border-radius: inherit; + background: repeating-linear-gradient( + 180deg, + rgba(255, 255, 255, 0.018) 0, + rgba(255, 255, 255, 0.018) 1px, + transparent 1px, + transparent 5px + ); + pointer-events: none; + content: ""; +} + +.current-match-killfeed { + position: relative; + z-index: 2; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + align-items: start; + gap: 8px; + max-height: 500px; + overflow: hidden; +} + +.current-match-killfeed__column { + display: grid; + align-content: start; + gap: 6px; + min-width: 0; +} + +.current-match-killfeed__row { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(86px, 112px) minmax(0, 1fr); + align-items: center; + gap: 8px; + min-height: 54px; + padding: 6px 9px; + overflow: hidden; + border: 1px solid rgba(159, 168, 141, 0.14); + border-left: 2px solid rgba(159, 168, 141, 0.24); + border-radius: 3px; + color: var(--text); + background: rgba(19, 22, 22, 0.78); + animation: current-match-killfeed-enter 180ms ease-out; +} + +.current-match-killfeed__column:last-child .current-match-killfeed__row:last-child { + border-color: rgba(210, 182, 118, 0.22); + background: + linear-gradient(90deg, rgba(210, 182, 118, 0.08), transparent 46%), + rgba(24, 25, 22, 0.92); +} + +.current-match-killfeed__row.is-teamkill { + border-left-color: rgba(210, 182, 118, 0.64); + background: + linear-gradient(90deg, rgba(210, 182, 118, 0.12), transparent 48%), + rgba(73, 49, 27, 0.32); +} + +.current-match-killfeed__player { + display: grid; + align-content: center; + gap: 3px; + min-width: 0; + font-size: 0.88rem; + line-height: 1.2; +} + +.current-match-killfeed__player-identity { + display: inline-flex; + align-items: center; + gap: 6px; + min-width: 0; + max-width: 100%; + flex-wrap: wrap; +} + +.current-match-killfeed__player-name { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.current-match-killfeed__player--killer { + color: var(--text); +} + +.current-match-killfeed__player--victim { + color: var(--text-soft); +} + +.current-match-killfeed__player-meta { + display: flex; + align-items: center; + gap: 4px; + min-width: 0; +} + +.current-match-killfeed__player--killer .current-match-killfeed__player-identity, +.current-match-killfeed__player--killer .current-match-killfeed__player-meta { + justify-content: flex-end; +} + +.current-match-killfeed__player--victim .current-match-killfeed__player-identity, +.current-match-killfeed__player--victim .current-match-killfeed__player-meta { + justify-content: flex-start; +} + +.current-match-killfeed__weapon { + display: grid; + grid-template-rows: 25px auto; + align-items: center; + justify-content: center; + gap: 1px; + min-width: 92px; + min-height: 38px; + padding: 2px 5px; + border: 1px solid rgba(159, 168, 141, 0.18); + border-radius: 3px; + color: var(--text); + background: rgba(8, 10, 11, 0.74); +} + +.current-match-killfeed__weapon-icon { + display: block; + width: min(100%, 104px); + height: 24px; + object-fit: contain; + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.72)); +} + +.current-match-killfeed__weapon-fallback { + display: grid; + width: 24px; + height: 24px; + justify-self: center; + place-items: center; + border: 1px solid rgba(210, 182, 118, 0.3); + border-radius: 3px; + color: var(--accent-warm); + font-size: 0.82rem; + font-weight: 800; +} + +.current-match-killfeed__weapon-fallback[hidden] { + display: none; +} + +.current-match-killfeed__weapon em { + display: block; + max-width: 112px; + overflow: hidden; + color: var(--muted); + font-size: 0.58rem; + font-style: normal; + line-height: 1.1; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; +} + +.current-match-killfeed__teamkill { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 18px; + padding: 0 5px; + border-radius: 4px; + font-size: 0.62rem; + font-weight: 800; +} + +.current-match-killfeed__teamkill { + border: 1px solid rgba(210, 182, 118, 0.36); + color: var(--accent-warm); +} + +.current-match-killfeed__team-badge { + min-width: auto; + padding-inline: 8px; + font-size: 0.62rem; +} + +.current-match-player-intro { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 10px 18px; + margin-top: 10px; +} + +.current-match-player-intro .historical-panel__note { + margin-top: 0; +} + +.current-match-player-count { + flex: 0 0 auto; + width: fit-content; + margin: 0; + padding: 7px 10px; + border: 1px solid rgba(159, 168, 141, 0.16); + border-radius: 6px; + color: var(--text-soft); + background: rgba(14, 17, 18, 0.7); + font-size: 0.8rem; + font-weight: 700; +} + +@keyframes current-match-killfeed-enter { + from { + opacity: 0; + transform: translateX(8px); + } + + to { + opacity: 1; + transform: translateX(0); + } +} + +.historical-comparison-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); + gap: 14px; +} + +.historical-comparison-card { + display: grid; + gap: 14px; + padding: 18px; + border: 1px solid rgba(159, 168, 141, 0.16); + border-radius: 18px; + background: + radial-gradient(circle at top right, rgba(183, 201, 125, 0.1), transparent 42%), + linear-gradient(180deg, rgba(28, 34, 25, 0.94), rgba(12, 15, 11, 0.98)); + box-shadow: var(--shadow-soft); +} + +.historical-comparison-card__top, +.historical-comparison-card__scores { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; +} + +.historical-comparison-card__eyebrow, +.historical-comparison-card__delta-label, +.historical-comparison-card__meta span { + margin: 0 0 6px; + color: var(--muted); + font-size: 0.7rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-comparison-card__title { + margin: 0; + font-size: 1.08rem; + line-height: 1.35; +} + +.historical-comparison-card__delta-value { + color: var(--accent-strong); + font-size: 1.35rem; + line-height: 1; +} + +.historical-comparison-card__score-block strong { + display: block; + font-size: 1rem; +} + +.historical-comparison-card__meta { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.historical-comparison-card__meta article { + padding: 10px 12px; + border: 1px solid rgba(159, 168, 141, 0.14); + border-radius: 14px; + background: rgba(13, 17, 12, 0.42); +} + +.historical-comparison-card__summary { + margin: 0; + padding-top: 12px; + border-top: 1px solid rgba(159, 168, 141, 0.12); + color: var(--text-soft); + font-size: 0.9rem; + line-height: 1.5; +} + +.historical-match-card { + display: grid; + gap: 14px; +} + +.historical-match-card__top { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.historical-match-card__title { + margin: 0; + font-size: 1.08rem; +} + +.historical-match-card__actions { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 10px; +} + +.historical-match-card__result { + padding: 0.45rem 0.75rem; + border: 1px solid rgba(183, 201, 125, 0.24); + border-radius: 999px; + color: var(--accent-strong); + font-size: 0.76rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.historical-match-card__link { + display: inline-flex; + align-items: center; + min-height: 34px; + padding: 0 0.8rem; + border: 1px solid rgba(210, 182, 118, 0.34); + border-radius: 999px; + color: var(--accent-warm); + font-size: 0.76rem; + font-weight: 800; + letter-spacing: 0.08em; + text-decoration: none; + text-transform: uppercase; +} + +.historical-match-card__link:hover, +.historical-match-card__link:focus-visible { + border-color: rgba(210, 182, 118, 0.62); + color: var(--text); +} + +.historical-match-meta { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); + gap: 12px; +} + +.historical-match-meta strong { + display: block; + line-height: 1.5; +} + +@media (max-width: 720px) { + .historical-hero__layout, + .historical-hero__topline, + .historical-panel__header, + .historical-detail-section__header, + .historical-match-card__top { + flex-direction: column; + align-items: flex-start; + } + + .historical-hero__layout { + display: grid; + grid-template-columns: 1fr; + } + + .historical-hero__copy, + .historical-hero__copy > div, + .historical-hero__text { + width: 100%; + max-width: 100%; + } + + .historical-hero__layout--registry .historical-hero__copy, + .historical-hero__layout--registry .historical-hero__title { + max-width: 100%; + } + + .historical-map-hero { + width: 100%; + min-height: 190px; + } + + .historical-map-hero__image { + min-height: 190px; + } + + .historical-selector { + flex-direction: column; + } + + .historical-tabs { + flex-direction: column; + } + + .historical-mvp-card__top { + flex-direction: column; + } + + .current-match-player-intro { + align-items: flex-start; + flex-direction: column; + } + + .historical-mvp-card__meta { + grid-template-columns: 1fr; + } + + .historical-mvp-card__signal-grid { + grid-template-columns: 1fr; + } + + .historical-comparison-card__top, + .historical-comparison-card__scores { + flex-direction: column; + } + + .historical-comparison-card__meta { + grid-template-columns: 1fr; + } + + .historical-match-card__actions { + justify-content: flex-start; + } + + .historical-pagination, + .historical-pagination__nav { + align-items: stretch; + flex-direction: column; + } + + .historical-pagination__size { + justify-content: space-between; + } + + .historical-tab { + width: 100%; + } + + .historical-selector__button { + width: 100%; + } + + .historical-table { + min-width: 540px; + } + + .current-match-killfeed { + grid-template-columns: 1fr; + max-height: 500px; + } + + .current-match-killfeed__row { + grid-template-columns: minmax(0, 1fr) minmax(86px, 116px) minmax(0, 1fr); + } +} + +@media (max-width: 480px) { + .current-match-killfeed__row { + grid-template-columns: minmax(0, 1fr) 82px minmax(0, 1fr); + gap: 5px; + padding-inline: 6px; + } + + .current-match-killfeed__weapon { + min-width: 82px; + padding-inline: 3px; + } + + .current-match-killfeed__player-name { + display: -webkit-box; + overflow: hidden; + font-size: 0.78rem; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + text-overflow: ellipsis; + white-space: normal; + } + + .current-match-killfeed__player-identity { + gap: 5px; + } + + .current-match-killfeed__teamkill { + min-height: 16px; + font-size: 0.54rem; + } +} + +@media (prefers-reduced-motion: reduce) { + .current-match-killfeed__row { + animation: none; + } +} + +.historical-match-card--clean { + gap: 12px; +} + +.historical-match-card__top--clean { + display: block; +} + +.historical-match-meta--clean { + grid-template-columns: + minmax(220px, 1.4fr) + minmax(130px, 0.75fr) + minmax(110px, 0.65fr) + minmax(110px, 0.65fr) + 340px; + align-items: end; +} + +.historical-match-meta--clean > article { + align-self: stretch; + display: flex; + flex-direction: column; + justify-content: flex-end; +} + +.historical-match-card__actions-cell { + display: flex; + align-items: end; + justify-content: flex-end; + min-width: 340px; +} + +.historical-match-card__actions-cell .historical-match-card__actions { + gap: 10px; + align-items: center; + justify-content: flex-end; +} + +#recent-matches-list .historical-match-card__actions { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + justify-content: flex-end; + gap: 10px; +} + +#recent-matches-list .historical-match-card__result, +#recent-matches-list .historical-match-card__link { + flex: 0 0 auto; +} + +@media (max-width: 920px) { + .historical-match-meta--clean { + grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); + } + + .historical-match-card__actions-cell { + justify-content: flex-start; + min-width: 0; + } + + .historical-match-card__actions-cell .historical-match-card__actions { + justify-content: flex-start; + } + + #recent-matches-list .historical-match-card__actions { + flex-wrap: wrap; + justify-content: flex-start; + } +} + +/* Hide public scoreboard action only in the recent matches list. + The internal detail page can still show its own scoreboard button. */ +#recent-matches-list .historical-match-card__link--scoreboard { + display: none; +} diff --git a/frontend/assets/css/styles.css b/frontend/assets/css/styles.css new file mode 100644 index 0000000..a3699f2 --- /dev/null +++ b/frontend/assets/css/styles.css @@ -0,0 +1,1066 @@ +:root { + --bg: #0f120d; + --bg-deep: #090b08; + --bg-elevated: rgba(27, 33, 24, 0.92); + --panel: rgba(21, 26, 19, 0.94); + --panel-soft: rgba(30, 36, 27, 0.7); + --border: rgba(159, 168, 141, 0.24); + --border-strong: rgba(183, 201, 125, 0.2); + --text: #e7e0cf; + --muted: #a9ad9a; + --text-soft: #c8ccb8; + --accent: #8ea062; + --accent-strong: #b7c97d; + --accent-warm: #d2b676; + --shadow: 0 28px 72px rgba(0, 0, 0, 0.42); + --shadow-soft: 0 18px 40px rgba(0, 0, 0, 0.24); + --page-shell-width: 1600px; + --page-shell-gutter: 32px; + --panel-content-width: 1120px; + --font-main: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; +} + +* { + box-sizing: border-box; +} + +html { + font-size: 16px; +} + +body { + margin: 0; + min-height: 100vh; + font-family: var(--font-main); + color: var(--text); + background-color: var(--bg); + background: + linear-gradient(rgba(9, 11, 8, 0.56), rgba(9, 11, 8, 0.97)), + radial-gradient(circle at 18% 12%, rgba(108, 124, 75, 0.2), transparent 28%), + radial-gradient(circle at top, rgba(84, 96, 59, 0.22), transparent 34%), + radial-gradient(circle at 85% 10%, rgba(210, 182, 118, 0.1), transparent 24%), + radial-gradient(circle at 78% 65%, rgba(54, 65, 42, 0.2), transparent 30%), + radial-gradient(circle at bottom, rgba(210, 182, 118, 0.08), transparent 28%), + linear-gradient(145deg, #171d15 0%, var(--bg-deep) 100%); +} + +img { + display: block; + max-width: 100%; +} + +a { + color: inherit; + text-decoration: none; +} + +.page-shell { + position: relative; + isolation: isolate; + width: 100%; + padding: 30px 20px 72px; +} + +.page-shell::before { + content: ""; + position: absolute; + inset: 0; + z-index: -2; + background: + radial-gradient(circle at 12% 18%, rgba(210, 182, 118, 0.07), transparent 18%), + radial-gradient(circle at 82% 9%, rgba(142, 160, 98, 0.14), transparent 24%), + linear-gradient(180deg, rgba(255, 255, 255, 0.012), transparent 24%); + pointer-events: none; +} + +.page-shell::after { + content: ""; + position: absolute; + inset: 18px 4% auto; + z-index: -1; + height: 220px; + border-radius: 999px; + background: radial-gradient(circle, rgba(0, 0, 0, 0.36), transparent 72%); + filter: blur(18px); + pointer-events: none; +} + +.hero { + position: relative; + overflow: hidden; + width: min(var(--page-shell-width), calc(100vw - (var(--page-shell-gutter) * 2))); + margin: 0 auto; + border: 1px solid var(--border); + border-radius: 24px; + background: + linear-gradient(180deg, rgba(26, 33, 21, 0.86), rgba(10, 13, 9, 0.98)), + radial-gradient(circle at top center, rgba(183, 201, 125, 0.08), transparent 32%), + radial-gradient(circle at 82% 22%, rgba(210, 182, 118, 0.08), transparent 24%), + repeating-linear-gradient( + 90deg, + rgba(255, 255, 255, 0.015) 0, + rgba(255, 255, 255, 0.015) 1px, + transparent 1px, + transparent 24px + ); + box-shadow: var(--shadow); +} + +.hero::before { + content: ""; + position: absolute; + inset: 18px; + border: 1px solid rgba(210, 182, 118, 0.1); + border-radius: 18px; + pointer-events: none; +} + +.hero::after { + content: ""; + position: absolute; + inset: auto 32px 0; + height: 1px; + background: linear-gradient( + 90deg, + transparent, + rgba(183, 201, 125, 0.2), + transparent + ); + pointer-events: none; +} + +.hero__overlay { + position: absolute; + inset: 0; + background: + radial-gradient(circle at top right, rgba(142, 160, 98, 0.18), transparent 28%), + radial-gradient(circle at left center, rgba(210, 182, 118, 0.1), transparent 26%), + radial-gradient(circle at 50% 115%, rgba(0, 0, 0, 0.42), transparent 34%), + linear-gradient(135deg, transparent 0%, rgba(0, 0, 0, 0.2) 100%), + linear-gradient(180deg, rgba(0, 0, 0, 0) 48%, rgba(0, 0, 0, 0.34) 100%); + pointer-events: none; +} + +.hero__content { + position: relative; + z-index: 1; + width: 100%; + max-width: none; + margin: 0 auto; + padding: 58px 52px 64px; +} + +.hero__brand { + position: relative; + display: grid; + grid-template-columns: minmax(240px, 340px) minmax(0, 1fr); + align-items: center; + gap: 36px; +} + +.hero__copy { + display: grid; + justify-items: start; + text-align: left; + gap: 18px; + max-width: 660px; +} + +.hero__content::before { + content: ""; + position: absolute; + inset: 28px 80px auto; + height: 140px; + border-radius: 999px; + background: radial-gradient( + circle, + rgba(210, 182, 118, 0.16) 0%, + rgba(142, 160, 98, 0.08) 42%, + transparent 78% + ); + filter: blur(14px); + pointer-events: none; +} + +.logo-frame { + width: min(340px, 100%); + min-height: 248px; + padding: 24px 28px; + display: grid; + place-items: center; + border: 1px dashed rgba(183, 201, 125, 0.45); + border-radius: 18px; + background: + linear-gradient(180deg, rgba(19, 24, 16, 0.9), rgba(10, 13, 9, 0.72)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.04), + 0 18px 40px rgba(0, 0, 0, 0.24); + position: relative; + isolation: isolate; +} + +.logo-frame::before { + content: ""; + position: absolute; + inset: 10px; + border: 1px solid rgba(210, 182, 118, 0.14); + border-radius: 12px; + pointer-events: none; +} + +.logo-frame::after { + content: ""; + position: absolute; + inset: auto 18% -24px; + height: 48px; + background: radial-gradient(circle, rgba(0, 0, 0, 0.42), transparent 72%); + filter: blur(8px); + z-index: -1; + pointer-events: none; +} + +.logo-frame__image { + width: auto; + height: auto; + max-width: 100%; + max-height: 246px; + object-fit: contain; + filter: + drop-shadow(0 10px 20px rgba(0, 0, 0, 0.28)) + drop-shadow(0 0 18px rgba(210, 182, 118, 0.08)); +} + +.eyebrow { + margin: 0; + padding: 0.35rem 0.75rem; + border: 1px solid rgba(183, 201, 125, 0.22); + border-radius: 999px; + background: rgba(142, 160, 98, 0.08); + font-size: 0.76rem; + letter-spacing: 0.2em; + text-transform: uppercase; + color: var(--accent-strong); +} + +.eyebrow--section { + margin-bottom: 0.85rem; +} + +h1, +h2 { + margin: 0; + line-height: 1.1; +} + +h1 { + max-width: 10ch; + font-size: clamp(2.6rem, 5vw, 4.9rem); + letter-spacing: 0.02em; + text-shadow: 0 10px 28px rgba(0, 0, 0, 0.32); +} + +h2 { + font-size: clamp(1.5rem, 2.8vw, 2.2rem); +} + +.hero__title-accent { + display: block; + color: var(--accent-warm); +} + +.hero__text { + margin: 0; + max-width: 56ch; + color: var(--text-soft); + font-size: 1.03rem; + line-height: 1.75; +} + +.hero__actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 14px 16px; + margin-top: 2px; +} + +.status-chip { + margin: 0; + padding: 0.5rem 0.9rem; + border: 1px solid rgba(159, 168, 141, 0.22); + border-radius: 999px; + background: linear-gradient(180deg, rgba(28, 34, 26, 0.82), rgba(14, 18, 13, 0.86)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.04), + 0 10px 24px rgba(0, 0, 0, 0.18); + font-size: 0.76rem; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--muted); +} + +.status-chip--ok { + border-color: rgba(183, 201, 125, 0.34); + background: rgba(142, 160, 98, 0.12); + color: var(--accent-strong); +} + +.status-chip--fallback { + border-color: rgba(210, 182, 118, 0.24); + background: rgba(210, 182, 118, 0.08); + color: var(--accent-warm); +} + +.servers-loading, +.servers-empty { + display: grid; + justify-items: center; + gap: 14px; + width: 100%; + padding: 36px 24px; + border: 1px dashed rgba(183, 201, 125, 0.24); + border-radius: 18px; + background: linear-gradient(180deg, rgba(19, 24, 16, 0.72), rgba(10, 13, 9, 0.84)); + color: var(--text-soft); + text-align: center; +} + +.servers-loading__pulse { + width: 14px; + height: 14px; + border-radius: 999px; + background: var(--accent-warm); + box-shadow: 0 0 0 rgba(210, 182, 118, 0.34); + animation: servers-loading-pulse 1.6s ease-in-out infinite; +} + +@keyframes servers-loading-pulse { + 0% { + transform: scale(0.9); + box-shadow: 0 0 0 0 rgba(210, 182, 118, 0.26); + opacity: 0.78; + } + + 70% { + transform: scale(1); + box-shadow: 0 0 0 16px rgba(210, 182, 118, 0); + opacity: 1; + } + + 100% { + transform: scale(0.92); + box-shadow: 0 0 0 0 rgba(210, 182, 118, 0); + opacity: 0.82; + } +} + +.discord-button { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 52px; + min-width: 220px; + padding: 0 28px; + border: 1px solid rgba(183, 201, 125, 0.45); + border-radius: 999px; + background: linear-gradient(180deg, #8ea062 0%, #6e7f48 100%); + color: #11150f; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + transition: + transform 160ms ease, + box-shadow 160ms ease, + filter 160ms ease; + box-shadow: 0 12px 30px rgba(110, 127, 72, 0.35); +} + +.secondary-button { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 52px; + min-width: 220px; + padding: 0 24px; + border: 1px solid rgba(210, 182, 118, 0.32); + border-radius: 999px; + background: linear-gradient(180deg, rgba(28, 34, 25, 0.9), rgba(12, 15, 11, 0.96)); + color: var(--text); + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + transition: + transform 160ms ease, + border-color 160ms ease, + background 160ms ease; +} + +.secondary-button:hover, +.secondary-button:focus-visible { + transform: translateY(-1px); + border-color: rgba(210, 182, 118, 0.5); + background: linear-gradient(180deg, rgba(43, 50, 36, 0.94), rgba(16, 20, 14, 0.98)); +} + +.secondary-button--ghost { + min-width: 0; + min-height: 42px; + padding: 0 18px; + font-size: 0.76rem; +} + +.secondary-button--compact { + min-height: 44px; + min-width: 0; + padding: 0 18px; + font-size: 0.76rem; +} + +.discord-button:hover, +.discord-button:focus-visible { + transform: translateY(-1px); + filter: brightness(1.04); + box-shadow: 0 18px 36px rgba(110, 127, 72, 0.45); +} + +.content { + width: 100%; + margin-top: -28px; + position: relative; + z-index: 2; + display: grid; + gap: 30px; +} + +.panel { + position: relative; + width: min(var(--page-shell-width), calc(100vw - (var(--page-shell-gutter) * 2))); + margin: 0 auto; + padding: 34px 40px 38px; + border: 1px solid var(--border); + border-radius: 24px; + background: + linear-gradient(180deg, rgba(25, 31, 23, 0.96), rgba(12, 15, 11, 0.995)); + box-shadow: + 0 34px 82px rgba(0, 0, 0, 0.34), + inset 0 1px 0 rgba(255, 255, 255, 0.03); +} + +.panel::before { + content: ""; + position: absolute; + inset: 0 auto auto 32px; + width: 120px; + height: 1px; + background: linear-gradient(90deg, rgba(210, 182, 118, 0.7), transparent); +} + +.panel::after { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + background: + radial-gradient(circle at top center, rgba(183, 201, 125, 0.07), transparent 30%), + linear-gradient(180deg, rgba(255, 255, 255, 0.015), transparent 18%); + pointer-events: none; +} + +.panel__header { + margin-bottom: 22px; +} + +.panel__shell { + width: 100%; + margin: 0 auto; +} + +.panel__header--servers { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.panel__intro { + margin: 0 0 20px; + max-width: 70ch; + color: var(--text-soft); + line-height: 1.75; +} + +.panel__intro--tight { + margin-bottom: 0; + max-width: 58ch; +} + +.panel__actions { + margin-top: 18px; + margin-bottom: 20px; +} + +.panel__actions--compact { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.panel--video { + position: relative; + backdrop-filter: blur(4px); +} + +.video-wrapper { + position: relative; + width: 100%; + overflow: hidden; + padding: 12px; + border: 1px solid rgba(159, 168, 141, 0.2); + border-radius: 20px; + background: + linear-gradient(180deg, rgba(29, 35, 26, 0.95), rgba(10, 12, 9, 0.98)); + aspect-ratio: 16 / 9; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.04), + 0 24px 44px rgba(0, 0, 0, 0.3); +} + +.video-wrapper::before { + content: ""; + position: absolute; + inset: 0; + border-radius: 20px; + border: 1px solid rgba(210, 182, 118, 0.12); + pointer-events: none; +} + +.video-wrapper::after { + content: ""; + position: absolute; + inset: 12px auto auto 12px; + width: 132px; + height: 28px; + border-radius: 999px; + background: + linear-gradient(90deg, rgba(12, 16, 10, 0.88), rgba(12, 16, 10, 0.24)); + pointer-events: none; +} + +.video-wrapper iframe { + width: 100%; + height: 100%; + border: 0; + border-radius: 10px; +} + +.servers-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr)); + gap: 24px; +} + +.servers-grid--section { + grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr)); + align-items: stretch; +} + +.server-card { + position: relative; + overflow: hidden; + min-width: 0; + padding: 22px; + border: 1px solid rgba(159, 168, 141, 0.18); + border-radius: 22px; + background: + linear-gradient(180deg, rgba(28, 34, 25, 0.94), rgba(15, 18, 13, 0.98)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.03), + var(--shadow-soft); +} + +.server-card::before { + content: ""; + position: absolute; + inset: 0 0 auto; + height: 1px; + background: linear-gradient(90deg, rgba(210, 182, 118, 0.4), transparent 68%); + pointer-events: none; +} + +.server-card::after { + content: ""; + position: absolute; + inset: 0; + background: + radial-gradient(circle at top right, rgba(183, 201, 125, 0.06), transparent 28%); + pointer-events: none; +} + +.server-card--real { + border-color: rgba(183, 201, 125, 0.24); + background: + linear-gradient(180deg, rgba(32, 40, 28, 0.96), rgba(14, 18, 13, 0.98)); +} + +.server-card--reference { + border-color: rgba(210, 182, 118, 0.18); + background: + linear-gradient(180deg, rgba(31, 28, 22, 0.94), rgba(16, 14, 11, 0.98)); +} + +.server-card__top { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; + margin-bottom: 14px; +} + +.server-card__top--stats { + align-items: flex-start; + gap: 18px; +} + +.server-card__identity { + min-width: 0; + display: grid; + gap: 6px; +} + +.server-card__eyebrow { + margin: 0; + color: var(--accent-warm); + font-size: 0.68rem; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +.server-card h3 { + margin: 0; + font-size: 1.08rem; + line-height: 1.4; + max-width: none; + overflow-wrap: anywhere; +} + +.server-card__status-column { + display: grid; + align-content: start; + justify-items: end; + gap: 10px; + min-width: 150px; +} + +.server-card__population { + margin: 0; + padding: 10px 12px; + max-width: 100%; + min-width: 120px; + border: 1px solid rgba(159, 168, 141, 0.18); + border-radius: 14px; + background: linear-gradient(180deg, rgba(12, 15, 10, 0.54), rgba(9, 11, 8, 0.34)); + color: var(--accent-strong); + font-size: 1rem; + font-weight: 700; + letter-spacing: 0.04em; + text-align: center; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); +} + +.server-card__actions { + margin: 0; + display: flex; + align-items: flex-end; + align-self: end; + flex-wrap: wrap; + gap: 8px; + justify-content: flex-end; +} + +.server-action-link { + display: inline-flex; + align-items: center; + justify-content: center; + width: auto; + max-width: 100%; + min-height: 42px; + min-width: 136px; + padding: 0 16px; + border: 1px solid rgba(183, 201, 125, 0.38); + border-radius: 999px; + background: linear-gradient(180deg, rgba(183, 201, 125, 0.18), rgba(110, 127, 72, 0.24)); + color: var(--accent-strong); + font-size: 0.76rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; + cursor: pointer; + transition: + transform 160ms ease, + border-color 160ms ease, + background 160ms ease, + opacity 160ms ease; +} + +.server-action-link:hover, +.server-action-link:focus-visible { + transform: translateY(-1px); + border-color: rgba(210, 182, 118, 0.52); + background: linear-gradient(180deg, rgba(210, 182, 118, 0.2), rgba(142, 160, 98, 0.26)); +} + +.server-state { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 88px; + padding: 0.38rem 0.72rem; + border: 1px solid rgba(159, 168, 141, 0.22); + border-radius: 999px; + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); +} + +.server-state--online { + border-color: rgba(183, 201, 125, 0.34); + background: rgba(142, 160, 98, 0.12); + color: var(--accent-strong); +} + +.server-state--offline { + border-color: rgba(210, 182, 118, 0.24); + background: rgba(210, 182, 118, 0.08); + color: var(--accent-warm); +} + +.server-card__quickfacts { + margin-bottom: 0; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); + gap: 12px; +} + +.server-card__bottom { + display: grid; + grid-template-columns: minmax(0, 280px) minmax(272px, 1fr); + align-items: end; + justify-content: space-between; + gap: 16px; +} + +.server-card__quickfact { + min-width: 0; + padding: 12px 14px; + border: 1px solid rgba(159, 168, 141, 0.14); + border-radius: 14px; + background: linear-gradient(180deg, rgba(12, 15, 11, 0.34), rgba(8, 10, 7, 0.2)); +} + +.server-card__quickfact p, +.server-card__quickfact strong { + margin: 0; +} + +.server-card__quickfact p { + margin-bottom: 6px; + color: var(--muted); + font-size: 0.72rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.server-card__quickfact strong { + display: block; + color: var(--text); + font-size: 0.92rem; + line-height: 1.45; + overflow-wrap: anywhere; +} + +.server-card__quickfact-value--map { + font-size: 0.98rem; + line-height: 1.5; + overflow-wrap: break-word; + word-break: normal; + hyphens: auto; +} + +.servers-empty { + margin: 0; + padding: 18px; + border: 1px dashed rgba(159, 168, 141, 0.24); + border-radius: 18px; + color: var(--muted); + text-align: center; +} + +.clans-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); + gap: 20px; +} + +.clan-card { + position: relative; + overflow: hidden; + display: grid; + gap: 18px; + padding: 22px; + border: 1px solid rgba(159, 168, 141, 0.18); + border-radius: 22px; + background: + linear-gradient(180deg, rgba(28, 34, 25, 0.94), rgba(15, 18, 13, 0.98)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.03), + var(--shadow-soft); +} + +.clan-card::before { + content: ""; + position: absolute; + inset: 0 0 auto; + height: 1px; + background: linear-gradient(90deg, rgba(210, 182, 118, 0.4), transparent 68%); + pointer-events: none; +} + +.clan-card__brand { + display: grid; + grid-template-columns: minmax(92px, 112px) minmax(0, 1fr); + align-items: center; + gap: 18px; +} + +.clan-card__logo { + min-height: 92px; + padding: 12px; + display: grid; + place-items: center; + border: 1px dashed rgba(183, 201, 125, 0.3); + border-radius: 18px; + background: linear-gradient(180deg, rgba(19, 24, 16, 0.82), rgba(10, 13, 9, 0.66)); +} + +.clan-card__logo--wide { + padding-inline: 8px; +} + +.clan-card__logo--shield { + padding-inline: 18px; +} + +.clan-card__logo img { + width: auto; + height: auto; + max-width: 100%; + max-height: 84px; + object-fit: contain; +} + +.clan-card__logo-placeholder { + width: 100%; + min-height: 84px; + display: grid; + place-items: center; + border: 1px dashed rgba(210, 182, 118, 0.22); + border-radius: 14px; + background: + linear-gradient(180deg, rgba(28, 32, 24, 0.88), rgba(12, 15, 11, 0.7)), + repeating-linear-gradient( + 135deg, + rgba(255, 255, 255, 0.02) 0, + rgba(255, 255, 255, 0.02) 10px, + transparent 10px, + transparent 20px + ); + color: var(--accent-warm); + font-size: 0.88rem; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; +} + +.clan-card__copy { + display: grid; + gap: 8px; +} + +.clan-card__eyebrow { + margin: 0; + color: var(--accent-warm); + font-size: 0.68rem; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +.clan-card__copy h3, +.clan-card__copy p { + margin: 0; +} + +.clan-card__copy h3 { + font-size: 1.08rem; + line-height: 1.4; +} + +.clan-card__copy p:last-child { + color: var(--text-soft); + line-height: 1.65; +} + +.clan-card__link { + width: fit-content; + min-width: 180px; +} + +.server-action-link--disabled { + border-color: rgba(159, 168, 141, 0.18); + background: linear-gradient(180deg, rgba(42, 46, 39, 0.5), rgba(19, 22, 17, 0.7)); + color: var(--muted); + cursor: default; + pointer-events: none; +} + +@media (max-width: 1120px) { + .hero__brand { + grid-template-columns: 1fr; + justify-items: center; + gap: 24px; + } + + .hero__copy { + justify-items: center; + text-align: center; + } + + .hero__actions { + justify-content: center; + } + + .servers-grid--section { + grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); + } +} + +@media (max-width: 760px) { + .servers-grid, + .servers-grid--section, + .clans-grid { + grid-template-columns: 1fr; + } +} + +@media (max-width: 640px) { + .page-shell { + padding: 18px 14px 40px; + } + + .hero__content { + padding: 42px 18px 48px; + } + + .panel { + padding: 24px 16px; + } + + .hero__content::before { + inset: 24px 24px auto; + height: 110px; + } + + .hero__text { + font-size: 0.98rem; + } + + .logo-frame { + min-height: 180px; + padding: 16px 18px; + } + + .logo-frame__image { + max-height: 180px; + } + + h1 { + max-width: 11ch; + font-size: clamp(2.2rem, 10vw, 3.2rem); + } + + .hero__actions { + width: 100%; + justify-content: center; + } + + .discord-button { + width: 100%; + } + + .secondary-button { + width: 100%; + } + + .content { + margin-top: 18px; + gap: 18px; + } + + .panel__header--servers, + .server-card__top { + flex-direction: column; + align-items: flex-start; + } + + .server-state { + min-width: 0; + } + + .server-card__status-column { + width: 100%; + justify-items: start; + min-width: 0; + } + + .server-card__population { + min-width: 0; + } + + .server-card__actions { + justify-content: flex-start; + } + + .server-card__quickfacts { + grid-template-columns: 1fr; + } + + .server-card__bottom { + grid-template-columns: 1fr; + } + + .clan-card__brand { + grid-template-columns: 1fr; + justify-items: start; + } + + .clan-card__logo { + width: 100%; + } + + .clan-card__link { + width: 100%; + } + + .panel::before { + left: 16px; + } + + .video-wrapper { + padding: 6px; + } + + .servers-grid { + grid-template-columns: 1fr; + } +} diff --git a/frontend/assets/img/.gitkeep b/frontend/assets/img/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/assets/img/.gitkeep @@ -0,0 +1 @@ + diff --git a/frontend/assets/img/clans/250hispania-shield.png b/frontend/assets/img/clans/250hispania-shield.png new file mode 100644 index 0000000000000000000000000000000000000000..a7adf088faa976932a0c501dadee7c188a625246 GIT binary patch literal 8421 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 literal 0 HcmV?d00001 diff --git a/frontend/assets/img/clans/7dv.png b/frontend/assets/img/clans/7dv.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4595d82c3fe438269a38b2f645b1dbe8dbe4ff GIT binary patch literal 1060870 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

}faR5= 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 z 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≧EO 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 SAFBMXLhXGwndzBrul45r5!AB`9A0cW&FdA{cK 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�ErUgx%8db+7V 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 z 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%0AF6Efb=?FpDm%E3{dDYfGKum*ty# zH-~S?j<7QIp|C;GR&-Omj=w8P6IfUzA+FmCY1-m{x5giHsUFGb98yXs=LM%Cxs~A5 z&S*KYtk9TW^bQ+@?2-X$#04;(ZE>dzNX_^1mW%TICPH}62@Y{!#NEC@cOnh7#+n90O z0n|&4xp=92#EOInciyQ53(%mAfbC~%UfF1A4}{f~BnT*&GXu6rjW}}XLzfqOQ@3BT zcP}*my7?oe-dW$<8lc}UEvvFjy6v|eC-hmeT9tZvP#jVgWv1jo@rHuux^pdw=3P#~ zOXEH7hfH1;_#Y1Yo?t&dpLvhIM@_Q?0q!ILh=p+S7ww$J)>hfxX>%?ja~$P@TLwCW z&EE6R&w$#1z3(BHd^h8>(_bKKzPDmsAZ0&kL3JA2%ra!BtdDY8?ts-fX|Un5pKtg! zelFFX;E>A--Ix@=Ci@sV@+q;wuG&q>DB**(WN9afYUbge*pR#KE#^(BCLz;llQI_j z;ZjN;Q3{5kL5;*!?X2k#yyIZbWM2L>@uG}jU7Ov3pS;0z+Fw|&v44HBbzVc{=1mcF z;=4B$EUC7y?gX;7$;)|Lq*DvHr5}1|K9xS%130(P*LGk(pl@Jc)*grp{;=h}N@Wk! z&;H}6OtAU-pz%fFugn=?R{o&>ir~X;?YT?S6IjT<{z_;3_PE4Ng#3`Dj?sO9BZoDw z;Nc(UbWa$*R>u3y!@NBjZg~PNbxb;m({){|yma%Nn>ZexNZYSP8_WJJ9e-$Z`Jx-N zJ5}-f9Cd(yiWN5khbLj7y}H7KcD#lV35(7~zYV2JBM=XstTBEe_I*LnQLVq6PfdhsiaiAOLhGEjCqmtC&l2J; zV}L{Gy8`eH<$k_5hFpU1$l#X{=+w%PNYF!O_sjduVe*%KvAsc5cGGrIDv$>7rh{MK zb8Ao_;3B@4%O(HmbI*gJCa2V_v2EMUzw0HRku490gnB*4Dnn4g-PgS_>#ut&^Z@6$ zru{PVv(Ik)(&YohzdS!ToRLPCd7*WBf@=o0rltl4xPATWu@)e0rTwh2`Zs(|GK`mK zS8W=<*CUR8AyUZ{DFnniDsQ@@N`+i&PnIft3KG=I;rN({+?4uz@CyMV@)h66(d$Wp z)a`g=qN&b!H5H7l6;ZtGwJ%(nMr~a|5sPeXJ=u2g)5ooe!WUt-Rjx2&a(m4yVfrzJ z|2VI!N8cjK5zgL*+a92hpkxxK_K>@t^8mo;{py*4|5R2b;{qqK*Y(Z>8);Ly0`L*1!rj%tOTgeIOs(?$!W7Y~f7DbRN_woiedtzd6f+YqXx#k1? zCeY}Vr>d(go6Du85}7M=_r?H@=obTRhT5mA=Sghdi3_7%o!@h>g=uj+b+Abi0s~S< z)jwR?b}4#E?F`iXctA zw?dve83t2n@QxEl8%}bF)DOS@Jp}}cFGRm1)Vz|RO`F~R2TO7xP}M$u$o=`=wYqxP z`>BzM^BG9dy<_Y7=XNv>{filpw)uFvS+ohM8edLr^NJh6aXrZ=UF)b2t8qc$p>Z76 zg2(l#pqx(H7%VfskjV&1^W$(DfdGbwK&Dcmq643Zd*xp z?Jf8U<|(@sSs5uFjeLUr|InbF^*)pKCKHYgK6P_Njp{r_d(fE?m|eBvu#-vv|*V&fTK{)-gzWTPk7jf%I)Q6x}5X`jea zkaA3euCxh@SvGAb+8lCOP9>Ln7YE|ZMj^=3aGN(TW3`y!t zH77p>9vHE(vt#>*`y&#dKZ@s+$I)vj6r~SEP?UMpm$8&z4`GSxw-nswJ4RO2<)dqu zumC0H@U>*!UP6rwJU;OK>W{`oX(NQZ8mgJkMb-3N`y@2tXuf`hMYw>~Mwy~OXr6&y zwj4z$gUPnBNLj(iZ@h?snNwPdp~|9h_4mnFVOcnz0#gSVZ>z9{BQ{n`LciOS;>}E6 zSH4@=T$@EX1Y7p~i@!sxZnnK}a{OI0qh9;Y^YYq=&D~M%w8J#Z#xXh>TlUyE2H_H2 z<_8B#GFFzl@!N)RvgsKQ3|8@J7U+m@hOBWT_4v5!kDUV4$E6=^IA{duVJYmlD%_exG znvnnN_Uan?5Zwhm!G^k**(NrhwH)L?0wek@fzA$41sJf<0FsY)SDHb0&h7_W5?-vg z2du1rOY^@djXypTuQJT?SXx>}1d6?<;LMn(BNe`f7rUP54K5+C?&jr>|0~u@L8wZKfHcTPNJ8g*)xM3#)L8mhKh$<1HfBblXM zuM{_Ts^r8*X?6ef-z*u&E+E?H-r6Sov;lazJZucrDc~8b%Adu|3W++AE-@Gt81lOD zdie8K#4;b#@O#%?Gd+^1&szvY#d`DJI?J-z>r)*G%I*}mI?awJ>adIBdvGLeDpNAp z;WQ#s_5~^7hqo_rAJ4YK-j7vN?>er)45h4lNID`MGx&c~3=M_WhmL%&gH)T<1 zF_Qv*=Hv5p*Tw)qjXocQ=C zHAxb^$69O*X7TZq z@`h3@d1lx=6s{}LHB&kx4?At0=RA17AHCZr)u+p@XPNjVP%jM5k^Q}+2gqEBAG;= zt+`K$vh_ZjeGIyykU{7BFl6XAG+b~PlFv6f4mdGj-?ve1{XMx(k>MV;_!g9nRZ zAm#8<%befiRtp(sVq^K*xnBF*0ae&7tbhDW0T#Lk-jhI^UFBhoAvY_s!yDE%|N14j zMtyNuLb-p;&oY7X?D=|Hv$R?k2HjCZ-I&hW0i}^3?)Ebk2*iGl6AR%NhvUS1TUio9 z$7x(;j-gMs*XtB);+-v{=;P7xx`dXDvB;_){lC3Gf5YE)Q|jB?e}=Me%_`RKT}{+e zf!=T78dM6H6xU{EHfw>UveOjV`%;$rE_sEo*PjRpXl>KYbLffDmkfv$&Zpt?LO(lq zBTEec^lSF}zSl#@4CLwhY8lnY@1kIy=|Vde1Fj4rxJ6}Kq=U@paxpXVa31t;{dpqj zMq=YOp{-PT&~wQo9!mQi*AY8yR%w`al~`@2NlT-kOv)zyWO(LGIG*UGFWsY0lSF2F z(ROpWUvs(MHDRW+=qSc@pzZAlcH?Hsb5_`8;;t|Cyz4>rVYnwKLN>V)F6NRjod*8& zVmK9%`G8qB=`+qLUXu@aR*Q4`Zx4l0SuI<6wSt=b3fooA-gu{kgRSCfC|L49fMJ%G zf)mArfWcB8EK4ad0W|OOIHf(5NWNsdIXe(e3W##KY0`gMAQEL@1Yg3IV{7qJs$+%9 zc^mN4^9{h+LPBS=Xa@WM6TPvDzKVeVwSM5K)LRU|=nGQe%pN6f&e;;yA@SEwtqhrY z{N{^28dv;XfopAOfmi2==t&!ab%D#H`G-(47tC5*-7mU=&RX>yn&OHc{fftivFE7x zQg?%ro5d+({?X?2ynvSL!!eZ+f+waF_AW%znY59w*BG0a?x4>L8SuaQvvL;aAf=@w zo3%}Fl|h-}A5fZXbEia_x_^3HD{N2kP%iE%c#xzKT$xZ%W#;JgH`N%O8iXendGLTz zS|s|5Xc_188U))ovBTZ!ZO%(OGU;X*^Qci~ara555U^`X&XBg|Ti}bLsl47>c6H3j zGPP!JI4?*nXIllY zGGWs|xvyKwre=ANel zVG(IP8rId>RFXV4`Zx5=19jz+F zpXqsTvVMJiI_Hn^lky{4pO2kFWT@C?#gNcW(@VvU$`;n`-X=T$ve_FTpzAD9Nb20F zPGhh=kuxTZL=lfz1FSOs9p^;6mRJPboXD=W!2Cg>tV`a>!#aJ4pdAaj;b>D;s84Wk^fJbe@%l zKuP?-aACmt5jDC(L)j-H#*kWt%d*&Si`VO71=t%FYgsu zSUu|xePWtokjVaKS7K`7nzt0!!EUycGgtP?9l=nR1pgFUGD92gID_Cyk>qD&w@H5a z7(s^^bY}=H4&SHWh>b7vMB6~54+*}%1OFAsfM$K4tH@rojo)7^=L0u@%=<4!xgoBQ z_01hX8bt#dK3n(ecukL*9(S7r^OvLz$h@Xk{4Vw~H@&`l_YycqvN=lrHWRcr1{Xz` zDCc-v9ov3FoC6VtvYh*mU|#N!ot&_R{;^?N%&ee=RV-!Cq&1S_N=A?!AZQ$rt z^0q329xETpO&)1CZd==${O-=YPUk%*T?8xu$WSAnVPYQF?|D@3n}e04$#Dc?P9aM8 zCIpoN;W6FbE4+_BJ0IA353uVy_L%-(u3jEe1hE zMperp-`DqZe*sp3Le)X1TlXJj*Z$3(ukIYXc{UF1XCi|82JmS#HI+8idzPuT!5zmV z9yhgzG#*`i&bqn|V5i)NwVuM^HcZMd{JGMU@KuiDCCQY;zUu=y^xJDEgp-gtbtZN& zh)mMvDeI}zX~jFhhICSZj(ytFnOCB#5A{=XK4(g9^p#|y^%Be;X)LZ!3V)Rz^KR(EnavXGxAQRSkE6=kp1*M8VNu zSVgSH--}*KDm3@0w-wKKe7uQW=J?1|`@0T;)St;J^HJ@DF!3U{NH@l~2c-nFlkTwV z-+GS$Hg^#Jetr; zYiUo~=ry~U{k+^?{63CXAoMkE1XEP0fq$zTddID|91HTD8BOB^VIvRY?PjSh`EN2i zZFL^kZ&!t>;tcWx3)n|xeb?k6f69N8H}b<~wsdAt&8bkTj!v7@b`Sf+kFJfxsxV^^ z;ojKZ*njlM^ah1Iqn-Pl`#n60+_iXK8QA}4L|$Dbwk`PUPlz$=` z368Ql?)4+wf4|h;>j%hXZ{Le|NwcsBnS$==CRA9+Gs+-9YWtSRkrYf@5gDQn}G^3EQDIica}7ztMgZ%^Qp@vP&SY1C+`l6imFj0qoRAdFd%tB2XC2dRFzLqC0U&Ub^ei85N~G%F;^CieL;PuqtGKqtdRC zb#){}f{ltk*2mL0GP5H|MejWn!Kf^V=kqVNEZ*C7a&(3S@0~-T&H73pGwY*S`czI^ zCU_qp$!;Y~?sm6oa9Zg&m@jXlW~%SzkMI3Pvl1k+so$EvIkupeCrPZT z+==g5R?epGGP!t(LB{ z!ile3arpw+wdolOr8DwE z1mCM>7UBk;5xYc5v4tIb9FRg-6y-G)^~YStn;k$6Df6%`=CV^G=K`|4`KOmn9F z89q~if-SXqSPuM=>+F85bMFyrtKRSWqpseVHxBZVqU=q45k*x@rU+uB#P_@a>WrvK0*%rKd0W5yCwEa|KfH8n|(d&aaGB8qz1l^2Tj_ts&9= zp*tnOc4Ii3(kTaW%>)W}cv`hW5{VH$F9ny^M~5)RD{zH!&dbLxSG!3XR+Jle)#oON zeLBY+);l!Z+PR|v$t#C8C@!iLY*kfax?Ufc`nwR8uCbvg+Y98;&*SMJul@%M2P(Sx zEG#TvaI&e4s9S1WJ-hp8KxKGU8o+2S2j%Z){!gt7H8WBmGxJX?2r-xNIJmuD&wD^i zkH3!+%a>$r8Lx?^nXQIst;Q#?jY40Ih;;h zYsThFBR02i5(d7#K=0n|`TmlSBiB30qL-bGO*Vi(!i~S1@rSRUjvNo4r&M!|Io6t5UAi6Ur^S|ov^?rE8>-L=(%ex!XRi=;BB=KS|Zap%`3XlH-? z(zWDR1*>K#ODNM7PdEh@)Cs1DrDjpjal`o?&EjeX<*K%w6(>7zoUw+mee^piV-aN! zn2Vpq;&(kHTfbhGrm&aa(}bN;oq^rN`Mr$KRk}6!{1iW^Mk3n9je3B8H!ta6Uc<4A zEMZQKTyV#`wc2uv_}=6}mk%ObK+)P3Lu#wt!UjyEsE z`Z=E6U1G4ZrO5h=vAide_gtjN4&6(~r=ypPe@sfr`4MfGEi~=6HnHxG0%W?hg3MPvBf>F16;Of-rOf}+~hLfxV zj>a{Wm>ypaF2X5JWy0WRwJJrs#w2;1Ms-^MO+me*`j}}CLho5>!Fk>rf-G$8ZubYA z8ikNculuQ+)7r!`>QI5Gk%G^EM`tPlc|aztaX}rsm+?}QtZd<9}3S=HUIG2ucVsebl z%*i@NbPKAhI}V3)SAs4hgkP@JGg29)dw89aL%4@Ev=dmy)R{O)F@QLhF?*_Ktv80* zjy~{h2^nA_4g6?r9sV+1$$~D+SY1TOa>Gb3(`B7mjy0v=H@Bh#f%5HTpJA@^Hm@`t zb<&N|d`-R$559|rdw;+6UThRdEI`~A(wAHp7IdMvZGHKwFRws_V#I0SvgV6Am57yxLio1uSn>{P0@C6L8 z!l40xYVUKtsEee~OwG>LADobcdfPCM$}gb%dc;J8+PzcI=(K7X&T=}vS6s68X|f0m z$UD0CD703yqr>t;p$v~-!s_HZb-1X`j>@&X;3w@!-8nY4z7v2tK6k=0m1`-EcP#kq z^>LqTdTrWYyQKccDuc2ppAMHToV+}>))eHl!sZb)VC~jfl~y-K;8a*0lkC0mi3LO9 zE;KSG&+0yjqG!*bF0k6rOF0J4dORsAY@Yj0jVeX%h^_1Ssp@( zIdtsC=jqIwT)Ce&Vq-0ZKSv)W@$v1V%sow;g%>ur7Rrft;v?*1IH9DZj>=^8p;&{AXR9cyIPz`XX@Az)SXFwR6<0b zST-LQ+wT7nh(Unt1uur^D~+W(cQ!7og%Kn2G*PJ@DU0ir;Qqxhe|Pp$&zWcU^HI%m z(9DG1B62j}_4}@DEoD?y?%fhKWyV1VlCeW5Ef;t(e41Mq#0M0!2QnlACK)io{(^Ed_1`D5Bb=k0z1aM-AvYA z3E4Lb|6V+wM!jaI0_oGjufCS^7riI06J$i4{hd-NxK$cP(d$ z^2~dK?yU@4@AZt>DEDnzzrDWv2kQoMj=9ES+W@O~w?elkhncM}XW&b6Gm897w=7Y1 z7grF?bZJ`JfMMV+-k*msvHsFT5pj|FCLJ6}>nUltH74a#yCXH6&=#E*S)gh2ZhQ^$ zW5z~0Mc>Y3h6KQ}rK_Vf;4TuMn#fsPi4$zJ#zwcMQ8rSU&C4ZP9x8yO{uQ7S$P9PUako{|?`b#Sc znab>Tb^k8@Jif=D*e}pwNHBdeXww0*Hcqa_nZV>Xxwy$Y3@8}C{)?tx&4`XqP0K=5 z#%VvWBmly*727rF3cMldXS`hIBR;g@%|m}1S=rSj%(ZZW3u(Jwoi(k(MC^u^^Lm3^ zb^NP}vKr1;e}7!FV^a}Zd+vEK;#@${7+&`5Y|EMZO#8KrMq{`UWXJ1BpDV4)4>JvZ z`w3Y)aQ0S5HSiR`&yiN!H)ty(Jd^F%b9UNGb}mhu68?1eFIJ;EUf3I%zyL|3TZWAO z+ouWrjeOidO)0KIT1Vs0=U*x-+P#E=4w{7_0^OCZ7yJ1obL-u?%4Pup`9fUZy42d- zmpW`4j_9xe=_f2%cc5tL(iLCVVAcy#&J%N#m{qW zPmlPA2k?akno|VUYMdUwVh|n4io=$3^>r>x@SP++{`ZIlLqGgXg8Nt9zLdM(yB9;R z6-yxX9sm@D$@esaE*R;yg_<|){o`DS(X@?@*6llP zACCp^o}m@2?X?1fGU{74p$$&H0VHXsw}@(L)@PEjreC&kGLDyjSYu`yc@b?s?*-&N z5D6Pp!YfqI{+Bm&T#DG!FNiKcrQDJ#4d78whC^llc7tV=NH&FK+DH~9uGZMjQ&i2A zKpvD3_8#+UIt=py!0ke>xmBBb0f6=X$!1?+O+#m7u2W}pO?_vK14j`dNH>>bZ9l;$ z%D~oV&o;+xH(ht;7&*kTVaXhL4LVuv%G|;$oq>1MXvz3e4q_=r|MxYGH++l1J`uGb z(z*DBdDiUFaoJq zme>Q>{r>lcX!iG5EiS&A7@=u$r@Fpgh_8?)~( z9|-(cT%})9x#AYP(KK{l(C*%4buP}q{d0HYNBc!zr#23uW7*=SGrNB{@W~h+Rt168 z)pvh=qaX`XG3Y_Ydq5h>QSNSo-r%iQgy>Vky64i>OKSrG3{mx z=3f=*L%yw|^@4HMj&nYnZC_?>j}+!+kak8Q3FR$_pP|ySSD>%nC#{V={}CmDc6Ggi zvsuahoDjEldS%guI3%pU_$@iFc)Wx^gfE|5=FV0zR^8(+2y!6&62WxETtSo2 zrRm2i_j9mB)M>9Ud*#1r2zlkFi(H~Ec2C>9_=mBM^_#+Ry@KkKG+rM0|B-Z#(Q&q2 z6poF?P8z$hZ8f%SH+C8{P8v71ZQE|p*tV02^F8nSe$JXdv)0Vq&$;*6``R72Nr6g< zi@23_va0qrf!Xa1EiPb2?xyIFmp(XH_7Gr+5oRa1o%7{$a#A4-XUf>IU-)@v&9sMs zv{8|xA4~oc2Dh;ZgSqkzP-5f!`Ht!|fXwAQgq2zs@F|GG@BMqhBA#CsDT-Z27v(1a zP9kb)ThwI=a-HzjF?AEOFw9;%q2KzY?%&}5Rn;HC6mwdRua{kZ#bd{7{c(6{o+NX^ z@qN+pzvLzwvG+D9OqUC-RP1Jd;41tZezD8u;Hba4`o34U2z<8v3IpqU)}4Gx6GxC( zZmiv4zL^JSxz0$+%0poi`aLAUgZy0^aQtshNc%Y5RX94#!t2lF0MP+5bV)KRM3t+_dxgvE`a; z^N#pGTTqHS;|TFz)ys(X>e=BIN?~wHdo=Uf10FCw%J>;^{JmlZdQx!)Y6_YDWTqZH z>GFKK%}KC?+@UgQQzxiwK6mkG1WJXSGzS+!7z#+2*K`#k+{?Sv=Q>cxG`~GB%HWLP zRf8+2a|I(?k8h0YvMp6H;AP(TdBSja`zJNcu&P5W0`7ew)&U1#dVSsc^xyn=^r&xa zq$rJlj!M_Hicnu@TBh!J%p928{pM;?W=pzPamJcpDwI`CuZJalWh%?Y@Y)3QZ78bjPg_Hsbi!i_hFPn6jZy{pJCX0QP&0?RghBSs~O zLVoRdW^Eb?JN5sH0ohO4!2P6K96~t%*A#&g>L|0v*-Rn$I`@Do2DeZ>7?#eT@&o8S zhx=t!8t{Rbvo}VKa?KU6E1>5)>;J9uT2v!eAj~6nV1|DKh9muz)CxVTQ9*=D_1Wa< z$IJ}gS~$dSpXFm%_POuYMQRzwnzG7a?ZIYb`8q?@R+)ZBgq(8922Fb3B&}64ej~9O zJdbP2dI{6&=b>lpigledO`Z+TdS)djV|iig3mnX3#{`uB;EZQvqD%v!woLqS^oX7k z?8pl4$r4(9t3tfV>B)9b@nmz|wHV1trK(*atf*s5PZ)L(t|fr7!syIM;&sL7AG~Cp z<~bScvpW-O@M-%DaCL+WwhMGDwwR%O@aA zKyH|iBkv;`sO>pWwg3ie4=3yReoMO8Y!hB{_#5GR6;341wKrBDtWZIMKGgP=(#~Gk zu5(yblaP-QqNvHte}AC$E1EABR?&d?KqD!!n2lz z17>wD3YHrUt(eRS^+Iq7G0Ouv0nc;U z623eZp?c}44_=@8xq;R;M@#pwTy`Ly=W!FE=o=&!7Hjl9?%^SlUygYg!#84NH~5Qy zZ9(Xi08Jw+l;VWls`_7jq9ib0UXygK#DD8mDo}Z(Vk7Rxyfo3NIlSR4`H-#k`8fwq z<;8Sz*w{F@F(Yc51yy~}irR?L|6rK}j$(diKwpKhtB9B&ce_(8qGvkdU2tKD*gkp2 zxnx8p@R+g=tXhrgZarvhf?7T}%cjS^!|-nVMj#UlK)!-h`U~^BOOZ)o5Ia$p*M|+( zZp_(~e&u3WN&MZ8!9LB}F6+u$ns9#j!!UDWp!zSCd`4i1TJT0$@QuD_;L2}T)%Py@ zmB-yPhFmdgdvKORBM!xDcb5A37N@)aee0QXVj@bC}2E0J=rFl~$>r=Ai$OitYSDboG&ugA>XEtFwq*<(jADLEexCnu|hzHyFQGtokH zRrM9!o+G)YP|$Eho{+TQZuLu}h;@`@MwiTqMwQ)z3cFi4T{Eq`l1^Q7b3c%}l4@No zaQixjB;sXbm{%o=7lU|-S?^!(p|w#!x5NWlcWK*;~!ZWe8;v&Avn>Fst7e5_G0qOsA~Mj_cqDq zdoJ|G`*~{U|9j?r?1;zTEV&)3fWbN;IBd|YRVAaaG=XL77|(B8HO~mNaMH7OjF0RX?@C; zxfJeGP~l+Ze<5IN(qn44cGrjGn&gU~-ui(RLG8?cpR&k#G}vsAL@N(ehB*?LhBp}S z;-QjF^w#2Q8*aILrBdYg51h4{9AD*?ip$Bp{n8mVlH6P*h<}SBr6ls5MLWD|3R^vr z9h)U~btxCC>5iM}=jbX=(jrv3dyjBv_)9ovI6}~_$x9Z6ys{1(VU=7ItNpGo>-TXL zZr>!Rz($rYgbhCPiz1F=rx>7>QCe(H|JAU+tMfW?usDjs))+$Px)6KYMdD_x_>w5l za!N3bCVJmJ-?Lh7gxqZ}cV;)?zyF!=ha65i~xo}haV zNt$A4P0snnAUgu$$TlfuuBN_Ry3+o=^cPay&V+T7lbQ!ium*mN1AiE!1TANiP`Y11 z-FtdN$o7z={h?M;wcp~qKOBOoou2K+GkHiKZ@zH*QL}7|JK^^%*XURmK_K;Z<_E%W z*S`POc75)r*t16Az27y3!MXwE3^G5A-EdogR>sotQ&FeXp+C_%w27Ww7~i{*ccTz| z(J_$OUO*eK#6!U@!j#nYjatSo++L&vv)SvGg9>%q5z_V9%_*Iyzd-lt63gVmmZW_j1qguB$e^F~A~V$Ubp zV|Nq=D@)P&EjVcP9|aZG9)7yLe>vgr7|5dQ&FxcReR(I@M9Or7O-sF$Cnc7$-si{# zE9_Jl2F43>FRyrXAdPenjw_L!HR;9J zEDtjR8122smi4}YEw9WmvuFg@!^FdnD}LdWqt1&g52rE8)Y^bg|5(Cj>~ba$7jc}f z)pZmthmmM+m~g@$T6*g;r*RA$MW$x;vm*hjM0jATUl>11w`^&ebcg5OICfE2H`9*G z<*zQ+9(}#{jslu4$oX$d408!_2!;F!ZIQiJOSV#@!(H6OJ;b4lEyvW0@3c>U4P9rx zpiNP!jdWFXT{@(!!n$TEe#57@!_z$ypIK%%<<2&mPhybQCW?{q@hdO4QU2Ox5LY0T z18gZafDMIo1zqBFZAkj`g`}>5B)t8@t&NU|8${)qK$nS)PfkO5*70J z#J0%*)oQ4pxtQ27T*Vh7)w*I<2tAp2E|elWUm$`-#!tuT-ajBDl%4-0>hj;&k zDOYI_&ilYw;m?F(WfjXYDl@*Qv{Jn3?si}Bn^4dFgzpJ3pF#>ffM5Ea5t(UIy~c6S zFuqV==1nbg{5)ZpSba6iFu1fN+nCf!Ot#S}x&Usfka2>1Y@lcvIAfiT)=98_rjO(!48E^ozV{-98G~$#MAz#gS*ra+6QMB~%!d z964j$bvy&NLOQcxz*K3bKEO^Fwn?OYZDgT2Q06^21qix;1Ew-dZ-8ek6I(*W3B}y* z+`oR{+2f1mKlH}MbQ6Bk8Ekmj#doJxs-NflQnoSj2fV577rXm6dqBWQ($pky)riB{ z$$G*$p>a63)Gr1UyG>b_RQOwasMYSzv8iZ;@HGb%Q*}M8v&CC9aq7zttJSZs%e%7} z;v>@Hgc*fu>U}`T<9~p9&*Qu>ovhU}__jPyHl4e_m1{_>fv%EGu>I0TaF(r2Fo%eu z_LUfgB($~5`tp=&hP0hc3BOmiDt12>2QijamA0N9_LDQ5nmO&mg9}X)a3M~Za+StG zn>QKZ&KlGt=Z*atuM_UhG$_q#&YHHJSy}Yuch|D4_OIs1wXGl2!F^Bb$}FjuY(OEhk5XO_T@Lmh(i63U8w&j7x|}wmP_9Mm@CV(1<~&a?+ljA z$Hqx{_*l!XYzqUfgfZjAB}fUmH_lm+^69xTeg8Q6Xfst*Ko^6vH4~BiQ#xx+I}$do z$`__>Ho0z(XWO%ar;kLv?enZP+9Ursv-#N0k(WlS;M%l7@8YjgFu2mQtidd>>gb{@H<2zrqIVop(;`O z+t)(%CntRGi=WSZCz_5RBWTHee8jeA2~};0)^O!vn=1lm+?lSc%nreO)GE^%%^Gh0 zR^=_JJ7gIqGa%q_g%1`MM&M3N54DQ$q|8_c=K9_9_3|9li@Y*Ty7TOa@ z1fq%98Vd@!(NTyK+(+aDl{BE@l6sZ7?wP?wCd6RM%ho-GkNvpMq+r(;h26)2x8+oDIkDjTM;7&_v-17n>QI@$)CEY(zYM{5i^#E}>s6ZUu7#(@e%? zirn&InQp=;EkT7|9BrtJFeA6!Ix*-itJ;bY3A`BXP0#)d%zuUIDhE7IgQ}hnn0w_E z9CP_2JU<_FO`WD8Q7U3`WsJtvE-bn5Oxx{=xg<^0RYip{>asU(#(7T(cxVJAV7tuLwre$j1#vp&IUh)Gr+`NGmSU(4#mkBs-=`cLEZk)<4B5L` zM6v6w{mgTKU^AqN7GYl0s%g4c-DJH{B+xgKVuT@|Uy^bP?NaRK<(E<;$FPTRAVtRTi-6A&0IJYvjNqsse{P*!tExmR zZt0p1xTg~o-P|W%2(ZSiM4)Pp22f{3?7+JO2rO@`R0{!pnttEOgKG+ z1d?4nXc_93q&@ zDao?d)?Vd>uYg%V_UjZZ3r499b({Gn2)xRkuO!)K)jN%ovnQ z`runc7eF%U=&nYr*suZC)<7*nB@3^yTI{IZFLmsK=xh0}uUaXTaD@RCQ2p$1wb}`% zYV%aPo!(=odqbKLuZbe6YLsp~q%tv$_$YHL#gBk!1JHk8`#j>Q-ct}|-=YHRBxNn# zxj&us>S`NP%{y=oAXD|JX7-xL!jqE|-yR0Sy!K~bpBGy$5BRp;cwtF|dY#OZZ<6p2I+8KESDHL(tUr$4-aRl@H|`vUbe-tN9;<6M<)vL` zwy4&`;AlvCzcW=vw1=SF7w~+%fwzMiHUjM_d3C3x_>{F4p{Y0V|{L&8%#hMQX zK^GZ$pr-X$a*^MDQQh1wxZ$q8qGR5qqmgV5PbU(u{DmV1QZ*VLFGN@rhIM^^Gup$q z#AP~rQRjW6;Zg84^K}zENWFUI=)H5E$5PQ&;LOW^=IUAC!Da_QC#LBwhC_BLK+p-?2V9Gt*!`K{dV65N4o=R8oM$xjZIc$Qi=%UPniyLy%dK zzF8%cAWg*JcJZWz2}DOJQ}u=)xH_}9-cUcAPV(gC3hlhilY81O6jBtCaFOc|KgE@; z+RScr^p5fCYDVrGmyg?yHNd#Fg{lVQg`$*0CsnBxsDjpL(8*0~PP19$-yh!I_y~+fhcN$MvOPS(`a&Bx+KwQea9*CXB;WsUzQ7H>NzgTkLi> zB|q3cD%)oipO|xy8zFsJU?c~3rt3siXyj)i%H(u*)ob89og$T2g&(A!IG>C*OA@oU zNinCX8Lf|Im#4i$fMDkAQf@lhPWuJ5X1Z4u%$@zFSZWHar7V}GU7R$GlS@Wr+uy&b z=e|y?69$7NY@mV^+iKJ3*wJE<&#j|GzAojK9f_lR;HL15#F89#zjja7e7pusEL{bF zIbv}Gq%>1E^U!*R&|O~W^Z%)_uCw7=yB1mVr_M0B1HQ zKz0lU@F;;b2Q`Y|#P|({?~aS%e%~v}ejjXi>|IJdUC~8i)N!$Xy@@dA=<`3r=a&5e z@GIXX)OzbXGV4{!NSnZtd4f^=Do)y4N8jH*KSIi5d4SM9Xv)hpOWTK;W zEQrj$?amq)H>Q9gC~9jT;&1`G27ib5yP4ld6=o~H6-vTD>GhT2qDqfbv7A;#5PP+2 zG1`WP)Uh3y8X;;`jLrz<;|UbBvVBHLY%Q%{eYCaFB=+2}XlXUnB8N%(nutsQ$H-vb zq>OUA%+I6t4M+Qe4K>N?X2Sxz9Zd6IKe8#%VC>Uyk_ymcYU2%D67tL!&hqPc3Jq!8KX6s1zES72RK%)3`B@}%M89oqE=9U>ynw5ZG?&xO5NM_X;~Vc2Ul}O+iizdDz_5-mg<=1 zr!!kdxaO^slAs?wPdcc{hmBQ=p8rP8;wJ&Eu6$Sr> zsxob8q<9D_pV#av;*Rf&=hi(;01WKj_xFs?JTqR-^dx4EpPZgK3mfX(m1@rfF>|5; zZsR}c>#~a#MpB@I?cf4s$XxBD=l`Uo2{tq|0EqFr*4EM8Ies=aw#g}`xtx>Q+S=Z? zbAGmW9t(@ZKWP_#FQ|Yw&?Mr`c>0TNtIU(&<>l~Jz&g>XMCAn@rT>zJJAQ?PQX-p$ zxghFJ@ZZ!~0u@$!sdK{u?aaGGLjPY!(rSVvWE1DWbHszfqOL?nbSxE5-th!B?a!AL(Y7?(9+0yfR*I^?&p znRe%GDiP`5F;tnBw35x(LbJ%*ntUOWRvFa^?YxxQ&a`Q+S{Zv;oz-+w2MiGkN}C+sRMhq+n>jx)D#8}i+X0WLejoJj3KRdl|6qheEH#C! z_11}6p_ho`@Nz?E*k8+o$!TM4h>+;8;Gfji?%NNxp2iT}Agtnw>drWlT5*;QCZR11ohW7^!Cn8r2m|OGY-o8NC~M>e_k*v!>pea(w^RZaw&u zI_F@IKYWH|&060{I#;Ap!sgu%7i?_gQuB!{@fA(#2-$ngm zm;aNIW9;UZ{18u0l5+2TCvG*~ODMC80z|{#O19qQ9a=AWo9);7OY!4f`SMS81iE?e zzU`b+Z>Kp~tmfP9KH)c3>#i;4mhIk7FdYGQ`MpP`&7br2{!yZf4wzAkeJe=dtY^V- zpV{Vk@$vh;Z@yt&N8KUR*`ASmBXO$g&@L`6F~^41(91Ij##;bLni(HEkoom*y7b7O zl&YAy_{z9k$^$#FP<8g~T!Uj!|Kg9qd4PB!=?e!t`m;^Tw z%BT-RLZ-n{c2Q7jq@TGI8mTL_eY^ep5yhuF9oo``D;`Q%9;8ZSEcA6vs79g_kveT} z^`g#cY}bIcR1f{O8es{AWFj)8DJhHiIG5VVoNUF2LyO$`yp#N8A(-TJ%Z5o!7T&BS z6nOEwN0nQmRk_GJym6m&oE%rOn6+4TDubQDHu6%J@}rRBfJ>>6*xuTU@y9;?H9m6< z+aWqXRW4FBjgyu!30<7B0JddwJ#$Ym;*1Z^Qr8YowxDO=!9f9`p;vZ21D-i#Jp(z@ zpd(Er#F?yy<}U#0kz#J9J)2~O0!tp5pW7H)Up{O{K>ct<)9Y=4(=1~QSnrdZHV3)0bAM;?}kI;_4K&CGkSwdu<=2r~kkCUSB9QQWapO|PFCboVJ5 zU(mi-UMH8-ld3*|*5S{;<2`(SnAS_`LW|M%2tUKISL;$}aX+3jk!JRDT$Xm(h_8hnH|O*ULyls1XY3t5*ES+}I^ov@DiNi-SN%+~gal zld=ttDBK@Vj~Rh%60n+H;;I5GiT~@pVM9V;48>vtvHC*S)J#L2hH#}nx^C4thfB1h zN>fiLF?PBd$Q^q^!Qyq0W~gQ4<`)7|x$0`>6t1WfzvxuGQv64etQ>U+RsGa zjz#{z3lHUJ=~BeLA%JUPZ~eK&kTQnvi7ugiqqMLdy5rH#;y?e+a$PXHJP$y2Gz{1l z(a>DNMOr+0REgxL=7hH`a3l8HXAyjfkGnZt>P}z5n=GdOqR@t?Lb$`^30ulF!su~Ki2IE)KWYrGUK=-E{iwLP$ElLHC695n0olqbE8 z^m~Cb%=7)sa3tV`=`#&={nm%j#~5!m^>~L)DlNHH`o=Ke%y071;(3SU86F!4hqjzl zIVmzx>rBOyHq_?Q0IUSRq|YnKEB?%o)Fh#aNjG)WYT#19XSvZj9?(gK{?uVh$Ui?W zM?7?q!j+0nS%)lS)zsYH&nv3t!!FiCo7n zw3f|20zv{rZ!0Z*}W=q*S$cw?JBFVy3Pbt zIQoA5*fSHhSIr8S-zmw2Z|b|FACIQsaP^_pPEp3>(ZQ=9XQhK>aOKU#8XlBqCLy?) zXdIFKAF^VLw z1GM8jXfb$6T-hkeO3Xl(s{r2>IxN;?e6Btn3m5$myQQJk8pCILOD-N&B(=YCO6ouA z3O2G>(_(G;`{IkOTGEa-HlYw;4rew3ypGBL)MJSR#sQ&Ro5w%s-+!-!W{(-v)g|&( z_^~l;z1ty+?1dLj>|R$O8uxMq(MifU8ndBri_exzRJ94rE6+gkR)nE5e~rr<_a+~0 zPfs)n;(=eZv z`A5&$jpx1$EFQj>tW*5_k6z2lG4jKVLQZyMWs;fM8mcco6t`+dwNAM4TRN@^VWmdRy2gTHu(ig?9=5VxIv}7>zU;yxGs9mxpPHd`J$nziFW`^^>1<# zwA}2+hhyMLs@vjl)af#_2jC-(M`HEuHapWoi@aXm1$ADP*qH8#%Qy%uN$>b^G=8Fw ztEcce8F<@dpls4dD&_n;nK7y|H}?b6;G~Fhe9_gV@QhWG@6oto)J{vJfX|A>ec>lj z#tgboqv?Bwa2j+LXN;tX>P<+6uJM1Uc)nBo#8co8`^(F0&W^u>iwKJ?!V{nqerbnn zZHl=zV~!y3W-(Hl^cYsA5P>0=j$7h3sY>Ky zH#iei{Vlza8;4a|!B{_Z2~Aynw~I28VqWRLqY2B~I!NOe1$>b(f}MI@bIMQjRX+jD zav2)--W0xvwh14&`)Xl7wcFxD0m?5Y!VkgH*1K@K(utD4RJ<&3u>a&_4N!>aQFEGk zDQI9%GTQC79cAx5-C)pQvG8$?0F>3Z|0)LR>g&gAfSxTbFySt=osnH{%gz%2Oyw#r zX#xmOQ>3lum-qAKwwQ8PZbW?WHl;a|Zln#;(A$1VK*>>?%1bk zmp1xnH9%hhr0>mL%gs^Fhpkg>cM1zI?rNm>eKnog^xC|MZE*tZc@4l#XRaT@+_>%i zvFAXHF`LVKhKQCDDkhy6W z$3T*6y6kqT;lD4nIW@KQfbD+C8&*^_MMHM0ELq4WJ`3~UsKDXYy@@(&fJRNEcOa91 zvgUriWB4)g8C6l;ogVPa^nr>($Sn+PYTMbYs>W_fsZp5jGI~CA?biIi0pTZI>BRI{ z{g!W)O4Ly%Vo)nMoewrtR#iE_jT*-i3yen`m{xwP`Hu~k5+lurHegJ( zvJ`KondM?6_aimbgH~wKfc5G&Aa^j2f|!C59Wos#6QV4a>YDsD=KFg#&yr}K|z#@ zf&f%q*U;W)Szcv!;ULGydiXE7-%`o@+hm1d9Q)uy`CSHj36H;&2pXM6PGTRA$Gcia z@Un3u!l(HEy)H`&-ws#W|Ay$SrZulxr=}b}>cq&;gImc)82)t!5T4?QJR>c$y?#lN z_$B#Vb%!MS!i^xVrFbefQbJ z37tg=Kbu!o*o{8f|KTH_IX*7m08_lyuK0AT`gJVL_xACO6Y8&S&DwFpDyRbcxKa*F zeDLnxw7vWDyP)}N6Ec|7FvATD&ca8pHJH(hQ3=7rKq<9sm1oA0%9=)sIV2hTJ(4cp zgJoD?Pw5S+{&QTSaw(g9P{fi?Tos+3`WL(*ET*ocB}0(+H?L>&OqWfA<_rF?=QN)7 z4Z-n=;vzDZ!=fe{TV=ro!xQJKEDxhDGESJY@xO_BrfSiw2yqJ&-uij+Aqb;v!Yyma zI*MUqW$}nnjOVn@gow5jwKDA+-!>6L^`PL0WZ{u37pcReaVsv?S{i_v-Ti#I zPc@FDA73tg{Or3CxSBfFpE-M*#3Z`knJXeyE8uQl4iy@TyS2acx|#qRu({ zbe@&KVd3i$PJbM$N4ntnPa55e^9vSwpBLJR7$K&fKwwYjUZja^;GZiK32df8te$QS zn_9tz@e)xU=cn~kP*(r5@S8%EHa6N!trLUteYvn-RtA|jyYhl002+2G=R2S6XLXm@ z$!~DhUybD3(wWi|&7(Bm6aHR+j$OrfdQ8a@M!%eeU#^?XCl>;Ac@uLy*vaV`z!4Ar zaju&4AN8ufQO|EG`EAn2ALu_g>o_UY2a@y4G+Hf3F(&BzycYmg(2!^k#OHT_ULZf-XGjlAon-S;_R_qYSHLa&V{9gi|oDIAl znld{;l%6HDbkvN+Nu-fT3Rt8aO3-C8~*9;&`%tZE!_vND_uS~ zSI;M)>+N^c2$Qx@2c{yf`JF3S{{m8xX|UhV$UrrrC=ZNzxxZpfeX&e9bW7R zY;~VKzY<=YyjOugF%sa`r#E?CYWBRScYA*>Y3UL$uVsi;gxA-4>Y^LB0Y$@J7q+0g z1V5j&j12OV`%>ANj2=spk+>@7s|~}W!CO{f$jNUrLOKfuFHjyUh!Y$a0Id%^<76uW zC`}UN5I1Hz1$1Nnj65BV&SVVm&KGdWyjO|BLU9^a794$7mLy&{Gwl3G z_8908Pc$)F3H9VZ+n|k?w3+LaD?eCAzct;bHNH=@fcu}iV2UMciy~Xu`v4uq=1Ea`uy+&6(27GD6dzF9DqTNPkD7}F*rDo@@tU<%4o1XhnvQ~+-$t+AMIBZd&JaP2N zdOX@TcO<))!Caa?g$z=0W$UH<*3?iBh=ixE{<}5e_1rHm8FWATd!i;eXHE)yKPROS#3wbaA=s_eKQult&hCy>PS9joids+hcwl z2Gu#y5Gfx5uD(M09K`RjD#pApn%1uS*U?IKqPAgGgc?9Aa(-iY>FH?LEfdbFlU!}h zTjlbVbXfi3-$hl#jzU{PDq4IJ6Jr_nwnp^N$0jbTY@U1eiHQmRj~J=8qiUbF3q-^H zzp9GyRQkNiQkUko2L5dH&H6%H)u1gJFLokn#St=spJ4LZ1t5%^txkhDiB~1l$Zn8e zt^G9Nb#qN#F=!&a5#vbcy}NzT{^jc8PAqHps>+ss!^%zzZvU*cdC|qH<#dBan~Nw% z(QrbtSDdH-{Ev!UR?w}Rd=6X#g=~G%qMGSxqAepKJ+`8{I9X(kfqLl-wuJ8)LFx9YlRU?r3`kzC36g z193tRW$~$#XF7;N)QSq<+-_TIu@Z7$rM|oJ?wq;##nqrX@9L3PbP_8OUP;aXj6FSC z0t3t)8fWekH^PWj#}sob^Y8+3Zzp;QI~Bs<-?KHgL*#U*)83tt*YQ$5JRVnAG89Lr zRbo8yg7>@uGVLJO?5#a36CuFOoybw~^goLD&r5RJh zVW_k;carSD1Q*hz^03l!SijE03_#QQ>C>0S)N)xAv)~8*QHYG>;)%*2^ zF1wUSaTjG(d`fcj#BBh|el6$`e|FIMJGuu17PC$1?_pdE-gg-1s^HUh#Y&aP&@`_| z6<#r|k{gA@!e1lAeu0Vsw`_#or`*9mE&V45uilS7qtB{+2+B{l)rTwvLC)FUht}cj zZB>8A3u4Tcs~SYngo0rmyWqw=YkH-&$?0+$IQ5J_Z2{3$u4X_3UME@2J!Z7fvj7*% z3rt4u1Dk|`4Dlq1 zF)NONQk2k%Wzd|y-t%n*j|V8!Zmko!0BgueT8KmKAbes*DC{a=mgv~hVS-Wf)wu#jy0*b6JDJ?Zrv}hsM+qidM^PUNn1fGg5iO5Di~~|lA>E~ zV*I~G#YQM9V-}B#iA)j`Vi3Ng8+R>C`sDtgj8FKwOfP0lq}lmKCwSeb>p7$N$!-W} z8+49Cc+(t`MV;4^Y;PTg&shE!Kr`CVREBU&hqCzip6^OwUKXy|vkbU*0#f5_`1Ex^ zXul?wLU1g5^DTD;*ueQDI!=!r30p%0(&7&_BevvZIFPzK5)3;^h{J`v^h$^ec7cG5 z9WII#A@38z#02%FsvfE*u3XP`l53lpIo) z3u!2M!TTM^t$Y@=Cs^)8!Zvrz(V&u>pg8k`42;#H8AC)g%_yA{{>m5mev4I=EjgLO z-SixA^F56d8atJhY~h;l76iMHmS5*LLp`Py7WPLJE=+%d`5CODhE*pc%|~n4aV1FX zcdz_-(UF<+zVaEvwDG>=`)(VTXg>EtYb9apgQ;iQ*03dqJ!`}!ypc5WYXo}2CIqko z7AKJYnU7RC7+Jc*vhr)i+r$g`Og56ik{w@`w$G{ebd`1B0bIRJGCM9r-AclUn+cJY ziGe8CZb2!ksJSCSC4|3(fq}jP(pnDxwEN6&QAh3^%Uul|YtcJWZ@O&yuP*AUXJmf< zRz`BY6nj>qn6_*X*~Q3zh**6e_uAUV!NV#(77G|nOf7!8Q_e{y)SqL_-&W@1$zw4V zVIg0-1SMD&5v~{Oyw0%e?WBA7F#e<>XztI!myO>D4#~}HG@>BMm4T!8Y*OyEu)bq=LGC5I!9Zy-lWw4O&TThf$3`lG>HuuT$cE! zO}^%tT9>fhTe(M)Cw2VmJteE|F9II!Ye5Lt=F2gUbEUq0f961Lu$8DMM zY+HpKK{V_7d&(6_Nt$Ou3lzruX4iwGP#I!Smhfy{e;a=|m#W|I^D!p0Gn}y%G6y5- zXxmv_ziadq=)3q;aellI0VPS5F+ReY`GGXNI$LSj5g7XsA#R1=A%cSNXfk zeW{cZv_9-Ct{kl-oIoR4fF^5B^Zkimq^)R5*-EvPLy&G*a#U76rX`Qsp_1U#4(kQ^ zsErwGSDcNo8sjXfuhvFQqYET|-TK2MlqR{CUml%o<6!VdtO}YMTav~E%uh3IGRAzC zCg&Qi=XvBROu7W``%XINWbRx9#)qNtI-euXYaZ=pg%&ok!oA@Ow`#J;LA38NJLU8S z)9;3DVS6L7%<~r<_v0_bGCe2xC%C^;3t%K>?!0!j*wJhrd@Q-*i_4&{tYy=S?_c!~ z4-bzYyeAo_XHQ%K|A{$JNNG?b1++SBT}4SNdlY-+ETdabVMytCt59>;F}gUULvS|h zRtc}h#TY{Rm*s-3&$0bJSLHBQ{qtm}>9tECLL2vhru;Xv_3qN=Y1h7`q4`v%Jw4}b zjO2*V&U6eXhEmF#N=gjV8#+UO zp3QthIJSNuV-}G`m{ww#e@ee9mFJaJ4*dBx(1-6iwLS@vT!Cv2-Q|#D%qc#Sk6@oH zv5-e89Nw5zgbA(pV~p~xBH*FM>+18~h5vc*=b?d`x&%-Cy7yU?@73DY^jgp7>*(G0 z@tnrtHJcw>wh?DzS1Px+CXyY44(PrbxTgPQs(~%mApxq;;`!3_g!dN>JC2*pbd8md z?-(Obz2i}Pf5x=|sjIiCrVTrk`>9D)=TpxT@3UJ9GB?|m#zO-lXo>??L-JjJNl+Q% zDQ@MLn{^mycNt(oXL}vu0ki?RsIISv$r#l5ke&CtQ7auDObrcp6w0tw7)cF-);Q)S z2@2!#TwM`s-A*K42H{h&$mN(ms>!kBQnCNlx->gxA&&@l_~@!BJQ6bcXDdTcy^Ld^ zu@F|XadAlr;&Zxfn&%Qq4J&Ea{rN8qpH~R|_x7 z?ryBldCq+x<5Yrr##btLdkcMDNg=8{>JHpfSN};@SB-?%{v!AyDOr?dToVQ|72=+_ zEADK90Y6R9uw|SW$)=uhSzKDu)+ML~syl8Y0F9k*IN~4HqUOG%%(}6;c?<>TFw zAw}+mxSIKNUkQrS+Y^GK;0ODf$EESz;Z)~-KH_rQyDxZeqFIoMo+Y@{!Ivn?%R;33 zOo~Xnm>=FzjN~B%?xl2t?&F5qp z&le9#t_aEmZygL5(Q?xw@&H2PjGzb9mz|A43Wh0$oBsGCucsYHCs3A$%d@#=7;fQU z${zNftc>j>_vt9VGs;==Q=6bG*=^uV#%)Y_c_|&lSF|uN4*TV-CgdL)LH*;p-&J<# z<#xs;L3t<$732Bj8BO=?aNfp_39LfHy><#LnWC;|RpvmdUyK-B=RNm&}H9xgA zb@jIR`t)`rq*ybbw{-?I)T|GJXUlNPyz`%4UEG$POum)<+1auaZSJPN04cthBp$%n z8#Yxf3r#UteZH%G+8S!|T|4%0&D<4dwv|($lxk=7BV{id@o6jOb`#gZR~vWbbfI#3 z#ay^(mb&8k9w0+QBq zc>UuTj-Uhe!&JayKpZJXg-^I7|AK=K;stUd}UKb;pk6;$j%!XH?>z89xndYvXYx#FosJ;W3QZ!?#IKC>;X7 zGpS9g#z~G3)SV7*zm(T)o?1XMvjhSMKNFC;1}p@n?yRTs^b_ff3|Yp*P= z8oS2smX%dinXHt9%h+-uyd++&!KpOz+tJpW8w!zcf*(##w1G#;$2tRI17c7vtdpsm zTN=Q|K5Aa;9&MN*%(q3?&`|t);!4r*g|%-Ox1Ej6m3IzXc_fx$;@G_dW4sWsGjShj z{n-))#5}xre~fbg{{_qva&u|cNt$Pq-aeOylo+2b3eh%&{Y~V@wQ~u{4gPduE2X`e zdX5(Yd6(Mo!Ut=^OiBZy@L{*@E81)Jdb`|xK4Ehy^)%ro1Ez}nebj;v)Rom(uCKH{ z(`#b@*$Ue`i?Z=o^1q|j15iL1>{URJ0+$WM@gr}x#cieyu6e2N>~ed*g(n?0_F=30 zX9b`q!%tg>EV`w9?bpoir4(PkNJR8xlK2=PSqz{H#w;;SAq#!JA zhh8dSa6i;aRL}cF;;o^oun0fdVC9C5rtX*u1(C%)v0bnF$K#*$`+ zS7t{7O~g$%0%H|J5#z}qJ_cSUBOb~ki*s~?(>yZQO`QKO^;5vd0~3oDLBcSaiwhgK zdTl%BuE!S0|M6;T=FndEdUF@P?@`j;h9K;D$kD(pB@gDNsrsh|TIFh!E$UHDfFP>S zlT+ysmM$?K20P!XeY(QOIX;D4bY3~av#;jOf~ulSjOSiv)})DzC4KjUbMaR;GkFDg zsLYS|-QK30fmYjQ6@(-Ev#mU+uW%V-ixu47_cUQBL^jzH4U1V&&`drn6U$w%gmZ;q zWW)5qcf|H&Fav1s3UOSWH9 zlWk)%CpVdsZ8vqY@jn0cerT<}ofDpO-`BqO{_PsMT~uvu%;82iVj-^t0PWG>f97o# ze!=V)v1%C&&E(O~U(hq;th9QL(7Sy8Wn7JRkHobxnpng+IiuaX`VQDmCH)6Jm=3&f z#7E`q5GbgQqRqOiiDM??S;e%;EK~#b;pfEs*HCLM4oAM5ul|6A={-4|%nu?SWdnml zf3r3jfR;~MMK?xRhX=PS03Hho)7HA zamQ{Q%LO!X$dOS`+u%)!Y>$-|dm@8Yd!RfAV;Ez@A&nZNXZ%l>44OE6syJ~5c_!fw z69`RTo}+s1B$PVc4K*sJu5?W#Buc_Xe)x;9u`MOZzrw1sE6Ei*mTJSsp+aX5or-e# znV67W8w?Q=H(E-rsD_a%JzQK*pz%CwrTa$c^V_oQ)A`3O8GpmGkm9FL`xb-iuTbN* zXX!0uGd?mLOT)p=DEJGmzu(u~dWGI@GJ?jQR~Bn)#J`a*m&?C!^yvsH8*;tnp19hG z3@b-1E={u|J*-!bQhUDmYHLfC$^DuyvaIF$2gTd%IoBUvMpSlF5N8E|>- zKAYsdf)>5S`nUD~4E5r4I3SA(V&>0wrd)(Uwd!*S-_;_~mj|d_?;1V4@NiRW@DR&W z5k}0jhBI;bB$z@ZlhQy~p+oX9x->Ph$DvJr=M~AK0m(%rb#vsUC8B&Y zs1)jN35)a>O2j>tj0y(atC)aRv#g+g*noJbjmU?aW|@%%zOH<8+y@%i_Dk?gBmg$f z1OL&O1V<#od*k*m_&rdA;MenUZe^FW$U_2PqS0z-mbntJ(=@a<$=@XwV zC^OHtTzv?CmYPCdU)VatENRLuJui<=`MFrW?4+XGe$4~0&qNAFnm->&VQZ|?$DIvo z%nerP$ZV((&hkZG8aFT-f7&qeYtZ+q@c09rDX<`+yeg6FgMz@xTrH@gQ!#13V&~C3 z8CmENTaB8mE{n|&#eDPz4ixp=44`u+Htk6De4jxBxIjw{-6CI{yQl3<9&O(*(cXhp z5(~Aw$G-IVla~3sLrKV4ewP3G;|#hG|8s{I8Ee-grc!bOUXfZRMi_HsgdhV=i{ICP zW?sj2n6Vy=4Sjq9iXvMQ_54Yc#UKB*)|i7xFEVWOIMj>z!LP1>kAX8s1r0rUOHi>j zD`-+`W6|K*W+Ki$OFo8@iH3MVfR+dDfV)NGQLnr*CxaCHmbW!-Yy1MI0}ngocGX>K zPbr~l9QtbhON=mj!~c0ZDVBC1mBnDW`Di_V)0pc^fd*kV`3n-FT-5B>n6Jt4k5^ieghp5KjXFFkh_t~TI*BLAWg<=Y#1LcqX*~rDQp99lL@o?!5 zp0AsSjr#ew(d)U>%Np(>ORYy&1Y28dMD9#&RR;F9S^YBmoo>WmpWkQQDV-!IuflX_OD~_+%l;cwiC9R!3e;@W= zMv08n_`|BhZp3iGe->UgkY!Y>icN5EV#ahaF#0B#kJ3LoOGkti2LH%2A1KqO;K<#W#<}AR#}OZ#l%ctt)wEte76EW*xyXXns6SE@_rBF=ve|m19C{|E7VarPR@nL< z`~t-9JZupIBfP`#dqxB}t3F-KRoCI$WB2CtZAd^xt*A%!0 zqra2e-tdP$)_wNtv-BlTew|1 zY-x5GBO|JabAripPvFlSLC*%;CDdomt^^nk>IxW%Qo0Ux`NRZjn}Ou=-=!1OYyVZM z0l^=)-~K#~n=$OWR?@VIvsyKgR3ULn%hOEq384DH=Dd>h2|lJ0dZrA##UG>E(3vU) z$@cd=WH4{mlPutpqQqm`$U_MHjvP|`0Vlrw^)9?ivyWrC2&zdsk!M+AQ5WnI>~W@H zXGRBwronqvk)nG(?R-&yM1b;ICR&vnZ&ulDtA{z4XYvwyN3kk0fBUp}HGBJEyJegC z#2_;F$XP7367Hq@HG_FPYl(>So~|tZyvq?^0tKtvy=E)!uL`rWCzmxe2XR8PV>bb>^GI&8pz1n8s&M zj8%w#nfEyg>6yQHv(YDbM6$9-La+)VHAr#hQMa)^UXFA_iomYF;1L$6PdpI0oiFMH z`-As1^Pair;%X8~Np?#eRtpSQB}}v>v1(;4;FY^NG%D34Y1S37Y@!+plcv<9bGc$i zuOR_rII5%X%R?R5Lbt&aY@CYA%Q?nrX=O#^^Xg;`GA5I20m%DLkL^b#l%j&9Jj!?z3iHc6gk*u}8kLrsLSD}*E$j*oU(ey!DUPSF?oi&If?Iu*&MqCM?QXYUddcjYia z|F?j+`~q3s6OKPczwO4o<#XZ@JI(9Ygjm%bN!j30rFN9yo?7A!>Vr?MZzyCP2O*EM z8vN51x+XxoQWv7MLTi@u!$#iG!`6p*92qEubg>&YBDXJ~nWWL@vr=WJPd+8bkEPB- zZo92!_@k;r?!<#e6e=+hH+`7WDX$-sO*jS0@TxntJ4~5vj^SuzhXwFtHgQzt{?^UK z#Dbm<}mXMva<1UmWMTH0^pyY5B%#go&CKwr^#*RN8-dRPbr(gF~lS&yZ zQvU)@_5-S2y_?8*|Ln8PN1yu(VKgu_=V)q-z2BOOZ2r*siwgHV=pWi#{!3dRH#3X< zPNDzHa;H1iw5Y3|LU5ci7G~k7a%X;ebIiz=lqZUZ6k|UsH}0L za(W-(iPP{Sv`+6_vuV?1Xikl84P|RH&la9|jd+|Fqp0)O2vbyHVo+^U>`Y;E+=_8t zKu>%mCS}gHQOr%|GPTy&->j1YC8<`?fiOIy-gA>S*7-Zn?=@-Uu3Y#o|CZTLA^LVB zCCFFTD^MJ?&qGySsGZ9j-%tI~T$XZ7b~k;&DM7V!J7ocran52zw9 zX?Zk6plZ$P+S;28(Vi6D^Pae{6@ELKe*$H_QZ?^H?!6Z*nGg;Y`U$Zz5sUoc(%knw z9_uM%S#LEh_4T-eURDJzW*9~wL5Hs@tzk#2@(Is(>br!H8)E{URal>Q1@WZiv89D zS37;y)JTk*KPaL=L`-f-zAhj0Q7TqfmpCXrG@Qi#72-GiC(~}a56V@TA7Eq0Qzpz7N8uNOPbOEwHz zHqS6@y#xu-S1K{T1EVD88n80XEvnLb4#Mo|5?^4$r7@PL^d7#ghezsPHoEEJZWEgm z9}3&f5C!5a!2Bt@`DV724d*3JJ*Fhh)3>q^*IG#xxic9# zJApdU4eM+J*iGf!S2r;xBS=H4KTg+!xmQkswR^?LNOY>-p9A-NIX9m7|HZSvfp&u& zm8jHr-YuUXYFSd4B9bCJyU)TOgFWBL0s9Ar4$T+gjexW1>&_TmX5y|9sI-nTbdX)2nbWpA{Q1$5W(!X^n8~CUmM>4t6 z;;j;6kSJ#C2OUawdBdA3gEB*wU(w-DAP?a z<~nA>_nu2(nopHDo)bpqEP>slupl2>z@0kMJYxwEU5)uC3d-`nJmiuXI=zR*$Pg&l zHu208NVVf4R#Rbd_X#{63RG71??k%i$uY%TE$e5GC_oU&5+2+*pO>Z~m&$&(0TVNl zM!VT_QPQvkp59cxvDV)}awXECZ|};N$?VODWqR=WJmU9U+4fBR#EY9bA1t<+5Zru! z%Wkw{Z5h)e5}Jnp*!FC{nG(#%GU)B7t{DFof;4$qI2KsB(O()bUY8KZu9pNz5J`GR-)f zKm2`%PIw<9{hL)JczW{M{VN{1&{tsma0P-L*(4e z=a|0ant}=6wrM*XyQC?7y~W0UqAL-Cg@xFZ^G9PAH?wPvr9R?|Dud zU7o}uuTVV?-3DzyTk)~G`IeY1&_|-~@DzgPbise5(e}O4g%4Z4Y&@2CYa(3amI9~% zvY~X0n8iB^@@D;NxT%-`YNhJFnd&)E6@44-JQ4<598KlC&Y*oDpb6h1sEXWUj|q+e zveVZ3B(%vJW3A6ZGiFoTXG2!y2Ru`!rVuqmx9r3PUC>{_x^6hYAw#cwYwY)>Q;7z# zcb{|zdo!M4Y>v5UXt>4>!O0e>cmM8_F$n$*u4ZpBJM_=U&JSt%RFo_2NcPN>l$gSD zxw%kgqQn|x2Bu@TXX_kvIubRSl*YnZ?67DVGZyUjWiAsG`bLcI2J@1MyoQJf^wa|R z!ES1!5LYDI609gSz0x;>@wS0bYu0(SnDu)GvSHg!Jm;M@EX`D!|1Nzo>=TpI!1wCZ z5DLTuQ9@|_)45}ys4+~2dPSS{f;I5h8v8L~9i6n3Q`BE>TFSqriF$K-N0fZO%eU)2G4&ndTqkX4af!1gFP>^U4~6yn*ZpVhVBd6cAE`G3e1*A0Oq;?$hD@b;UxaE z?S-Xbma0v$CN5xzCN3Ek5(e81%t9!eC(1*Np5;Ry5alz?k z8|+_H0#2<0a7l;)9y~W?LDr6j>AF%SVW#^V7zR=W)rqP$hd42Sl z5q1u!fiMap-9WH$bOVqEPK7R&5*M z?&r}4@g&uZNni1h;V9c1fKs(eW_&8gOqr(1eM>7`^+6yT`jZ@$aKOTS8Hwiq!)0GD zJF9?MtO_4%&|I6Q&z5-gv_c=Y9fAgmm0s<0;f0dAKr{x494hr@}GSg^^CHTcxs6wE}jAN0z z#}b>MTx_NS3m_$!Sr`)u8#)=)TZ*qgL_HlzYgV*#J>T!0h8){kFKQSkB`c`8zT<0I zLr@39iHRY@K?i#s^Lgx2sCZ)1QCIoieeYMtH$zjRK&2;nSh-EqT_e0qLE zT|A&Cfll3dWQ&fDwuZG0f&5ht9LnKj?RoF(#5wa1-6!-i)-wf^^HE|?e}0=POI6Uu zb&Z$+ZALx-=M8lT|Gz9j>sl4wRp&-iDbZ$3S_L+X+>D<*MZGs{r8vt*6BK2qQ*M30 zo((3lW>Leh3&*YM5X*ZJu5^Lpo9UH^(%<@KU;H^lO2QCNs_KgVrUS0^+}gmKESR6V z&wv3q&Go=`bAo-X#ni4(_ty*M*6VXCTMISP*Xwo6p*h@i_pH(ytV>)b!PQb51DMup zbsKRag?;bY z2xG0Au&e9sS$#5x0K^S&uxkXn!xmi;O7KOwNLWPiY|GE3zZ=FI_Y4FdsK+Y#CJP{Q zYhM_M8+V+Q{P%J@)-kBQdS-}w`Nm~X#n?cTz%HAN!mw9ce{1(uYv)7!M~s2P6Xcsi z%v>tl71y~zw=Yrn1BvBRFNLw^BzLy|#gmly7#|Zo3ycE#VzLSYjr@Lw0$`kL1(?|D zo)5yLFiGH+frEqHA6} z6g@onMcu=%F6z*bm@mvv6~4GZ`5-Lj`3a=pWX_i=J7yg2SkfYmTou+(Pi_qbjKSFF zHmk89c&;iW)~tiCfsR;2xB+e2m2{OdO-|(X#wjwE&X>6AD`h6; zlzJG22JklIMaP?iA#CY)(JYM`oqT&lebF_)Uz`u}=!6pVl|ETt+y(QggGx zpgCFV`y~p5S539T*KFuPR7Lu;cLZOz)kV(l#h{4rBD-ipmf9wir7PVKsAL1OSbH-C zG)+h=H-8+o=trW6qoSNeXtS#4hi%zfEcvuHe~#eM95aBXPO${D|Ak#^cHbPqXtLt&t~jQAU|L zl4MW#PKI$&RM&(Luu)$WHydkM4f&6JuqKQMs56ftQDk~4Ec8n6wa~8lVv(!(6;wnv zrd)drS=fw3e}5V@^SS}tA@SgV@2mhmiti`Yz&!NNJIcm-x~|9^UY(|_ygXa9m%lPp zP;Jg+Ysl8tLmh@^^v>h|NO_2SYs?DTY}~gvzn2crbgH_>ur0vrwQen=ta{6i-dLJ6 z#tK{Y#^A-8-{;_4d%* z;;XPETY@oBzT_8V&jtT^v5B?H%qPNo$vgB_+4}80&4AVGXg)WbI*4CFT-$bwx%qU_ z>iX|$7(<3csigiFb(~q$EM*NEE|TWYQuflyx+%4c@61F%gIz`P-VxgB};RPv3#bF^s}Y7o}nRNHurLu z$`Bk%LGw#S!nZK{uJ(n#-a?NP^_$H1tW|G028`7&G4Pe0dRy}$yyG00Bpig6w=Xx< zsA(Aex>VWFG*n6ltox^9Gjtyc91T?0LXM72)G7?)mDrA(5dzmSzF1y`ue9$Q!rYe@JaT*Ftz7x5R4gYHx_Leo^$Zpny?^ojAGiKVFOUC=#?o}&=RgZAaa{PpW~B@OpIg*NL1{0y!qn3nqsX zoW^5(f)hrbA3F^ip;9%=@k?qB=?M{`39O=BVAM49dSt3>>#&uu}2gZ82FQ4Fx+ z*a>)4O{hZoNsV5A18aqNUy9RrB;_y$MHK7 z+}eqx%iW%6oR-kP$qrr3owlY=%FKJf%S{#~9~ox7j+892hWU3oWBAxjRK znG~dIBw7%dQZqEfl-&zGaSFE{aoE{Ezz4ipR|%lZ9e^MfK^SHfoz`1ENRsoK4mctdaXQZ-jS}| zWxRl@wDDO&>>!r}!l?!7D9kGClBp^=A4*@E@A@YF zUuSCL(N%c+jv(*MS*cdZ_VZco(Ya$F{D#Wba8dJ6+#k);H3};c&C)dcRN*~QM>MbJ zZ#iEzhVu&x{&o=bnbOQ;Rqsq@Ld@4V%x&?47igi(?Jd@!e#svfTQU9MA8B)DfluFD;E^5lg3j^`8`{Qbl7Z(mK!gz;I3|>*4g~%CS3y+t4Z1rmj)o8W6rEUDjGc_nIbS{tMJsMwjhS?)h zVUPOc;1yb=Dd}!1=-rQN?Xjh$Y$VWO{zMkeoy?p~0lq>Y>H|<+yvZr#k3CwGs7Zi7 z>4r)k*Lec1(QK1JEr#-$iFB^&YJcqPd*#~LbP2h_$bXNiP@2hGvx(K+rK!X317E$P ziXD**qv^W)tHtLRbAg_C^ZR#dGoD}8O(dBQwn0ZHo&3+s2%Yvrr0M>4oTZeZXTia= zf!54|ytEf;(9mCH_I3zdx?9);=B5OF14K^}+?h9Clem-mR#p#xTMF?KVo$!$ch=tH z6qb(7A$(I-9YP3{{3ZPzOtyD^U6=|*Q*FkTNxpz!2v{H8*?Vpkd;W~G zwk2FiePs+wBnc(uWMIm^^Vbna*GR#tX5njUiU)se%K(s0)Bv{+$$wj(32&-oU+nFr zGVp)_VR7?&2_jpvMnGeAg-#{T@pWWj*_>SQ9YPg16d-wPg^K_A!dI9ig`5WeE>nSR zlm0aX(~1!aM~xts2{xsPUY)XfDf;|y8jQ%o~=mr}hDL1FT4 zMToEe@6nl;rCkXmO$xgjwQ4H6$#*P;*^Den1$nC}j*OTS_tu#c>g@U(Hx+>$n5pF_ zD4_2lea(kiQBl$FK+)tdI`4(jBI6~LLV4r{Q*j5&rT`sAP7GGumMA%kJ$m@w`^I2% zj2lRZV5taY1oVIn=wc|8J4E=ag)fA+lbnxdAOT*4OqdxPK1GQPym}Tj&y6DdSzilW zn1kAim<%$UEx;uxrMFeg|4xt1TuU4(5ro~X`|j zoN9OU(8KzlNZCWzR$cOSUXr113A>c|^5+(tY&9jJ1x|S(<+>&s1xC9IU$rz{)Fppk zjE#5VB@EiCes_a21R)<93Eds!P2978i`-o7|^E-WsjenawYCpSw znNcWc)qy(3lsBdl=4Dir7U2&gq{j3)(LkW-?z- z_bMx6-VK*py&+c_7&R$#DA2dn==tG})D$!cWzmQB7dU=y{!oK0+6fA1m7P6L(uE^n ztd*vKmC?!PpxsO8yF}M^$7gxj&!EyEls!ZP1?7OuvR+y_y75-hF@q)fPtM5{_0rc= zW>LB}Y7h|2Vyl_u^MRf{Ym!|%d38&vG2a5g3a=H|+U;50?x<=1(>bXQfZR2vKQ;#L z`Nd&f!DbPO@=Zt2H)o0Si}^V_>X+<_U@=8(fK(Gz>%SxL+4l(tNE0q}K7RkyzKf#k zJlz%VV!agrb&y_-(tc4yW;*PvVru&0LAwG&Q@}wJhoo*v?VQF~3-nP+)#JS~BS|K@ zjhwZV$_<-?bPOnTj>*Ycku(VGW=lAge;|L8RMOW}%k24$@|oOzXI7VB^$i0w$99H4 zieK!^S5sj(MQ&gQ?v~85v2+h8DDvPSWBa12)q`0vvZLbKEtE9Os%z3MvrszUWyUB0>dL|dQD(4UAk}%{=thTNOWB%Jc9B3CrlDb#aKyz++?T)9Xq?e~*i>=! z%rIIaD{vOabY@mZG3kgUn4-ooC}%oCu-#4Cvc%>(5Zd}p$Fj56^BSGFd{AYnClw@c z<`>pVr~OKwV+Row(WTreznwhz>KXh!^W-}zPFlW;`s6)n`|I#~nvq;9XT0MT8$B$D zhc*I&&bfqUChE#-;?tB+R?mm%8^`a5^Mjdpe+1%wq)<2O1N&U_J*MSNR7AM|dXjy=FhQ_sG#h}Bm&6R8f8vm(L{WbkQxR`s0r zlkep@j+0jlO_}P8b?Rk^oipy=C%JfW`vs3+#Ak3v%7#r^i+3e=XO#zE{9cL;czbf{ z(pM>pVQC3jpor%$jOY<(&mOe78|NAFZh7+)tmu}Q(>tV{b7KBk9uK<82L%IC^n_On z%%hb$$w#d)j~VN0+g=7lNRiP1ZDb{qD*L~?!&k~$?7=_LLB%#opjiI%`JC5lfYins zFggx0VmiKWHLbA}BFr}v$Cv5OE8#M3n#8|9-vUPZ4?MqDGqSJt?jzrd6Nzd5xm ztVxF%0A9MckwoFu6Tl>~mn9Q0>AMIYQMaB1Y8j_qCS;oyL zQ=VPo+qkxFS1MNA)=rYJX$01!lTfd~F&(?f+r4hv$NNkBZu1gbp0b{yP-Mdxdh^%j z9xzw%wYA&Y)}o)zuM>uDUerzdY*+|K1hRI_qem@1Be4kR;1R1$#+<*g^&CI4Nsb)WGEpl%$W zW@6eAglDK#Qi3GOx)0L-%7AYH?eNlvre|z0#6Juywj35^Y~2z^J|!t2Xo*=WD#6Mp zHn<+CbdR#MDS0{dAw?AybHw>xyi?TrEgXcJD&$kbt)x594GQQRtnGLm58l~DVyb6d z^7fh&mc`Ig&EL3!ikKCfupe0m)<)sF5NzE+TYbw_~$?z zwD(KMT%WIGeY?28R5iik#=jSn!=-RJgs+fRq#e`@&B2&$?q;Aly_NM1p_o1t!9Vt=iS#KNdr&x=Tz?Y%I1{?=m3*BH7YXa-AjV$z z+EX@kUa&X3t<-%~s7{TcgH^{TFE-~Qq{yL;=}fWEJ|GoqH7*lJ=riY_jMT`xEn@&( zoWnSa8o*6A#twzNU-pHpyFZXf?FiB3x!~pm#J~HI;Yc0peN~REAZDD&HK1d5<}IWj zMqo(Kdw{TST^iKc%=p5=K(8oIES;=9=q2>^*HUc~illLJcY1Lzz9ZSn*$CWRtutkD&Xp=&=5Fbr8MuzI53#=mIavt6e?)F`2@&BZ# z$Ykyvsd2L@QOC^CuzrS@QM|xVx44*m!LYU*nP{hxP|7Y}%%&}l3BP{_9xFUTK|l3C zVCb|((I9Us(c@u*mw-XQCzvER2O$}fK$y444K}$S7nbE z4-PwBfzKb;Sv^;4ug{|I%5j1hFc6hv7$u0(BE4EucvF>8T<7G@o&QRHdmRaWhy*^H zyhrfeF~d7Te_IXxI~+2d5MoDv=>UghS3NfU?(eacXLQ3Wa+vX>j#MsbiZX}Q5W(Db zZ6#=cD8qSs=`Ucwrm7Skhs%UQ?|!Ry)~GO<6jdS3;a}>s+WX}>-+%FAFLRPE_6oUw zW$#<>GcM0MOiac`EfHKIx_g1LN)3EGI%Ia&9VP&d6Od}F2EwGRm;qVRelgSm#t{cR{qQa&qnQWOx@C$P#Z1WPb z3hh!n2iX2>uaZ`gBXshCu$#47o4|T{%VV$Wl*1&Rn1ZT;Ic6;+s=Oz&XLmD<)>Vh+ zY1z5)Nx6jCN4ceC#l?&$rIj-rKU|1GXlcJvZ+r2M?%xKkUbD2jDWIm@^FMs-~E2)c%AjJ&#MOl z?Nm2T?N$Q!jn|v$BY^f_vXy1!;DB23YH1PMx10%O*^9qb%ATQwAM2Mj;MF#9dddO7 zwvT|umQaEI4yZGi&&zj|Q=(uAh-#Ze<~%MwA^W^ooP@mV84ZlnAo*NiYNPOR^>2{B z00C`1AlO{OO|_0KW`#Ou%g>avNr)aT|{)SjWI>f0E~pXp&ujqXn*mrIr)qIHlKbLz`bKE3aVV z^=%Oq_*kP3Lj#5Kiz_Q4Ha)B~l#cIxaxtr*uM4FZLyD*oFc~$k|Lmb%t*8b@#lPN# z140dLLMDqr3mc)z2rc&v?Vk=-)g(7;iw#i%o809${Jf9(GQPXwq|qU&?%M;_>lWUg z5InE|(E)b9&6q?!^r%f4Sd1}x5iuAEV>LgeH^F)7{DIAo$oXHrFkF%L)}dAku-G8) zs`Q|{!?l%1*VGF5MJ*4&(*lH9UEQ{GPy({+L2UWSyMM4$_hUGxwt*C9_N-LO7fp=V zjK5kWuZGr@dd5Y26?6|Sz`zZBEVMm48Z#I!{wp|Y!1<+m&ui5oy!IrrcP1Jg5tJcL z#Vfc@YnKJfLZf6foozkX6XR;HD9$-tImR({oqG70vFGSSOjAjrLCEYEQPP1~gPq~0 zK`3s{qDsc^a!~I9oDKuQ6MlX!Nm%F-+cA)5W*lcQsNntoI~eJl|2ePmwKl%A7u<{+*U38vbteOb-@=Q@FXlN6R`Q8Zc-HEzX z<2hs_qinrwPWrtJOUpWerc&BGHQ4=0}63aN&wn!;^7XeY{yr0Tpx$>F*pfmF1z>Ku>6A*_-QV)_(i} zAdfdn4bVCwRV0Z|Ft$sV8Sp3)?bjAVXoe{I{I#j z{Cy?&(K64DbnUg<9~o8HRq34H!KM0a6;cn)jZ5PD8EE~?6@2KK+w51Y>~+(TNcGSY zTPrvoU>&eU9L;_xhY~cYmNU7TPvUaQ&0<+8Hd|w*^48V|R+T9FaAXf49DY!$HMQcI zS;_xKxb!F@9w{a-Zfp+o6DW?Yud~nPeO>47JUm^Z)KW-g`p!ndLqzT7DS=q0- z)i4^=?Dr?{Llk_lYAZTsZZ5YMB<8EgYet@sXuK+k@E6GmGS|T@2Mx+L$|DJ1S7AXy zRt@3rz5bK*U%EGe%hUS}2RxP#9(mP7b_My=R8;mUT0Wo#eK^#)_n_7r#VY%E2#W#k zx4-rLlqBfVqgr+}=Phq~n_%r$e?3$D-Rg(>_`UgQ^|KRR1-X7P&WSYie&r;pv$wD{ z#@M>M?>2umFhVh=e9j2zVBpvG7ARj|cD5@lH1hNG-+*J~^7dz~G0 z+S>_QL)&2uglE5tre9=m&xZ*}&+|4}ZL7waneAv0Bm^{q0od>G!+0u=`aH$7f)>68 zVYoZe3Cy0ne68TL69=`j<`2neZ0#ytiqQR&vWM&X_;-|e(Qfz}LAy1=E7gFrCGV$k zR$62MK!ZSgJAeoF!@w=$Yj(Z+hk0<-AZ1OC(YPge@5tkDNF0RhjP$v~9PcRifig7e zEhUM6QNTpJ`W$*g%`##9IeRbEa#SZq4l zusRLy<2tA;WRwV8Tfp7D?JQ0Zcvr68m%+YIt7+Z+fv+JSNldjqbn5AeLy*!x)sqP} z0>)NdeyBI^eaGAfjpnp&^#P;oLFisfl2qnGGY+ZGv3P2#PI{iffBdysdAb?-uMPd0 zHG9-{HZP|58p$h4+D{qa@K`gC0K_8@giY%>B3;gMLxIzeO19(e6|L*e?c`=033zVp zg-;siYo0*^RpEX|aTt1ZXN)nnRoJ2zZ(RiEH%~FKIB&|E^=}S0=8iXJ*1_I;Yf-aY zcgPnVQQA}vXtG}z>+xPYi zX3;V}fHomzR@XT!A%>QqYm->MnExvDeBHH-<{YMTdxEq5RvXWGOnw*xKB{_TW^6jR z;c^vbvA@5i#_;WV$$7ZOlbj}C(iN4&C#oXJSm}HuMBhYx>vb%fB2)hp391k z4B~agy&H~2oA|MVp9ceb$==_|G-`fS|3YoQ8X|hSEvx;H#I|9#))G5vjqGk~l%X3y zf*D1Z7mz6E_&Y_+Rz>85Ysz;g`ah;JZnTa_#hj^>P6}!7V@CYl!&Vbxd9T1M-@%S7 zsTFwBA9+be=xv{|YP?llJJm5@Z|#qbSlQlM4B#nf@IrPb#tMxJ=usrBYJqj($Vjjv z-4A%&3Gb3~g=}4S`DB${pR^Yz7)*a%6K0yIrqqy{N-U#};`H=r&oPSdJ)y>+^%|J< zNEu*14n#jFd>@3Qi_MfkyLNNYs10z#mQ`s}{Io^iCE-!8BjZiRN9pn=?#)zaSo16M zmo_9)amw}U?8X>x?Xws4hmsmxe@;rwn+V%o{(Nf?5v{26;K_B2S)lr?oJ zrrF9s)xnPWgt?HV(CuK-mAQna!jLV01m;oJ{A+Bb-!pBfSakjZ$)#`A_3gPnHD823 zv4Iwi#fgDPmQJh?6GD?1EJo?X;|%=PFvu!zirdi-%lXt@VrY-O61Nd$pzhbD?_?S0 zv{0I7&&!6;^~?aVmk*gdp|?MRndRZZzqeKF(2a?Qtj5%`C*ab->f3ns@_bai)|yKN zF~dhTNqflhyAanu*Zyag1-rnJ5P82=OdXD4?#bIjH3Q_>8Vuo{w3~2}ga6lVjN)%o zEyApeVCSrZfXRCAZPOnq+vy!f(+~ucW>&H{0Vp>sAG6VlQzBplxZWEAS;;`2!q@5B zJ_k5CJHPl3W_Rig*__gmEuY%AuQ8>6o{>WioEi{1rs zmDgYWy>qDsK(G_5W-c-?B};jZNnkD&U~)Dy4d~WZS};{=T`So-!5juWSN2qKl)Lma z$dYhH?DClPz7IvO@8A!}7gS+uG(F zC1;e0<;9#e0g;J`N#ttWMMdaciq>1jRN=az_tdn@X(=M>)?Yt%L(7J1NQ<5Vc<&|D z7AY7okb9#+zro#E29E71K#zCm4QW3L;lGL`$SM6oK67_>L>&4lzBA{J2&vp!Q2q3# ze54psgiJ7|i5waG#p(*gw9K{4HyLN511MXaVQgyq2ZXhO18ZJ$M1iEoJK5V8za4iZ z$sQF$x%tchVN#yT4o3>|o?c{S8V6=ZKS>*1+Ubf0511Z?&9W^ukQ2tf{_OT#@e%KC zf2X9&c0%&pyhBhu7w#Pvy=T7wN+yioPMP>VUeoH_oqvPjQ&Ac2Fhm+ijdEAG68QG~ ze4C4Kq7>$uP%b)M0=v4Y7@`Utdpkp)i8#_dzn~->5Uo1ywUkyT3`BX>xXb z=18bUf!Cs?8XrC;{}$3y>wj1Ex(R+G6MDX+vMxagi5TUBrv~YGL5>b}yIE>-YyWk) zR4681Zj~xqx>ABOs0##(>!1auaT+@j0{<9(AE`ZiQB0dZFe#Fp#WO}nC)i<1;6;nnYn#HM`{}pe!*5=fY2k<6>aQ>NX6?uQMux7FXKjy# zijjq=Vf9+2FefjbL{X3NjT`pJ`4EYG11A3xe)!LDcgzy9Bl|-x{(|in^Z=sva3fT z+3#noE=tu=fnkri$Y7+okyQ7R9QLRu64)N&e)x<-S zn|#l2assEV5Ge4Kky29^z4mv8Ba2XjzwjTuk(g~+_NGk@TsrM^Qy|WcR4gOkh zbKo@NB#r}&+m-YL@l3mVREC2ao|}Vsq95MxSB|f6(&`w)HaUEZm6g^><%^a|3Xbum z+>l6XCzq>LwdPGNVC!9r&$b>Jb-V7r z8NX%j%?Oa6P&3zj{z)y&`p34EXFFEpXVQ1-sCqpmn{wi1h09*(c$XJ@krW3AN@-U>fHJXE~b%Y9}@dMKIC3?CK#-&$)tG(76%cKpR*@B14wnepyF zPUGG|)}91C*h_>Wug8|cH7O(m5XB{CCTme_v_L)jV-pIkEz zKaEH`PZ!3sRGK z1QU4So{W`$V%u{YsGy;(*0mBLEtSK#-o_#ZmsrnCUqM{OFL+%T-ug8BNd?q2e*fl2 z#=vDtu#7WVS!JnzSkd8`)6m>JetrEVT+45;?+xDL`REPUu2$5vhXD=lmqaD9D)FLN zy|p-KF-!L_8GP_7pURs00 zfMqZA5yg=N)*Pcq+9;S z<(=>FvL5+|rwjs+T(SNYVxfy=dx7C}xdn_aSup>FQ0E-pll>X{>;7lr_&9)CF2d+v zA1@14d4a7Io}H^y=i;hcSAuvYv_U6Hdfw(mev@rq)4^-98jy`1A4l@6lA^5qs2m{T zC6K~YCB}d!D(*VdF3nn+*lI-AK@zhd0WMbedIR5d(q4qM&sy(N$$$&8%UnPp8~zgk zs+gexi_kN52KcKkrC7|7ns+!LDdyn@!Wo2Us2t!9>+aBtxpRh&0h=?Kh~3)iN9BlJ zh$@`m?fTs4W`}RqokQOumZA#iAIG)3CI19=IP}EBlXm95T=c~Etr2J=q6v2OOP~vm zqHeyUeH;jVFahNNSBMRKv;;g?Z4^1e@0(`C%(HBv^FeGN$teJI^YAQGtgl7O@Z?kJ z!w@p(%W9wyRUFSD^_Tml$^eKStEqq`G;S?k9yA_#EUdd1?u)l16$I{>SP}>sh`2ba ze{T)`t_3NA=}2Q8M|Mmnt1JMLf@S~rqFs(mENpmcYS)HzR~+)mivaXKwnhkSQiJ^%*LYdg7qae=AWY<2TTG*9YXYs%%kb zsuVdiNPowCmp1IG9aiMLY?8nV8fa1Com?I))|B~B9D4g2J- zFZ+TUradtQet^fE*ep#Q0{az07r74@yCHU0qm00kv&z_znjcTSlcuIk3_oLYGHoFkpDjR+pE1Rihla@gr=n`w$21D)A;X7&|rNx3Qpz z{j05CYJp7th9m)-!I01oyq^eA!n=#}ZqL;LKsFFwn7@Xk-30@YW)n6uUgC!KFD9Oz zL(s7D#mjVz@-bDgkHjHj3c`et8$tLmQku@2LJyZbADd0D_ZP3~{Br%)W^8R%cEBVC zxXY)n#JAy&Gpd;Znlmb(q!SkY$WU(ZUFRmR+}*z`@XV^~%jzGuG{5KYrY+IC;mYC_ zSx*1uGQ3VT{c6`sp|?JG1YYF@k_5Ya&2>Tc;FOa7c8Gipqt`}D;U>fnW_61JK5h}m zuMqa9SDU9EOW6_)JrQ>^HXHu;2FoOALf7rbg_`@Nqk{*y$E(oK&K1`Ube^2G+x~lX ztFgahVwZbI?;xXWq3RDVN+jVRLGnACX5YSrE+}n|v3A~&fFJtt3oPP0=~V)M{qi!8 zNdc5YnjREMa@?jL3ojlQxt(bp=k2+?OX>9m3(5@j?9N~|g34{;Q?I8s0Cp$^c3EQp zidzrwUk>6un~vU)p}(sbeX)C+kE>#PK>(w6%(XGKYC%m^0Yho&9Sp1InS8Re?$^5w z4KG)Kpig)&bjL~dbb@}95dX?$TBMH`&=PmmsBI@E*OM-{m}k_T_GRJ=fGliImIVSR z6j8W5{x2`DLoXje(MHaQb_1GNBun_~+9n}jM64<*grp_)<>(2I;eOzj>1m1QJ$2o& z1KW-Qfik3O?b8NgGzO8nmkDJQF0y{hWyi&nVRh#fDVl>&uJlCpcyi$cyI93k z(t3_~@w?ZTLqM0JFTj|xUD#QMx;TnyvMoGpw#g22Lv_lpVtbSoYcZ_IH12Efw*+j^ts7B5{%kf5xF5ATj zVMVY7hSOq7%`UKB8&b(H7H5((dTb^u_E{8C#2!vUYyk*5s(*HYyP<@B;DBcMp~oFr zAOA4YY>Ke7Cx9)c4(?Q;Fcm}nQ)9`EEP`OVx|LXtGxbXI_rSI`(t##+q-BR>)3OYd zVPbxdpFm$4x7m%Wj*GJJQ>oI5TPIWsOHPhB%q=Oo7x`St#^KQx2nB9m(UIoUhf_Pp zZ?6T!``=>wT$HT;yYuM?N5C~DXxs@jEh0qGmMg5Sj>sU=d_YOF#2HGbzdn-SA53vd03i>bHfAQCaDy`=k1Vxe*FAw+>6f!h<^D)F#b%Q0bWDH}noj%^s>+LR{ zz}>ENr8zENqV@4Swz}axZxe)MPq16MIv%ba-_N{tNGh+89sTLVG7~LyyL3PKCI0bm z5M8xPLr~(|$C(zqQ2>G$-~9ZDYG)FYn^Mdf^oLC6zCKOY9gdAKD2UNZWJ)SO<^+82 zotqn;@tJY|1Q8Jni(Z77`0C@Q!*H#`Ig_erQjm zP(JsJn&UN>pSM|t3>VXps9BeRP!_5Kf??h$RT4l+xZ3bwGh^h$)k@3k>e|&DuvHLlVw|1Tksc?+xR7?3ULxEB-4m@=6cQVhe-V( zevgL`e&;FHe9jgPYj?=9!JP!D->IpA<)}3F`~8IfM8#)M*tfRN$jJJ&<~5L5aF`&w zW=DZI&J1(T5FNYj*L_xiO|jn0;sWR?*-7Ig6VW_#maBfupa*z&Q`OLtqYPXD-U2&b z4sm$HndxZ3N2;u@k|j^4=2WBaKSShL_yzCH{DELmxGZtM?sX>=Q|oTC0AW?^zlTF1 zC%s1xT7>UR{o!>QkJPe@-zcCQ|7QL0x(&PO+*b6Drz72*u&RDxhN!lOF+OQCIq^Gd zmtsS}k*iNh=`-!VoBGst%4K}Gm!wP^12tS&P_Xt@cfW|2?bJMern<3Fvx_*Dvc>)`AN1uoj- zS&-LPzqACPaEaSFey8uekIA4^(h>V(iF_=zT=)7u)VJ4vS-@)+epqLA^ep*(VePqXzfo$X zoAfDaaLPRQ8|TpCU3@l@05{4(tfxbRk|H3#3ga=x({5?w(a*7JAUGsco$|J~r$~>g zR>HoaTCq}7o9bMygq{ViUf@Bf+mi26=AHj zq)op7P<4E6e>6M5Z&t}bsCq?KsE4%4Bo8T>bS=6hUDM@0@V)RRGk%`eRw>AlT}#Br z23G+K%Y3fR^Y1nLEg!3nF6W+B>Z!0@M(~G36tT3t$*pTqMa&BFZJ7N`Y5*Nw_lO6F z3Z%?e?UQHAD1#Fw3kx*_i1czlUag)k!$lM& zv|npL#-S(@B8x(Lrxo0KI$xP1p`^&Uq!NJ2(&&dsdlr7zCC#n3{;zA?kBr}e^|n7x zpG&H)p|trz@Tg5CQ@xY#>qba-IdY#+lH}sBqQ-dX=2c&w!t|1~`Bc+QvWMDZ{9l#d zF>Ad4+C}ar%Rz#M|MkAC67Bx`?yX~$v4>s2){D6Bjdvo|xO@U2juYmMvqWWJR25V; zzN7z;Oh}>MCqW|87d#}M)+z6Y2hOt=>h`@oY|b2tJn%IpzUwGVn|zP_c*=c4 ztFW7Rz43n{rA@+g2CF4+R9EQM7Sfxt5nQ&-_~d+Y?2H^MqEFy;Uksf z`4%R3{uiw_PB8Z}F|9L1{Renl0$oH5>_DN#?)sPSKR_l=_Z6y=$Q!4U@YC0w*63s; zDl10i>T~1fh53qx=4@m&P-Osp)PGlFz(FuGOVtu+(e#Xplw6BsLY}FTnMHjsseK2t zt~hrG+`BZEjEz-A<4g=FQ}e_^~c^L{$B;=Fcb;5CE`M3a@*S-)IV){ed1>;egvD_9c%4Qar%LRVbG zSTQB}$U~yIMNy1z|9y#y3m%O)k6FIJgG#9Jm%ZS_u4B%NvFoNImM7#&$yD)sR)*&! zGXh%&B#+ykQt3jyO{N{}`?JW?o)O@bT&Ztendi6oRtU!D>+b{5GQht-fj;Z{@8e#;t!#(xnVi0QDh^YNjs>A8H#0x1g?k>R|HG$ zNlE3TQNN`Fa_N4ADkxwW?|Or5;Is{E;5HWO^XAwiXUaIw_WY6IedE+oelvN~5+;dt<@GH0y);pYW}jD%?<(M1 z;z|H}j+wnVGV(QF{C zS|+5}-L3pBvW`Ycw8e@*pHr!DZtw4fw}`UP9f|;{Cyr`MFtZayC=M z|2($M)O}m$RuZ@qhr-p~3B<(^qBgQr;FGNkQQ5eYvgvi%OL+?kycDgm!D5o~Z>K)F zXD=Z~;aUiPYhx6$W1;_5G1I_LGAvGD+x|D%mzC_Rmse)%>eg{Z4Xw>^%1i7fYwXnz zCq3Ds+o8|q!JdbwulJKNoDd**v0$Evdea3<$KIHS4dsU3=+KVJ@X654ZFuH&?FdGpZ~CJN~=+|{f9wX=Uu;oBob#mf74m~b;io4sjx8C2}3uKo&=cULWQ|&hj#&9!z z_NM}^a1s!rLI?OGhYgU_-83_+ZFu2#c43exJZ=ssxcSF7>br$k{%+G|Rli`&L>YQK zKJDVJbxp+z@rrF@6I#9yhhS_-G>AvxAq5=L_1D~`i^R#Kcr>wp1a)PM zoXEc)7V7z7@mVD-Q8H>^ZDV*O8)^7!^M-H*46S03&?}EkAX8TPlI39+>4vG$T)g!z z8oaP>j6|iJ1Ym}^>1dlMiV=s(hA7`&<{WzRjVT&Ge|q0~_=u>dmovL~%Nk^!tqs=H5N6Xxy2Q9WNrW)-dRdUCdd+oB+~J$dW*c)S{@1 zLr9jE59JKvl|}f9F#PZ(o=aL)i7JK~gJQ}u1`BhV5u}dAMSYm#PMf8)CYpyco?_%S z9avj_{2i}5UOhmSCbTX@PW%Xk5$Dw3g3SL3@M;xyoQE5zu0j2RWS|EHs$u49txyh) zqfmYEyW z%sUV6LFF!Q(s!{f7i$C){q5FN_+gc`;5!tI@EA*%_)FnBS;=3e*315zF(wV2$berN z+SV<4CR`8idq#i|^Tzws&sikUw$Awm=HuM`gH@|)RhC$ap4tEEm-5YGjSub#^Ov8= zOD0v9zV!&n7#qTPWMXJb8`^|RYvqjkZw!KW-C6f-uh$b#|5$y&)P(t*LG_%}&XPt4 zWl{aiRXx&Y_q-)ef{(qyoK&bPL>im%_%v!a$BtyIn&il z{Us4v6a)*6r)BMD^OM!m2Ft0)KW~K{tyeex6O*?%{P*6)T-|Gy@*+dp)q2y8Z%dB# z9zLl3Pu>r`-PwY5<~(ojI7&nI2r;*~V}h;WCR^i=AOxT;CrQpBA5vKfjwZeAB9^$#AW z9%h>1z1Hw>ng*E)WpN=rG8BoL86u@JD(iRfg_Nc`|fvH3RuB7BO_HxH7 zf>VWeeH_$9f}L(qE1F+qm-jCw-txhSO$r%D4te_EE5aDHbsQpyQ8l5NXT*U7!SHIU zs{ZsNbDb9nk>-!ZfnpJrAJNE2h~f0u>U(MX*m#-yLOz3Bpkf|ERpwK~+WKgqRihvO z6SE9L9l?#BT`9k4yXND1ruA?-myLbH(#;M0D}%7|l0CzjMvc(#-fDB8*>zePDXNFl#(1}*ig$Z0nilmCTy*&tVizOlUy{94Ga7IM2avS_jpOB1%1_>*33QteA5>2pG zPp1e4BKG@+)}*e)JaInH!hR0fJ3h zXrNdmLNpt9Xe*Y%5mbi>bmvrR-=4FRHJQ>lgg5ds9-DYj%r|ow-V9j5Jv`J{HWhpf z$9$SXr$F(wY*N0j}QSL~G_H+JQr4YeDE(&k zRL-8tLRR`W1`#?Ck53$Tw3h-(Cc`_hO^`{baMW{dF_XapFa+}MNcY0~ze_M1Hxtuz z4gdVv>=KiqD5=1;OpHcHuDUTN%NVNyDXZEP*zEcBMOp5}cT=qlTH#2rL4kL^GhQW? z+B)f8Kr){a#dId;ZO>+S$#t4Krc1n=9ab!ly%>^MjW0;lrcMmqXeo z5q~Ogqm^A)IoyCdtwnK+-y8qbC@@yO!02;)gDKZDuhk@Gq87to=UB`iMZUifk!@Mt zKXsikv+q>YS~A?up#W)eHFskLVH-K&TAi#fe4H<7!X}|?Bf-EA)~HpzNtIu4$xI^i_qT zppTuQ0d-C}CQHV|#w6aWk#4@zQxL7ssN@&XqpEq$*|L5$#8;dQ&}ExoBY?AiUHzQA zyLj`9Ioe$BTU^=%OEP>EBlkn77yAlpI3fCtOm^AJo2nT|eeUJthxEsoo(BsYWbj~5 zGaDS-*65}4Vy~hhisnEi)(Hvu>-G{$T0_8qcoh`rg}B|%gS|x0M8$+DEU{9wSZ0%M&wH$6-OaDVS+Ni_ z7*899n3`uK3Iryi_@?jPA;zPjH=yj|t7s!)$>d_F{i6%<=)fjL-Q<*jT*|ZJWD6QF zO!73Pq2X9&arDw%zDoF>ZdfXkjF>KwpW7k&(+0_A>89e`<2?$5d8b(iN2-Hk=DqBs zhGVAt>*?a_^T)kh5rQbcfklQE9$tRD<1Y)?*7?FF(#4P#<2N+^Y*LvxVv30`1%n)H zzzz{JP(yZKpQ1Ldu9ymeg0YX_gQ$wj`QIv1AW`XG2kbCs%_qb0`C=e3vDNzUdNu5{ z|8chjcjA55%2lM2q%V;kay$Ronb=!TFpfIvXx)!S!7@EFb2}ceXRrE-HzBs5L7_;^6&(FZxhgR(h$F}5# z>5bv`?{;uV2YQS~en&Jpp2xZl9cSzRnbnx(32k_o;KJdpeB}dy8TF5gjj8CFp58XA z?1^lVM@SA1b<##mVRBGn2qi09^I%ls5cV!T4WqJsC=xY4Qm0ei((khL-xRWa=;xhD z-WMJ56*X;Pm2A{*J z^Q)bqZm4WLYPqEPTl-ArJ2WQNu3Ic;oFx3|2Wxot;ba}Fm6it@;3WNX%oT3kKsfp? z7)aL}FpNzE6;DW~r|aw_(Vs;GU6O@nZ^-IZ8g+#Yz@uUOi(tD<+4SpCE?m90C$vn1 zqsVql!NSvSQqJ~!KC)kHj3kK{46CEjqi2md#i6!L4)zI6Nceg2{)XQAy2GT~ZHt>9=QNxLHG^Zv z*m^rZ;rSXV)Am%dj`7**Fe%=3ClXtMnY473m`2(AUu_+me$}|syA?gmSDQ$+%(;Xi zu*)$*mhx)Q?6~@{qLS&CdB0qvQkewHqOKS!nbH;aO9&a-c$a@$q_lLUt34MO>gt9H z#W%Y{VEGb(g_yX$wWbqY&boBKC)SXGveYFDU*qNT=GS8zoM_TDbycoe@!#*X>is6~ z^Q`<4Q_q%cv7K%3lfVkjORTGNU{p5CXk&;-3_toGV~zuoNQ5-p1;_B0+59(L`uw~# zXV->O#`QutDFAhDX>j-pSGEL6=GZ@*eckSFt{NDt(vW9aSXj@@CMCweWTJqeRVf%4 z@B50~c|DFP{E)$l6$Yt_lT^Z|git_l_7DyD8jSq|laz$RSxOyEZN0*zcQT}U^P2io zH@H6?uGBhXU-*8&uiQ=E{CU_VYxp{6*4|tO(=1fTJ#%Aw27h>^|iq7|P%b$h1rFrW!9IE&-s zc!W(N@4XXp*1<}uHJpU)HEnVcG5y;j`0bP^kD$A{p)#oL!!HJP>v9Z5ssHz<9s4|< zPmNw{7vzwGQ&-B_(e})h9G8~EBFkU>Jc#4l*!-`V8!csz-cD}j>C!BWC=-Me7NY#t z^0V&wEN=L#y++noy_Q0$=XmpG*9xGG$0q7gihpmxp~0MbdE)0jCn?u?FHcCS%BFg1 z1wMS{L9nvn#CkvLc@q&l>zR~I3^_Wo8UMqIV)S(YmGm67+W!VW%*)TBtwr7QX&;)H zZ{EV*ErxBbyQk61(8lH3PxuorBcF_gI)kRFJBsdsW>3?7S*>fT-v(WrM8B+hI@pi3 z_-`D+wWjoR>re`Wk0wGFYB+@P_WlvTupAHI`Y8}luM`Ycw0jl( zA&^il`6oI%Rl@g?*znZ#ahr>{+g$qo(2?>3idr?g|La|7<}Re+gC`QXGDk8JLQwhw zckXbeay3;HrKP2%YyoYP=%&4ZG|l`WvDO~+UVTX~-{CCdt*;yI>@N5d47wU(5fTEF zROa`CkAlY^KUX*1?=zli_P81jmXYc~+w|j!)R!!%(IX=|zB{1%^9^}RRI!C

HUR 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

FV>rp#ut$d-SFhC@pcwd}bXp4c0IGKB$EjC&8u zjwhR}jG=m&mwCk$s`=CG;+0gM|A~Ug_qbiMp2%TkH;DKV$8Fu?3za-Ubs0fQ{Pdl; z4i(L%FjAXRNc$>abdJt<{b=O98|Di~D0dxz>>CcgT<;(4x0^X>NYCvKRQv?Aw6@JyD*kLVzmd*P#$RViaol<~Hm)ykJ1FSC>*o0KaKCRkUc8E_$8K6{ zGerQF%-+H{xVv2RW!8>3URvRKa^wuedjl#1EEovIUy|oK{_TD-E+iR(YqS8qcQrOI zu7^z81Wa8KUMb{L%cJW9FgobY9EI_KZb*h2G%*}YbO0!j1nn<7ALjlxWL(&8?-74M z>-inx-gkS(mt`s4-ad zU@fH*B{69;_3^dMy3@1jmn&;dNB=ap9y%qnxDcl}A?230P1D30rK+U@ij_Z{_N`k) z8%+&dj}hT^Xxcv?CbkT| zFen{#VEUlCyt(jl+o~8~H^=!qC)-p_>&C_?{aK?P`l-7S`>(ij_F3{V>}x@eYzx*IT5K(9!2V8_KdpAUYA~+m4_JO+_8k*BT>`c;VcF^KDpkeNu$QUzXAkZNQt#D=&HDQ*{vHWD6U5O zt-)=WN7gj@bT(gs#aYMo5WY4K1D<&2CPWM=oOHXeP95`nU>@YRhN^(!zn)pHr%OLG zKIA)EYsYjk!O*G{_!d$K<6LyHq>*)LO;<>l1g)|-RrjY&rL?O#f8|EsaK?zX!i|%q z9E}D&^lerO=Lx>pbgBaL)^cG8s}R~PYYreo(Y(?sRl9z5;4eZl8Uziy|K79`y5x~*N{S4mTSUmfrn!B+niZNuate8Gdq>C(;P}m?AlG&>dAp~%^ z8#ZZ6bz1)^YdP(<{?i;whLZWdH2Wq!MLBW7g5XmoT5C;ej$4wKl_EzDJ*EH|^MCZf zC&%UCm2kngzDtLjV~gG2I;WT_u_}u`T^b2{e`l>#CgH zP9)S&(&Uq@{XUhj)@4iX zL+3*fMr+9|BDdQ!+}7*Rd^%dZC|#h^kGb-?p3*84IbA~J?}a#+JgoRT$%pL%S0p^= zjN&vmh68N!0%CrZ@}=`w+Y{kx5+UwVkf-56;q>Ul2V9YG(f_8gy9^Ho_RB~gVp|r; z!^tAPWcOjF3O)yI9c5Gt_L5zCA^RN|5t|%MX{|WUtF_Iu)y09w`tYCM1k#RSH61kr07Rvc$O=$i)T5wKg{biz$hUVCJuaYBboGSFa4R|qFQ6W& z3;fuv7aT->-$staEQwpis^ud&;wnNzG2BmfJD;(?ADkm5&ILn7~0Je z%tY9(iPF5RKMh$We+9X?e${=R?!fe$QDYPLkk35gVp0JFYrzkR&cVW5*EJ@y0MEmW zgZNWZllG;!IPyD4Y_Q=zw)(kr92+;7L~QH!IM*j(+WQcDwbqK4<6+(Rh|v3aUa+tF z^@eFVY?S=X^fi_evN9qIkKS+4`zp)2w$^Mo>RQjFy<>mCGzZAs&Vu6rKo@cqjP zdzx1+jR0A$FJ7A6{8_53g-6K)HKoiVij!3|I`i5PeT=CC$wgsLXMo?zvA@@a7q;LP zlwi-!@)in@-{^R30o*UGU1sudQU#@rW9RnQO1)R!b>Ek4E~8dQF^sodzjqHtfSd7= zi9xY3R4|bG)Eq4?!eHH~*;r|)sBKcOLdA8!ucG4Ta!&AhMtm`Bt%!?wb1xg6GPFQV z{PRd?>$fd2Ij=wcle|rA{QQGu=v4nvgu*nz7GwHlZH($4O>IL~vmcg~i?Fu1$)*~i z2#7(m;q8}QX%BweLAzvN)VmAC%o#1*x~7JS;;7rKcKe*c1CzveA&z5qVH&-{r$s;I z^D1afG2ujnUj+z(LCgcI$#oqZPw`^PJ#+|K2<9Hh=y+dMLo{i`GR^j%fEux2te=8m zKQ9-!W@Fng_Stfu5Od%E=^25WZ2C%+mXv7V zJ@{4~S*8971^KnCMkFO!|0;3@QkO5ZA(uz+gbTYd@2K?mtJW? z7(*-~GP%N7y3SZR)mRX06!&`eu$1{QRBt-jarAwf$ZM4-j^4p|JefWMO^gK{jVxUV zQeWs>I3l~hc;W3=Dz#3*zgghsPw{#5?_TLnF|Ci^0=akd*>T(VT38pruLAAu{{7|67$0HhQ#Y;-4_Kr)2hNqe*y& zkJYf6QDVsWk>g+r=Qjc|jM&>NC}c3Fj*1<+k^{qevqT&?OrD|RaBMb1ht z$leqRqtptEnjb0_pZf*3VY+jGdYJV~@W_U{l4fnCN-2-^i-p^rbG`ell3Jx^Kj4*V zL(#H}E(UMQIDj8YayNtlJg+^fIDv_Qva*bqcR=HTTCb;4t^#zgaX3B%Qlq$O#Vb6H0dcA`gt%K3aw;6N=6$f zrK~Tzs4zADL?odUL&ul~4Mt(tJ05_5>d^e$@a3q+_1vR^+m5ia)2S>Os$_Wh>ALg5 zQU5Z)HJVJP{GXteAP0ANmgzBju{NW_Y2{_1CQ%VCQvGd8HsAAhP`HXh+0*%b;M6qr z(p+=>=0NMANPe{nZOYG9$6^~Dc)q5te@eevx4DqYYIt~UZEsgB8`pZcGbrK7&`8Ns z%TD&sBc&KIN*5;HX#Au6CJnTx5S5jcCClJm|Hx7nj`U@$4VuR=3Kb*W$BGmv#}sM@ zAE9ud@on)$OBsl1uq7p0Ot#%lnLS0`4g8ld!uK>#c((DzQ>;|>RgX6gnG@L8zFD-6n=JlO^}dRyK%M5VomP(3v*tJnVA@vx$g`r|0L4d*- zi7Z-^olnF=*8|71XQiWn(gbx0WQLrBPPI?`@|H8%9{N(Q+sEcxu)&X3Z4zttGPSq$ zHp@g%rO5VgZ36N^bFi1~%Y;&0McxQ_Qf7De5Z${3f$G|O`aZ{WZ7seC7Z+D|dmawo zW2;^aQ|h~KRSS*;i>6TdY~L+k)H4^7R4Phntqr_np+;1`V=RNgQ0(&y-si<@1feD>R7>KwlScfje3dw`XNnuTo=g|#3%_nkZr z6m>GfXhSa@4BXadc?(M_lloOYDyVHeADoCOp}Z??E7aeOl=Eu*-mWlO2aEZAU^Rss zD9uS8!LA313Z3o%rOK$P3)`yJi_b(`|ClYha6t|wD@nyqm-F;s6)p=firSa57`=r1zuO$128T=$QIdz&l z0AY?_`rRQjYi_H8*nhcbR(>X)Be$)hSpHDxiYgmeZ8UoL-xB#-ya66ke(#6PrNIXuyJE}gK8)rJY zanl}*;oKYnwyEKyUXyhb`w%(u=~Vh-Y}%eD#sBW_m2xvPVeoPVs(BMENhlnW6XDxg zILH_9F#b$acQ$YD z-Id<&W<=sq9h!pp`wYRj--b%tf#=G%i9~gXx4I+scB(y|UV5eOfQHC(TR7TPVe0Ic+w&{O zkbgOK%Gf{xj6dO4q&onrrPEcnA;pMdi2qX=FN(-+Uj+G|!5?30`D-@^xSTSTtX2So znC<=f)_8!Amxs+T-GAgcS9Ar1o;h8NE~BJrt}ym$08>O3{H(_qkF;q3q!?ybcx@!t zbd@woo??|~v08}=+7YAi z0zqBZ`8#m^0w`>Vv&&tL_bN!OLR(Zl&7>0W(q#!1zr~qXj&UXZnhH;m(qN5fWMn`B z&GS8dqD@5GYhHETd)|h9mnYWo>3ze^(SF*1wwQHNobceq45Bn!CeNg~i~=s+zP|hw6JM`>Z+ZNclt69@!5@X2xD*?=J|45HhJ6o(+v&*#_G= z(%!dvmOnWP%_<8`KFR%LIdm+R$&AQ&Vrosw`z+wKs%(PwooK1AQIx39`}fDN4k1Nk4=-rppWy+eon@GaW1kF zCM#1I8#V{~=KNTt&l`DwDssMhW7V|!8}m8mODxr6<<>hZwvMBs#5Hr4OC^ud?5-z~ zfV=+&uWKR&p6Zm1LX?#q!qV!mIC81AY3E+V09;d>Os#rXEYhe<-v^7b@*TlWjmi>pG>!WCfXzasWvAl(kH%5SLL5;Ml*fUxb279!|B=obOxIp) zgd_^MvdWk=7WXkv0Zoca=;eoqd7K0dVg7FqQq3y03+69t8K?p*9+(@?zuji?e+XC4 z+w6nOcLGN!1Gbuge5SBKd^FR$si0HHH>c2sy9dX|Wb@MqSRsnx1WR6&m%SZn`coFZYBss-*dFg;)XDC}Jd4mp?O&3PX;x$W@++42-V= zX>+g@D(`DtC&hiA=5vjv@p)GpZ%u#zSKR-6=fou#lr-UDJ2dR>PcE~4yXvt>$!16k zXP~IPFTnZ{C@LTmEJp1SpuE*+vc{!TtI+Qagh50?Do8fm%;H{XYd^UtGl<@q4I?)A zw;-i0$R!P!VcT<`7`tZKVEmJ;F;t5>n%vvC^kDLVg3>QqlppaL8n4Q09tOT|2Nlws zXr}PQU2pv|GBWnBD~iAlcI>fCQG8gOOMrdg>WaBkoDzJFF=<*)7>_lK6(aTW0+xYi z6TOaXJomt86)T-mD&Hclc(YKr&zJ{~zdqfboSz^4v8pmXSo^MRe=Rnl*WwQ<3nP~u zi7vrNo)IrZ&xX~j>9+g zmJsJ`4*;J!GVqF*jPNM7#GDD1sh7N(y)>S@nnMLQRN7})b;lTbuVwOl1iUyqrv zX3r=y%tvavcS#tvjYgpFO=RwUX{OSX@7hr98176@-Aw} z%*Qve(;tS*%?;|*HM6w*!+;j$d;2$mh3!1?TtLfo+T?)eF-M-^>e?r__4bIFnYkzN zKsvqK{u5nlrSWV51-*7nx>9lC!!wkm)oj`K*c%17Ob7I7)#O*&6cDy@QcSMb1*U%( zOtfrOB2x=6l6*Sjg^=s zdmhYa+1%XvDX<%DGwSg;Wz^4!;1I&dPG-CM2_=k%ko(sjlg%FQrR?U&7<|qe!%0mn z22B9(xII4274_TF-o+@O9&)p>N)x|bv*P7;ztYDiaMKZlCA#JM?0A?)I!;>jY3ufJ zF0I=iLm)$P<$CQDSPA%~FNk?S9<&$}I>=H*{XMT*?z)_}WT#o9Rjbyu(J-$Xk1#4- zX>*}-AShIZ1APxh8z^&uM9~!8#M7E-x8Wl+oGXCL)QHkxfl|Qm^3N&z6VXX(go+sLjjEeYxGPM1@w_ZfW)QnbFsIdV`#& z-%XmUl_TS{4XfpvzW-Z9lJ~{Re%qqu>cHYkD~A60n$HPJ393VVh`sd-dzU<$^+9WB zG58mvGwF5m+mxqOpo(Vr&m#tQH0&++B^%Kq<5ogTf?+uIJOZ&qQ{V-CV+uJK1?X>= znzq4_BCLf8V>{A%twH70ooLhbnqLj*`W(*NZc1L#Q3zI=9PT-HtUKwE(*lI8ayPwiH{#ls&(dSAKHe18Be@ctGJA%C_a%6G);w z;B)>cERq7E?CVAnFa{iq`Ri22oP7{!Yyy>$Kr%7|K!t)H0?#Ph?tb`&VvGkH5Ubn} zdp(BP@L9ga<4rYifr~rxIGiMXNfkGEADjjPS>~Y1pdCW>z8I_ z=pI;CdPlQ{ZjzPufKhj=F)fKop4ILGl5cqQMN7wfngUUoZ_8{02D|?7^~=-ou%Kum z%Va`f7+?i!W4+OqlFjSJ>ih_olr&$Yxc<35u%~IfWv&hiB2%ioQTg zy8YLC!|;$1NwDMf!YcEoCL!y0 z_-eA1KWkl(g=X+s>Tugbpa|E8U-b}?-l+dMFvle6;pD`Ek}_6fwkkqVTwFXoi=cG1 zLfK9Rj8#f)@nERwKue7OFrk3^Wv#pMxqdMgR0(R;HhrpFoXG9==MMUE{1+FfunHO* z`)+;Gm`Clido07qGr26U`(G{&?)beP=hOl5^`-tVP37W$J|srD|vmFboIZ zAXH^wW;Ikc$$4$LU>YRmuj7&J$?E!^tEN`#Mkyjlz&PLiOEAGzB+#N;(9Q>^BywR= zXF#ISAX><|xe!hx4B<)#sL924d?{zmC6}s_IZvSYTI6h>oT(^(xgwg>GJjxDQb!-` z;*h_Wwf2p);nTNeC)2m?H>4O28qHF+rr40j3Y4W(*3$JqNMjGHv}gN1zr^yac@RF| zKXHHEKjnfoLKMkv>T-ilfQVoe&}uBl4Dm(z%!iIvimR(&+J<@fE#0Pk%sEgE0R^rw zUageKpaQZ13sTQL*^)8FI&!dlIo||k4my9B+g1MyIo@z{w7>xzVwvpjkI+;|YU^~F zqq$F#4bT?s8PF6qJ*xMWHR&XxEl8&v+5=vjZ?-=?6DQ>bMwH|D!_-jB=36xEL&c?z z8b8HT3Y+1^Is#%dO88i)TdXOvNaY55``WVxwesE#!AB&)wg=m;*TJprP<-1yt__v8 zu^&>Qr>XJ2@XOWqiXYyL9mm==lu|ZP ziA$MWAg4orlOT<20jXAPO1LqO>j$4Uua}dH3)743Z%}VeI0RY!eK1icm&6U*UYcC2 z7ST;p#8vD+G$iX;dL!~l4jF#RRIbJ8(HbGb(E!mF8^#ud#nv}@w+MS@hNCir5C5#R zqkj&&yFYQ8*U_6^^ohMr5xe~!u#(t zEHaU?w|7=q8P9x@%kIdGWeItNa0Ft)uuRji?%|e6#iBvpEG`gzgTj`ot2R9()=raB zMJs(oZ`8XhrtRKaT=BCu@_@rgV#peUO-I`u>c>$4f z7AZY>K}Bn8)ojEJi)5fPHBDlyj7S2EL$4yHy#u7H-HD~jrTn*f-F##EU*r`TVaX{) zrK~9U+r!OKxCm_49@Xh6H69x3ai`W+%{fGqW>gj#vkdngl+I{ z_P9XVlRH>PDaMX?pvBfr%YUwN{v?ZMCVBF0<5ib#F_wASTu<@O*VN`Caj$c_cL51+ zOJ7}7VQ`KLIXL#q&`*>tNrP;hhN%s_g^Jy%rOYDC-4tnZ9?=~oR|*8NK+3_H&b+u^ zb}tZLuo%U8Xe5x&civwvjLsIQ4kND8De$LZ1JsWdn-xnpNuy7}5eW`OtjRAsvAkV9M*_DL zhlmsX=5%U*TUg@~2ol-F^>vbWnFrlK)D$>G0#iAJ?Kt?vgA8fRaN0(=-yP6MR6|Ef zmsb-%HBE{byV4amuAb>9!od zQ^%;)zs(^^z);({5(l$0+fu663Reua5W}nHr2{vJ1@`wJ&0^av125_wZ1y3bR^TaM@lz3`Dj)lgBB5wbkjm^C<)3 zM1};JwS9jK=XDb7g~9FNq$CZEI^DvlOR&-GP+#-Abs?82O>ree87@nHU$cv)Wu%?o z3%G*cjtna3cEx_vbE!&aytY4V?ROpvZce#90k#BPNh$uB;1!SG$Ag>WFrgcYidE}K zQ5*}BP26f0D7y$x@OQ20`R6GuKY`rG{c7M%0*^e5o5MMfkT=I@f1i3dHe27&J9Bo{ z!I@G@xg1uhIHb6S#+cCQw1m30hc4?-CF*B1B;^n(Xuy)2DZbKiy(8uWTi4 zm1=8fBGkzk)j=0SckLaW3*d^tt5s`F*8j?F>Jt)a!j;N4S|V69yZl67BEx2>RGAWi zM%R@>j+%4C%>7-icO4wJq*l0xrOKJ@XIP4pvJ8vEb?M)z3)v*m%g?N<3rVF| z5osK<;>Ad+t^G21FFTShH{Nszw)WOetM;=mTT&edS)l-zxCw{_F5-HpyhlBk5`SWjiiC_as8tTGiRi$Rgv{qI-TN{(; z(av@!6mipmlV~&-x{AFNNDzhA8fF0+Zu$BoZlTLP$NdikhgQB_mLAmGFvaArE5z z#0N|i*)TUuMxwx=d>g4-ognsD%h`r5_-YRipL5z&DOpHODu>?I=4l>+WsW#TAyeYy zn%XHySfAfw%y!F^#Eypw_2tlUbL}p;5>5}4> zO2m2A3vYY6SB<|tY)y+k2#y8tzqA4-cTbB9~=`UMm*1jc6(_ED$ zw`*{@v1pbacMQss{+3??QW)Zy8~iG;z248bQ*(0nKee8&Hg*E-S((c5IkEMy%^XGr z9jsBX2`9IO?V3J#yH73Z4fg)#ADeuw%c&Yc^#rl^UEFWgmxw*+>4bE86TmVfIwnTZ zamyRor=4uPjxW6_x<}sUuQI((M>Lm|5LLKJL9)bx%+Ch%uWwMd890K2YhUqOou3ha zo0!YjFdPW%Vs*95GA$e&8KK_W+l!8oZ|c=z4Pwl}rHSwAbHE%zbq}axNIGE6IjVJD zMLV3%oz8SQU8ymEI$g?@0H&Lom8<*e+*ps2=Q;7m(E~;1WwUclmXgE0K)?LA+}h`a zqGSC|f@?0&zijB1pn!f-hlzaBlaPeGv5N71q*U4zLI;pwerEU@^E*PF#^JQR`rvPQ^=S4t z$V4s^;CQ^ARYW4>8A!#}wQbMjDl_3#q5VD+>R2XIr1coUpcz(~&Shsr&CX44(6{ZC zT6{*G#wBHzg&B=`I}l8rqM^k{h(;ybCt275!snAu#0U{NjRqA5pGpC+kl@r2U|R)z zJaI~l8mSFp%{t2zlTk)_Qb`kabo}K~&ilv0_h+l3na0WE0_G7?vh8`MA#Kx0LfKIU zPKQqY8hRh=5IwEp+b}3ry6zVqt{2`hQA|EmeWR*{ERS87m-W3S!KaVu+8K+te5ni? zAR7DdzJ|)S+`rMcOe-UHZ&P;j%BP0z?&$zkcl~-hUFQSl7#bQf&#H4ixX_g6O+SIA zGxfAJ!$PS1UJ!G<8a9*i$pI%{c1)!(1=g&|u0y-B)?I^1I+cE><94auzSod81@8b9 zeaR-(f&h_e zQb&!)mubG%jM-}zpxzDd54UWMK5A)DirVa4RZ)nQ#rrjhrD+bhC=A4^>zbU0eo@Go ze%bs$CGzrS+iE>!EKm#T>LMB%9;Q*Z8juP+Q#j2MUgq^|ar#qKD`>p+!WsXFy(cpS zy5_0>^3IKX_Ycmpb0?B+*={5RZ1RsTUH)?}sXHh{1 zmbPRkyP!0cQ*A`mjuQvtiJ65cj`RYNcoSS?!ABI%4R5;K$H&qPK|i82ZBNu`fjeW~ z->w8BtTs^A6!0LVyCG=5J9WRInORZqfAhp9tBD5_xy?8Xj;A~{4#lLiYSbe*(tdIC zh-G<8^V6Z5pO*CWTY&j@0y&E!#wZ1k##0KBy6Y_n=e>m9J86cW{gl!P{&zIEAv~T z^{du;<9=fuz=2%AHKcD3mAkWJfJDSS^6Y{=H)dGJZer*e*bO+hAC^(&nC?BL*^g4B zIRGp;D|2b?W=?O@gF6NVbvBjJ5T%mvDn)E1CIz=x<#Az3tbFTkb8b6(W2!u0SjW-w z8pp!1Qn#oh-CWP%hncvbmZQBzX>4JtRZxUs>@adznsZn->^mm7d1q5nS`z+?A(@@8 z`-#T3?Hvnm5=(envFzvIAvNe^s$A}2m$VcIm*4#_YHBReXYiOh< z{tcv|v_ZDdOf*S-KBLAav3}7a01J`N$K!!Txy!e}zE1Bv<3!6Xg07pCE%HdMmYiJPiUuy{N1^t3Lz#qim#KheL4x5( zj1r5`ANEfN>I#+4s8-CRlrp5C*f_mE33w6ee@pPC5<{II{?(fAI2KUv?q4zY_YY^_ z@D7$KlK~rlxmeEh^mKhg!$7riF$@YD&6?9TcZxX8#$W$Qc7T|;DPB9Mx3@Q74xa`p z7HM5r+-whF<{ATrL?m+p2;5feOPO7m}dIBdV^4L-|{__RraO-%mno zkrg`DkxRW(pm#9%a?qmtwwfi9-{9V>MCUy9Ty~SFkR|mTvWZZGCIo9g<$NS?0f(`B z*RkuWm5J5Op6EDw*|lp7sId*5os)a+u9L%1#pui=8oAt>YxRRRpmw=_NJ*9LqlYqR zR+hwUcoGV{=7U@H_e|314`zCOtUdqvB3*#v=%gQuSrzdN?kbc}K2JN@2agX)PaR3? zJ&~zZXi61pQ^YD4HHZ}e=)-(^mD6?)(tqcBKQiA$zG&F*R4e1wDA6q3XjrMl-4}sI z&B+TBhsdcjg7M&qTb_0*3DzQ<#bpszbk`d6UR?|o~`DO_Yf!ujVynb|6CL*nK}m!E<5lJ zXbTjQPN1boP?D$)V|(%>>&YKZ8ze!gfrSLx#pa>7{60Pvy6vGkRl;f&8pA_TOb0`5 zoxjrbR)_A-!K-a|VxeJS7IK_U18Yj1;|Ht<1STm;yT9j|DyE=lvSDe_Bq(qSBlcLB zaT_ntf`Z;EbemIeIdw<=sFwfi@@~Z}L}^M928m&mIxj-*Qa4gx*BZHx)rOnF;wUnz zT7-PfjEUFbb-fXMe`b2x`ndYg-|T>)*KP;~3*Jkgtv~VHT}u(rtSw<1B4^r$iAsuY>Sl{p{{o@&KXb*Mr)&b7*dnZ)FI$oIW9n7UriK-{IyCulLI z+hx%9#Enm@?i+e!;PS=#vlv7sD#2uBm< zuG&acjgVcI0#hmx7R*CI&FulhM>as=wD89i;kzgmk;%Sg}3D=&|7Dd(^s zEyh-?mPb$K0~%>*6nApPvHksh4Hs&jMzCCNPAP1hgWOl*Y@Fiq_Mw>>MZnB*YSv-VZc0zK>U|9KUz5oUK>Vu8)U_47Q#SY@MEzW!-TYZ0(-5#?zCNlTYifuhxOM z;vSI42g0!l=VE#wsmu^H91v~v#7WVdf88i3ajHeXZ3?cS#9}DU*PTiFkZGU4x$D>M6mQ&kbxZWz2>|sli47=s!V8_t)6Nn-fr1I!aZPOjND zFqvfwlm0(uQaMsR;_9c;*=D5avI_Rw2mk@bj?wVBOEQ~NiMd{0XX)QSt5pLwD)4AG zOa_9YN|1_>A>h$RbNSIzIYF4!-*nF8aJ1ZQ@JZuf2ex>FiO6@z9xuwqlUo*G;zQaHw1JF$sh{tbukHx#>Jliy+vDpz zDFp~zs8*OJlM;B6(OsNn)#I$y1=UKlMv*^@c$3t-%H6LPz*1_i1z@AEd~&>R915t5 z%Kh>fYP7 zzr)+aQ;6Hto;~OX&$0yRL(nwEh>8zJ_;99#f)WZ?WfZEw zOC|=JsvLDTua9}zwPQ-)Ql7f_zV5wv9F`qL^h0lzH%ynVxYf~ zOC+8ElWwR2(;rc4j0*I>Rip{{9iypb;z=ijSL4fuRKT)7qP*o7@@j-EFgUm!|Dk}J zx`llH2vhvlZ(xA*vPET!;2s*0RHdeS(W%y_7Uko4O@^q&eF#|ctm1abec03MN7 z=!4&}D;ATEa7m@UHrgPYi0poHenGA%2+#%mC|1f>BreYQIhMc@Iw~by83_c36D?K= zELBw2UI#|Cz7@Ls*SycnptQSoO#m-m_h&mZ`J#Y&g_)IOuBrf!%rS~^EgGT>!Wy{= z1IYqSgGbAb^Qcm99Pp3QXtDn^u10S*coPE*AqdpxtU2KNDJy?Ru()2IUYr+JcZan) z!P2Bb6`<^zTGFKa+*&Lfm9lKa3s5&~V;Ky3*c$$uLif1Hv8R4|Kk<;19h3H-ueJ!`_l8W+VzHc-(8#5L#J52(p5}9 zZtp`Sp*j8T6Vf6e?4ss@9vXYb?jbN$=0<^+*P(*0Ga; zgg_yuEyhxT@sI}Amz9Oyza{{?HuXuHqTu3Wth8zKU;n5aevsglHHug;m-VOIb zAUGWHVT$CD7nRxYg7&bOIv;6)L}{Ej!E5CvyDf1mo*$M$iQ6EtVkMIAnWHB(NM{?< zSJy_)4|fIHqbn;k;&NZff?c%W_te_m-YUh@tvV!662)1{q-av00HM_oXZMqAVB#>Q zx^^!h@LcWo6EreHw~qlp1R6NLhngb3p<%{G|r>?n?q?!&3 zaz!>#VI_;!9VZ^RMr$wG8`7$_Y^M#M{FTc1zTl)A;H_{gL+D4Y3je^@UtoKtv{~~B zLovxJwyD09J5>AxLGG~)AHvvc{q?ip@~L?GwrwG5m08C=xiq?tGCZp5(P z*h~Vtq$-b*Y%~4mnE1L41l0~d@pf@WHIrye(R-Z`;ub)?Il1n6T6qTk_^kJ_#<@~! zgl&ws1NNZKdbRVo;I_r=YK)O32doGV5EhiFn? z!8b&PEYP>aptWk>``~e;s_r<5sa|6`iTCVzl$Q+d3RMCTP$6R}$FmBJXe<0IZIu(9 zo!UVuZBp1fEXdQ;I?sjVa`KkS9Fkcs#o=)b-l)FZPf^!3I8DV~1=`veaWZTVw#O z{@vXfL^rZeu?BrB)Sk;CSe*t)`=52rFsIYq1C(bW=V~P*!K6!(GM`nv4(AyVp`to9 zAarLhG$BkvMl2G^;R=~WwqY49EW^=*&{z0n5>MU2ldo%)JD&fRcl?`+I$LkdhWZ~z z=inFV+eYzh+qP@7?ag+Z&CSNPo84BMz1g<0xhC7T@jk!zADEfX%rp0W;hgh@eOTSC z)LQCxVugJ?H@n`U{=?5TwEHMB!MJK%tVK^bfCN{PY+L@RPq-4+bBiw=5CSNM>#Tdl z`{?$3J=X_GKYF!)>5;p^zyKDAi7ZMc$O4Bd0YJ-yZ9e{lcHWxTI0<4~fbp*Cy3i8_ zkjOh}5KRutea0WpIrXQF+VpAVlHqLLgjiXX)*G#7QytY)(Q_N$bkcq_zwe67@!}Hh zuML;cS5PBr&+iC^*Z4N2hE!Gk#lBR;4BNd?Xby~w`<$gs7;54ad7Z~xdyeUrD#?&6 z8Ts?w{!;x~==pjtnx*DdCPT78k6vER))1Sfc&M!T#K3d?``W_>D!Y@T$o&vpoX7+3 zQ zwHP*}yR@U@3$wvGY+(NzW}%>6Yd)&>@^Z+*%PX6#)0;D+PRr}}1Qv6^x$i1!ya@*6 zthE@4wyK#rZ-7OmGMNuEzM{=aAxLF#sm3a_8aO`2$YS09lIyzn+%!L~lj=BZGXA#F z(fYPR>{(;=$ntQp7Q<104l2wm;CFcu0tkD*)r{mK^WmnxKL>uE2ATr11-~oG9I8kP z$F6-G;n!v3ebSGQ%d2FCrD$vJlB2)L=jQ0&ene_kbpFt#kRB|woq`tF-Ef_JQ)oiO znlH->E!b5I)5g z@h>BDW=f?C`O`8md(+&8n%{Z$WhKjdXkg{fq@N$|KM!VcXK=VI>-k!7b35xdBiRed)JD9pB=SzP|?w1QV^VbWt`NX#SfxgN3g z4=Z04_+EgU07`(S6aQn23Z2eKWJ2y5lU_l6Lsw!b1W+(%?Sd!c1hjkne>JF)4Zfx>YJknsmp?dfX>ZQ3r0vU&=RhHFBCLMJ{ttsV)1kgYd< z7ovLeQ4By!`Y#*w=yo$e53xym45w(R8lT>IoUS`HJ>l<>?9gq^o%z(IoJd=j^SNgA zyag*F+bKMBbYz`b$67=s=dc=#onH@H|6PHsfh$&g$j4;V!TZS}*Q!SG%Rzi?VZj1% zoWJ2cojB9ON_@TeEGLx+*KCMowBd1B7xc)4O=Wo2D@{SnPPtZM6?$7%d)t=8ZlY9h zkAowdCD(qD`%}MHng8K^4m0?RF7gB3tuM7d<8P}GMjwo%Whilk@QJby0Bvk;QWK{| zX-`|m?Zu2|%WrH2md6YiPulHl3J6y|PYI2!j<$e}81F~{s)%f&Xc=ce$?v>oePdTd zJe+gn=SO({Fx2yvt(V}h-|C|^@K~0-gqzn~5q%#o_NPAY06brCgj`=(cDB*ZNF+RA z%)%`1aJ(8jmu3k@@>#uk#mDdk$WyISLoT}KTF}U6n>yR)hFzb}0}_osMhkQEoMIva z&#byPDNbnec1pOvBm7pU(}#=4;FD#sLbw0r{%~${Gj4I(dXmcF2%#7aS(Gf?3VhR# z1tci-N7|f!A_>_pC!Go&7%sfS8d+U#blR^zV6Zy*{u1(iU=!vyJ&a8R3PZh0)f>n# zcJs0eI7j5UWh?<>-xPIPWr(YhP}JKeGZE@oz4%d&eucv)-G@is=&N@FKh|+NO$Lo} zi;PO7U?BZRZ=1@jB=%N2@VaE}KC4})&Yp|3^&Qi|bvebrbu^rg+UhO=?D(0ES{5Vb zaK(d(QKNKJO<%GWW(g*1wPX1qHpC`l`J`h}whUgM85mSwZHEeeuDJ<5Z9$%S-CF=+ z!=v*iN2z_ibfEt=3b0|E@^F%-_?_{W5@Rm5u_)QRjM;~tdSnM`^Hvtwt0<^+Ils9( zjY+}#cAO#{H!mmu9!w>^jGfUN!Q`{=Dpd7dcyfg@NpR zm&KZ!n@g7eIP-dE0)5?!wMdElPJ~Y)9D6DN7|*CXKHr;Nc4K&Et(9)~cH^$k16!g1 z9de(wRI7#*W~1AWkoOaQVH*NrGL%;YxB_uW+=v8Vu~77X~3@ zCd-lg^R`?#tVW7OYNp43!2z{OihRsQc7VK5I_H8l*4XukyL96?hX=~Bgtu`Z#MoAA z^QB z{Bu?fgu0@KmxAyKhkrAGhfp#QWT0_jP+;9_ONl)v6l04ps3s)Ki&6iCp$itjO`@S@ zu(454pdt|eBMNTDLV^Ud8pOIwXqJiZ3$!`@lN)x`jW1^BZt1nb)7B>uS98C|NH>Gdh}J*rKjMTBvImjCR!vU)l|QS&gNg{P>EVE} zIh+EC8vVhcRr>GWTPLgmzk-9w0fkE+HeSKVDh^zB#O3oyK4Z75dom&`&_ljQjIMS? z#+ts&(|epP^`0!?0@t>+@j&d{?&%4}utgZwKv95nYFw>p!NrqZvjDNx@A6SVIJL+XIvw}Rq{G%Ei}GPg>A!FMT3AwWQ&KI?!_D1;H=1S! z9?KTIv0HXLYa>8B_HTYyq^YFjaSJNGA-b@pU)AB@ZS&<)(8qE7z zLe>7xsR9^vzcxlY8fy@Z>A5(AdgAM4ciQb@wb`we@c7jYw!v%4rrEHYy<;J*S5`Uu2M?8G|?LNdQD|dUY zw2wt;tx5v3^_BZ*CPE7nYwrZbb~r!9UNx66QC=ZRigT8qn0e6+ZtrcQWykm%%eOc{ z1bFB<>j$py^-C2f%)z2xrk5to}UqpU1xEnxNhzdE}@M`&m-5AqMcO9)fS-6JwipY6jS$+K95 zICDcUCO3K}zejSJ*)Sm6$rgkAX%>fFuEi$Ym3@8fl3J}NM>HHA6N?E2o+2Mk7VTiF z%SN-3Y+$BHTTCt2x0bF81Zs^=Odzcq`^R?rKDs_l7iJlbGcOUql8e!kr7^$QTFe&y zy7bxemT$$#n|{jfS63Dqea5W+R!PeL~EfxB-^z?M{ zXvplRw7@=Vxec`em&V)Whi7NQW)q8_Avcwg`Ad^zi?&=tL(<@k42*~j{`3el(g_yK zjI*>3!)tlt_HO9BRUrD}b5;auSAVVH@-*>H%L?qM;Mu76O5)+c?`KRNo$Q-pGJ@Og z2>vxTg`&CUN=EKC=Q)|#Rv1x>MUdIp@SY5}QdT1$9pxNrN+SY2q4jtTwGiq{uS~5- zW-Gbjh3q0zBhzgC5)xqnqPBW1eJkwVMnP_|Z=GMan~_LyvluO{4wgUqP_lg=yc;y= z($yJ36$)@dXSpn^O+V59!VWa8w-hyud(<8BPup_qd}&G@9i@DGHxw~HWUQXEwbU5H zc6X#pE1#I0R0Fo|non`vb)2ly2b75Wh}&O$`%k`Dmq0FGgh5GZ zhu)_L-yELQiv^Y{j*V1S*eY7k)iY6s%I9$g2e_0Dfl1(*uM;c4Lu6v&yfTa+gFC9$ zyhe1c)L>q|XVszZ+O)tZY%Rn{^?FGE+?$_=e|dpf;<|>pb+f`Ny`NFUnZ&q$=NuH7 z1|Pd!WAL2%H|2VFg#P1)c7C$?!yT3k3hBDk83$gtBi?&mdsz;p7oaNdI68) z#@_%Y_J0mSgN6V|N9z%4Jio#TG4J(TEwDFYy=F8z5Q0!Xa)3!NYmuw)pO1Ke6JxaU zL4;Y|IXN&uNF>ZDmu>0QrC{9Hck@ARp3R|hE;E*F77?owJ2s&_mG3IiX#4$-ZDW8y zzag7h!y>Ovs`SdlPkD9@Wfwuj>1;lse>`0QUrH>C=?AfYz`(HUVO0o3golTb!6B^H z#x?s~G`2U1uP)lwrqKNH+`!xHxK~~RQk$HVIz~}Ro&}8F_T7N+*VgJdtt#inW4K6& zC_?!m9UK*bORR3A!%q+?_|s?GBs7FOBF~YH5g)Xd&f0!k$Ovi$UNajY1rIr`?#_IeWjiQ+j0au47iGj9m++an{d2@}lT= zT5@R{zpuVca%m@VT6zPT6tA~ok?lre%!b)8HI?3b|BSD4Sp38?p$3e8!vF~}xUqHa zHus!&yIc604$!NyN{qv_p8PEb1U8wicZsYRX$&S%F(96@gDE*B zM%C)oAU;5eP@d($J* zx=$#bpLIB4`9MtbOJGA$T`tI;sEwarc0E39xfSqqdrr}h>dE|`xZG3}O-od#WouLX zcT{MzGXj>>E37AmeJFmPzV8e01Rg$38hX|P(dqd$l0<{yeP+{gkzDH+Qmh0J;jE=2 zxXk&CSls#6`b=td(2Z=1B&zh~I{Kycm#eoN0-jxyh*M6xBQtV+Y~~9$szbv(9Kv1b z)ZhG!UAEqZI_}=aI~s3={CJ9&6|eka78hX#Ftrx2dv0^-F>M<$GMnu8t1ntJkqKFL zp0+9926NVjCP6eR1d3a`CWo~?_+Xu2K@(BP)N@K|r)?~V|H4`f^7(oD%;JQGo?h;G zdmw=sdtAU%X`?(wpO3XI+t6gdD(@Ul@oW@0*!sB!A2dffudfr+Mn(5BUwP4MEl=6I zNNaj$$#n=@HZWDpwTvlPQz-sz0{7V%Lib_+Mx= z*8AyVnnATTW&P4(fPc^J$ARB1t#@o4JrAI6&R1gD8?x28Lq-0=*%JNzbdkNoJ|4R~ zm7SAwK-2+>^$6j!QS*7#eP`}=SeAgfxJ3Djw{xQBW5@W%JM8G~p9673)Zj}#FYehT z7MLFzHpw%|@~S1LPSM~F705~%xYq@zmm8)~M*(e9CEW?F`Wie81zo93SixV2G zE%=6lc|B&-&?A7WuZH}lVkA=wD`4Q^RnKPD)P^@!Vvz}}&M*cY#tf^97H+p^c12KN z2xzR7iH7H2UeWr_{frnT3TASJd6W~Wn3$N@czCRO73oLofXaeihP~>P5=kp;_8u&F z0{6-g*YvEzrA$q_g$0U)7Kne%!pC3541ryE3`FX8FX zsF%!Go0YYQHb71wh3500Yx)?~iZ8%D(soT|&Rj@tdO6jLxDuzHx5@pYf7W*usZ_D4 zbb(>w-#_e8AcN$IS1CwK3rWsa4iAQ^5+>VhnUlX+)EaH+wiFr=-rg)JlUVEyeYJ+J z96&e@4<7F86HKukJz>TAa*HArtb_|Tck#_qq8*SWT-xJqoI`Bj&6%P@N%2$)!F)^N zfsKa#vBJXMhXwtq#wOJ$W#B6oQFS4sU!G5#bVD*OH&y@5Y~9Ks6jA8Q^EdWav8bvq zVT%N;Xmsm15}Zw?xGeJU9A!N%P+iKvRRnVC3O8)ufFLs1SJ%^~$9G#G3x{2(1*Q2@hXRD(=V=oSio}DujBuWVwPqcc6Gc*bUPs2lrDVmAv zXx+A0v6WJyIlTpIjjz1emdrdM{DN(YhCEVa&%0L|#?-AfHNA^9b}=@e(ovG^;L%B= z-+kMuPQC5#9HDphfR{bi(v-hmV&Oh!scf!j-k$E%>fAiGkYlmCWSUwPLQke9S(@TG zA9-ScR^^!Rs6->Obdf<))ujE^d*#<=jL#%cZP|tL`2KiaZjEh9N=~F>@e~!Bx)lwL zQb3dRibV{D{8r zQ{6%PA@#;lYAb3La3)bq@0O3QEV2?ZBKY*Vo87jyvKiL3_!KtKT{wx zN{D<)g8_U%;w1EyEgz+Asy%(Sh3}DWcEtE9O;0HKrFQUo73~(QMPUh1(=3RUG^$04 zEYudPJy<4nxGiuXoEJxOvLm1HpSq0n2qhartFgU?mI@i%0tHyQsoy2{Z2hqvJMWcS zKTsWkw>CaZkO}Bn#cZeZCJDw>Q`VQ>AHqzwop!FO-JHVE( zePc&zfwE3kEU8^i{EbDso=3EeIrL(f^+ z6WR1cyFqIGCg*YHX6JugAdWhFYUw9y>Yv}@o_&(&5M2Bsm`*uH!qK3rLKnF&=$of? zFi1GY;X;23HY-`RCHbEAH37>=L>XL)0dPHnfW~v(uICt$gS#?(2$2C)qAM!>ZfE?> zwp|o%$0bFg1u)rqnry4hm`bfkXMc`mDip)y2|1h$!TUXR!M7`kiK%}ot_tR@P*cqi znRQ@=hN$NVeblSoHpq67#RK1PCU#y|Vm6unT_ck5!U<|s8H@%(f`NU0o^^URSb+RN z&&#jTj~kB{gr^G?YAJu^ixQby&A&Dk>JY=mkvq~7L$I&6tOsAvz*Cth!c9k|Ko^F> zyGsz@d{xAefF%@AANC-Em5Q|2O|sCHWsqwsB+$4m=h@s=^u7EryL7u~eO&*mU1y&t z>Qq_cbBSWLWQE$j{rVa(sE=Z7#bJSKYG%(VNuc}vAcZ^)5^~@6A1YEf4jg_Wl~72} z)o$Q3>vf6n+u`r@O$i>|W|#!E0n@Na*mz}ymFe9)Ski-%fSYO{AWfH`mTS*71zlSB zvE$ZJ_-z~24J34#JM-Jb!;w&RiDHy#7|aJPc*1ReOD2^_((VdU#_~W^cg(`ik9>MX zr3DlvKJ!zM4cewoDb?|6Y1eogh=LR&34C)=$`O`G)#V=Jjb3W^WCa-q3eAp-Sp!Ld zBfqqjYP(Xuxo<@`bE60&a6X{xaj^25dOH1bGu7zz8YkGLlOD(`~+yC zxRq2gcp9-^pQ%o!t-}9JCrj7O?0;#T;>E=OZ%v=`c^fzx!$Y!DE7Lu;`9Ub6kYMS) z$TJC=YpRfoHmA2Z;Mqw4I=(I-0NdATynxciS| zyD2a)GpieYQ}1h=+rSnO;J7Hi4U!%L-xw8wxWLq2OYTVSGFluB4?*Za5{3;`tJ>aB zqW;3Ag*$nvj2ll3ssmj-8BuR;-QL%~HIwD+2*xAip;EF8#qOEp%&?m^Bv)Ws2BCPb zMw)>~t^5ZSvZHSM@dA$Ok74C*Fe%8Jn@5)c8XV413`e*x3A=*R*b0u>g#fr|dtS>e^6<+#byaH3jKkK-YZhWc9>tv{M>bPyyKX<3>9lf)0tXGf zC-AY+PA^rZ1Uqe%Z{$gTM~KAx%Ue(+<&b$f0yOzPZS9)SAZ43-s!nmB^AkQqg;nUG zrKGD;G%e!6vwIyAVcKlOS&yeLi%t9pR3!`0H; zu46wA?tAAUVpa&VefJL=n_gBH-nbwSMe$=6n?B~hw7nQTBb^3AqlfK<|LgJ+$ABA& z3R5idyNVDVnfmM#F*kM0W;!p3{3DGQkL%ySvL7hu$potkGIFTU#rs&u7=F61t>_q| z|M8*?$38%-HpQM+jhbLGR(`p8&&LzLMnKltAR=wqDENTA_{iuVU~o#CYC&50{4^{w zSsnPm!?seeU|+zsH!p_;D>h%3vIaYZ=T2X14)cAw?S~2bH@E4P$7=h5)!c~%vE=X+ zj9ktQp|B);mS67Gk`M>c{x;;5m?-SI*kLg=av}w*my|-~h4~tjCu0aMc+1amly)ij zWb5^Aw?op02}YyiJ3#CWVacTFpym0A1^wTLu6KMg4S9$$A2h}Rm?#ZZGHOl&b{N8% z$o!vO^5sZ*lMP?P_WtT+Dr7Q@bNE)S5H#q11DUG(F7E582kHrDucob$91Ka6S?7h( ze8mtHtZT^KyfiCp5c8+X|FMG4GUdYNSvhh~1_rX`T5hW8xmf2GXz~42>SF_fHUP$I zmhIOuAkQ^RDdM(-)%p2`!)oe}nT17o{dkszeOQ8St3<9l-_E8!fI7D1d3`D{LD_Ey^H1QrVxuDn)0o<&*8 zS==^x#9Dc;u{UIZROzD=XPvw3d1 zkXPe(MuC$oqVvtKAfrkI(BJ5f*t?|784pkNe;i@LoIIg}`28e}ym~jCq=?_Swcoudzc<-TKd~SGt;cGYHK{;Ojnpaap zl^eo$sONUKxY}|Vd}(^j6A)#@Q(JSyOEK<7@_wT|l9&w0K-`|L&@B&f(Zn$ZzXBMK z-`N>dv1a4baS^ncCP?BhUL=dhbi_PXg0eC!RE6MKp~-M+4G%hoMtk>j)&H4;u3u3< zNQ|FP(f|x2lvo(8Uv$X*J<4!g_rN%7w_^RWWWL<1(5%KbX5M${yyT>vx@iqYNXzfm zMcSjnNq1@_0avDx`CC?j4_2+O7Xsd&up8su@1RdW748E~Dc$r}pcIJ+5{-8W3VxKf0%pSznz)9!)u`b}*&lZ#5#i=?aDP=j?^zRtEY# zxh45zrYV0>u=m?D?o(O!-JIW>)d#_)|D*5IRfNa{BEUR*Ie`(w(u!`ozl?1!_6h4; z3liEZ279mu69pkX%veIDR=_JPQWn9&MeDmqhvR%!g_Q)(=)rEBp8{bFI-v(RVE_19Aus=PJ^U!M;5D_x|h z{EL*doT2XV=^|3*jW?bd5x5q9;T2pz7`~oHVlsvyo#2$r?+!f)G#GTK0WOYaaVuHl zS^FPw#|aAiIQC+cku!P57Lp1P#JTgZcmz(4vv!&Udi^LCL|lLEjq!idgS1}P{QBtn z;=~1+^!@TUJDH@w#jsTAeyOGgx92cS|KR=klMtgQf~UsC&1YmA3yH5(+g96vFq+7R z8xnI8y;~J^3;9v1@q#x@<9Gn&z`*}v$;`rrG?XfuGK?L|TN+QU@VfOmm5@>TrOrN= zh;rX$j9edeq;r|e$}JG7FTB_XD&h{iVx-@pJO_k90xr z*%{NN|CBGVZ}z)J?CuwN84Mf%GMN8B)e={WqdpAJ>>7@e@L(Wh)tencc&=S*IR>t> zzjP*7`#smnJuAxjN6D>JuXlA^Bkiz)gW>#MzYjeLbO`*I!cy~%@YPLu!`}ZqDxSL)ECiBWU_w8*x zpt`BI1F;+&;{In;0a(lWUR@WOQE0=2ug{U;Ik5()1KyFxaRhtC-sw4_&p%Uk_hve`!$W04>vU}9>Winz*G?p#@gY_uovV;XyO^X{kk#y zx%CfpBfP75Gv%9K#!t|~54GK65h8B|z>6jM-R`H!*?#QuQix8?Q%G}Bj;<&srvIW} z1cCVOSKtF)N&+)pFFVtu3&d2h8j6cYd<~mT7b)ZJdt1K4*vvmycYnwfIjq1{t7bb} zZ~Qjp1Y3%p0u(w=gn{o?UI)k3ZvXXoKmfqil|-Dz^0CYCT3Cmvi94Q|zk&_-zBa?hZdhEby^A2ObG_KHPMG}$rpj>Wo=$y( z=I+J_t6{|wA!eNVeYfCIGoWNTgRO>5*0e%0aT=x)Ihb_%{9z^>8RMx>riHI0I!{*p zYQIOAG)XM6uS(g16v-T$`PK&Ze9*#5;~)(sR+Fa}JH&&mr9m#_P~I7OEljy7;%S%o_UkrS1u^7|oJM3~ z@{xkWh=MC~4lITSfaJ$-ih_ZSz|dI+z>dD<@2;_D;>m8Vu+ye2SZ>-wx^1)E?Vs>) z2MGj{&|PH5dj6&a57z3sOD+kYLWQbiYG%;N%kzfwbQ_WmGG|sz)%8K6uR&7mc-{!M zxHuMUXd;x^a`&O76}tEm!CMh_6w_P~V_<_I4c|~pZhm?FqmX`|se>@y`EL$3{SOwI z>`Jzv5|}_lJ8RSjC5atb_H$mY!gOY4jpF3t*{5tt1hnEF2|ZX{iC=y62o@<$g;LDe zOV7o(A&lg2<6ZZVggVUiI~ch39!2Hy)?swmY_4NW4TtpNB2Y zE(PowLn>I%U2a5wFKt7yv>fE0^2aLDN@*&&)bPrGqA%YR1vFbFS-oRXQ~#s0^mmA{ ztp7zSjt9$~kh07%`<3MB>7PlH6wK@aPEuql+ah^2&Izx-pb~U zz73(*C*02+@ zi9Ty!60Wh=ufWgC4^pKZ!GCvmoatJQ_k_|k(e+L;kIn+0$ma)ud5mPQ?X>E!uT=_& zYJ~23n4dFfYly}ISDo*96fbPBRt)aBg_iqPqy)`<1d9n)~m~p^X`2G;}?v_jX+Y*?%i|y)ux#AR&Gp8Or?loVEp(rme=QfF>7*|8$b94LBK+8n`x<8)A z_q{DtbvoK?mWonN-Q)cCc50^6L8Vh?mR7lqgOzIj*m?(g9mVx{6q1Ow^IQ0#*UdGp z*L{k%br`yL26>2G!FKs&xxW8FB={qHaZt?Xw^p5d1cq(LiJ-0gl1x>G=N%3IJKwE6Q5Wz<^}Y zIKi+B_R_RoeOH@oN&V!ro0Zr7g46ZCG~4dong*|It7Rhn%G7nd*{=1D z8%=S2x2!yc<>-^H;q2u6B7im<-+cLt(G_4!!)FXvd`{UR-c%gWSO$Rt;DOBIfH{Cx-}`D=QfIG=5ttUn4(RBKL{a?tILyj zidiM&A8;h0qVb}D+x8}KAXGH|5Y<>dC6^fG?Uz7?1(Ocs2?Op`qo1T#n~vK zm;7iFohP(hXMkd)GP{Zjj+w~I{RR3I618G>X-h^dfB;$cJ$z@sMP3? zTB`zAbR`&!3$r(rN=qddtCdJmzgx&8F*Bx;8mG~zi4W7j0IP}N<4|NU)OWRR!pgQ&9Qm#PX>sFjFEAbqt&n%ls- zwyuC+2wN2+5tuBWJzX40U^xbuMTg$!lF1ubz3Qju9gzimP*1=7l^kjZSr1$k(nwT@ z5v$qinjj`-lDXX2&JG4$<^oP19QDw6c-DqoE$_aAz+-{hpVhiXFNU1Dcp*oa`B(b~lzE>7LHnhwl- zl;x&GvfYF>Xhn?OEuWgq5@4reG3q#ympIF|g@*=sWdYEy)#IVYcB>5$KNB9Cw!-in z^i#p2qxlHkDg$j=y16T-^eZBE4>aE&*-*+|;|$w9u4b>(Y&Z#IDJ%Bu$%ymH)P*>{ z$#PY!Rh=G|6=-H82?L`+)72(#?nMxv|H*g$ERu4CQyfDkhzP$q>~9jdu{>nT*BxMH zSkk&8OmIx!s;2qg1Je4e^Gn4tbjnV6nh+~k+28d{1tT|kxryWiZI6H%F_LbB!kWT|uyagAX^zFI{ng{6 zx%-x<^)*}IN-&d&Yqp9pya`UOye02CtQdXRpu;QM7)T<%t`6MSZt)99fR|b1=MUhH zLA9}U`%5*)v`O@2nj#)|y9x_`zG7rgmCgD?0ZhJg^Cs$hNVX4i8X5#M=LR9wzZxio zI@g|XG~ja&1B@K2?0`f_5OLEXx7L@Iur_$|5se{9K`G$eJGg0UZDzrqo$Rjyep z?$gzS1)Vj?-)R&vI4Bj_KsLptC)a1vH&#}v7CFAiek#80OAZK&?k87rV-H{K(5H9K!HQ;ooy1x*5P!cHY@5U;7Rsw%_c^GQVFlxq?euHm%7*z3J}1 zQL>04-qv4iei;isbh}vN%crBTv)uV-LZMBc!39nd?4u9cWyrw zT^iS2Wmj%#Vgz)mE2H|wb(d}EH<5#LDemc#?l7rqv(8I!ibPTn1I!<=AtanX!NFUa zy+M7ItRV#AxkhP>(BfD+?^ib`h6f<15xtnlBh(;ge3)ONzL6A-<`Dr~t1J38_!Z;! z()iPCLoGL87R37rNIJiM)+n`?)uCGiDcOC+g2v-`lf{6-`F2WvC74qPq8}# z>FFT-H4M&BbfBv7^i*rOY28sn^1FwGClM4&zj4|;Q}Vgv4yVZ`v~HQd{H?(0KCk`sbZ=7SHcW~XOMVVcztEP~ zOk`!KQ_D(^bdn~9aQObYMf1w>_Obx-mGiGSbzP|`Z6xn#J;g>c_F}U ztH$RO*%{7H;NO__gSC<(KxT7v?7Fwi4tT*23+lsCp(H2i6gE?Aj76zSVR7C&@O|!T zbi#YpsoGmJI_+GZ(qyb9{=DbERdcM1i*qEk0eijK(xiBNg{#v+YnomCK>zZ~sA zhAyE>m0HlBkevz@>s3dwKmG>+z{DZpt&Uso<^~FBhw8zAg|XAQ+;<&2x&MVy#N(t3 zvq)qOwKx4zd~^@j7tfohLg#L(z!^p1$<w3S zkFM*qwT(k{pDZCBJp!Xx)-qW&X>=3=Qnpp==d$6HVFVi7rYGCcY;lzfBk%clvl;`O z*qUl8FbSlPV}|ixkc<&F(YdSZqKD9xzi49UXdJ_+=1l$l*YgjFP8ug}R$Ti=@*jz0{-vJI;kY>;y|aUw z_lW{RA4>4~4vs*ZM?PLf-kKl!7w37T&Nl<_J8Y7;(5h<{@}Fa1U@I$pvm+}*Y}t^x z_JB;iqhkVaZ@BXd0Vk)LFIFpgq@OF-AAnY;NhD_RjpoX4{F4ewDmC=#Cn38Y?m&QO zYKr6)_cZo!E#=q)vF$JhIiYI&K70%>MKmM}tC6{l&5V(!4W{P%`MgJ@m|V_0ILYkF z{=R=?DS_1x+>K;B6|}eyCjn+^>C){;9n|z$YXDE+HtQSSaBOD`oo#|exOx^M3^!Cz z88oEkq{6WA9%G!KTAue%N?{Bs=`IMw7?Uz1y2~c+ToadeJH`tCdEyj3ex!kq%Wk68 znTq6y_Eb^9G?S4*Hl^-E$XB^YbvT*5AC>d!aN$1;2?!q3))M?vf?=o9j>PBIkJ$KZ z8kORR_{MTxM`T9737>pdh-u3Lh3HVO+AVQ zPa%$Xd+xi8M<;+y&S06H zFzfVzE9NjwcPxk(PR_?akqXjP&<0o4j_HML-m;)JfVB_MNZBd&iqiLy_2`J6p}kft z;=yp0HAP4V)|{QmV{#K<LSglnQ6WNCjC#S*nY;b=x zPK}Yb0b(@|X?p??GBsn}0K}{0qBq0&kN;Uae*jvQUBC;s4FnzB`M|eQR@-vX0!cIJ zqufB>Vy+vqs3XDG06xO`)nNo$!m%d!%E;W?Ty1>YbCFC9@c_uy~VUX{b%{!Oa<08tPL z&s4Prm4D-7_0@Kr$m!SEKW^$U0a3ZrTD#Qlu^FlaQ;*(2c)izNo(!+&fncR{sA9QZ ze5PrXKI#Xjel1>b5U(q>2Y zzy8)EYjyNnjKgkRdGKqc;PHrIL{_J#w(-mYCYlX3H>tCtN6!-zQ|!z3?Cho%5K~!v z%8A&L!OX#Qks$%8b=X7ej}mDbvrSm)scn1E;SBLbMD@u}U6OF5+vZ~(WVxl#ctee% zi<~3?A0zs>5FVHY0QUPZqB>nk@T{JnIxM*(U-w-H0+?1P{ zOk}dIndnc?e1BSXtpYe0^;g`p7kwHoDm0!0;8!qH$ z{`6fNygc$4DRW@Bh)S5tEx)^Ps2U78r#u`4J>&90Vm#cnEGjE@n^TH@H>bv2R5pcq(Ec{Gm z{JH{yGfX5jaJEB?jXi0Nc{0?8E*O5k+08HxnCX{@+GeW#7q5>ap^ij)riX&UP4R_& zhU)7JXD0I-9howsWr-!Q6w5w%Bz?mWd9e~!#2UaWV5Ab43*lhr8+{pq!BlsMRCK-+ z*px$)K3l2J1VTvxKD>W0RU?|gR9v|oqbX4^VKm_If)=9=Ru`+`h#`IUq9B8#%%_vY zZ|6Jd`-=(eJEUjr!&1FuOT`@i92V3eg_qUYn_`h!h^m@fpVU|*VrN<_vk8D`90x0y z9Gy?*%k<)OC5EvUdyk5R026`DYyta>IKdhP!_1Jau=Z48Kr#p7_i*Oiuxv|jEt_#x z*8g<6{nE|jlD@7#=TF8|7F@x)+4;K5E#5!aR+@d83&87Mu9+q<{Inmlso;mi5NK&> zjy&3B15X2LVq*ky@a@60Lz0j?FXW+5x}JNEuu|^i=>3>$&R)ANcb|o0M&-B#_6t2fZl{LadvRz{rc_~2)KD>-y1Lxwc7D;;W;pVgJA8C&9&D2%pF zgGoE|?zn`!JRFIUvEkGM#t2{d*ro7>WRH_*@PYI1Kb$&{QR#9s5C31fpONo5HUJlI z?eM@)Rp(56e)bjw%)a-p{yV%)ZFShHpdfd*X=51HcsL=iO7mX}RmDKEy(T(dBGcfV zfl$S21<#A2W6L!h=u%`Pp`YhEm9p7+E`btD`gRFKV)a;ciVkJJ+BGLW1kvL4fCM-q zx+k@}-!yl4m-ePp-XAPuntjMDTVlkH;Kupbty6+#$ry~C%<8J8%^>Xv##)j{y$YpB zi(HFWzFu@3Ds9|;Jl6VNlH~uQ>70~C4zT(oMx*illv6SoLBLUaG@Vu`RZ0F&V z_K9Z3Ux03-ix1e+xed?6gebrg!-^FO7@S~^P_-!t1|U`FqFczeUr(Cc@P24+&EV}O z;~`;m$-6Zo87KbeLvJR-mM~Uk*Dts@3ABS?-YTen0|hDrDhu!j zYfn!`Jc}BF&p1pr&OIs(MNI3<-vi`{A|#dM>ybg;b1UYdOEdzX$c) zPKOuI9qSl$zoJXAi>@q$qPyc<9!l zOZ_`(?8Cw<$jV4)XiB&m)zDiOh>;HEY#g@XHXFCwg58sfjL&CSwIBEwNlSs`r;!I| z9-V+tiKw5bliVwHTEEXP@j{+m&ln|MP-_vZN-2#EKZKNZ^8v>)yoTNN{}!W~O&?*%(a(_IH?~JKiAzn=YuYPHR*8j@{vbZ>S%r zfb&EugH|#It$S*H9oFU_7hh=bpMB^q)KVgPA&tCWyENX5 z&4}$|bdk|?f1I7SN;z7jvb7Q08K7JWq$m@)L$H4k33>%(Ith*SJ?JV0oKkc@`l8mg zc%@S`Cz^?&A>|6i#4p5XX1GK%Fe&nTApN$<*pcc-Us4t6oETdyGCDy?B@Nfy$`@j{ z;i~Wd*^r}Rt;r{pk|mUEk8hO=qFf8STg^lkkCt9x7<$u#T63jGs*CJ8oH?ao3H=TY zX*rNyZKc=44;KD4N2}WS+-Rt_8c{yN1c#8f$ ztI<-Axgoxc_j-srDzcKlelF3Y)+)w794z>m~ z)%JsD*{Oak=+$PY|2s$oI&uh|+S2=ZNGvut2(4j|74uXeHfF461Dv8SrJxepQIuLj&^-?ufHPhZ@`)!E&SnpRMw?CXUmN!4KVl(-XRa z?WsjO!Djvstq(il#9EeaO_<4v-=gyCvc!hXW1Eb$Hc_{$J|1Fru8B&`Q}Y^`aejA{ zds0J(0jHnT%43bDXi%kb=`-J5)B`(4p?0|%^TRZd#%0!aQ9Rp| zC!3S4sV3XDU6Vc8O*SUmw(Xj1-Zj~-_dM^n`|J7L=Ums`Yp?xZ4q?QSYYPkip$*-; zPWA3?qq*(#lSfp&Bl$H-b@|5j0+$uCk8TcSI^Axdr*nHoZMJ!bfYfMBef^^K^M<+e zgkoA@NlJgskLdktnhvQ{@Lzqfp@JG3Nf;t=IBR)zw&L#j0%OgD>;HiUULP+(?eE^L zAG6438*Q0m=1~Ic?m8Tl;6@u@Rowm`{5>xfJ=SBYAr#9Qp@}dAVPLp9+w}i0`PzhSnF}5}iGQGDxDY-KV zz0oa|Qkf%Gac&%!4q7_Z%vBIu?m!yUC=TNJaxO(hP0j6g#t9JRh^BM+rW`((9QHB; zs<<5m&#+RI4K-}`&qKY)9NE?$wIMnVSpem5(K?<29&l$xz(<*C>giQkw=^&m$$ps0 z7vnskpn-i{JM8BebbU_zJY=245Waw`2(w5` z5ZC@75sI_5wMCQoqCUNmxR|D4Zx0lBdw|iNN2^C-ZDw>H0^m)>qm7VuJB%$1Fju!C z&9hgHvLx3Rfsruw0nwUWT_jguDWs&2y`flZi{c>onZPLMG;qsowF>Lx+pj96f2r-w zYUU{upTt#KWf;3eE17 ziDP;mvk$97 zd3Sbq>jxQQWq3EL@z%(!eQe-4#5>?p<+__mgQf^-t+8KbFCUn_NHTFHb9;r^Y^&5| zg-#bHSQE%BF1rO7Y;(!%gC}R?5+A(JR_cO6Lb3@2U6NWl4>>vQ4anihh`f%C{=;1W zx4qxe$ZsE+*px%|z*%$|q#PL~%P2ahaVq!g|5r zm0<42p_`M8ug$=?d8koew6>=^&>sjU2!f85_C-J$f3jK=0Dg>Bj^}M;=*3Zw@oPdOBao#a8 z6U;Wr=gFE+e65tLIic5{I4qt3;&>b$xh>(b`8t?#!-{Xy2U<%QVutdo0aqaY+&lR9@LTKH47xbCnyZiS;M^+0mFV#!0t z`AkVeIF2$`YKoSQZCc}}-(M_}*&vkJ#U7ZrZ(q192MVngm&aWt;ghCmWv8c4v0D#U zs@SQ_BUFF6KnERgH~Ny+>bE85tQ|wX3xV4erMmtLYqp z2^psD(KcsLtH-mey2euWZnnmOyOU`|gq-oIr_4dvR52=&UR4#s@b{R(3Pl-ZX>7Nd zdb@Sbhx4A;wl+Hg97k#E3&Sd8A57ZNLBvb?OcU-JT|?7P*x?!xKavAehI zG_WB#(Gbk}lrwSjRVR!oSR=WA1*urfiLT1(2e`Df+gaAWsL+k@1L2B%XWdrEfaGMXZ#6DwY^+2%#EB)qAo5GFI2NrRT3~I{3K5Z*I=4Mu5VcPu zC>{s8ySAug7!wz1-o4&zeCIXAq;Ry(8nxfV%Q^=bcsV^SWfOF~%iDLI6FpoC^-hOC z=lDOse=Jh_rxy(&PBwuQ#mPkin0z8Dfw_z}ga}zP86IJWpDhZQ-T0e^d&^RyVCa~9|9YhR~iOLGausn8_N)(Qn3Kjw?hki&oXikj`Ok77GUkf7(p0;Ajumawz zXeMbyu0Bb@|3ziP>x^;Zar$$Z6*H8y8%JG9(JUJBT|1wM_J^2!i?0!Nhnt;=rxV`x zE!+T%cCVLvHmdKA!cCCSn?;+;3C6a^5gw7}v5}0(yiQXm7(|AjWZq8~meD1T{&4}U zHSySgwOphkg|)%<%F-_pQ~yBPbEmdwT;wQc>r)Tehy?sDznHGfr7DMo}_S)C6v~I1&{w9K+96i|Ms{3@?7LSiroYs>orHgJ8p~o#}AuXfh zM-^-hg>|u-1!^gbdWM4K)7tiS>5>j%cL7Q%3{K7^O&uMRf(G%PZFhOb1J7U7x~sof zAe-Px(F4Mk1dSF7=B!y8&{zfd#=1`*9iOhiQ8sFG-(O=_@!!lR4+bf$GV*kred-Al z4h7y$r2645+E3+keD<8=v8j9Ebk;efjrpm(c)v?VSijR7_}}Z)IDWi&9)Vhd<_>&i zyjw}td}k?I#FLHtVh-`Og3*C!-aFqgk@zVafgh9<$1 zt)B|W0$(d^wij8R&2QIQNN-(!O`~L6ad*tLezBx2T z-&U9Ra{%!Z_?Fih_Q!%VljGZy41xax^mMjgc1#R%G}@1;G;`Bu?gygQ96exV_?6Io z&y(nLS?HZ|Bvh9y8YcD^XJ+2iebbK6NVj5hLaQoPMq3*X@S0`w%KTEt{~@1;J5NA+h|A?@CFp6 zM|l93ErBM%j?dT#W5;03py2J1Ln4QG<|K6U9*T?F)|?bq^KlktRP) zfjs43ECv)71vYvU{FNPZ%ol(;L1f?kOchJi1+N4pxvPXL*RyTmY8O;gMEQ+T&m1uG zvVr6qfW|tpL?6^2B9kTLAOEAuuu<$+l`Cv`L?pD{R|E|RRm|pS<%9hC!)TUL)jXH! z!2=4vWAs<_g@p!!wrd&yY=P>&P~N~-hz5$Ee&E%XAvU#>$jB4aP|{`c*9A$Y?$}zmpJ{9816MqCW}7 zw2BdoblyLhG_Kom^3wC)KP|6no{}X~#hOI2Q_^Epci40JAC?FWpO0KXk)Kfedh5=h zBOyevj#Ej6P|P6YGmB3Un6OjJclMhY_yz(ojq3*~qEd$A_X{xR46I{h0lrL?9&B`! zzvYe#=mj#bXVetwV3A&9hH*6@97BYS3ZxGYpb50bXJ41O<0Z%)4!5Uh4(?S-p6^P8 zrUJgA)Y&}VNVeIf81_{_*F^cL<<17?IaHwmtfS znIO4udNcX&`CcAAgK|NWCxB~qQ3LQA7kk$^z}F=pRoR6~dO;+8x02ggX6x;j=AuzE z8-6zrPKY#b=$qE#ay%FX=vVCl+1_pdt{xod3e$44spNPiXJ)lpVin=@?%sZ7#%@Im zJD$u_3f`V56x;;5b;!k=Hy0X03G%!|i@!d0%nc9J+U35b&WCb_Io)t?7jdFc>G;2Q z_+Gp;G#-awY|*D>WB{crvKnsp)icw4xK8J#Zv%Vgm&qA>i_800>sp11@VuL728Gev zEOtF3;B^HKc(1N+RyjO@o!`3jQAMS5Kq*FD+a;rngO#g|H{TLf?6jw(GGb`WEt(sA zjZjtC)&Y&WWHsy0EaeZ`hONu`=KB63nN$Ed41D3h6M`3zpsW*gUz4v|b}v1g<9?V)B`0A+ls65hrVN<4xurxzP;n9QNM{`BwmZgmrp|3@npCZm zE=STlSSrY~@%6+23~Zj&qq35mz0X)5N!Xj*L$vDZIi7^_6l^CZ4J|e{D#few#)^9> zA*t{TbS2EyV9_2MsTxyxp%b`je0fx zD%86>z-5?EK+A#0b8Q+Gbe_4=^+>hlHX>lDSKHh?91;cM_I^Nmubeq7lDYE|@H!n+ z{Fyh&@Em*SXI>mY91I+*Yv)!+<~S>yJ=tR?czdl8n1aJ*UdhUE5cH`hqCKe#(fmlz zF`)|Om{RR1!}xv5GW=y8Cq+0~1_mRyzKvjJ2sT1e0j&AMa3(?NX0%CA!H8F-e}8Vu z%C-Er+GLgC_^@$0+3Y@NufVbzZl$15=X~k91U|-^G*?-zYwYTqJuy*HS!L(=u?PK4 zuXVIcg}T+{1cF{BoxDY-24Y8A@(0?Ul+*#mhmV9g9+wE{80&;XMtFqZ$qURv;oTDe7Crdt&6@=aaa%aRm41yg^lAEG~R*cdJ?kyp4rh^O0 z@9EdM=)@R!J0XUe0X%K@Q`^jjq45%kIsY&wO#(Ub8_^V3n z`_%TPvS|Z_BJGrki7YfvTZ+0!$k~tsm8>wXIjGq4sc#!}wM*`EH}YXYRbqiAj^=?b zZU*^vd@K%AT&IdfwK%{Q(im=lpI^=6n|RpXJu`lq1W+H z>wYQdX1hI+v$^bS_(=*ZTo8;6;EOF;nE0k2CX0R3YyX87N)lcf{DuH`^0r8t2|IDS|iF?{M=hUYAw%zWcC*(}s%sO$vHk?(H zNnsL{vBrIl+ac;wdNW8SG2d(Z7UIejdZH;_7j+v^Z*1b1Q+LuxbY>)CDt4RC3E8&C z10KLQ^pwx>LXI%p?)KgATC zAoPAb-|zkS3STg~2=c_fpF4ez=PC{)A(QzDv7OMcrfsTovt+NJnZUzEB_mmJDKneF zFNK~*nbPDsc%k3aXUO&`5}AR{`wi{Nz~XDtJW|ht_=t>>X>8KpB@3?{2~3#jRcYO> z+CQrZt6lD>QzZ5HXT`n0$&sLyJxoK$uE@t(6WqKLmKA!Y4}N?%TL%_at>IT|wnMt^ zytFnm4LVwW*7l1_<{_Gbr+(Ah1M)x!T1m;r5Tma=uQO+E%M?E86a*i*rB{`c{7NP? zdS29WUKN zXR7l(_a>()jW=}7u<(%ow>rKf9qf#m6j*q?zAuS7gL4qF2#U=QFYK7EVCoq^X`t5B zuQSU4cAGK_xHiSfvqWqLUS9AO_@8l$25Uj^^$Zd(3A!LdAH;p^rh1&JGiT0}&9A+Z z0rQc58TH-W(_>$#j~_U>%VwDQgd~7nEDoNb$uoW1Q$LX2>pNZtIfhAY8c9e1FnQIU7@8{;f{Hje+W$Wlw(>48yo?2QoLzp6BDf_Y4 zJ#H!uymf5s@O&^cOl`Vg>f?J1pdzQ5Ksai#vjFn=NUo&nlPpE*O{@d-mM?c=Tec%; zZ|MFs*VXmiJhK72{o~^Zn|>o07BVN{Z~Qm1>KiJ;1ar2sv-T}kE$iy(R&>VJ*5fJk zk}@K=FQnP}zk%h_XGH4j&fak(^Nhnovo#gQj5^cL58ugYhCl3uU4q>5{4=R2u4QAc z;KKuKq0G@^F9Ol?0C8g9=Yq>Waavr2+9`*cF7Hae*jIp#?VQ zyM$n7+ge|HYQzRU9*_5!(fZLj&A=K8sbhC8TNs9uIho~bB!we5GAJWl?Xep1Aa46v z>!!5KO>x{|%=G?8QPn&^M@6EiF9B)YGw2{ z8OP4;i7iK8Unrz)Q|RD&EC8#;6d5=+MjLJN{pi!=a;ku_)!xiBP+!h&xH)7ZP(AHkatS zm>3pp!>_h+97f6Is&r*Ai+{?!?uYrZj8NZ41VJ0G_FVw9gOUMG=ajLl{W8mYM!@27 z`{TX4XZ!N?-dL7}WYW9HmF6{>_0B&zw4On;%`fB&wY=lrAjtD2N&!gJ1bN)QJ^#X7 zCvmq5vN;V+y6YCREu1PHTYvOqMhz`=i>leZri_g~0#|n_5YFXJ|65}`|XH(CJNJxXg zR0t-BAxkU7Ld-i@f%Z+S&>&I~DEJEd644AQF5VZ2LfmtkL=Elr3G*7C#M~xP;Kg2D z(FFa@_0E~`dwA5+-WZtNAUju2RVk6bzW(i>#m{uo%r`kb31cWPUH=h>lOr^MIN~4f z29oeR&U^Ko;qqmBB=G(kcG;c_>AoSBp}O6XurseDvJ0RdKjqXRTsfuG4_xzCTTBR5 zIs%rKvP7z-E*jSYZC5N@8)ja{=>W-dfAAW|koWtR$QPrs6_&4&v*t=;KBe-gB!n`x##c z?{)0G0Vjx^jK7sBgcWAR*Y#yIx4-U5Z*ea2kQr$feK|w&k}YN1#+csT6r8X7d35b1 zU82<2sOX(D+UTGlw4gJvoxf5P?04fT&d3}D8hDM`nfXWKlXFd~Zries=_!?y+PDW$1coL`3=Rs2KV0>> z{j%I_iuWw>_vOFz&0uNIow(q`E7;gU7IThlGH=`af7^KCZy{O$1LLCK&Egl9#*<`v z3x_gQC3U=Ip{v-61bhb(N#%v#l~ZbT4=wzUN;KEHqTKmkxK*bqr!{1o7S~l*zmf7Q z5!|lq|Gqh)MsfOgF!6)8mj1|Wcr3BxX_xqAS-0l~|MGd*0m!rC8w-Qnqp8AWGhyXQ zAW~A2O&WA5S!1ZftllhRgqxyxB1OA<#Z$IyR7D!+n9lYEKvM!EQPc)IA&Jy0xU}B^=r;w|VT+mFV;L{g;j$a*Ly-r&mOSU~X<+Yv#HBA%+Zgc1Pgg z`jMiXC{$Lz)l%4SHq2SZ^_Vye-)|kx>vNQuDA##dOz#T~0aZK`=L8?CqLqXTib&c) z_4`C5=y=pmP>(v9H>|1%e6uEcM&pJoMY#L0$4jWD z>j9tm^{R%Ai!BHP;*?T}AaF`KrEfJ6L(gor$VIo)F(vo24JX3yIp{yIT?aD|*X-T8 zAIr!6^G@*S2z#Z0I;r}6wJDQbj$WBk&gdrzY3%;@a7zBb1b+Gz%}b}vid7(MDUl(C+{*fvIc601Tq)}h{P`R<6XuW7t-Ni*Bk+m<4sz025 zUgzIEt{oG9x5Rj+M%N(Dyalz zY-pj^fL!ClHP?^z%NP6h1(pAvbE@f{gbhR~rk)=>j2opMS*a@wH|98S!`Jif`LV+` zlTXg=b;kT#;6eVP>k}N1@xNVkf&6&0QO++QAVOI3pt_D`Rx+SnVtyjxN5h|UNWj5>U95C$bp!04#$h=vjn_T5}C4gCQnk^x_z*!C~*w)Sr)Q{DWaH zeB&H^KMg4VQTZIX`-k0H=;vj-#i?ETV~S1b@3+m-x@iWdLJ_n0;24}!>q}2(b@aA5 z*CZ6P+K{arT?3rlZK=Y zxgw&pvAew{L5egEk0eWw+*4iA$>yTbf`0G*c29_2c_QsqOM{?&p2lDRQt5eC@_UTf z7EYVB*3eckx}i$c2x2vs#gjw`Snoq|!1?q0H`iM1GFb0<=jC~2$9dq#@+*j!EJT5nX4*@K&7PdlEL2H%U1L*p-TfOA(=pw-f*7;i9Zpok=&(L}NB~GrV zDh0pDR0F?spoq<<**#(M3sCSg4ru9lKj*)h9`ShkaIb4@9NhBl00=I>hEf9JxaJe) zhm3^O0&GMobz@|iO444VXC5XSHD-v81h_tgP_NqxD0a*A;&?J4y6PM7FsObP} z+~mq^?#-l%LVaCx|7wGU$ARAOpWD8VENpBOz}B|eNyI(-RsgL;X=-`nY>?1dUx*wK zd<4U&Wg{onj+I9?uy`nwCE%QqYTy-s6YC%0Y@xqXWhi$7v}$0gif<9lpUS%Vzj0S-oUJ4>$jctVHO8&sI^ z5WSbyx`=`Wrp*-)ltQUJVu{5;`O&w_c~Qos+@6bC4l5O?j1J7iekiG0QBzZF&VD60g(HQU#_e>yd-YvfT59d?oGWER z3KP|K>bLEXQJpXu0*Aw6;)^Oo`5ySo-aX~8V)AuZg%}@Yr)|3di;b<5>up| z@xk|I>s`v?jXDgCY;??AYv`D0ybxp#N>A6f%rO(~{{r1h50!=S_$@f-)mSptovU+jre<_vY~Vk9Kt_M*d;_7ALu7h z%po}9*feYR@TROQxn_r&j@6Co_dG7^jkAv?Iz77xQ|E?}Frhn}|AxxlkN)()k}!-3 zLZ>^!w@DU)BefnL%n+mE2H4+43~ckG@l=!~o*(H<*Kcey3m3zMR^xzf$nA1q9}C1` z&d+18IX6tsFtIM4!2B-#_e>1>>p0DV`+$oQhBY&Ru&m$F-*#*9pUrK##=ydv+tAk) zQUgD-k|GwfiiUDNVUXUXL{#hON8PaI$V7?$-ahd=uu`=#wRVKx^O-)Qj2S8~vtt)$ zi(S2hgNh!o0U;kvQProSt-=xtOPLC`bx2c2Q+2SBUNPnA%HszH*{{zbuvyHuXy)e^ zzZ&9+a@Lc0a-s$3a@mbj8+$&M(Anvva*(a6>#!gK%`c5371#xT1kt$?+{+V;s&l)X z$*o%I8BQL#p5JGDQ*z(OP#vH9&DH>0|6lVo9B_t5qK>K<_?kAtr2~16PKO^Hdk6Yg z<{I2v(;fn=pJOKaGfm5CL44p?4x4o`H}V3V6kJ*+K}ECt&(BOZ{nt3O(lY7?cU;~c zmr@ByKdA3CI8Uk`+I&7Ra$lYtSOmV*Ic$Spw1M=2%f${5(KgREonbrN&W*ghQl^v0 zN5#Uxv{bb|BrB*aQBJ$cd6h9JMWXb<&M4&%4%+(Cc5?MQ++r+%gVf-;$l&OiNkAe! zlj@epBbL`^YT1ub;({mizI)ZX5OdH;#6ED)Kp#8ciAl&pjm0HpcQQ!Yph>m9L^Oyk6yl2UfVZY3e8})pD@!r3<1ea z!-3*>xjN+GI&sMM?0=uWH!hyY0-b_{%^0=NGyKD*XL!hv?>jC%7%Noq4TU1feCSX7`e8oGrPqo#=uo|E*Q6M!V2@hBO?!V7%KmObz8bCGS zg%9Pykk*lnQLYn{Nh+O~`wH5hSwc%bKolWSlckTL87FXnk}gJq4PCCTyqf#%o4_td zSKk9+QvMG&@IX4Q^dGvIlA&=dc^tmdqkvRIeV*xrcK~J|ftJZ=eKbFDz6(9nzhqne zmi3}cDpS+RN%;mI8mR=h-~x6^;LBE^mQHXBX6#e74Kvje69rN!$PhLISgSWfsH)49&1r(aG;T-8!-<=ri=1SQp^ zNW%*p<)1n+mFRw+(oP6!&BUh$q{-0HWYtiJK(gx}2s`l2f$OO!gXZM;CYy_CZ~1i% z^hwY$(}tU^^q>c(1DFS^NPH>Hp~M7t*mB<)Fjg8Gqad!l_LE+pV{u`dagNssemx2m$-z6zGB82lxgU2WJdgh>2zY&{0Z#7T89iuqW5dwP zD|FW}{4rLYFRx`4@x6*wTmqkg!YcZLF8B&JR~dlsaAe2sIx27aY&9rR&-a@m{6uw@qeC}czja_)t45S$E1CmZL?}8*d+8WM3k8hFxFg|B9&?F=520Ab$ ztZK1LI)89^$F?+3FFNf$@wnQAJrX%NepV7QIT8EsU!NVheG!LKN)C^H$xTxB;1LP8 zxhcH9>47P_&(WMXg27r+t*43&f zADQKN?7;)U@~GDb#DZe@BX?od#-2;U#N6{PCCYKL=@-m=>y)u3Zj7O}vlp8(F$_t{ zk?i(rzFMUFxu|Twf2gIeZw?SKE0zNpG;+*hj=b{=j`|kEd1jf_Exy!8mWIgz%eQG@eKBm=8dh~B?^ZazAMDVT+Vc2_mcE6w0*$0Gz%O1B_ zz8~@?CD1Nk3BPd>wm4tPQi_>H3ri|w6z^C|kXBNgOiH?yB@C9oMoOc`t4fm6H1NKD ziB_ApH?oBrK6MsV;4#$_2aIw|p>TnM%}XrL%mwS`oRlqFN19BI9?|YG2OG7^HFw)V zqPQ_R$XzyH zkKDEJ1S%kdDgl7RfG-M2-8a4ZVuk@SUT(;iczjsZFntT6GzLN+M6k8CqpEHORBgAW zi;o<`%IYY8s>g?u=U1-%ZC1g+_jB1$cI2e{{)Th?awiX~^fPz$PIx4W80tWGZo$Yu zS#_N@)C;%|exS}atj91xaKYFQ=sXVb#u?Gv$3tQbRuoQv4Y~C^Zr~EOBT-kY@d?TJ z{n!wiyKI5lT%A|vqsCz&t9Re0-UXU_xuHqkzu}a|@nHCxnd0#J;IJd%e@AUqblqIY zcmGk8+_5V#QZw=N^;smC_+77OOhDcoHr%LW#-DsTcf-J*(x-Nl$fcq#G1263<#ox% z|16=2J!zOU{F+s?mD8p|;A7eUMd&6T^&N#xg;tr4pxucA^2r>2ypYdSk$(2Z-0(U4 z?!-K{HS_6lig;C9 zm_pOEyl65Ja$ed-VRq`5I5B_dEMKKDB5;wK)^&<{D#9u5nAV=Vy2@2r7oYyqHJMBP zEJ@0*Ek3!&B3r5aFq93E+Gxeb+I?43GqaMGz#mCIM~o!iLahAyTq?3$__qKX12mNK zFfAG8YdKG}?3VY@k|OwI==!xx*@TWIIUg=TSV&?7KF~4RX}2LH8H?+eeS*x^Yv@@e zvuJRtOF2@xbEtYtP@i!ZB{oYj!yKLcSx=o9G;`7@H|a$EtiA^2ekJlBPkqxLyu)~+ zg%C8m(q9UjiwYYAjho-9avu49ThF+Eq>Nl9Sti^p@gK>r=zRFzu<0|6 zw%o5(cvvCPYEa`|~Cj&(4L|C&3#uk&5vt)%bgb=}GO{tRcr zurp>S^kgW_f@^9?7=-%s92|2r6IW3hUhSqtU#4DJE932q>JI?*@fC|syH2iLl2OCM z?iTh4V<9`>j=_K3@wG%;R8~HMZf2)2&WM>h{e$3gkgk)p8|MGCeZA%Ig58P3jc2?; zBMpI;IhnXIJOmi8Z?M zo+}mw+Qewb3hkua66IYe{AvD`HBVU1{0XrGXZ$r?bKzFWXNx1fBa} z#BU)6|H;YPbf=V@1|~(lWny?32JGA|)z4p&Ld|eJ zneXcu6ZPrMB9T9Sji=AXMboly<6|DwTuQN%9|WS$s^lCzX$FJ3-FI><76K&8CI~#U z8XTA74mQ%$7&zM^&zyyGH`++W`s89-trT#GQ&~e9CWLvnC}GY)ZJC50m{?!CV%e9H z@)V@0U3gWnPMwHWqO(O$)AE^<%;ZZpt4(t;oiIu1!3Op+iS#+tmGQmKBu)!BU6fuQO!C?zaE6|D>9;6#gvVf_0tjC+1_thfx+Ma0mg8Ymb>~=Kd?M- zJ6vybplm6L$|&2*8R%lbLE&nxI93%h`YD)HXxY}ZfMo81X;dfcel#`?aoM}v-t-ME za5aCheW&x3q7R!=e=TydnCwK^fC%g3$e#eLXVq!H zuwtss#2eZ_(r!h^Xd_nCk54O3yRCGqN2f|Xu?RWg*4M z+44S#p_pY3&z>PTUAR}xV;47~EJU|&)ew_j0+LL15Yh0azQdvkjg~D~MJz~R1LYaC zM61pJ_J@~^Q$PWlHTc=~h$=Ao)4e#RN&1w$_H`c6J{${B-_x)vL6M-9-##SV2 z26J{LSUbJ9bmzNMU&<^Gn7WrUCj4ulzFeJeg8rS4@#+7L+1o9LA8H#eP8~yr%)M!G zF)iPI$%nv45GK>X1PS)Me7>{(S1OB=O?pIDR?=bGUl@Sls(j(Apc(^pZA;^OO@Q3@ z-z)vMzoig=UT+ncm*{-%9Ub4rnB2&A6h5& z!?mD)L1GH3asyXjqk`qrTkap_Re?dp!KgRwzY!lWRmul$ZsJFJWy zD&G;M&f=5=tSR!H=LhGHN@uy!;HmMZ(8foHCsD=jMS6_j7cmHi>tXHolb(Gz$zvDST$HRTUjNsZ#yylGrsiz0f>-($pRI??$4st4 z&ZrkRaRG&m%ni|wg`@h-kH#;`Z(f}Jy#Ypgdd%-Xn<$k< z-Q^c2F6{@N!UWW$>jwhoZh9R1QU$Xev1p@_s&W-dq14Q0r^8ywO}YrK>OPpQi*}Iv zaAm1^STrk;#HOos#+I~0E8ZG^IdaBlLphdDAIneO4m_(o^@3m!Ix9r(YE@0|b4y2k zDz96|rKELOfCG$zED~!No0~YgJpqHzDyxE%fl(>}SC3~nCO`6VM|9`+iMdDB!6fwBfZ-xhp$p=#{P|F=!?loAJV2*~GnH-0mhQNzw4F*G9Jz3kA%67NL)4W2D-eLOrqBObyoK^3UDGo{;Ba^{!#|QdBj2-TpRrUvDR^0YAFKN&S?_0-~{wyBsK14?T#(J!Ur0>H&_!J zysq!&+7`iuDeQ&GCZ`KuS`8bCR*TPbvg5E&MWEfF*9yO{ouLiVji!2C(ndk3@J81m zr>YWAm(mpL&rU;wZM?tMBc-%WmU~{LqL?Ht z4V|O#33EvmeFdG8f>uTx_YIk;kgF``WP}UJG^31Y${|VrhlX~TIeTi$y2TsH$Nqzj zZ$*{QJLvc4`x3Tw$!X?WWz8TbN5qU1n8({?%|7ox(zdy7TVRO1;*aX=&hEcYQwl!h z6pf>p(g&i6BvTDZ>At26sidPO4|znX3i78eDu2U_sCnn5Q)~O@N=n6XDY5Nsv*_|v zmRLo!KFEE)9TI0*Hqbt&RGJcLe8V7tAl0#G#*GUBVH5VF4($AS>+-$hEy(`~6G!Il;|Cpsn^eC_Pb-xC)_XSQ>H7Efj0D>sv$@uPN}V@_a(H~CZzl+!Sf z=S7zF&e}FWW!je)?Gs{aAt72Ykp{1#7>}4MM z@E6kxqoKQP_`}!Rs%1@>*D`M5+~sz^g?-7+qGFha2(PQfDudr&4a#pb*ePL9=G&S{;4 z$uRkI1Dh9ZWrW&L-O6Bw)Sv3zC}4&iz0VcMV6wace2_3TmwroUeH<@B_E6C*!SXm! zOYqWG!EphT(!t-CGSO+%(em!-l4?U;*$G0I68iBggJ|Th`u8gfHtm&CP^!pp=63?z zI;NP374d`WQuvul^RHn3+$_yoH_=Qa2>XYtVpuSotHb($l>-jd0W#DC7j5$Lc|R=Z z{%;YbOLe8J40CByrI&SfXT{tQ!6Pt`yg~M7OxNRKXHrZU$W}C=N7%x|7s2M&&<{hwm}fmcC!6&A|Q~c zx}FZx*HVC_`TJdwK#U@ym>nDq=^tc3IHpL{4*>(qwA{?u#(E}I-njzjeqRi=(-4UY z?zsJ3CFNPGq95^t+@j1Q!V?;jSIT(>;ck4Sa$g!ztWmajLxaFYUKlqhn_oV^!h&t2 zRh3!@zspkPY9OQ0lwAu#!AsE}b$oVQ?p_p(G~Yeh!a}I7TRx$KR}yv%aGhE09$&v- z&w&5Bz7_`q)2YW@)R9X#T=J9Zg{8<#&-*@x*}1a{>h2}>`_M|NJQ~LC5QU^sf_&1f!>zJcRWjMd*!q z%L>6K9cL?5!?`$Ydr?nqO={=;c%op~FCx6iX?{j0ar+;8z^D_TjBClMv#W;Jm-`=iNZx}?yAP6Py!tju zg2j@?Q;5>LW|4?-Jjz5>tl4vMaVgbVm{$*=z7-Jfymo)Sh9?3B3mKt_IBkvYynLGR zxU6Id12vB1;+-h}JJ`38&nsf?`#q_(bCj+5UtYs@+c_*bqj=^);|BOc{`V}d9KAqH za7NDh8YtqGaEt91ZnnHdAe3Wf;=h~yOkemjbx7t_2VO_M~%t7wg)iuw&*pFv`(XQjU zy~dj>sP9+EDzx8?&^zWTNy+jlx>SHls5-r*Rfu(PKCQ6&_!qH2in)Nw;iY+G6cxGH zYowgp0{sR>%sKNhIP`z3Y^fm!H zu0f>@3SU3`+BICJOshxKk(2^j_22Qw zLTgdSAX%6cO*>v~)!#&v)_o^}=EOxC7nPB)!T-~*p1}mz2|2XUpjkr9r-84cTOw;R zwl1F7m?sF~&~5t(t${AM==skcRwZmcxYJTM(X3n59Sm4~X8 zH^o|SM_MHn&K`0LFW$BrL^QM(DR^Nr5lGv;H@r$#w$zg9YMmX>PN7ud`yWT=7?oMW zM&WGRnrvgzWZN~_HQAmf+qP}nc1=(ARMTX;zVm+n`qgT!&biNxy{}!!C>zOG2QsH+ z$jZzGM3#~4P1V)a&gYZMN4+cWrv-giAR?^Z$;Gf^a3|YJEyYzZwkI!S1!)MO)9MgZ|+{{)->c6||)7O8J0>&+cZ!?t5e^l-6 ztXtUkHJBEUvUZ{Z-3u&V?h6+c)vRo>t0xQVsPkB@#KU>d7j;l_(Q%jEYt{}4UU^*I z;~3Mc-aQY1V`O-w`HUiIa~=C^jFWY=Gi6;Ot*j0@K~=s*9j6_7Sb0elqO%A#6>9@#$9@JHrszYg+vRaF>#If#Me z798R*s9={;84_B2GxVlzr1zI-SPzY;Hw#o} z4(CGzbGH1H)~bh2qCL?FXXU(_k{qd$VH71MYlcI(VEh)V;GXqy7?n|V_taXpytm|>}AZstLFQw=e*9RoiF7%o?PI3Zr{tw z2Z9F?FL3i09E!lrJ$`Aa`UB_#`|s|M1{tst1rR5+>8KQ=f9ruY?{wzAYi}H^YD8-g zYXI-XEpsr^G9QtYm&b;3Xtf~RV(7W$} zPhSRL!VF$SnoOjHKUbGwu;Y~#&4wL>PsSk<{-6-P4Me?qYnlt0bi^;V(l{hVEV#lX zvPg32TDDo{F^MwNi<>xZ+PckwI;0+Zy3Nf-^k#3*@P#~a@cq_e3dL_}H5RmU&deMM zArn;XBRR&sqgf@9@%X$?DmVeGl@Q;Q0xn7GJ$Aqw+0hPUuvKtUDJ$nSZTbgQl5v9f z=LfpdFWlST)~SFM62nR@hp_O}^#RMGEQX^wq{-du&^&AvHi8I|t?s#^`Cow&#LPMs zEcCIW7|XYT3c_Af;@_Lvz0|>EGKDsf$-KCKXuHwGBd8U>Shy>>{M|La=zX=1-E<31 zv7PdLh}bzm%zG6GA*679O??b_MZJ>Kp{ODh60c9tiqpPH(J(txOyp9x9NWS zdvEBWlR9I;->dlpJ6=vD%?{>RUP?yd4|?>0QTzdNv9;{p4_dEUU9jTh|h{bj<0 zIPl8Mt8UR2##i6Ht|9{L)aR@HW-`*isb@?7Uk_4Q>8ks3_3;mBI%_4j6W6b2+bvOk zKB$gYyCNt=yx+REj#8HDuJQuzwY;u}=>Yv)ylB$#mwuxzbnfhL`3F6gyhM#2pZ?po zF_(uQua`7-ZsCQ&Eg$B!`dzbAEWOhVb=ik!43>0qh_glN;)&5|JE7dA>j_A39y2;< z;U`ZiQbf0CU#92eneGHa0-8G#chc1% z{jiIp`GTV9X{N<3?b8pk4(5+29sOTG;|UxYY2 zP~zh*+waz=?bq1G_I69Xl$0ZVhlT=05*J9>IlZaScOAmEN#}l$&trNI2tb28&eL<5#pnCPYQ1jZ zZNoi&YG=QA`Pkun4e_4?V|e1=yVp5^R^9i3E-!k2Apg64{trq#l7cDDoW z=ItmWqVTN?{@@nO*!%6Up2!5I2hqY5ylXRUrEJNkO$}#HbX(j1QpFpan}0WVVoMC% z+^~D)f=?(2lUlu)5#pTlO41D!U3y0cyv2R8bv<6}Z+5r<#zrT_zB`KJ*_?x$5jjBE zvG1$XlClO?yaL{>u6|b`qB{NhZI)3I+xnge@o<)8W0m|TL2)b67FgY{!f>oeW0J;q zH4c6E^L4Q<{+Wd#kK5I*?TMl|p~*5}=6b6leG|sFz&}^~#Rl!E#LO-~;+Zkb1caLD z3p|bUYtQjKuZ{`LI&#$Ko=USbB8Ske`5BRp#S(vsq%aWjN|eK8QN_ZSNme!Eb4pH3 z2^1R;yUh+p`%7Q70k$}UMVf^=3;WYJi_Mx)?BY~1tDX3-cT;4t-b_#(Xw@FolOaZr z+5vo_`f?q0$GaN4pz|ne`*G$i=knEO)9VVZ4p0q69E?2=9t%%JvE=TSq#0PaxusC> zxa#Vw6OoJW)-Bp#tsFBg3irg1`wn>MDhapDQb_&FC?5<2lI(5s@AI|K# zsGHvJ@g55ZcZ+4=P9`8}Sd0X^oHlUTa42Jh&#oV<3<+0mh%KjJ=o1sMPKop0o@iDB z#=v{e>)w%ZJkBN1Wd&|be%{B@E+&@@q$7x<;pAA|_>WFcBh|Re*0rJAzq}!-sN?&f zC#1lrJW0k0#B%j)e-)LzxsR!L8YRC{ZIB#eQ-=~2G3CD7h9?iFXK(5pQ{;lfCKHWw zcIgZ3Zk8SlcAG_`2@H1x{Gb^f_!pg*WUr5B$APb;7LSVtXZq0F{fCHYUe9-Q2wgc1 z#E4+6Uj7cyLtahSnq0;FF?D}BZ7uvR#lSS@KGlPfbtn75YSh)yUsfY&h7#TR|MLU1 z3Eq)Os9fDGDY+aSYK_;35GY&A2k;u%8wU!$K0wsBw~u2g2?XA9sbFAHA3sIl{GCr-H6S-eGxnZ)Rd z@65ql%IAw7U%-j)d{N(j&;YKRfp~V7aqpgdtbE9#AM=tmmxtlzI}%@D){N@^rDn(9 zw;?CFuv*bCQd&m=-!7st#+Rc{AY>fN2}5<-c}Fcw!m^|)y$e*(4T*#;$zOJl ziE*Le-36t>(a=VkoOSM0t86qz+^>MG;E;2IEa0$IioKo^!qT&H>WZ6N*T)GThFHpe zoiLdVx;NiD6xh~`&D1`-H=QJj1V56{P}R=bFiZdaGjwAw=95G( z4!;JK$KMm0k?5;?I_%ChYnR8l7~IJ89TAXPXm~(_?BiF~HXBqAa zjx5c?N3pyZuB96SH{)LznVEsADNY3IRo7%WcN3xH3t`GA>oB9M_`+*00Y_aTPOhxG z-}8UOSI(s`jgxI8|0VA<ApTZEyHpD``iFIj@o zPH+|1qWf3Pi^UbIM9>XI)dtp+jt*uuFyO|QXwoH4pae>E>#mT;U+*rj9hbeZyv~m* zfIx0^YixV;LQqcLZT&}W-Qq>D*&15l7X@9j4za4vUnTo-5hls838F4zIUXVM0n7hV zj`>QshHKIxVNtIhKNmhli#ZLwFYx^zAW3(Zn~s%beQV*)d zqMG+O;dbC@ed`pv20Pt~X@c@0oY zMqs384uDB%$YU(UjZ7MLJg=JuJUM{MyKp9VcJavD%GW6nH^gw|J{f|FJm)`N_ea!Uo z<-XKrB94BmRUK^8=AdVpt*w#_uMbf3r#Mm6>0abth*j~{rt)>qiAbwqtnaok%45)Lp%et5p?TJ zG>OQQ4(s(ToY%|MxsUf(K1Wv;mnOM0gY}`oGy7&`q8`hnvEC!w4##T&fWGM1Hx{rH zG4fW!Zl4ak`vlt0#64Ea(hXy6Bo&oG%YaW8-*=xrbgC~FM-~xF$%Dzw zg;*LXI26#py8aox_k*wxUYtzx1<~-ag^_vI<-UbsS5MxflStS<8vtJ(2P3=UBy$Pmo&lAMJz(Kbws$32jQA|Y-W)d#pX`U zOx2j*Plv$Ck4VK56>OX@vS=F1kJbns-LDp&bDuEHnZjb^3zO=Nox*=OIH-3cW0EPA zEfs9p$2F>%=3ySm+Z}xV$=yMIMPTLPnAxwTTHit$GM>F(j%T}cFGW{Pl4oiRun85D zic?J%>)m_v;dQ$4n(cM|&lNh`cSrwUuezR6wMs!rCrkK{nW^C8{Nw(()nj@rt_Gg% zv@fjMn-&>ObT7N#J1%Yh++9akcXzen3z49Avd@J-AuI}!Rpn$N6-`L=1xwzVSpo1wLe!s>TMK=R_)N5jZeX^X_w%hPS?#o z3WOygQ&ayD0e_e1)_h6S zj8-L&od!_u8eVZ8xhXAf?w6T+e+4~mFZ!;Sd(ZiMV}Rxgtb`#!XjE6JN^oX$lv-t< zjrq!0=466C(KJxZb82#uAn)Z5&C^=mvvp_|AuaaL9%<`H3aQ9=%Ij@*{3tt~zEiN? zqpfm=3>)+IoFh|H8iQwxes4|*W325v1Jjm|MzEVVLSwL>~e z(B6(NM2G%^mq34A(;=WpAvT(VmXoX6FaajWj>QAO4+@TvbCuS&CkPBWi=^I*w8UFIuk&vu~|EPM}i@za3jaU-#-w@M2aubUd4=!GjXMi2-zK9F#Q352nP{au13moDdyyW z`cztvhbbKt4d2pM`cDLYm=~v;GSTL@$FW0B!G<-&dRDSD&z#TLEkhw1sV6fU+EceNzGh01rSFryD73|mJC%$j1B8sJWQjdEHV1M(CZ#hwMFlWV z3!s+psg7wI-ls?*5JQ^=SrwEFXJE(}MPEL?PS3Ki5``jrvHmS+5vM_aAE0h>aS?X{ zO9=H+3@D0gLkJo5kuY{4@jVmyn0@@ze_-AmnF9PBV*zJ7xBC%lB6`22hE)dF*AW~7 zRyNuX{tAwp#derQ)Oo#~T2s+Agx3qz&*>d_y>uJ{IbXam2T%aRBwaPX3w_%=7#WyQ z-}gwb2l77fKOP=^QRx@E-LEmyn7>mfBuPenopX^_`Gtw}L$YgYWL>#qURHN_@b>Pw zZ(Pd%UhBE_@?}HbEj9g|X!j}y9fY8crIK2k$mVJmL_Q0p4-ye}ga-;R;Lu9oPBvdK zBZlzdD3;+jE3(uRS7lqy80802@;J8<6WbN`h^lkuI3@$NJ;GX7ymz$eHQ(&-z^@0)EoTxoYdqyStChl3qW0Ar@suy6K0#TNMK zW`OJ`jZP?&dWfQr?+LnS!ryjqX?Ew%9GoRJ{pQqZ7Wt-TpNO?*{D;e(sl^LmPVk|5 zMI|z^@J^8SxRNC6p}a|?pg%zln|3cfNgK*f#<0x}YP_P9!L=3i(%DTJMu>?tE8&`= z4Ow3etg#tCz@I-4-53ZYw8P#Y#Vdi=5x(ogG0%H0ks$H?o5Pz%ju0VzijXw=M;)4^ z;P)It*Ws2!Cj7m+B7`(oYC?Pw(Jj+tUpK5{JLf98{iA8 zG~*NGk%fb#Eo)tMUi~_h?208Jl88VAPpeS)<>8D^-h)|GIw-z0aR`yB%-GKX`Ktpr zHF0g$`}>h;HmP;8U>()B8eDOitc*3Pt++Bi*TZZzu9f&qB;5Pi!2&xe9e#d&1qXzDKzd%U_D zx-_$P!gcbAY(!d?kw{Gvj~o$%o&Q?O$iB!q;8Sm4@*NDT7)iW#7Qc92V~~n=z_n99 zw3Lj4s)M80sf&CBn?jVz?&~$ud4@8w$K`umev5^lUygwTB)K@Yk>Lp6*nNx~IruUZ zHug7l@GtRifs5(jk1b^EuwP2e`{Kjg6Jh(?gzd zfNlmDZ_kbIUkK7z4EO%rj-hLes$$Y(^l*wth#EPTihG7QCW>O?naU(F5BZB!?K5sMGU6|-nq0O5*aF6@NLbB(e}ltIYb|0IQnK>l0Jfd!Rv7k!Tmo8B8UXWKsU&09m_;3XrtW{KQP zDUA%7z-Xj5zkW4TRR!Q!W6R?Rt2F;2ln)GM6*jn27S zkJAfG#JW_*3TqB7-jD%$nX}c7q_q-gZ(y8QZ;ARM6+5r6;d_uE^*n^?mmVVrZH&gw z9?P53{l4X}M-y;E({bzO0EL@iIa;SD5@Y2Gshh*S{^Z3z$vzkEgeDuYfFJbnHLv~D z)b~tDST?{eIQd-0r`D~7WptGwY?yB+l&gk@oq7Jp>8S^}X^R|r585s0D;$&tL*=f#R6nKBq}|>}Y`gvygqgG;AmR ziK`w_w}tSEK|s1?94XC|W_hG@Vethn)upMgm$}>|7)|gaDvvxZ&1VU6z-B0A1c4l% zLOx~S&33os%7-qr!8lzcMesds3j(EAu20plrmVgXtA%`CTw(kItwW;Bj+hmJ`FtZ| z#6i2xPlRLyM@3~lg=|W=J!|*%U7uL-ST%&>Zdogg5!Yi&9RqzJzk-zr#k$3p#iD9? zfBiJh`S0JB?;hv((%6n~!)zDtS+CkcUGm(MKsH?Q#?jX0hsyRtYg^E{^X{%l@7prV z?H^2~16>pvA_*?h5r4M7)OI(rrZoqD7l!_Oc8+uT53OYsmUkBb2D(G<4fgi?(52+A z=Y9l@vTOpE;7{YJD7IzETid>C!tP_z-Z=5nw}r4zG`b#9m(}Kz-);&zDY=dKbT_`@ zWWUW~ZHp$j!+fvA`sR4z1gCtqZ%v6h9=sDN0f>HKO`q^>)2%jPd@E*kOuvs5K>7DgT`4f>ETCyndWqY3qF69?kRE0}qH^rPwv{N>}OE#s< z>gH-X?SYTYnY)uvdm@QYZDh3MmtqJz!K*S+IgRCV-a@>TU7KJx@d!#5siYQZLekYq zvSRGka33}oj#~ibU0wjD_v0|GW#_V~qeCVYxeS!~Ywz!`ys8rWJIc}BYFH~D7r9}T zD1$b+vhykxnRRLz41l}f7ord&0)<>j2@hRl(l2*B>+&&34-7Ydye0}D!}y&4eASgn zqm@Ss>{sUkT;4G)Zi~DkTn{QFRt#C(k(Uo&o$mkOb=S%fw6M9wq9y7%_%H#$@d8k9 zr1FZ1syU$+S+FB-_eg5~^@(4GtlGT#5E@RkI5+3F;2pIX4!wv^-U`=J8EGO>n2)Nw zKfGma52|e?AqxUduN|E=?vQisxxDF0fmd2fv>BzH4jv-y-(APKZJv@W;i$nQl@Qua z+2nU%$**kA)Ra;NVfjDAkXv*Ap_)gb|7BrLev##lGO`hF>YY5OD{F%%_Sw+0U1+7Y zZfOuz1!2QY&6`Q%JN}(V@4cRHW1WRWC8@mLS2%z&C)_&f5-0_aWz)NPP8wS<59Gq8 z54HueAI>_CpEnKtaw})ofHOH_6Cx3>&eLLaBk~R?ri>aTBIT0RQ;O+%24a6?K?9s{T!M`Pd3RO( zG(ez%L}+9fiDx_z5-N(HR7?k4z^CWtmd?GunVjM5VyV|s=U6ArK8Y?a=IRr<17VZo zC`A*3_^=zMa~EWAV-Q}B(@3y1Ln-m$=q(a6MxCJtzTJ9*fX2kBEA z;A3)1O+6BXCe5P-fzVceX5h~i>uGBnxw!xg<*TrcdypP_VJ;<@b(eyU2HKOY`}MvA zNQ(tSoE%m725bt~0D`lH89oROUAoaXJn@$%fy?XT<{+_$FN>1jsY+#Keu?Pz!vpC) z4FE%5?P!hyX8n)-0}rR0wPRKZ37#DAlkv*Pju0LD&+SWdW8;XK7KL1XuWZXa|40fR zY4UJ>_yu`U4eRV$y2?ddi^)h{MID_U0Ormpp~AVWl;jEfHzcci(42}zBP;E7VZT8(X@(75W+q~5RIJ+eAf4${)=P5GX@eQG_x^58C>qd*Gy*#f9@2Lh(wCeaDj5pz~EAOXc z%(o5u#?HYr7Q?eMtiZE1Y^mrMxRyc1&CQZfioQF315Wxnp64{h)OK6S(}!%z7>EHS z`fLzzz+^TW3*B`4D!{tis^-v^2)pE)(>R=2Nl!qI9*s`)&8nH1t+kX9pf=@{?T|J$ zbV{mV{V9s(M8Ln}!9#lC-M9;vG0Y*-dVqu~%D9#Ng!%jU*dNf85| zd;Se$>tl+`*Xw}coSjdY&Mm(6Egi*N&+Pjap#Z;+sBz^*S<`(=let{KVD?b5LVo_S z0b7)%6E{H&X7X?dm@ItD+<=6c4}$Xt2uI5-)3d6r{? z6o4O`^4y&|Ut6V>`dbWYJCf7t>H!~|`CoK1eGC|kDyDU7)ZvWCrsLdWfC-qpy=G|X zXP2~m2tX?Pc3neFZ^CNXRJ8 zG)Ossr@$`*E{FCN=3RrCIj>|%22hRMVn>ic+s=dbtAXS^GqBO0Y_Y6A7Bo4U*ZEf) zrnofk^x$I?O_6_|kQ`m>0*R+DyOOr*Xj~I1*;a^Tj9y%Yw9X(<8lTgRbuRxkCrd8h z#QHx3%em@C!2Df{oFM;Hk@x2COd4=u*toVs8KE}IWVm~w6p*;KMly?cS&aczZ2hbD zM(ZKr)rWuu_FLONjw)Q_y7IrwQ^R|k^&a~#+}5mkjxjmklgy&i$Y{ujwCYRRhMbcq zdu2cbox7AOuJRb_R$yAkK5xFWwm%zMhf_4ptp_N{IZM|XXeLoj`;C3KlSZ78aOA0W zf3|3;s+ZNJsBh@|M`x*iYfDw8`c9Jm!=bDFMo7Ld*D$Cp@A&RhTw=qYq-rIuPAB;Z zVY9U|!|DPRg>B6+%cTv6zb1qnGFy3<$ccd}LiZ=txof(9x|F;isH28=bmBSK0qW9PyjU1K zQ#@p5uCaaAQH8`iTAS7A1tROr#`^lm|Wy@pFAbu`jP5??b;I zBNG!~puPUNo<1{g|B5GJ8`)UAah_<74-P>E`LWFM1_9g>hB;@2A^G!DN}*KxX-OLz zS|=PnHViGTR}_11QtFg7#1=J!Yi#;7rKev0QIUAvopzsw1z@2=|ER9>CjUWx;<`S4 zcf{*DgKpt-3lJ6S9WMR%%STw3e*CzD-+(~J+kQ%2xxN+tlxyDL*U{HGJ}K*+2zdJ& z)^S-!dgnf%BUI5WN982T%GmSsY$V0}=%^bnvk3xXUfoJxO%t2~&f3Eg&+efClvvCZ zy^IHsqfmkvZ_qaM*Sk@Oz>?-v=_eUNvWI%4KshE{#OU)U=m|nG(TI_^;+sTs(KyY! z?w3sW87B;G_b*wD?@OoENzqIghIBjxYHOd|e7~1LcMgv)S^-L7Y`sSG#Vpd%QLrFg zdbPk13Wo8U#Jab8t&YoW*b1AeUcdj?9=Zm82jsCN9kD>TKtd2~oiRXJ_4iBd74%6) z4c8-IArcy1(9)lK?7e^mXdgr<4IuVaJY}q0WL6lkUu5~fN#oRYt%Fm{noA|oJBFJ= z-tHT8Op>&WhTcWrWz`!9R;d3(4cKMIT8+SasgPlv@zi-4FY+_|RC24H(jpi^|=eKf5DSkl}yl~bt9bN8YLtWK+%jKgc02G^*s zZkH#V5c^$~*=p&bMRqlq>fBdoTuZbZy;dKVJkZV!k02a7m@1Mn@aeJqMcQK8!;%)G zvUGTy%)$>mF}_K~fW;Y4B`$EgO2pyt$VW&X@*o_*$BcpquzfVY8Q@S_i>8|29eJCX z2QHPW5Tf885}s{%{A}yH&GFqi-H~qF7}4bN*m1+nd%xTAH-HmKMa?kGJiZscf+P}f zCI(4jr5wHx+V3Cf*&p=QZBJRT7SkFzttbY&efYy*uOe7-NoqBlpoXXD$Y4+l+}^PX z-IN6k#`PY*1E8){)b|I61yU4WY(3k-Z-DqJq9~l@^FHlK>hjZxdu8Qh#uXnqG&i># z3s6x+$FJLqiq4;h(NimYy zUf0k!zQIUu>&DR{lJk+6`>Se_xVX4Fn+?PJv&6ty(BxxJDzgtcS&UuqtGwW^7fg&j z9*U;cZ#S7#b0ELl;jN&Tnz~Z}d zFvy1`>ShRVw@RQdoVx>jKZ?A!KQzy40S_$H&0nb?%#6Hl^x|$V170Ds1)doJ#mON^ z&*5M

e|Eh5qR1Nc;PDipcJm1MPD@1XC7edMNg*-d#?c15r4L6Y#2ruruD1Hjv2= zv4oOy9Y*!>{y%{XdE}z>!tT};qMnI%x>SC8ud6VVLpn)Y3v7DRw zEcbcJa&@PsbdCA>w+wD59M%7-4fu1EiYTXDH+mbXN>H2k;okM_3rIFv_L=p3GTo@= z5ckJv7}ZQ0UsmlI(Y+@IaHk)nzdr*YVVJ@v%7l%$z#JYD4A44+ewq9IudWWL z?mBwsO&x2NE`CEzv&}Fx6>@cfrV7B(lpi1I71O<3SXe>jQ2HbgM{OB7sRsOav+?~P zdsP}U`$`s-f|@#-*WtbLVx%6RNpxN@e1irCTotUOQ*3B*>A=?1mKH9d8_NLEL`vyX z&wqMK^O0)NB!G3>^LjI?+w*~Hk+VejZ0Yh5Xk&1V#D6x$H;aAk!Lcrj0+Dw;5Lv8T zY%$j59hP7odjfEH0jmNm35~_`*_+HPdoz3c*bk!=0ALu(!IE8);|f0%UN|m5B^WCb zI{vL;jdU>*W5?typOJ|^!YRT?`wx%}l2|SgV2VjaB?_aS0-&SWCMAPq&cL&I3sRcv zLF@!E((BekAJO>*_HrkPk`gK^Yc^5m3)-BDb!-O@f0;mGwg^AmAznW0K#+5e7+Pp? zr7J~MRIggK5ZAF@^xqR0@+>G#H$SU-2py=ZZ5fVXsQhn+Q69{& zFZYK&EFIP1IQm#3ZRkSz;94{#l9RS353|$Tn(5nfUO=?Z=TViq*TDL}|F20}=OQLM zZeK6W9&`QFOTI*_{m?PFHmPq3lBWNm51FV9ZNR!F!gJox>mB?5^7hl^qu%o8OUqCdj*J7oFB(}ir_#!I#Bw25+3o0PhKbJk9UkKCSP5*eR=hhKQ$58# zkw6%?X#Vv?*S3{g{DgIsM$Q=P*Y)v_>a1x)aw342FcjEU-V{m(M)l=0&~5Qin2YnX zd%7OV3WyP0(25QrtCO9SAUz{dOrf z`v3M+VE=`YUVv8@ier!!Q)-f*Q;t5ox^55yJGeOE7dX);3Hw$au@YOD(_RA8tk$sp zKn!r4@O>CoYdkR1KR(^)FavnGd%RrgtCW;`8slyU|YsvW<%0z%6Px8LO2B?v_0%?t#=c03( zLTIIr4*lj$j7Mh;F?v$0yi4#1^%+$I;<>!Q@TAtqB>Okf07sCy_{S@^#8`zr8xDkU zf~JsoX6?si>SV^|=5I={Luq6Mp`6$1fP74(`cLN2^{vY;#lDteoDyabx!Dw21W5sOj z7HcW7c(%*$WqKX9!6-EwO%}WQj)vL#zR?NGJiE8bDepcK2^l2l-yRbD<+V%T_9=%udz;$!PV3+~ zL+dxXku=xnZk^)Z6=SLRf?pp)eOjD{JktZxEy|&?1KXqx2duKR_I7HuD3|PG7TCu)~ zzdcG+hWdLj8nUB48xEI>YNPKS1|V=j+s___2NyNTCRaxXp7YF|=f^%7jFE2FBP0z2 zGtVj0qv#w3&K5}-NGu{a zS`E?`lym-08_!$HUN5e#9E1i>o+(7$}<+)Fc(^E*@8g4YlB?X?_+{X_*p6-|B zA4uHK(_0?59drJngPyjd+nbE<17L)5{(EWu5&XT!KD>S}oP942{xNEEf^**;U~Kal zZEqS&8&PVw0B}{xeT+pdJ%q25GHuxK4rvXS$RC|%s6} zSa7TT&`V~&@w!W`QJOU2qYY$XLn>I5v*UH!p7^^A4$IX|q9>eD5kQwh%_7j%x^)4D zVTTkI6&2m6P#wA~XPeFM6X+oDR^FC-;jW{ty`Nbm_uXa2*uLxD2ap_ot?hb{+%HyW z<2b%ICJ6aFpXLcbjVvTXAR77+OhWJyhI<9w!-) z?lkQ!%#M-xCx5L&SG)o?+|cAb@%f45C`v^{T8wTQm{8=h64NY)-w12WQVO(+14QZ&?wc+(Lee!#ps3>3>0%CViCi0d3k~JSA z(j6c*ONwX=3FZ`7*(aFpcoU!*NRg?+owOg#gKxjYK3>IobmtKBy8|uv1dx?8L;4ve zZ2Y`We@nyDwdekG2-%9z`n5e#rc?P(qveIZ!OSL#YZ3qzm%4F?fAgigg zm`A)3z-|s;0Bb6?!?&MEIWEVzy>%^&2YdvP8SzfSe;Ek42etk8Tt(>F_hh6Tx(HnL zLkf88^Fe@{8zc?0Sud7O+vfWJ(}@*)XMEgx#s1pE4Mgr70WpcL7T*6kplks>4$;zy zXJln$QUszX8k97;p_9D7Uj>^c2Z4bR?{s^6i(VFi!QGPDk@)8hiI*XT{ZRYo zEdqmY)>EZZao0kBf+8F5)MscTpGJq`uKpw`HMTlO(9fYwSl#FL00uKWWveH~aA@=YD4`dSK_ibz0Mdfg7~4_D=ITHUd^zQV&}#Nf^EgVtGdx%>$|^_P{Dy81r7HmaL8bHh$5U#$%j=W5Uo z4K8Xhv7T)!d+s{6twOSI^nIE!bj1eHow;|(I9aLHHuTLw(}64HR~E| zR!{Qqxj82tjOFI@a|{9I4xfiJV<)GC967l&!TJ^0)7#v@-={Mel5ATS@{p{p_&cvM zJKeXtHK5dL-N!<&DO_HU3&!KwT!1yLmhJh#TV^OA!B*}2s*J_9N(8X0gU~~@L$Lg2 zfGUUheE^wf^BWd55CZo_;AMV@gp#JW5OS!=H1jpYLn>m(3gbXSV_E$f``kTi-E()A z^MdY|k>~*|EusR0jgsrn(Hf(oKv<#5PQFJ+B;W5xCL!5i+<`Zow`6FP^r7<*l^Jpv zNO(2)Z9%%WS;advsa^(X(i8c438ndF;mf0l2VAEEcu+i}PyWwzS;O6UUY1eo`_bg~ zEohp+7&>~bo>+_}5r{xZ0ap?AD>@r*K$VuK?&d zsMmyn3<1IfYps6&iDT~e=|IWxbVh$svu;89S4xYZ)>PQxkLj_rlc_)ScIo0S zdap&3h48sbOKAms`U@OUA}a@V4Y$%%jcf%cHlV;o*;{J8y0+|oF1O*=VVMT-gtdeM ztAZ;~TW`kD3W>ShIR>iG6B$sA?_XdM5$||l(_3Of1s6)o>FexLLYo&yBEB7I6AoiT z7kz|(c;_7}bqB-sPDttH4Rl6^l<*~{0%Inz>sLCb&D=k-y)~sKoHpOTa=%K`XrDS1 z68~K%`~ltq7Bn@ZCwZpZ zrWa^eBk?nhP|MV*z2ca+`!>|Y{^otzz>Z+PPvAMPJFO_9$qU~*a8>qh4CJo*jCuQ4 zENJt$9`?`6QSk>sKAz&>ig#ZPKP4Au8C%@d zM+=itXz`xL@2xull<#w?_-aij+>dG7*&H^f9D^CrCIA{uZfuaiN% zH-PS(t@GOoiuf+NVZlUIwzGC4vu0Z*Ik!m_jR*fbI;Azn%ZRvcoy93pK_r}GuyJtG zp*ZE3l@uA3taRc0(m|t2Y;t_-7YoZyqD~7^7Z*gp4Rtl+AT)b3f;@*8A4>LP-me5M z(`;RTwBvJQXRLyL#e=m~t8}!kMIw;1RWyrWk8*o`%gJO>XIVmX`v%QX^4wDqX z=?CZn>y9ixpXVCt>*vE!2~bFc207-4j-&EEF>rW2_JE@A!?M!zkGdK(OfMdp>EL@n zeq-~EOcf^;XZ#j@3YX>jweL~nKf8A4773uDNt^BNccICpQ6(4YI>tO_mudT}L_3)A7H=?k+MIFF{q=LfIj482Q#TkwlBMDVe_LkKt z$tz``0e5WG<|nMCzoOn*x@Dh~GD2CA0cr!5;EBQ7)@X}r#Y6p{Gd5vZk=^jh!DvXY zkYIrC=A`bCP7rB@n;Y(JuAl2=;^V?}+ENKsFe4$X56 zQXerG5gkeYIZ)H2T@Ir=M+0u7nAAYv$4nY$;e^TD1>G+zO_ZrAkEIwsd^UI9Bu zB?1)6;`eduyXTT8W}BXMP6n5?%X-HoQv$0tSiYRCH*OUVWUNGe=k-9h?756%`5hSl|Ty4^O;>X*54 z|NjiH{UN~_2K|g*{^egG&oh*eU^GS5tUps#^=0E~eS zA%Y3}Ay8L>|I^%r0q%tjYh**^jk{8du$aAMoa`^h|DNGL5c;EPZK&1=X?Jl=`&#gEmN#hnpRZ*FWw9}(*n3H4r z{?45{x$cG=3B#1E$mk|*4j;W9tsN@zIyYrmAXUKiuepK$^OyfMOG`^!xNw1g^UJ@? zpZ&?7(&==(opDq2D2rhudTv=8tTWr`PC)*&)4l>kbs~U3HV#yREfLr8XM1WbyGmR= ze(ctBuKe4TzuQg~|GSJ{ug4vC+`%2MyVDDf*Ch)J3k*g>MkB>&l%pcW+`>GA{)oIO zYISG29&9rX<4j{??%82csE{)7?Byh&CyA0-`SSrZ15;b5KGSZ=!QRs8JF{uAEuj&~BM1Zx5? zj#eBqD$0qbjI){`@F1Rb1{DYf**cFu_6UD@*T;GA{)ezNv|8=vm;~*1%BA&7bdol@ ztUO=LcyMU4cUtEi94@=>uT)%}1{sCe{+z29*tf>Zz22BrFyS0HCb{O79ujQd^TrE` zQVP=~vT^LIPNuQ!+fHeCWg6VyW>lr`}Bh)9Fl5V--ex-<@wn zhAB!YoYWJFSi9Bs!EU8V)0C2wx(^IPA>p~DBb^Uj<3%fGyvCm%n~a8RIvHX`s9 zdtKF7IriE1=@7NJ0UP)`AQTSyh1$ zL^4D*R!G{Gv|0&OUQm{rUOR1&YmHI?J9aE`@Zf$995}#^9XoK&@$iF>V`_~Q65+N~ zna9A+%h`ndeT`RKpc<;w_Q}2V9B;#>5h5T?TJ(DJzUMs4Sy@@(+_`hi&d=ba<8`ll zJwN!SH*npxuj1&TqpU11bMFK9aq_oMG8&Djjint(iZWwnZkAnpcC)l^iK^7x@W4Z? zTv*2HhT>;ymY0`#>ezAK@W$7J^gWJ?OH0IQ%PZ)P3YM2w`0$5+kG#;l?XB-*adDC7 zo_~hl`Q6{5-AxcKWt3$EN>UUBk3IGn@zYOJRRwYA0j0XA32Z=B7+UR=BuU714q6~w zi&{Hm5MrHXRQVPcl}Iw35gCQ4DsL+&Bx`GHgfc<~idIWP(_dAVWz%a}PI|h=3b)QV z*87`2pmYuyD)PD_Xj*NI^|}&K)X?M+$j}FrR{B6x*EJw0ivkQtVd%BH6sGVF2&uQG z91Pb9BT2W{VSRHMk`_vO+G3>*p^ANF%lbZiTjfN7Z$}s(Yn&wL+9yaA9-KouVieZa z1S&vCjl>cKZ7=FnTU^uP0ghUil(nX%V)DG4R5sHjrm6~D(^EaBc)^vQ5$7D*_)0;Z zdnb}4im-ueDgv6?K%Q3!D-l7At}WL2>rqt&NJZ83pE+lVR6sz>)7VN$tQ4lO46^~7 zuHUeUy#1ALa~M}dw^NvXi;tx&eef8yQbK7^k+;ptM;Qu#ucefjT2ByVW5%1Y!kThQ z6QQCkE3|fu>XO~N4zl;qPLd?@HmS?2BymW;KcqV|ORbBmZ!mw4!`~Y*`8po{ItX;_ zh*eCHXQXM5d{`323BqWUjIpZRwug;@?};)$(IoMA)-}2#ejn5XSZSu-ZyZ#3K*2eO z6jO|-sdlSzB7XVY8Yk?N<9P)i`hY1BKiN1CFqLp$b_Zm0ZsW&T>sb_1UOh+=wy_Bm zO$z`L;R41~d!wfTj^;Yziw#1EhVs1K`p-Yw|C`nYV2Y_Ao5anvwt$pvm5uT1j6XAh z7jkmC_SJIb0h!8rVYw)d$*P=uR1vEfA;4-6?oZPt$5Y5#I(~N@EMAVXJI#cM;|Qe! z@_a}f#|;D01GIUbqpV+-^E^i)u-Z&4YFn)qx&}l*Sr}@qsI(xCdcKuK*SI>OKg?NM z>C@`0VqJ~JP}e^0i>0UGj}z8$y9`ZRi%}9&*XYX7YcG(-Ex(pnukA82eHNGI$@82* zSq7tZT4_vOX@sh&E6pPheVs=ieu%2_Eitb4@s%(CPXj3a2Kgl3e@&X!Eu}(=y7H_5 z=LMgA0cJY|S4@FN0Hv`Ei(%u;q$qSfNj}!s*XWFyJ}rf4tp9v)-h3V!Hi2gYOe1r? zX~ictUO>?6KW#B-op9j1;NaMDIEoVL+7QRBM$Oza5Vi#89983JG=7~pZh0$R+@u9B z&&s9+)jKYzD8z+c_abfBl9jduT6qA>n#r1x=OyiSjIfR(D?Rub__aTfA!{p}%+Ahw zYrlL%7%K*wLms&QZ+P?@Un34f+N};N%WG_`XA^b`Qt;e!&+&i%n}5yQ-}yrvICL1C zN`U4HNf-@x_PUr&Fq z$+=T!IC=ay%gf7v_i2w~uP0Cx1u|}Qlbl3KjkR0FtII#*|GCArEs*pTANqG5d-m+% z=9_P1-@ZKzheL#PBxyVm;wvkSwizl?Bx#Ev+;SQk?;~|Bh$DqDO&zSqFH?ThUA z{H})nUvWT}{T`SI51PgF3=e(neuS~K;)K_J@10mAWf>3z zk}woh^~hJ@;+P`WBuS6T6(|+)>esxM*W7qJ@A%>O^SRI5!>2#>2_E~#H!<3uMB3?6 zWCbmiAcSBr7~tZFBu=qT1BOF~4^tEwS&^e_OBlvYKa@oV0;?TSm|`mJ`#qh(2)4X- z1FsHkj3sV*dkqd_D(`tNBJa^HV!$!X3~8*8N;ALEVc-6p?B27JSKn|0QFxqZdx`@` z7wF8zT)McyU@#z10ue}z4v3>JxUBI$ZBI~8Pls_{3@>O=>mfpV7DlJ-+a!c=IB9W} zBTZ9=!)&610KRurYmISUq;Qz!O;5S<$akHSgo;Qd)J9?~2)wwBwHl$kxC^CWerb+7 zUUwU>x%t%`x%Ma$#ib1cJ8GpYPvJ~c;v}P zkSd_A9f5423&q*9>pXSrBnJ*3#p;lq3wyZs$hAE5wFlW;?_-Ui9k=+#qfhXE{cry> z?|=XMdBYptK)2oFvBw_ciHE;VNKM=gK`PF@bb;Uee}0`m{QVE&snY|$c%^MbvuQg6 z8ix`Irm`p(VhZaMTM;6JBW@|b0U8Kogf$NDs|x{wP=qu}OGxKP2(W?w`~*$l6UE-r z(&3#Ag0Z8P6jbF10mP9+*EuQxBYcl=l0?|)YOTZ5yMn^m>E?KxzgB|4pL^i27-VGpp*iCbQ0b`AXzg2tT;Qwf!z{x&N7C~4 zGHQB}9+zI5b;_T=4~`=hV{quEt;TAf;>Ai}jqu*&!dDr6HPutM0~^qZ+l?+nOcJI( z0dS7mREVI3)-_|@1_+3w)91kO4{Q>C`n;-tZ%dDna1$*#Toxc9yXIR4~GvMeVKBeMR8G-;8@7(FVn zrJ+<%mnH3%r#ou{#ySEKc*bBLF}A`2mbler)E^>cNRp&zT~X8(QU>6B^&OaKJqQsn zR`rhpODH`MZ);5;<;2k`jS^&#dfF`^LV(u(b;GD(GBoVCD2)7mB^+Rh;)uE~L5Bo* zS0ZO>q>M25B151Q&Ul}5XEjk6fUEt!A!S8O9=+*i{@@QjN?v+aUhVq)`mg>PfBgHuk0~lTiDw}exN7fy5wMjdjqawp!a~#*`A9&{34Yyp& z(HoA?>2*PRTXHFtFM67qx-{gY+*9R^rqP2vk#~vDVV-^>CCJ z=Y^W9x?py3hN39wb>=6Gn7HNLiTeG1)2eM4_J`DkcdH0gfDsxQIYbgrSxG3{gap{( zh|oE*vQKwT@Q!!ClYjh=f0|ovyOY568uma9uArR;7$>}KxRMy1@&B>+=23E8_kHK* z-uu>Cx~sdfH3$#@0TLugf{P?-AuWm8Oly~{6IoIsI}_W9<4I<6?2IyrXC{$jJN9^$ zWP6V7*s(3i+E*))M41#RZh}A(1VMrz31Z)St^F=h?!J@HeCo5@ci#h;Od$e^Do|%?WFE5C!xsuEe5_5J zk6EB4u|sZ#QJLLx+%9$4&A{%_h55ZC5o%qTr4Yge@5?!$oDXt?r__>pSs)yNurX*= zkf;{hlqfnY1x5NSRuF+~a zIh_6b_w#@M=5O!|zxW|u{)$&&mBQqXw5;DtX{UV}^)aOMNYe~0G(q4DgEYz6vSkZD z`?EjGt*?3oyLRp33!ncAk3P1CZqhAu;(M5)j?u$)Y>TTO>hv63uhnT|jHTOc6L?V( zT?LfWFqgh_PK?Q%J^(v6L|XRXE=1o$)Y8uM{ZqxRGC?TQufgy7;QTm zJYUf3Cd@9(qh#nLdkRj4#a@ScW84vH6?Jq{NjHPEG%&H zQX<|S}{P)SUdQ?%zO>{ z_UITIg#axZj^EE1{r*~+k{r?eE{vQ@@jJLCmz-yrp)M~@2s=RbC_hA7OAuBaq$`S0 zI>7S_G)7^Hp#Jjo4$!a1k!UK$U#;ec{o^1?a7`Y5xfdtAj=yn`I zRi+K0=ewYs)+AYmF9m*~j8L-KI%Lpr-qYGKVwWuQB^!E~jk4AvJXvI%1X6lLzK4`f z8q?$%S)NmkD}{_yKG2j+law$F$uo_SU96B~CTHFHY3{h=4&ML14{*avUP>>|F}b8t z8>3Q*c-c#D!5CbyO+cFE2>-$k(r6!E$@zc2{rf`D%JW-+z+z>8clrAB!)_~GzY733 z!n475BPs-=d;|YqZZG7Cluv$$f*ARIaqoUmb)pxmS)4@L*jR&Jnjt;O_U+g3FaG7f z;$Q#koUecVOWb$QcX(p&(;Pc;f;7qLHM>|e^?DUNhswx}TX(B*M5qGtJSENgNa5j! zj^HZIbJCt$o8usK4C$Tbz&UeB3cm<0I;eT*RVYgrN_))|{3+Htw4=^*3>Jy2_188> z2oGT(Njk)F)hV|~56=_$D!`W&$H6l{PZU;YcNPXHNo_^JVPf%@Nfnn6+46~cSh8N1 z$nyX})@x$~M7~FEas(DRV7+$XD=A#PzLd_XkwQ4sm=H?{1C23QO0rdpRAPXb^1PDk z!(fac%X`id_uTn;80zCSdW#upl3+3ex+n$p#K0!j7f@k((fZfu+B@=DN&Z>Rb)&o@ zgCN7`|I1ZYisk~@OV{|(WM7_VgX38398ha5y5D!@B5B5WW0Gd4O|C7e)jamdBmCUI z_~*Ru1Mg?mit;^fz4cc9=%XJc^b|>&lVmBU&dl(k z5B+bv^WEdb&8g4-~c4|&mJ02m= z2jNMgiX%7fC4J(mQzgsuoHPflA_&|XoeyL=3-uQz2Z~cpmNIilQBQ&j=ysa~q2mSV z7i9_?H*RFdHP^Cc%{rtA@IAx!t9RfB0ah69{MOfL&ZKnPouULqfL16k!Y9XSOQ0Nr z&frLql`@Wau6X9sA1g|81b$IkSt@b$yFILMI$!H*O^tJrGVf6gYw~5X}XfAgwE@cdj*5j?zf}p6IFFIwp z&x>8ug$%!y0u-L-(HlTK+`xVE@qPUIul*_?{?EU{RoCuBYv(LW<>RSpn>$IXHP7+W&rz#R^0JrjWXqTG`_3G7}IDUk0 z-+K@D-g7^#ZktGjjE_wqvxLt494~q0%XrUwe}Z+>Tj}<4d_P8;E(Srf(?kg9_fn!b zV9%aC?A^PU@$qr0)jF-#BK=NEyV=2H7Ek)bK}gc?^3;JRIdb$c)2r8W>f|ww9Xmp+ z)gmY&o(kIxVFHW1LR4by+kcaOj#M zduFW}WRtCAS#58b*)KAZD+IxQ7>04q1$-%1-uJ(Ee8+Wz#!Wc}(zz9jx z{(!+5q+`%Vqa|P@LJ4FUIMSL{r$fES>{;vPjxsoB0pWXiw#^spok_UPQ0kb8?JfwcwNp>1Qpfl`(F)`iLlnfn!u`k$17qd3gMF44_CpDx zUbtzUQXi|3>pl|44uAaEDU=L}f`Iq_qo3t9uYNNN^D`WLWwTdV?j;KnRyWsK#{{oakrHAs3RKNztjs+8%fgmaer!5?X8B zye|}$I3mkCE8e#{f;ETP@*5d>~6@Cy|iRiG^M-0_}BUk=Jq zoXu4Rb)D*oEP~H&KGkk}VL=&`uW0u=Oir#sDMhtf<+97BS+i<22*b?GS@u8t6nW-? zE}rkm^^9O(56eq%%)EH57$?@Du0(;NkSh!>!*DJZT-f;^ZA<6TVSr}o+H5IjbYl!U zbJE;r&YWROz^d^HvLvOsxX7B-Q(y)CB*7;j$ub^(^ighq z?Hf?ik|rs8_Uu6kiOvmi#m9P*ZYLigi0hRqX__)KKZjI4HnVhkJ%S)0(HW0D_87CX z=a`<}SojQz@$m*>7$dE5j(x4hSYwPg{OFswddDsFvUwU)8`=B#!`%7R?_h;XIJH`f zXzMcOFMat-$+h9siIXVhGjrxFLI~n$419?nc=UQbnrV+XtPqAioqh+;uOdAkj3qM$ zsV!PN8z77;7~=w1C4t_c^teD>^s>HF>i{y7vGwY0L{Z4OnKNWMB@AO49m`Gq#9L8bvo!Po{;#V!Yg<#q?A}+ z(Cc-PzK1Ee*A`lHOingXfpKV*Fkn@qL9JHfgCF?EJoeb*eD$k;%~-9DRHn$ZdxR<= zO%tRt^m+@_Ycb)p;FY(&k+;3|UEFx{%NZYEix4r|dSn)aNS0*GVW@25`yR-Q*|TT4 z>s#O8Q=j+?_U_q3mTKzt2EG@Q<-I}QU9!$tSH?Y>z%K1PTOf#}luJtZmSpKy2m*|L zzLJeU2&9dCUP_;j?!Vl2w2l6Dw0WaW_|l8KcpDyUImC}8pO@Lul1aHdiREm=OZPE6 zpCwt)mCgf+5QaFe&}lcxvWzf_c!MV3qnQyWf}##)T&I|Km^ zqTFcInOZf$WtUyX=FOM0VZ#QtZr#H6?c4FBWy(M8sAeSy)M{Gcw7afLj0kh?6?l(6ISxs5s%d1i_QPg97@xNWQ~ z2&aUT#CSKt16avRX?8)jzbId$eVo=M$!DI^N5wPgJSV_n88O)@lgK=7xvcG;+6A?)=# zpg>58ltBT<3=j&0GT?<+YpKQ&I_V?wl(gI7v9N}o2H5klgJT5 z<4Hp<3`s8`NqdB0fUz2_amH<>=F~aDI#LKHTLZ;BAn>Gzw3dF~A#+@fsvKlcoB?Zb zwKGG;;i2}dlbf=I;qG}3`H-f0ajq^H<@wS{=vYgwUU6I*Sw^MmG8EU|u#+Eu@B4Z4 zTi(vb4O<5=P$?|EewR3mFgjylVU90;@$(!za)coCsYEf|ZWk|jeg^LH0N0@Vyuja% ze&!5LU}Q`fA(6$ReBQo=*#1!V3apzu$>(-sQ*5A=zoiC^y)u7`}T6?)CtzD z-$-UOtJiL1)zn6|ZM%s#-SJ*do;t+$9=?x9_v~WN?x#3$;slHH^Wxe{=1aW}Q z1xj1m%^v+Uqn|n%MpFbMYLz;TMuQ-QE_cA6d6U5oU5PM$zXIEnk?7&Lh#W254hx|(L_;&ZZBc&^g1?d+KkqcFlsQls>ZhMSM!a({tmrP7o#(f zhRe2Wyi3#Hv-?{<_!m#y8zTwOVCja-0Vq zxSub5=?gsb%ro@+eJXKG9E~wM*JW~Qip`rNHf`R{%U*ILPwd;z;lqcSo0(&Fc9wJJ zW?7tHaEOY2T*zL!K%nwGm(+6Xn zZ{Ys>@8|QM|2&mSj34?~5){e>Ins>0-=mvlC@3UjK4lbNidP`l_3-HYU#l zasyeOI?3pQKSLOI4+m1FR-?0=(`SzGwZHyrzVf9nvTyHRDp8fOY89PobdsV??hsN^ z!az~SIsaH^`?>NSGbkrB!jW1FDVNBsujF5k`nqM%V99Xhe5ZeOd}am029^ffE|ypy zJ*HPOe2*F!E5S0CpY&)%VI>$t`M%WSE?JHTu)L9zE|0s!@gICvI8`j4n1(ISG=0&h zR2)mS01C~&CvMy>ZgsUU8);jilEGW%b zqrnwdT)}nMUB_MDyw4f*K)tAOYPb7T;u>q#tl`ERZ*)=UG(~3a82zln!r~&mUP7z2 zNRsyGbec%hL+haolrcHBKuj3p$aK;)#rHxyFJOFpg2u!oYu2n`YHEs&8@3{aCCj@U zJMs*VKlw1HPo7|Awneuqn4fDiH@ASXAU%&X(QLWmN+zdPvu^z~fBq+b!6OephBY3_ zS7;;LpwW(a?}PvBpYpz+_yBPb^EY??4S(>_kMZ0y&r+?{G1`$c-f+VWyzcdHBrWRC zrq{&0>?OBQiO0yaq1EY==Y6Vajb1;a-A!3PK1QqEAqXQb-?WX}U-u^NyXQVcmSJoP zBB#?`;LyP%%$_-onQ&4gomQJ&4?V=6|Ji?~yVxg+>riNFciKI6?b^j}{>E=`#~pXD z&}{Pb{-*&!n&xEvj7q&m5cwQCdX)eACx1fZS7^1H_)-u>F&K%l&ag06kr#41iigH@@g@C2#RPXAd8ln4le*b&`C9#V}H1RfjKtwE=4q)mBh z?;gJVxzBL#-FFSLUX(y$VT(vj5iBZ5;H)WOmD<&TDocRCYs3Xxvs;jR-OOp+win&J zmIy-6CkPz#w(t9pyTFT*k}$5i%$l{NsV;)40x6tfnvIZ3N$DcpC3*y0ztmao7Xf~S#nWzN`K{aB-2hXryEJ(SM&0vaWKKeV$5MgD@;S86YAYbV7 ze?HrfI@yt5bHt#=IC(ZHICA7LfAN=p$_M|+|3nyVWYubquI+_1kM8%v-9^1PIZ7BpLJtW`7@yMUnG%rFAR8e?qOu$ilOZ0GXJ zH*n>)ZLD9vo;7R7*}Z!gzxi9gPP?^85CpW_ZNe~SVq$_M?JOC?!}SP2;>T6m-45@5 z>)ZJEzw}E8>5-L2_2EQF)#Z z=H!d?mKV_bR%-G*6i*St!MPX99QS4R$kP6N{(LidHd2gG-6Y#9H*D`6lu~M zAdpX-IK}<<-p|$7Udz6{d-%gY{6ma^YQ0KUXhfP^;|a;{{qAq`%2&P;r4)~RZ!cf@ z(pOQ^L+6H6r}WZFVppZ*!%@y_=!)|hm>3!Y$NVuA-Be2{N` z^P610@d|$Y-R~!iBG#^1O{?7_jwi`=$_+Q&#?{xp)JY{bTeMn>G@DHp=V$45yR>_4 zhi2&~gK;qG6NZ(TX1hgWe3Cpjgkj9(8#f`WWaGw7Oihhr42;+6{MK*%4j=i*M=-f7 zZ%UF3DRVrfm>3&#fwXRma6I5ux4xWz^xk)I!z*6S)Z{v_6|@cr;~F;8WO>0;R;=MF zkYs6w$y2J;D%xmHojlHGKl^b$`H4?)_Vj6@Aa(??xpC5da#+e+_Ekr^?8c6i5+y(i zNzT%Qc8QU_R91de734yQ_=~kcxu;ml1vNkgsPp~i(Ilm}WDviAR{mzWMA-5GK%>#1 z*Xz;kb_WwddE#Zg`REN9ZPwa>M9@m#3n568KI3&KNij1sM-)ZmxvMLwR4N>NYCj+P zgd7?_@(X4TqNOvW2%On3y5yH-Dp3mx_pV>3r} zqcvJ*LoMb!9Y}Ab1vI}_8$%SYzVrtVKFhnz%$((^r}pybp6_zx(9^V99eV8yVJq~y zIj2s~aPHhWR!?tWqB4%aXM9}p%9r29Bj0_PJ$oL*Sb@n5nN1yG7M5x?;F_H`aQT+4 zM1IVh-#*3{zVHQ}*!L7dbP2tXR;$B?%Qw;MB?M8;F>3a6)~(w>qu${7;w+vYQK{CM zo15XuC!Xf7KKW^W{(t^o@WKGk59nt-wrtzxt~p6ax;-=oo#uS+ySw=h|NFmZqEVsU zZgTwiah`kjh|}+ls^nT1%gRvkAIM$%gVvtt2TAV`XxflVA z5}=(oz6M$4LFfM=0FqZ~7jiPnNaH2WYLvvOXkrNLam>O>v2WjAe($$`lQ+NRom{{3 zW>&9VOQO3pYOAQmHG~l8+~WIQfxK|^8IdoY9{os7qaDFD3S%(J7MTr+)P<6VFzAAX zSx8GD1xXSjP0oI!9V2d$NguWX4Kb*<2P0i3-7z{_NA8K!Shc|IZ+tE9e8;=-ypS|8 zoIZ7qxw$zWe)v)5=Vw`%Y0_@D=@mw*5N^@&qtJ09EG_`9-<5Tz0v8lalY}q~(R!p7 z%nqZ;)>>+{8cDA|)R`CVIt-wt;oQQaV>J$3U*EiWGe7!cckt%7yp=1jypmobsMcco znI_HpRD*!PQ=FYW$8$#xa`4~*?)ui>@Vy5gV&?1_0?%^+Olwdo7~H=LN4}T-|AO1d zvw%^UTk&V*0QS1P8F7B!wxipQW|04uT3&FJT&M(Kv_xR^wS1pvf4eormu%t^$NvE* ztxF-4Rh(I^PK!@|{NtQHb(X7kY~_ZX zFJZ4d?mweMi1z~QVkTDzclR?NZ8X4e_X zMle0So||5BE!XY5p4)DF6<1wzCF?I+=SsOeiIg~{kU$ZBEM#uZB|^f`G0-;`<_Ig{ zMed$qvC}1tV=7}cQsX4``gy`+qmB$L_3>!Qd?@6yAbg^iqAmr)ETIqujCe?VU2^;k z)*3AdRD@E3elNjTOBBWQlOBhjJ%}(av1E)TH>o3g70&jJ{D36Cc!|{a2|#&X?PAW! zaHER{C&t8Kc`x$bM){LA}_$h zNz{Q$j`_Y%x7+2wll!^p#+|HRzn){qPS9GIr&@_glO7Wj69`YS&|IWiuM>yR>~*MD zCP|XSp;-JJKMKiAhby*iMR@^v<{_0L%Qf4#Z>LtRv$)uyR?Df6*Ld&yKERvb@>cTP z*$&eircplJ`Hio$u&_XGaBnh(Y|FU_b8jPj!F^Yilq z<5Q_pu4fnl9nF}2KXAM_bdqqrUXSs{I6)9FKR-{sUUyO4Ow(MP=imO~zv2J-@GtY0 zx4n}ntkdhK20T7&0#1fC>{Jv>oCN*|>n;#i`D zbo#?Z%dK$?yi$_%`e@@+0ov_0olcAW`@hT62cG5e$MHfp67x;S`)?<&YU^N$3FHk#wW*k%iG=t!lTh> z(Cv0y2E-V8y@WK)iGvzv&dl(wZ+we1%c)iak|cGdBr+f?nCMH*+=Yb&#>XeIRx>+0 z?^xQEU$E**q$i46YYD!tE;ip(B`F4Xg#{Lx z^R!wmeC3En`$>W=NTfW^!^ZeWC_d((U&ULSgNNgIuHSZ!6nA%xo!Fda}az7dp1J_IdR0AFP#Y&ER;PUj{Jx z-TCMF_rQz&J8a91p5;c>=zL%=6|DHa+HwTT^PjVY5J;uzbQh7*F|^Om&m%m={Cty7 zee$!^>s2;yxt!_s>$&QhtGW7`>$z&{4%V&RNTaceAabQT4Yf8XA%+BF7{)3wy`;@ozWg~p^Xb2&wa_HD?w%v0 zgAy0zYdMZo@Q2w-WK3zR=SvF$00ty(?w^bAs~ld!xKdnfsq*DMUkR41MuNiDR|7tZ zl2fT3)#!9O#Boel=dSWZNidR7DYUhaX;;SUht$R!B>gTE*PtC*deVeQ(r965BD zqlb?WhY`7Ufh?sISMS(Pr52-e%VN8U6arsCx6|V31N#a53VZkNWp;L!=MEj*`u7kKJDR;;k_fapEAeNHu2G{Tf}`WA+-{}7|7c5+WWXy` z2G+{piM1Aefir7^4au_CB_d3vmp%L!vDwho>2f`KeE!t;QD~HrG^ZHIgLZ=+R@$&dzf1;6WOVF=}IqRjVe6>k*y` zn4Vrw9LLluA>-q90&g5YaOX0bv?YcT=0J5L9C(x|(&XFQZ-^quXjysYFNwN!mkFA&4Wi z5@bCmXL#b|X^8X%BR!rGFBhQX{m=;4N(x13+)(q2Yp8(eMhpU^PGwoVvQ~!)oL)g z0fX|DYPC9u6h~1+r_(7iubD%I3xO5JL8w_4%`3ZgSzA{c5rc7Q&l?X=I^N)m}x)dJ$eh<$Vw3~~hogQaTp5O@u-+SmDL`74tkJFf#WNKL}5&&QXz^eC{;LAr5-u~R$7qONj&9+L!EZ%=Uo=goMdipj=S#u7EeF@ zG_&XC$W!ge3F9hxo{pUN`ORg6To9ndXhK<8UxoZ2> z^!i<{yYVHYy*~YJhgPe_;^HE$R;vgCEYj~f2y3U)p|$ABA=1P_SWTAG?x&6mp@867 z>$KNx5dg?+pE#-_J%v&pQ6-{Yud{mHYNn^xa^;oRv-OHA*nZVD4(^L^I#8Y>)fUet z96Nr92Ohka`@a2c9(#BNvG{FzozP)(RtYF$) z0&!hovrDZ>FJ`+?4e&|}{|_S|`1h@i0*qE-?qBhqj6OFz!0j;LGU11l{eM2lO3$~X zi6ICb)CP5PK?g+r6cIYIvK4&1%q|L+guc~S+?Xk81ng8EJ}(3VdcvBOo5arQG!x9 za@8=9WVvPk{ylv2&i~F|{^ft;+}RTZrUFQ;5okNCC-yv#KsgD$A6C0qUpybD$DkDP zV*4s>e`l`@5xb&5PvwQvYONiRfctWoB+0dLhz}v0N`i4DkYN~;ryA>n@)TK?Agm;= zR2(8R&t38_cgZ(lEd8WcFwAEJfsYlLQ?!X=6b3H{P{Kz^iA@15F*YMh9Fd(123Q)6 z#=xmdl9a&now|=wXfz5%x7+3SKJpP(jWvjCK6CRuzWd-qMTw2V0^NR>o$B!O$4ELD^CGo?6RHsgsSO~%}LJC2rHODu;@pVof zKSr)SR!>ZF?ARgx?7#g#tealNrcImJw)H9|Cs(m{?G{$8T1BHVL1TOs)%rL=5aWB{ zAlX&E4w4gMh=`R!(`+u1>V*0Ea~wZ$gr^Ve=bn4+;>mq`NqUlMTqO=8Y(7LRdY&W* zBIaiosm6*Z3VF%PuH^$CcrQ2Jax1xrF(M+*oMMr-IokA5(y4!7J)$U}*K@?if#=a_ zHTljxckyR``bRwS@b?(2R!OBJ?e4a^RO1@fYLc{%RNw~zTDah0L1{2jvTn$8Jt&bX z16>Yf>HJ5XIh*rB<8OJ!e{_x;l*`zm@3PW*GCn>&IEP-ZH;{xJBoS5!;Eg8aJSUMd zWb$7g5Ln3&S}8a%+R6c6{*`rS<^Ex5?f-?EnBBXWtnZ^`#XztuH3(5=JL{)UU zAP5F^SFNn?^iQoJ@AUYM5C12cv$Oof2R=X)O(AWS%w&X~W5x}F3b{3C?O;gOVge2MZy(tL=bNPC94v-6xeah6cUAPysaiBeFhhkzys zC7I5dtTr&hAQZ0l%!`XGo?Cbm;{p;%w@PSnv-Q3VFXFRQYqbyXJNjB5Cw!T z%|TT;a-_-U{^}d_T9#XHdpZ5i9Lf{Kam?)57D?YZ(MgtKGpFrb@jPs|$Km}4Q94I? z83xBJYET#~na#+%nrEJVieLWE{|CSL?>@ve*Idillc)Hl|M(#myK}@*K$^H`ktG?v z@`yx?&J54)JB&c%ONA$W99?5@Tx}cPY_zexvF$dt%{F!#HMX^})ugf2*l6s=Xlyo( z(HP&p-^}^9GyCV9d7k^aFa2%U1zYYB`ZGJD&IOM*1Ss%EC+W)2;0^XWkA8n*hRd*Ib2?s zb<}?K(W=89cK78YAS`$en~kL>hD0X4_4vi6Ayi_e*J-hvn*3FK@xvA1@gX~~D(Jve z>hSA9-3-j#bEzkGjAcfix)~(6Pmcv#D5-y) zG;e$7<#kVO;Q7ibWeRcsqt~&K3Kh#ta=o;LkbkaFtvckQ1V7ioSNGk6_1%(b(C_j} zp(-T-(ufTC3Giz`o=TZy?iY~EUzWH6y$T#{W-oC$!ljICy>Xo`am+z$J&mL z{%oN$F4sevgmdqV_qR0m>ut$SK0!g*RmCJ3wJ3=O7V#$$u9T)#Lt;(yDkE<3+O=T< z%9}=3Ay)B@_AR3Dq5~sZtKlJPxNB@sNQ{6Eut_-3S=g}=ubW8}$K|o`jG}8Cc8J=k*?N7Yy zDV-D1ep(2=&tNt7cL_YT=jzXnd)1Eqg3uX8s6LR~`0*D(hVX%xY9T}E+Np`g zdC&pvzW_!2RYaTCH7I@4z(V5mBlRFNcdA@_1hj{oOAaMA%a=}+l$Gm!Z1L=%rd7i5 zP~WQ5tk&!G-6ky-P!ul$gf=nSXte}eo6r3aH}I{jXIk=pD@-c+OL)EpCAYtYiM(6< zM~Me34Fhdpz&SJT~qz6&QzyhY3kY%>TKC9v|DZICLeCv#s^+4-!M6 zdWN-@Qj#+!-ZLZz5a$x2Xr&zdc_=mn;p)sf17u7!B8z+lRA?)Jmg z9!-}B-E>qD@vv(-(EKJizO@-hY4GhyW23Xmob7pCLB6GAQlsOHcCPxX2Gd~V-ymr! z>25#7&`t09B*8!LEg4Jjpz!G-WSGM2TvUmmiv+SYs^VT*Go??Ls(fQI_c5q`pqM#q zEC!|A`E%Z+?m@{Q_Q+xi)h7_;Wf5kz>rXY4Fhno7f2hI3IKb%GDiRW4@o=Vyv$82< zKtgWkb_a$)DF*(vDrUGsM9c4ExDQIB-wsY-Fz2jT?hOA=eB%z5_VdGa-y_cq(aurc zB|}An3g?GQb+V2?0@ovakUu#ks_xv5e&7vni^JB0<;lmSBYs!cqld$fJ^j!_B~pSs z=MI_nODH{S0s9q=7Z(k>`G01{ll`C75QF(#QAwuPYzpx$P4Iww=6K+wt1?Z+v=Ew=espeUB?BTuK^mt z5KS$lvrNW9dIZcS$fjt-Lenn85QV&c_bW9fbHHQFELf`&%upjTqRGZ>7qgvoE#-Wg z^i)jysz~vx7q29CRjscORmY}!78gt4z%X^_K1@tPc4VLg_?7*OulUq(^p+uE`(Ddy zx9a5U<}Q$xHraK>`__l(H9)0vL-b;Kdsk9Y&V39dl5K(57m`FViqgL4a$8*GW}!zd zXw7@H{BHvhTDw5MWavq)Bj35f82RX8i?av&sHXahid$PQL_txMk+73GPl1>Cc1z=` zchv-B#Y%uNFhkLId}6zI2v?H*SB~iC=*?8G)A#SX78jes|3$w+x${=+iTcWst z=dj_U`!zNlm&^CoKumj{QQ!It_TPoJQngz{OnuD8?j#ppOTHP|1_S>-ipm;fZKnjj zA?a1)xASV*Y9~t^vR6voCW|yqPdYucQwudbt3!z%{SS@@P{;q5k$AiIr@uc|nk;de z_2M|L6UAy=hDkV6G}9XoqW?X-RZr=TMH~t0VgE&nQxj34mEV3Q8{RHX3v)w?x&#^S68zP}3nJb}@hq-*|5n5GcMBab}NOu_OK zBr&X~n0$+H(x~}Vk>6apbTV_+!XI$W(fMycg^I&!Y#jt-HN>w?MY`=utn<21pf&*X zT0CO@wIf=9y`S?)623#x;NS-_7*t~XoJme<@DIF^B5LxhPf}(U&LhBf=#&c5;LB3{ z_Wclh<@3ZyJ0o{)7+S?bz6CsUlBJsQDCJR18e1PVoW&jmviui8sV!pjUSzHxFdsdt z5bRlW;+j-6_&^ILtc%|9SopP0$inRVrxpC?`d*2M+rE?= z4y|fv*XuP?hQ{!*K7y0&Z>@<~J%n+Hx(Xp=E4zw6EE_ zpU0Ly(NROY9l*xlC$a-+Vy;3$$I>-s=UlrLaR-Z|hHrqjY0mu|V44G94-1MaG!rSc zP7ckPcE7TA<) zUovgV2!C%K9_ZoWkze}Je|tr8Rx=u5@voW`Sy-!P@L9~ba1rk^3CL%@xUWySqaVx zEmtZt1%=EONzvztZFCWwfoIWZ1Ew4^dl||XGZRA89Dm{KF1yNXedLBJ6k+OCFVxyV z4xBg%E$J+Ul72fQPeDNs1KG0qoxv!aiJY9G4TpK1-zFO!?gq|7cwamGP)?R=t$tT( zPg&pl327TTCo$BrPj3AChS_9#H_JMV9hhjTaD!^@k{(sRc#PgUb@h-tvfSnS5!zhx z<^Ao|ZFLf+Px&-L=V12yHab5CZci>=Zv)>*`ualTmK<97^<*Q2M}Y+nIJbFQ%X{O@ zdtSHVuz5WFB$I4l8~hVDqPJu?q2+JkmT@JLH&hKA27WJm?iRz`4y*c}F7UR+3lw_| zVhLi#;(hbCEh)BGVT0^<%-p|9P`UXP_FcS9$+n;Ut{vFTzllf?8o78otaUlc@oeC0 zm8<>`&N5^gRHy{6OTWI61 zBtH6WIk*HoQBayO-ms3V_L*G#iY)kgUK~l>)in3<(Hq)u#TRhP@n4(4{umBe&?EcP zkAwIn)oh;_kMCkBg3oN@;ZCbun%S07)FI|20jE#Wgio;OsSW4ez03AI-kG>a@%fR$e zqIJM7(QLseX&Da_ptx2tY&`oOrdue|c>Aywh$5V~V4H}YV_U@u7XWDqpRo3`fXRpU`U(7LtRY%ra}MLFon9dlY@h{_<)I?%KtB%m_F&XJ zAV>)|0gN+R?rGcLKHVciQ2}zwB*Fm`9!*IhjnV zCG8l$`C9l(i7E7|g|##@Tw}@dRIaDMT<7X8qFgvN&gkvzhTSZ$X70udp7%mYNN2y7 zy}aJeEmuT}6%nF@vbu0;l{?2mK11!GshgY zKu|3Hy^I&gbJoZ^;bFsyQwwd>g?2qbc{{X}F}RDiSDBY<_V-e=5^WP8P}rpAx7935{EoT+cHAbKF2J%?EbGt824Dl?@H$0yJJA7h z2Ze+TrCpIGFzA-{%&{Z1bd6Xk-k3S5TqeQ8b6nvk(7~h5ya& zU*_it6GoO-S9j|K^L8<9do=6W9O(Ip=3n6W$j%2jS|#i*7_N|&e(o69%fi^2EHgg4ojKO5u-43czs zs~++1ubS_;?=QwL#D@eEoIy!J>n0Q(Xe@+*SOBq$3n`ek)aTl+!%X3(bAfc9H?rrq zE$F9Yrzz{y2Kk2mt{#+-+WXZv9GYD8PV%v9&jS!Lp25rew)KAW@#;sWb4W zs~zwX8g>(q&Lt4$M{+{eec33};8j%Nulx&daoT3cB`Jx;Ci|ygj&nM&d2KN?oR9vn`Q8)m5IQ=u)>1`hj7HX0Zr%VLG zAc;--^J}WLP9)oB!Pwa^j<2QQFm$m$fFPcbtK^QA9*YK5CCvf(sGlq_C>g_C&Xu@z zCKvWjQxH&G;wOBt>XlFOJRVTK78A(9%B{hNnB1SzaQzPstI`rS$!<}6OhRYzGb?}7 zAbR`E5rCL8s?ZagGyMZ9C&iH6q&TKDaJjT1-{mmt7uO~VGNdC@(&{vcJv!v(u{!Kd z9Z@$)GI4Ndi5=R*i7OC#J8blu!y7s%G0iV;7@M^S_gVAo&IF9~ifOX1=zK-XJ}L)= z*DesF3x$I>sHk-CEnwI&RE19Swn7STSeH4xbIseU%q>D(4Hj40@TYY7xZ19NX|_F| zcV6L$J|eAqj~KQceA71tbCAWER*{RATj#@K>$yPY{Mv5^XZS09;u{vcuA@e-*xw)D zquKq=Z**ArHI4?qqKsRj!Gx7^G9&ob@y{*wPv^^)KC3bk{b+^BF#y@^YTVf{5om0r zoOQjup|~)vm%)oluC-*(F-pZ&S!W`A2Q>X6ny}GNG|4JvKwfv+a~~-K7^oZ#TnyaD zn{kW$y}*MVLsIRXDX5*Dq1GcY&o-hSUzXcgS&3@5KNF9sMoJ&_`a3pqCHk5Y7~2C4 z`H1OxC4WV&={lE5w8X}eg{)Y_oHz+0+Evx2+pA**LnO>;T2yoUR9_di`c>Z-RCl1J zvHpRrH_i3?mFaC1;|HJ-zh|!NC~rgxJcWe9Sb4@?vdENAKLRq&#A)XYGB!|r!bPQ3 zG;vfs${nS;$J)!(3C;1yD}{hR0;lyKSi@EadnVc&2_U8zwMvM~1xpkvY&Y<)UkH>oy8fwXl5Dcv35#!oD0Eo+ECJzlktmEs_zgLD@S=@|< z=d9W#D|oAZO8BV>?A)q^1QtXDcQaSq@e;T&=ZvC&g@@8vL>tiw4XSZ^9kNe+LIx&6 zY?N|^6(AZ`i%(7r0k8&qfk8{gzPK2H&$C_|$EmKms(B)DDfFr`6!|QQ``+bO-u^^Fa~Zoo(ph-i2B=+0hFK`{jEyQeo+SJ#TQ*E@EoU-pRpdc#+9b8K+sTcQ(< z$~9t3Fj{;UO?~OhBY>~z_{;R4Bm)Xc9CnXdARQG>J1;+=f%ahZySsvYkR46|R&V_t zp4t^1Ox?%VR}&r7!+VYU6?H3X&m6+#rA}4P3uUXz@PMzUM_Jr6AL9qIZUNmZcVGBH z@phDz4B4KN7%C61%WwR_EjEcciEUnQyiiFa@)ZBi%iSBVyA>S9Kg;QG~z`Q;C$2Wsbwshou z%j61O@hNTeYM!qHM~_oe=yz=Ag?en9xzJuQ#ZK-++|et-TB0_-ZUsiU4aUPhyCXm% zUT$xK_}ql=ZMA*9&O((P9DBYfY?@Y5dHne8ReM1Rf&QiyY138%{K^aI$Xu2e{wBV60-T83hTx5Nt7o zH!ygpNx%b__Sv|DV#OaDO)PnwhIrmfjGPdUxEe0Id4@~!8?%xuKiJZm_`}OuW%w^{ zo$;x%S!=kUBK#J*s+4JrwioYG9*Y9Nyo7DsydZxzz$K?()GO!w%;>U$`}AXVog zmtzQQupccw4%)toDANe7Xc+~7uGBCQE*od`76Kzb&*k`?LTeJN-7Gc#X?bO3nAGzp z2Kj4L!uEOR#c+=2dYBncm@BpbNna-N^9{e&@G(v@_&Qq=wqJnIMQqJQ3tqRE-$G$` z1$vE_y{*(jBNE@iB!h6->nnYmn=n<)1`_K$4CBtzq3jTVR;1UTb{_<&VHq%~n41?92dDA*42w0KrXG-yfV(YO(`tHq zw;F#5O6|)DOE8+z0fgvNbb#%)3*h!O#YjMKm#(P`q2;(5>(Pu}5hvc^Z|pMFykTMT zCyKYm_v`elP4XvGqtT9_RD(k*h!xXs<`yXiW2 z8p+UW?@jA@vxmn52`4uQpy!=VH+~GvY#d&)5iXPI#>50U))|>$`yFP1?)ozXoA}MB zY;Yr^?bMU)UsM3}DmjB&kL{|v=>f;0 zLtahrFmaD>FmK!UqH%#Yg73uadA?-rtAFEcyuK9&EL_b8o_3~V!d#ZZ1pPZ5m>+-Gm?S^))pL;(~}w>q%k4gOj$%_~C#R5l^U z9Ee0q>_uz_5_ov16x!GtEO!PqvWvuYZNSQzQAfDL(}51Sk;|)3a*idbmwiM?O0;;Y zg4rw<^hjL&B8E$-W0F26n)7POLLpXoP25`BjP5NYtMqJ)#+dEX{o1@iz7@8`G>pHS2_+cLFAKsM|H+p?^SmUvwI`Gt zFD4~?cb2b+gLSJwv?BiQ>lksRI(Gds-S>!Nw6^|f-sgF%=O-xWw{Q19M!>P_YD+Ma zi(F1$b38u)B56kgDw*M_`N$3s3TCS%&v_(^*80@RcTvNeNF5eA@oU4X4N9Mq>BUDVSwi*K-NE)WPgF7)K;$CcOa_U4?;& zx@>QGb!ukPO%AJkPY7{<$GviY1$R8N$PGV6vgr#FBfNwE(PZ06&Hc_E`8(YC&l{C> zj}t-Xwki&$5v6UpXvtU8837X4bv%fwuCJG8|%v& z^lM>oL9=6}Yh=8;zprm@4zpd6(vM{BSqZ*k-6O*wd*DFVJF&({vqUP9W^pA4q>k&} zAFrbMgKU(f;L@~UbgYmE_m0{k&3jbb3`J7^C{FbnVf|Q*2w*#cnIn$0 zkzHauJ6Syd0tPO=0s+}Y8Eai%ZNEgoMcgMgLmPAU$=T4=RTK<-H_#r~10K_zFCs)k z&dx}C;|j41p1G)V8qRm6EWZQ!LrW{Vl2rKk_rWZ7q<9-x5nLK%vA?7C z{i*Q`f<_lVYW;^lWhAZ@=o@tbsM9CAh2PGzk zGlD=m%C3UJ(woy(t#Xnr33(-X|(dt6Wo*pXFZXDBGEO95C` zk!c5zQ_zfV0ot1dEw(I+u1CxO*XUJbHhvSrdQH&>S>{a%hFbG5wZYv(BzGEF2F5gT zVuv-A=x~%;Gf1fC;fwdnwGks$i55!3Dws1Whh4gRH~U1;(^0ZTJz=ypM=FJs=O1`4 ze#m4*qfM3mkbtY(pn?QRpyxPO7KTV9scxhC4WdSP=+}i#Vtv-)wpb=*L8^hrS=Gkd z&d_HjY!WX6JvTV$FSiVhey&f3(+ZIvZeGMx@p2I|ew9N`wDD~}Ff}kwjY~NEtp^)@ zBzWq51jhdjRA7u9!I@}jb%OF~JGs6Axa1GLh)&~Yt@)$vZmy*$Dp(BHpiRiLO||z+ zTwgJma-Jv_aUFsw04)$gr|FWjJvGffKC0k`?O?jF{CIU zH;@7`Zu)RZgQKo_QQc$e3%3gY<;{8aiFSV*jnz|-Cd)c?m5uTb7v?n8Vc9OYxmk*> z0Wfa#{NzA(n)#-v1Ze#wo@7f1z@eq|Eajgix$^-AKoYhQ4!cN*a*eVULL~6x09-^B z;fheIJ?a`)X}D|Bop5yr&B+jbzUc{i-%o#oIS+Ur;V=f93FJH}Pqx>&8#XRwb-W}r z)pBCM#YBF{@xOW`6uF<^p5BI{y}p$r7@Vh`i3p}s!sap|yC9;NtMDxcOd zl%VY#dYixXp`kK2ydTP&55PdD^Q?DYtb7=2%89#zM6M+m}-eQ zB!s?SLN1>$t$YptpehI(n4%svYYj=EZ%H~Lw$ueGn4LtErg{gDEiAc^6I4lAAWO(+ zgL5ES$hs9tmdNc3Geqes$(fH>P)MM|+O~U3w7l5YEHXC$;!&p0U^i&%b>IGh>~6T{ zz$GMp5>`ssx z^~rT#Mh@|n6JpSCx_WbIFwG}?)cOXRW(eeqi)P*cGGO?_jKD(E(9J607mlL~-q~^$ya{XTk5r~JO9l@7FazT(5%t}W8fro-N_PZGUL0x^ zI%yAdqbVC5iQ7Y17C{Nz+-n2{Ckag5TGeI>?Ag9vixQ$E1M>MQWAbE7YMg;+tU<8k zfdA5Q8*tGDse@zs1JVk;SukTlk0@knH{HQmFW#QLS4)tk=(?dZD zUi_fb#G46!5~1DI>(V|5efo9*5fKsPmB`PC1Ws+9kprRd_%X(BLM#{2;Ms}Z``1Pbl;37Y>IpRt>(n(jCX0r-?NL{ z^XE~7(^1aF&{toQsiP}q-5>}63c{P!6ez}NtLzGJ3u+kt3NlTL4fl88TN-(xv%yz@ zzuou?Jxn@o8^1pF41Rul7$41dHnSrsCUkQH#5NMfMXTV;_f{W(6ta~Agb~*mrDRYj z>lzzjK?L?Od`1rb`_CQ2(<{=nVcy7M3Y5>krNVvMG^s*3ln3H}7c!_VO~51}<&O&A zYZ*#f5-(mqbsQ{aQ95)Tqr$^}V8y_6;Ls|LQ1JLRno`FXgs#m?rcBg8ieTDNVeeM= zmBL#9IS5p%54ST3Qu$`7vluI7==mg`VyDBys)01pUVjpp(nz>4WnH=RWb!Q>r=zd;S<#P*Cu{pd31V?ujp&U+wJ+zzH1u?!=b-!xmfvUOdw3sSMHT zRVyM_AsOSBG_;cv5a1`tEg$8-e+riL2Ac5~-Q>z=PR~XgP+M%0EW=c@E~lCG637Ib z-1ijuTC7)*?bpn7&kAc;{;rzT^9`DHCm?peX}_HJyz)Ti6N!BJGnyC@%hj?&m1zW; z18aIip{}S{d*~F@*sXzo)MP`9%a6kgs6GsQM<_`hy^dMJ`e{^O9V?^_U96X;9ikcG|)XEqhkfbrB|5l zwVkM5t_#{e<&hKHIcV?5!z3%y#7(tq+?zRk7OghP(ZI_Km8ke05TLU<@^Lj@B5i&v zBDdC!wCcvErgP*n)6sIx4brBJa2@V&jD|Ug8AQ^eMjJAUE~fXk6uCEDrhJcaEcZsm zytPFW_(Ax+v}LUKlcPhF!`H0gz?)aWJ0}Y5x=jO%VSykw!_WKSxP++t;~nmEuljLn z#J|$DBFsryqUwkf2Vs7kIPw;nz5-JU|?Ym;pk*ooQS;-j-FmgDk-feF+Y6tK^X0 zpvJQVazA2N2}a&U{(jwAuVg7k+EKk!+7nR?7Y6^|f2>W$Fo{(G!K9MIF1(chi64n} zXSK(@;TfT!8mARCC&ap+9<0^EIw~I;SwHu>kUC>PR7I7ihno0p#p8qRD&X`!43NRq+6U_!hy{{bCOXY$U@PMwML<+Yxm(n{(!%vfb} z)KNX1l&bH8!6dP_iz$!@x8ZZ{0CWS}z3LEN`z+d})9f7G^Ekhu*|;@9dM7h0#Q%~w zYr1xP)?G+GgS|(TFQ9yd@-LLT`BW}dYdJROYfM-q2@nHoy*1OJBDIO9C;8`7gWysJ zzF&-jQ1J3B(tS>l084ju{Fm z>gqEo;Z@2eD8z{_j8sW6g-EGxf(XXu#vAtCzt}qphfSAB{TV~oNy@Q7w&r+(HNo73 zC2XQ7dFAFJDr(Gy*J=@m3uF8yV7q2~N5ok9%QxiA5{p*W{0U$Osy4+vVg zT+lEJaEiPTenky9_|LTum6t-JvhUx_*KZ0iiY7)V7*fL|?7n3qrc!*wTCVd)aHpF3 z^d($vB$6)Z${N}}76P@H6QAnVQiswV?Gi4y$Jy3PX|vCKs%9@4DDbZ}_S~l>s6hOH1+$NF>aIAH(hN6XC@%2> z93(lfMM3>@X;6xi9+$j-Q7;i&O(66aZS)mGe5li6#M87oz5#Lajh|ksZoKHjt-lW0 zVn!@|z$PC})Hv9~=q64?Nzy=DjFUAd2$mOtwO-w^{2VF$8^F5sLrPR|wL8y6Upz|f zLnLm_eI90rrV=E`j42Dkq8vUBfZOi~WGJJIdie;8IN(2hGlGnJ5r|MgsPxOvCoBvz zJAO|N&~Q_T0xaq;B?cRyS7<14A|{>X6=09?Rx&OY&~uq^5ut$1gCbgNDdcaD+!_(v zNLs~U7n+OCyZ&AgZF>3(D$EMkIG((T;JbBB+<6ea2jUS=Qx7e$27RuR(8+VWMhLy} z`Yq;{vh@D$y?2#7cCk~Y_XE?|VNK|Tgo-v^{LRU$~LXg)2W1@xB%!d>>m;>2&GiZgxiTGsJQq>@zpI-_%v?^635 zsz|~#t!qNsmmK_S7*h%}*{sQ0KO*uMapnH~HY)x&!tnJgE>?q*q;>FY@h!`NdHkF8 z-;6@4nXS-)Pq8vi-2!p-=v+8_-Y$sbFWV9M5Xg$!a3VF!Tx7IS4jHC1u}N;a8dt)d zn0o9Ck3lnV(>qZ{q47qd+Tk)7$LzyeU*ah1!Kj7;Cqd8wS6~fqxgAt*8rOIJ#+F(6 zB`2Ue;n6RC$ZUuCnP*wpi}%yLE(?CrAE9D+fu*noZtGb@v=htp0dlvp#9b&To57b> zHxVE;hkmut$2Th~O122ArsvS(^z?MQ@<;8LjDS)5uQP>}FdJRj3IWoZb^T)99K1Zd7 zykxp$Fkql@n_)!2n0Y<@eKDsn;5P2Fy1L%ugnAx{L#7)?ASQZQ1B=icr3@E^M|~Vb$Vq(o)YriKQ0z2;2_- z&mx!VKo&S9)Eh^8t8MwQtY(I2>t5Ap9OqCtCox)6#%gpLm1js|zCUdQdkVb}i-H`Z5DeCmxM34-gpe1Zxk=5rD? z%mM?+6&S$~%*IL}QH-T9D%MYR9yJt?Taf=XrIz8;zbuMg=#%Hz=As`s5z{ z=C3jB@SZ6JnQ$fNoA1ZQ=~7@!Vub&0X9%NID91oy2V&CqqLIVEYXdo?WNiGj4r`aco@?=up{bArO+<`}?y|SWXV9Qki~69R0G0 zJ26xNMBaV*I4zmnTh6e@E3hG7Goh*j3!Qxl6X=zq^$+>@en#5Ww4-}&decX|bnb}@ z)Zoq}9PV80bQym{`KqjHqN`mOue(!CtEC+Zy~kSWbF(S~rx2W++C=6-umEcz$}dms zA;KZv(Ch~Yg~bXX7Y?Cnn+rVFj!&A52Su{83_6!3Ri5^Us7Vpo2jfLqAV93uIOHw& zm71=41@a39N=SO}#r7K{BWAX@B7`jG}>ZU{(mi!F84!FGTW z_-HdYdF(}{|qfb*>yfWi(-xpH2M$c80iKrsSSezvAibL8GN7I!|u-EaN`cbUCoJQn8yTE>vAs z2KvWO${I=G6+ezM_fNb_mIVaJjZ> z7zn_M@c^YXNbP8Vq?7P91&2c159E!YU?u2Q&z;GV z(y2Dud@h3X#iZE|mXeCgdT5Z=U0WPw3ffTWTAU4lE^DoeO^K)O#~Xke{YPq#PbF|_ zpseUYVRXx>$5|lqBKF}8ZB5r9g5PNo`N&>^FcDEaH0@zB_h9DRKcMsukxCkY%Z*erG2dOG5Sjc14M$bPH2G>zapPscO9AsX_SncaOIVR)Y z;EKDrpR=*|ztmb$w|A%ruRRRcmOf1rtBY~TcXbT<#pF`L5s@NSN_Wq;-fEr*?D-R`(3ieT8qbMat^R+w? zBnZVo*5qp5ZSOujt32RQO6+e~SjBe~?Mw9T-^@Q8;!YiZ4Zorpa1$7UrbPxr!Kr4M zinv15%GY5_Yb$znT=-$y6ApUS)4HW~ESVxKbbQ7C{Pg`^LNW!eiS9Zq_?)uFa1^hR zVYqUwN7`Z421Pck=j}&ir(g4W&1@+5udo39w03BHH^__kLiMgE^L)d5NUonjVd~$# zjnLp-g6iRpPNS3P_h-as0>3G#ej-5cNK=;Zp--wb@~e? zIt6oLoQzY8^a+3O*K!w{j`DCoA|&z~Al@kuxBrV{CW7})(SWX)9YoZoIdr_%l|;4q+F(F=;hE@5PtTQp56s$fxe9#Ix3Gess{^fg zJ8xZ}gh_ig^|ULPg<#njyq!z_#QF1N>b{>J{U~`m)Q3MW6ii+S#iswv;yY?OXX-M8 zgA&bKJe{V>xSDhzOTu#7*#kS`IP%~5SZ401WLBj~ilj$tMeWvf{V=h$76jyJ=!S5nWU5F%a*%Gj3C)K^DJO*)da(SKz*`-%#{MP&P=4SGl8OZ}hRk z4*Y0#QUR>qZ?TtZPp_!eVF0GkkZ;w4{?L9*hG{+~qJiO1M3P&26{=B9pW9@EeXH&` zA3hn~8}XlCN(gsk`}ZvCKP@{7#)0p(yYr&fqB~IpQhZdC`v^nh=tBG8n*k}5nLY4RNu(?Q$=_fBgz>*{yV<$^@@KlU z;w-{kNK1_5s?a3jQC2HUfU^GBzO>7?<4qd}q47}a7~93cE^r;*v<~qs)|p^uy_1#Xy+j_=OHf0j&(MB#wD@J1^f8= zMyw3Q0Hxr}(`S2w55P~0u&8>9LiaPF&~m0S&b;a1WHk%#Qxf0Ur4w0GzqC&r;bUb4 zzp?cN=`YPi1K6uz-Es#qzntAavl^0c?VvRfrg7Jf>xl7`pWsW20I>x9q)?A9ZnJo% z1726<^UNRoD)0ShzWU|BeWEhdoNmYLzZr2-phg-5EddDsAz}q3UFBlMs)%t%OpTKk zMte^_r7rsMeii*~!{Qwjf*Q-6i0{0GR6xC@WtHDSxIsZ%)@UITJ(Lt|uMc?%tj0s- z%}`bpdRr*+I_*r@Zp?d>{4cm_(5&xwXHEAtlS<47G(9_Y*84=u31$y3ugK%Cg9zPr z=G_6-FaW||CASwQ1}H0OdT2MvGI)>+w1Y&>nmzMIe5M^6DEQ4D;H8m@^)mXnSWu#F zDmylJ$xmQf91wGT-S3ea;y5zBXV7zU}j}SqJa_w_RWj|hG%wT z9})y|WV@Ai&5n&0!^0RIIpzdYPDvxu)C$XP-!nY*VxAb&|Ud7tU_2KKSw;)p6Ba z7|60k+4ezrYK?{RoYdTu+O)Mzp9hf)yni=C2Vm4vozRX-C;?a3+M2Lrz=LItojlR3z?3>7-F97m#d&-oDRJ?a<{0vSHZL7ztw+>fMXn%|$^J#Hw%Ij2MM~ zi^t841qrE_5gGRrpD`mM!JraG3f^^6b;&aP`m<|iGrH5!#XVu(jT^dM-i@(FlD6Sk zGO@M(-g^4Uv78a4in8bk<0N!E^qR{8Bj@$vX4&v7`WgE1qK*LU;T7=FF|lsZE-ppuovI|kWMMo|8Q~pbLZ(M zNJffxG0*9$!;T8DxM5eWNCpq8`heJzhOl+-Ps*^bz7j8E;8U%=E#*7y0oOE(b%sp2 zT?HIVoRY_)!N3C8tZ*uTS^H+}RxPc(!d#;=I)fq;tx}A(nhzHy8b(*Vk`(Do*EYY@ zzPd$2<#^=bqC-t;xy6sTrBEqzj=)gKWvM3a5NHLWsY0qlo>H(HY;u%i4-{{c*dX3- zms#^jqXI;U6|#T}?3s1!IGJ2eFUYsYjbE^*as(sBEP!#S6Guf@d};j;VBS{cA%r(; zq5n1!BA0y_+t7FcS*W7K8|&Xvk)ADX(k)jyT;2~jgSJZnx)h}0Js=IhoV6i41Fnw2 z4_Q7Ct>jKoPsa7kD9v9i`h6RF`2{8v6R*Mc6zU~N?`JSr#@RRm+n7)&`aA_Ln5_T$ z_h`j|?;gu^c=*URK`~-5N+wspTQ>iz&FZlRT+cxvPHQZJi7(+|S$g2t_kyC(=fxpw zha`^v&n4=!Q6LhA@GWNdgRJo&tZ@%{ZI1`cxFr;xrPM9%I;CssG%--50r}}h9h72b zEn@rA@tTat(R&AG^vM8h`HhOOCRhQgia4cd3v-;Le~l%aa1{kUs(+Ikdy5K=RTBO9 z;(rFN^>#Fj5s55EG-}4%rTX09KVqNXwK1=Kmc$I#1TW?i<$=I z+ma+U17KDo>Otbmxef!^eQIbsAmfL1tE=0TguN^bk)XVnefrB_3_n2QG5#p9V+Iq= z8+Higfn$wruB@*KDYWN*08T-%zU;i-yx=&TKODLg00bY}q{>bZ0|5D4MxG~uB0<2r zLzU@f!bN$3uZFR3pBT(w15`jt4d+@ebwL8Q>FS3ELBN0egHB2SHuk4mKR&dm=K-^R zMml6|nBOvNp)4cd(3%Dk4nj#h`Q+oc@4nCC#P*f=rC<67$drPu4XpLi0fk~AuXXHK z&?3nB+;;yT!NCcFH4eGr8lwe2>P!7{DGbUH<~ zTyjllYVq*5zk`SW{9*j?-FIVIH5@+Z5lF2yTH8cnCOnIC$2rik1hasVa1zjxAe3Z6 zMj=2B5Ja$I>_5K>zz`7>Wgz$z7srZ;wHD5U9mdyZZ5l3}=)hrAI_EvJTrMN%kmjO= zK2~*&gM$M+^Yl}A;f3eXv=y3)K?c_vw2n|!73TAKENx;_@#m+~>#lzu)iBjyilUrCqvm|5v}U(SV*I#)du1{&a5N$e0rGi6Vjwqkc%|U-!0Y ztuY{{q9M!YKzO%LIJ&L{954+u>CYd7{o*q7J&x~lVnj=yiZz&X2G|8Ibt!~3xv9Ms zORKMIuJ=x@`~A3&ohPd$OJeEF-m z;f5P<`|a<-$&)8B8J~!`>VSYF3n?|U;-3jix&qjQJ z;N=m4Oq)1(WL$@#vEJTsfJEIta$j`1cGznoQjjMAA33%y(BE@XdU;5FJ1#m{9Lo)o z!gJbmDV=~P!R$R#uobvpAxf9XMqq6@-^Y_rJ&q@ycnn|qS~1tyV$ty?go+x2XxUZgO+Rg8Xrm7Sf?>3N&!&m8cF;epZ5;wz zmStjG(24>-H0+13mm|&*4|zx7y%dG{%WT1OLPQYSm-1^`NFh*+M_5)BG9}?!MunU+ zXpHe?Fch-Z;Dr~S$M>KA9=`ImFXP95{Ks+cy&uM%@4ge)U3UX=ulNN)r677?b;b!e zC}cU`yKP$#n0rBK0Z0+QOGF^+g_%}-&_J;g80`s#;BhAsu%0QB$6UvdtKbcWZrMmB zbUA23_;n%xXOg;>9BL-PIsQTjKxNTz65g{fk$9RjZ!kHaD^Js*n5i)9fD5y-k@^ca z5m1Wo(#vPDyL$l#hZk|~g%|MB%P-)W?>&Ww9(oA5p5fy^`4L=w)%7Sxp=3?#LvswQ zVk4c1B3MO2gp&eFD%7S%S>&i4r?Tk0Kv5{%b=UiF^UXKosi&Ue>w4rc&oj^IU_l#_ z%QKy!URKDpg3dT~4lJJ5h|ZUw00zsUa0Sb15Id&USl=jclIJ7`0;^ z$T^NCAPyaKU?2(30lJLi8A7wtxeze%H3hy;mgSz5$Rflzh!AeHMsaoIA`uVIuj`0v z1T!sv@W<|fF)a@EE?{r>LIeO7^}0#nA?EWr=8FYKDpZw^La1T{f-wdM zhd#f{r?6OSed#cs>#C|dBP{^{0uP8;Q>KkvipU=Gb0B=-&|7FYlzo-^vFC`#=SD=PqdHVb18a@yly&~fEz25fM zWSoy{L*rtoY%%+LKgH-$jQ^wVC6eDmb6EfSkYu!52b=HBXI7&5CwJ?vb^QFVlLJSA zghM&d2TL}$q4IhZ0I;cl>-riL;FJJu2xt!#YksW@?G04`Qr7UvtcdSRDLoN#S4+Me z^Uv{kjOlcW*>sBObd2%1M44-hMqDjv>`S2)MS-lyBgt|IiI+M{IC$WV1)#{rv7gcC z7OMBmLix~UDdE75mY~yC{&-?Tv4BuH1Q}QYn$|*V@9A_7@F1dtfc88}k~9Pqtg(QU1XApwWnud*HnMN@WQi%jXdXG535u5-b zF(t1ljV_9)^BMz+bt+FXDS`nG;rG1PtHr!?4yNac3@O@O1WGCwLSzEmP#(ER!VCZw zAwpMqZ~$?g@LKT^5RTaB*PQ3iXHS(_*0FOTU2P zG!Xs~F-J#8QD=FISi0Bw^k(OnZy}_*q|V9JJp2Cn9ln#=%%MriDa+~ik8%PG!OO7s z)B6v(0FIN-;e9R0*B=}ZfJH^#w4RBZ2VOb{t-1lSy_(jXP@SU53$LJu&kR|s*9q#h zgKxTt;}vuQKPvB20}#MEIiWEXwBm&1UXo1P~;if#&B@3)NpMR z$4p5HowLCm!d09wkP3;WPXN3DEd_+`NcJ2WpOfRG0*Dyd3=5Z}7bJ;S3K{}jlN|_# zy+=I-8}=&G90mr0k_w^TdRdg1S2cTt{RWIER#-O(DGH3rhBX*Mz>(ExmTc5Db%o`8 zf!AJp1!tds9aMn^Fq<`_JN2|Kk6^fBWD6L!3D| zf~g$FMTy2X$g%=34HOh0B;dl@RJ@i6Am@-#2D1dT@HJ7%p>8bR``!=XLm&MSJoVfY zsM-cvaJe80&K+cwu|wt3aNe-iH3(W~Xj==Fb6ES~;Q_vW|CjI+AOA62fBkJ(HWi>G zM)?G;X&@n>GKGdLGIDT+jauitaq8=RS_e20_A)_|g(VXWP=S!vksL_q{ssW6y8K2? zu;AZ)=nS-j2dR!x)P#iaG9!FSW#O&90(|<^)x3l~OET$j$4=-vpRQo7#bM1U40T<{ ze`(F!`C>1Y!CcN45gZ8LZ;gxT4=KVM1*8leU4yOyfKc)KA$6jzxN1YwG-zuRBP3c= z!?YYOX$(g)XrW^?lyiYuxFf0w2hLCt4oa%4S7l`SS)*(ZpbfdF;UiYIi2}R|=1S)k z2J~x$hg?+%KW>5}X~JO|#!ylo!w|dZlvUY&l(KFI2Y3L(!WbN9tnlj{qMz2sjn^R8 zd*iBPmKRQ-|ju&y`XAb(fM}^H{X~XO;rN z8R>|+$bdm(84RRVwAQU}+TdbybbJnO^tdJWP48tW=mv>#p0I+Gm!H8iHOz^Po(0?6vl=>QM)MGg zo0lAN%(dm62esJ?UlawGGR`@~ertRZ#W;B8ON`1fMrDb~WP<5vip+c3$K?n`G2-Y# z5m?hz)U{mL2VO6W<7fN(=Td;#C~*Y;#WFwwHZZHp&chsWY8D)(Hu0<4i=iM>1i+Dj z;nJ2<$OW}=QP`Mr%73@Sr2~!Ob#0x3FoY)_dlFyy(pTZEVvt+%bJxyCRQM`I(M1Lg#9P+8toG+Qr}f*w5gmTW*J-64Wd));{%MaAx$z({;dGu#|P@|ArAQ2m((( z@i_kIGxwo6sBmFn@u#nU8-M?gUdrgvt!wD(=o4seEJ*MQ2C|E4S8q%)qa28ElpCtUNv% z3YJ26yFVudrwug5pa=k=WSzWQM1kijMBT#cr(u8j&kD(!p9lbk@G`_e3J2>r!i7wi zN-cy!8zQTui@LaQ#CJvA&!5NFzIs0%eDFc+oH&Db zz3W|g&wJj3Yp%N%x4h#vY;A4%yrZ$trE+jSKSn79QE=HjYg;%&pup%)2Bz&4PTqJ$ zuRkG|KL`tFmc4Q1c@ASO;bP5t1_HtX90W|LVcA0uh448(64HD4ogfJ3Ae{8!VC=EZ zHGA~QwlEY(RJt-2ZNmoGayiFhd4T2o0EdTr*xSE|#o+;7IQtqdUc88x&%K0KUws(| z`}G9m>4GAARog_?e&mIh>enqbzf@O&evQ5F&9xgwjvx zc=kCA*h`>dZPUB%`eA(LGoQn&FP%qLa=u>EG$_j)O=H%2V7u!IR88G^0c6J*djI|R zI`^`m=76J6u2@20}_FFv287{-NwK)2N9qM@AEZ$U+hI$LXIPty1o(G#A1yA zfasnOVO$HdC}t^=@!hO`g@D(gH{-P|W(mBTWlLm4N~11zOCBEu6H*X3}g;}n7B!MF`| zpkmrhKwADP&U3Tsv`C+`Pp%unfjT{?m}D{9NGTN!$8f!(?C!O0f2R6X4=9Ryo$5ay z`hOdKoj6?!mw+L>Wi87xPnIXKSS+!#vyI&guj9}D?9cGz<4+9M z-sMM()%6lJ)i{0XH14_Q9zY6MV__&MVYZ>I1J6Qp#C$s6{N^|D^wUpcHkop@r^5q` zM-#mC(n~md_ADNGfuiwbhS`ky7A9L6PVJn;4L96?)2FY%sZ*y=jz^eooj_TZ z*xI=&o;79Z(=xP%k_tqYON~nj!6ArnLG}vr>mD6}95{+X2#)ME#=wAW1{ul)S^$z? z8|xBHz4XsK(BHkGX=vGtm{BT=UT+2%b6DZP$uFUbg#^gLQ4662KmsHjxC(dx<}55Z zzyQky6H_m%1ukB^h!>uF7U#~L!&6T^g_pkneLVl{b2xwgJd9!8SF0RFQD8cr0BHPt z_4h<40y++`G*Ug4zbW9K?y;k6-l2_}{$AJh3YS3WN08egT3QJ5Rj8-~K|}{Ir{5Ez zE6E)yUl37r&UVi|aF8TANBB%?pQnxwtu?F(l>;oNA@vWa^)0>lQO5qd?*v5XsOzN< zG6VoF1quB@Xw%sk&e6SbZ#vz6ka*^68`nC|113Pulz8`SZFQbghXo$vNa@IVsI#@Ym^br&RBZS zop<1U?|UCU^W0~lrNq{BhN|MatO4aasu5Al3$(V4X)cyPn*L;lqf-B~dpBM5MWfiKvL_6DM4hd1UQ0B5WcBhg{a zYNcQYAYqsj3vg~??1W4dUd~@5vItR0A}IkF{!LWTfdvEE7Vh5{u(tR8q9}MDCg0`t z$;MjlLo6XW!=8ve<{@$@EkhG>)xugM%U-K=PE&=(3?_6qkJcTnPzoX7sOepAXkaL7 z&>8;0un6;E{Q(@twad8;1Ue1XNYfWmLR2CP>H3G-@KAQHU)Pw3V%_5qwUIvC@cD;_ zZ8S{$!5f|-e18Q1pne3#kjuhUeG=3Zd>|sUw)-7om9s%59@=#VxR8FlNc65BpVN(2 z`koqvdC?I}Np$lY3@tgh|L_`?jxV#dNukfPX}o{>`8en3K$&=dnS9{kj14h$h8Ak?kh!FbzFc82+u$={8sdt*LS%&o70RC~Zt3MT*Jy~Jc@h;otp zBNW$phY+yA@K22Xby*K@RNr+XsWKt_zwqp9&a=0=vBM%mQ@0q63fQ*A-rgR*_O-9! z_19m=D4!nDhs`NAdnD5)w)A4`tv{GF=mzW2_oXCK77Yv+d~h9tHyb|5PhAtFRbq9`I#{#if~QGx}EV-mbz z)=Of@B4ZF7VzvA5;X}kI!2ED5F%tHdl2%gt4Ho7$PGaZCzOfZeEP1!- zd(Bo+2AnUI+Oyp<*+=D`Q2;>8c|2p@V^R3fDbH5^#v{TlTC7$p#Pu3|FZ`H-l^4mx zGrEpB52Xr4ty2{qF$f^w6fG!;df9-QBupFBmp`Y2Spb>TJ7v;#wfk`@mjxL)Iy!`N z4vWPi2UrOqF{;}ErWFL+wHE!^256NI|Zo>>dxHu(i528KsXCJ`gXu2?q>NSH`3MKI(7S3$u- z1r`~@W_wgISfhqh%&5Cw4*coqsT};n_cVu^_zppWnlG|NV7*;V-^` zrfG1p*^2flOmE|Pz_lp=#)UTe*3IW|=gu8`>tFsA{iXxa0orznuG^q#T-LS`q8lvF!yy8@-aHDCYQH}K`Z`U-A8_Z&>}3mk$6kz5p=AK=7$JymAJ?IRPdIQn{x z97xrEb_XE!|3ePs2->m#lYf*cs{CzA{ z0E*DFpl$?X8$>|RhK%~HO$Fq17x5_Mmak!}E-VvZG{zKI&}7uuSmbl8@ftW<5Sr|B zY3+y*8;YRDo=blLV2Eu!pOZ@>(suSt`Q8unF_-h#sQG>o_dtbNd0?ApLw!-|#b+0{ zs{Twh#vE$_X!`eT^CY9#rEr|@pwNze!u)=TMct)&Wwty+n2os-Vkpc%E9%dt%6WYC z`5J;SPr5&6>tGf$;l2KT5(JfNKWuAit=d#LWJ7XxiuMhUS?H*tuY>UF1ol-O)!Y&xpgnhd0FsNO zzE5kHas-M@(q}N2h3rZ@2{g>(CxFS!0BU92^=`6MxP4&UDWxT;{8d1;&HG;fRmov4 za~A<)!P-~md|yXqgc#5V0SIg|>(i^U=Z0v_wHjz_9Ic{P+xyet85yvJf>(aV^Q(VrQ{htwhUxu*$(5_xJZD z4da#lY%Q?g9Ee-W-U`d5fCY;+Te1C#UE(;-35K$B*&o(Ib5D!3Q`zJjBEI zAEnq#8+b3ut-kX)roq(%$!68}J^D@pO1G`hOk)iq4^RcfF8V|)cd)fa;+w@H9vLVL z)Id#ZON-m-{+j|t8B8Uya8yvXq@_w<%IBClk45QmX~`%t2Bb}uAvLwNF{ZG-zL+ND zKJNe-y!SAL6{}h1hStCbw`XP}pQ9rKqj46P!O3@PuPM#kh1rNvQeAPBRDK2q%%fJvGm8(U4;VtgvR&ci z_z2(l+Sl>tpZy$S1X}CBw9HChe6B3V;j_Iq62vk6rtTRRZzwM7i;-(O8quZx?3jCI7`w>Ax>l=OUiPP#u@V5%I1V~z zfUH-Ug<@QT7$Yc*hT{Y7cq`Tm+H5)9P`qiyOa<7U#o05=iHMvWdb!)fMgMY+GWcCPXDpY+2vC4;?r4<0ho<>dexnwM8Y>JGP5YSE z!VlsiBi%@}trT(#%QcNt5;5){ml(5vaa}Fxnpwo;!<~Dd_leM$80r`d5^F%`M(Z8- zlUS>9-X|gZFwdD=05G<%_XkQkz%W$CC>Ymrq;JLjMq|HoE!>PWV>ZVCxxNBMIlq#I z-m43d(6X8qasJ(OT>0M`e+G;g!w6uf?&xU<>ffI_punyztVPCqX{66yqjx6(pNzDr z?wUkEj3Lu4&4wg%8nJY8{s-?7h92+|!QPR9buRadne+Wv0ZAXRFka7h5j&%}&p*oI zT!Z1{1PdpwEbqPdE?)n)@8I!6G3iF~AR6~TKxtJt?csFJ7y(yr+`yl`dMBBuOVGA% zGhn$`Wg+Q2DrK=-aMZFsJHe0czm13QzYk_{i3>qo^o$wf%!oS(XC+@FYH$D&!^Z~? z&x~c$z&ew)u1n((LquHn2ZL^mZa0rs3Pl148=&(K>(Dz$({TAJ}N8fvS zZ8sSF7H1oAM@5uaa=ssOJb=!NRS0vkM5c&^+e3?p5JX1U3=+S|dylKvp27YVu{hpt zw=l$MPYXTE-Vur4Q~5KS&=-QbuCa3trINc8@=Ll=3hk9FY-$B~whT)0Q)xA~i_Q^I za+8rgRe}$~e_3>W4?aDGNxv->6%CnrpNh6(ER^g8U{TTl?dLEIXq#o8m%i^u0AO0C zld|jZT=f04!(}O%#iwyW_&ArW-7_v9dLU^c8R$1#I190<%tf&;>0*!se6QkXN<%1H1Xxe%Cz znU-fQjIrsUjcMfM&?f?B07^M%o8)q#Cc!FPF%!ZN01KR~Pw|7d?&6(y-oY!cyb9+Q zSoZ^*21G1E+{t{;i9>nN<>lcPd-&9+{sedK+`(JlzmE_Y-bXClJUs2Lv(PjP_+E17 zS~A$*--opg&Ndr#-GFa@`!#&!Z~q3LdG;38>C%W0fA-e7kgBE9F9Oq2exNbix zCyFsTQkfguHl<(|P;0}4q4c3g-wWMqnwPq(zq>*(lw&lw zl0O^AIx?pbBY-h2M1aZdPa9IYZDB|P)|?s+nX z3JqhirbcNNgOZC^y}r4Zu+)raya0!kE=1E+0^W=lxFpZEu@~Rp9Gf&&%<3-zNm+NH z?>jwk5)Z)j|vS%CY} z>aA%UP=El;3Sg%5+)kqK12AN>g%_Nh4-=vY{Te_oSsf7| zmWhS_$!_5^=SHkblB?5Zy&co{B`c&DBf>C9{F)-qdqPq&9Rh$za{^rn8IG0eM;OJLR{1>B48WdCv3{A3l17 z5_pR-N($=~LtyZU{+Ws3tCpPB*Stttmk>Nch-lmjF?w+e0Krh3Xl?{!fOS{EL1Z0c zB(J^5BMp|W#n6kd`J#1*VT)miU@tts+~XaVs}?c3$`Y7awC5VM^t@#*h486K{!~6y ztDRCXUMv=QPIj5xmuFe%S(Al#73RzKraZp7?2aJqST``r!owgz;lYf}W|RAaqHTSy z8W$CENfGBjeV zjX4DI*9X#q#8D8j)?sx;qDF4JP4+F)ATu!v`|X@;bk9AA3|6bXBA~=bEQ~Q|oI?x& zM~8N6uC!O~nqG(P9^v_?|FP>SL^ znA60lOC)1U4rC?O;WDAAd9y1DKdLa``&F7}7G{z>KwSz>NZ=qrPXy2~U`m_VM}*KL z7)Fz=AQUY_o`ZI|z^_k^uy=JI|NZ0t!neQk8b1B$m*GPXV=XebGFxvAWs0NJ#VnXok>f_wM2K*I&n< zzVtGja~Oh$HDdO!YrSiqj_(uU;KBqpjskDlkEbgi6_>HQef6PKrcd{=F%sc)7)ldu zWtx#c^F@?);>6&U0>L@M9to}zV567=%G7@xd{LLi2S{sTBoL)B22I<@8P^NQBqW$d z6WbU$10pGwIU;Yy{ug7+b7smQd-F9_b6346YC6DxcjwYLVHEUTeG%nL#jKO9gP5Mi zC<3>!a;Agd+daXlG;S}~JH4=(0q5#7XN=S<0A)baEUNEIGdyOl()LW}=Au2X-$$-5 z-_Zg{@5kEoc*?w!v0{~*WL+|O6M;xf=+6bXvKWb zOc}H3ZyM*S-%SC^i};Jc42sQ#=X0#D+;>IY?269?0I1qGQxo)hd@;@~VG0D~x*jiMYr z;ioBS&GfH@p)uwRL6jFFSQA!zA{2%Y(1!pUQ=m!X68%nATSz|9#rhLb734I1I1^BQ zo3abIuK z1H0G2fDoB5#DEwj9k{k3_rJ8OK=o$Rp|Qg6D|lsSj3wfIvS4BX1;sR<(_S@jEFiN< zNV-qFg>h0phJcXLQ^Oe8)fIFvJ>X6LvMY%z6 zk~Iqvpca8d*k|UP$)ucX+cxNi0X|0f7_cw~w6H0ap9h5ju2~?$V7uLl0y7EBzVD0s zwx+RK%6LiozT9W}yw0~MNSkb8p9OE!Jbp>{%e7LuO@-@V;>fe@0Pa-tuisDO4Fxbv zeX8|xQEv%es9V8mwU6zlPhgKp?$&0?*wu%JCk;-2OLRU1Q7*u) zIzk8)Ix-~$;-hhKl;Mv%@Sk4$(f)zO%hlMi1W!!B{pep4r>azC87&9ivqDaWpwGg}-!;M65opNdxaSXc9X( z>p--IVFpwaMHVqi&^?Yo$6oxfQ#9;FW5E!?Cs>AN9H1z|h?NLW8EI@*eMTQy1vqkm z1~0NB+7?)I(i33CT*?x}{3;P@5E6J0VVuEcy}^weH}LrQ*Dw}%=9?&5W+P1}uFTRLZU;Qk;`HgR(wJM}?HZPP1=X<9NDj1^r zCL0_a9AFp%)@L8!wbx$5U;o|TsCl#!pSdLs~DR+UDSDqBjG2G>zWKpqBSUCqhZvM_9tnLdfkLJFSCUlCHrb33~9$Y&~Wd6s9$ zIz{dTL`w<|k_pj)Wj7`&dD|UUdWPow_iq9W{4Rz4UBwuKwrz2Abc7EcJ;wd}_u;!9 zd(8?SyJ^!Dv^Yz zdIXn%cnQo4L`3*u5L17W%stMv==>nsf5S-;CNfF@A+m#|2224l8blx9RxLO(diJ20 z4x$8OYv2rFlLThxT=Eb)e{VbID$8G$C)EtTv~DP$QH$tOSS~XKlwiXY)X@4= zxgh$uc`O%w`4p5~&HL5*x|DrmkaUVoNd&T`Au;F4C$+jS^tOXRiMu?tAb7Jazam&YeAjt5&YWbiIZi zWpHw9eOh1+5!FfVYYk3y#6oNIQYldI5;*8qh$E8jn5p7+!t;MeLibp{^OKm;k1n64!k88dN-WU^FRIWKmiJn^ObmC38Eh5nBT~8=*EeTvT>v zsi73`%BwHoxa^1k%DfUt@a#$fE{L~*%GwH$w5P0(p`uv9 zl5Lr|*L4lU&N|q&)k3KtlQc0jY9G5pQ5NH@#Mp0^Q78>l)o%U}L1&&%VW31%Ix;v@ zm>JuS8;5So^uS98emb~8hu=aJePS2*Q=z%n1i_yfg$E|AF;IRC<9p!JPs3Yz=A#0& zH7?5sdtZAUz$_C}Il4M}mr)UeMhgBRHJ|pfo&zfh851lN>Vz*%0phTRT<}9@{-0*T zaV{C&s;#Q={=278V1P646x2*XKif_H{Em-zV@}Rxo}9y zg6yJY`iIG4b8{0#wxqFyHD0@eV#!_st=y@k2j$Yw60dd#Gd zR81aO>E)n1Ztc5W`%8L1a|ja1G1%E&t?gwfUGsZMay1QQX9;9z@wL}v74=*SRw=NS zm!7+PI+I&})a|NS4JDF=~4U0LL+vCv!QJWJQlw$8wo70!h{!zKS5J_kzA_AJwpS5B>t z`>%kp$>5{Gg-^I7$h9xz&~`oN>n2@{0Yu?i@=w9#Ivpz+%&*G=C*{Gq_PZd|2ZeQ* zH!@vpuoe#Us+EOEl-cDLFWcMI4_);Q-w{zvH<@KctYi2MKpOyPOvMEV0CzQqmh~4p z(;B68@ZdodMS-fSu(`SE%r4*}Qic=>f6A0jt}P4Btb7#s=HJ%k<<$NI+YVfdDFs6= zl;EGff37~-9awHbYBPMd6}#K6&UVJp1gk$P1V5#aJ5x&|etZvmvE{E4_Vp zE3%dO+R|dgKb(by^8Y$(7MFZdCjgD5=88;g&*9PlS}I}1|k7O5>F=J)I!LhhS|orh*N3YABIUI`VQ$DP%)141{W9%2IljluCEEc2 zD9Yw8s2m6&O$Ru$8$eAsVM0APS^KqemlUQuFPh&oZLimrQ`lSkNhu-BYeMbaL(iQ*i)WvG25!tI1#8?W$PkQKW?o;eV&=Ny+ZCZR*w?S* zkh&`@;z7uxD`BsX{cBy;lMsJIzAt1#3g4-;p|XK}hlBfWIRR02oKngMk<)STF4NAe z0OW*`iz<|xGP5f2`Lo0euOS+mD|<~YvTF0$A`#TsEeQ9w^E-O)z4!3T#~;PHv+pC< zx|J)G;1(z;Mr|w1GdmWR+y%0zrkg0V0}ig(w;vDOcRy~r=_Z^%zwQEj0Z@LEgGV|e zyT62hLFCMt-hKC79D3{!&V6tOmW_{qzQYJzmjZ23{=d)&dF#zdeS$e_OzlSPe~D<0 zS&f1}7Plm>Ve!sR4IU$cv~8gF0$p;g?ZNWz()7ubXQvv%Ar0vwBLDtg*@*nwk6Mt+ zbg7a8kP*Wr$~}Orz~n9$;W7sXGC;U;Y2g(pFumcL1HP2I<^i#RHGqLDtP>A{ z%zf^7M$#}~*WBA(heTn)4OrlSRV=(N)80}ruXe(T>u_UjjBakZ#+z@wful!{;+=O+ zBhO?|)?ol(JT5?_F`dqwKm-er!P;a6ciehAK6dpdQI;+jd@$jbE|f#$)=i^iR|?3+ z8D4+=*Eo6dB(=m!DjJ4F&RpY*z~Z z7fM*C9iP%ZWs??1bXLGvA7M1<=IB?M6hAladp-RI=h;97QgD)& zDRX(+^7`{WtF3*H-C?U3(X2KezI{Qq;>Z5BxMtdz!m;xnF~D8O^j@#?&NO&JYqVQ$ z56zroGzOl_TqyUXu;wY#l}Aw!#qknvqRaaFk19Fw)4;N7g3*Q1_EW(6bqO@t2Ks1d ze<7mQJWheXOssG207Zw^_g2#^&z09BL;#^}L;Ty~{R>zO)aikhw$tP5Vkj;Cn20#! z46k8Kjl3wLFfksFaenxZ^Gq#TaE-wtUk=N!GCE@A@eUJZxjYLS~EO$B*O1=U>3;c+~@Z-uK*} zUBOj(r~E5#%St+;3rAKa)yhO0}2nyREvjq^S^=jFIM7U1h zk$&&~Za>qfk&hMz!n|JcWI^Z;nVCY+=OA#0vSmHG1pF?y1NmF<>6i7A=Ks>oAZAAJ zfQq}XyKQM-rPc&#eY`f`w@iJf$dn>rfZKp9iS&tij@h&VWrWFO6|cVh z5{?{x61Uxc561ZzS*BgexI9Bumrxn`NX+f|nF=ELXoRw^0iPA2$j7+l_So;uu&*4EMqSl7_1oX##Ia+z?Y7&HjWU#VjSypssj1Tvh8w#_ zJDgri2Pup9Uwm?mc+>IW*os z`M}kCypM$ z+i$<^g=?1znvDgkpu7RvGriGL7NZ=~*$ku<*j6aUIY=?SasLCj{tI75&`UEbk?IZ6 z9bjnJ)*#eq1Usb&fB60HarE#Jym$IE4y;^-x~u?ZMtsFp*`(T5qyFgRVcAeySbZPh(@p|$(MOhrX z2<#wp))!hgE&yFt07Nur8pdS7GAz1`t-x^UCTFu5h&0CIF+TX<0~|SW1TVexJhGf3is$C8LS0)Z(!J7jSP!+S znk*Vcj$%B*^`HM79{kp~aPX>wG2qO0`#aA^aQlVJlX~RvlX(60-yqABi@tgx=n~SB z>~>9dWWFbe0a$j&r9~6GDg^KfCcLQ`ujR&H-dH>5!n<@%?YoBB z6YAi?3(xC(V$dqJ#*F;&b)<;ody!SR0UmR+i9 zW}G{>j;EeHg6E%o0flygkg*k7zWlU&5WtTLb@9$hH^Qy87D}UK@-8*sfx7mfMehV0 z;FrEz#z*QBgu{Hylm;7TnVTsMO$rL+(v90Duy-)GmzwyrZbA5$TJ=8RT-HV2Bj3T? z4!S1;8%i)B$Oy8G^l$l&mYKiT{A*Ee*sEK6E4%m|vMi-C2LLRhzTcM?X4nPN36rI& zsu=tr%kqJTFVhf7G)W%nT}abMk%k!{H-Bfd877leSZlGqzK(tS_TlNLpT@7AJ&Cd` zqkl|@0bqdqoNcL>6WbMb5tS%c!=%Z&Vu$7y`hDuCCx$b9Gy=z=ncs2I|`YSV5=0 zzv8a zP)bAV%wH}rUPeN836_-7azF^o64*4xpe!Bl9qJRx1e$CVL=+XzQ4^jhzQen$k8vSm zgM~6;KltyhwU|z)PTTJ_{h^NI@fhRr7)q&Fo^+!Kb6L*201(UpWeLb2!G_T9p+53n z*=ONhbzR3X%w*2R@R00eTbuR)5z=vlPSJ$%cnrhN)FK4Yu+||&Hqr7+pMPV9g8&Ak zDF{-*lp-R7v{(xokiXEugv4B8fSYEXM*`&p3fkyi)T_gUs5Pkuc#19rN`97zT-Rnh z)IUR1a}|A7>YVaN=H|9AO=8ZBaU#Ji55WE@mAR6jlZq1HZCkl+$ zmik=n_Vl_;muV?dY@sM~2LB|_TE}2++nTOpPmmwy0+Dg|eZ4fWzc97kJf+4B=l~lN zer7AnQQkWzTFsf0x@#x~z+NA4v_mtcAs4WVPZrG~qr`Xa-%SRJ)d@B?H?cBW#W))y zQ#mTTffG+3!I3APMYREpiww4|p$iRC3TDR0b?*7}Ah2j3klBTKBqG=>19Oehh*8&5 z>_4!En{U4bD{E`sC!fHz&(Tf_VC(0O=K(vcAf?-;8jWE$d}=~%@T;ev!Y>~E30Cq| z*fIy@HMDjDuGV2)J8d_k+lrw@I}GC2rx*(SZ{USvdr}2o$TYxe?)k8myM)JZj}raY z$awIWh{gK(O;`&k%D~o{@XIuesucsM%i^Q^wB}d^20?Eu<`T;l{V-I!rCSl-aZ8dDqA6=EXF}FwFe)xlXJE2 zK4J!ZU*gf4sl91pG?J8~3HA3p|bYK)3W3_8;E2g6$P(G-@FHeKvI?-!f; zH1NUVV5oogy8m{M|D})Se7;P7Jj8XUi^;`2)A!uP<}&?BlhTbf9X1GnFGC%*BG`!OD`c!gp=^;##3 z)RVz48vst7I)x)gj^O;+4`U3oRIa(ult$AB8Z+;pu?})eP{hg4DG%J$j`W_b$Rj~h z92KaE270$0a=PTp0EEbPOD%tJE3c|5j<-}=F1qA9(>_s3VLToKfQUaKOzr)9(s!k0 zru`BZgA<;UJ`8DP zcSYx zzP=7CG)F4WmP&(}Z*w_+E~nd1Y>NZ z76F$T;D!?I94{f@?{)tza{w<}#$~!p7n{^T(7y{!GRhg*gR&a(n5D=PpoUViyyoILR~>bgd*G!)F7%yXfE0QtV)4<1akg9&=z zy~A&1Sw^MnqO&pmO|~zUTjVqH{*>?E&iTC^N-cu3tZ^d;8hIqT?owm=FBQC9GON5K zup;F%tu?YNi`ge+`%@XT3vdaSlwHF+QosLDo=oX3`#`=UfCn+|m~XGOHUdV$LZeF# zPZi-R%{!Q)LcJ&(&j*6&ns7U%002mVPzF;--<@7vffwY!FGJ}7q~9;vJkrIo$jYLN z7Tt3pHmgPD@7BAw115B}y{kTb9v-3ptCH~JfBq4E^~@1~OTVx+N>e+Np^oQT{l zTh%jUnF9OBqm#)5_uh9uzJAk9Sl`@m&u1Ds&tfp0K5CFe!sfKZtghn1*C71z@yBuU z_%V#fW2~&KfQTF@x(=Oc$57d_SYgAO3F*JPC;M>5CIXbHAbURj76~w0FYW}hjL{QzW_i;W%MF& zCB4%A3FQW|)<(cb#t2A(2dRt=eG$N-P_Hm&x|Gc+uV}4xX#mr7eC@{dM@*E1Vf~@F z7cKy@tTakv*FoIsa0&yKmh9_0VCSk-dyv!mbW!WKu*p~iAJvZzB@D%oi{1t1 zvF6sq!24;3JHVpmOYhF!_g`ZDCyBaJ_+6&UbdibJf=D^TSD$k^_01^aJa5r7cdPqX`rKB};>+N{rA=CEnA&BhA+k`p#;dQEJ;yCKcBGWnQ+M=43K;BkhZk2|f8Cnk^NL{!$ZL8$9rR)>a)N$>e;cl1QMM6Fi z0dwh1+Z3#>`vC)n%bWm!y8)HHx&ZKIN{f}8GJ=1wf{pyKqA0LSi->sNkj0j8OObU9 z--TFn;r&6w4mkISTsJ&Qw@fl$c9;B=zPD*dbC2Zl!{;EU1Q(p(3K8ndK7&{vV6CJ; zCo7Xywu?eRGKGQsZ8tXeFz9js`g}XmI)vxt0!jgdAsW)`cTrbAr1jiw+N*N=P}kjT zOBk2b5?~RkCVyXsx{zoPVK%E^jKzO0$<#?8$I`N&Y$&Jy5fKYJ8UpFEDTESvVR zf-wzxxofn?mL}V!kGc!MR@!HiYq!haF3kmUr1rm^&s-M%FViJVG8RDR*|ME7_h7^N zsPB&-b&~$Khbq{?XfQ9gG*$!!)AuTvkrD-a__sOQx zswT_?}mWrgr#gQ+I_11mxHxP zJG_<22XqJVTc(U5fFShOPHDF_{wW2tE1e^|CH#j4oxVp-_%2_iP>=1rPd-1I6j)n5 zfOp?HixVeKV*UIX6k~=l70S&jzSoE}ZfK2vvw>$>hO(T-jUsGLpT6$1xaYoa;EF5u zMZYd-EwgBCjdG1l0WjXQKhwyHG4iay8^8Ypo_OLAHa5@4xfD!-w9b)dtr+xw^wgE` z?N2=jV4(Eq4Gew?3Z&Pi*ngL`f|u!1Czr{hp_ZYW-37}>R-h#!j9={ao5man`KK?( zAoyrd$Sf3iw3l9b36DPdGpw(#qtHc5Se5DFs>-0QyLog;>+9>N>l*jpe?M;e`qxqD z9Bc^+giJRY=ZA|aM_cx3!CPzOO^@(f8c|&EJINg z7>~!8OeRtG=`!_~g6WVlvrjHd$EQ!ONkM})wXMg8-Y?%ZL{g{*&=O{)tPuJxnCb)Q zm0wdiG5{}OEac}@K`uY1vWXP%(|(eQLJ2ygec$JfuqbXos8g`yPlH9u{zy{}s+KuG z&m`;8g7yvaB7to?6nv#60FcH6=%Ox!O?GUk?^dWwn?Kafu1PY~kCzh3$s_xHHvs?{ zydwo#`T{KOv<~6!49g0KpE`*#>Ny?W$=&x_&@OKtFK^la}#-}+u`77-j zUG(YN0RUXi6Fo;#vp3W~mtOx7F8lmnrauN!7k@*%=;2T0~|ea7%x2cycdiz)YhV`tEFRr4YgsbS1KO`v+}@e8)Gn=&3s?9HMde*+~w=u zMT^$x5Fg#89hdS{^K3V-xyU+unY}~G9H|T!lx`s~B9Tjn9e8h<9jot>pn;67AhQgF z_Xim?WV}l=003wOag+h}14)5A1q#wR5iA4($=^bMlw}$FBLo2~iXyh9C<+us5v>-a z@>y$*%xQ@jI?uoa)Yd?0L9-B z67oWRa{#RcyY#`s3hgnV=)cX}3~pFpVbco8N~@>^i>ym~3pn#vYnmV*aZuTtfT;Na z-pYoTPLeL6vVYMw?eBW8{45uf)LajZgPgQ|^$#0;c#r%$jZKl(dngY)Ku&OtZE1g| zVvKq^L#A@P`RecR!tv*D*X{R#iV;XFWL4g5LMp_|Adj>a?tA0_a?}-|R0e=iRWsM` zT!2l5o4@*XJoN2v;+2=5$Jvdu_{7Jq!TGc2k&Whqiv(AK@V(Li*gz`<#SCjK#<_d< znYZ7=PagT7_|liI!+7N&>e@o95$dXfRyyX1?;}gYhje@F81W-J-&YQvrj&TJZ<{|B z;~br7eR0V&%6l-5CX?~v`8Q;CJ7gxCf`Dnj(IFpy)3ZND#F!T|DcsmtHgyvHt}M;1 zf5}M5{h;e0GS*pOg#*tRgUtUc_vVI@%rUVt$=>3lSQFaMUlu4X(;o{3H-NBKEV)=Q zTQRMdM=p!Kipj?FmYHKL9i=k=osazN*IyTNO+=`vJBCyEoF)6y+?GAChm+YET&D%k zBl|7w!!E_cGJH~q&9E#_mF|Tx>wKSZh3-r~@%i4^T8@Tl6;22Ddgb?a3xte9K8O8w z$?+MDqC+ZthzJEuFsr9nSCC;8bgAH>QKX~|W@MnL18>VIMBL8cP>2wo$u0g0F-N791?1f=i zP?5tLgNziWn+|{|vI5ho7Fq*V6UuTp3lj#caE8vSE+tH= zfoJBZ5Ry^skt z*#L?Jq)D3V5B15=@A9zdL%aHD83AjE>e_;|6J*Yw+rZN&p23SRzKAb=s63xhV%Qrpcx2&~EKD3w1KbLK&j_ZAdr8 zZVb4w(s66I8-Z!|_kj**)%8!*WaBdZ$x_NY%?Y5^pO56%2i0I!jn*e-dTE0Z0psQ# zG@@bV8(yc2hubYarH^VO_K(OCQnT+VYMqBEk1(XgwPrE@wn*vW9@_ez)E4mC<<9Xq z18$(Tt^8jKfDwDV1%sh>7zbeJd@Jh;**Jp*m1sEEhf>#>g^Y z+4(51t*u~v{TwEfF_fC(=9_QDwbxz?r~=bz2~*W^T-_W@>KQ*1%*<(AGjB3q*KS>m z$757gh3B4o4$nXTJeV1y(FoR9A73Ef6${Cou8;Kj6p)t|%St&ot4rw+9Fi9C@>Q0x(0Oho8(z!4}|(F+x#u%zGzL+GfvCwz03?9+*p`ByX{=CD7a4>pUHq6a2(Qg zR`m=U8yoEq;afQXVh42mCZ9_OXW2t#uMeI;U1(h2qS-DW(G^%Cl($>di%<(;U)Ci| z_%6-9d@ek*6EI{u_3t~Zcm2JjF&bsyicwY;&%W?Ho_XdO-0+pJVU!m@)zl~SqwK>$ z0TB#RKvsy?ezx&2E_VL2n z1C%E~Fu_~gIor0rG{@T^S@-aHbGC_nlU2O+)|+_h&=Yw7{r7S3;6WFNZdMNVzdIiZ ziWF>Zz}6yP8{xwb&%>g|-4EQ0+wZso)>@oD{~<=Bi3h2H>2w1{)&*)ebs%1`bTL`eAtsgz3v{h{ZVxqsO@$vpsQ z%WsnBu}g#-?%SIdfo~}g+DCya>?^Y@%gC<>MWz(^$9mL~k3##TOcbv0n{0pS`S-L9 z5dctaC9qV+4#{k3U-aFJjVR! z85}-*6!+Zs0RGi=pM_GBmXBcTiO&vMdLza#jF)K+GhK|HGGHDX4R@ zZ*&zju*?|%xM8z*b6+5GX=E0@f8ce7!{z#ng8K6R);h|Xz#B%4Vr`(%$$GkVjz;cLy8|^GQ5A9`F?}gg$C9!4H);gf91HfsK$FtgI z9Zqmcm;Sc)ELmwsw$zhb7Q#uj(hOw zPk$DcRE(TnmL)V8xz-rUXG07ST%06J1R~{wG0*V)^G^G}wz7)V$poA08_2Q(O0f@= zd|`tC4pEl^K?>Z!yoEqeLZyQ6!m})Sr(7ecoR>8CDY zCTAhZ+!8iq4=8COH8*4=1jvr^L9VR}7`W}ugJnU!!59GEC%5NpAbPJZF+3MT_y>SP zPaebJBPTJNl>j+y5-Dd?OG=0%L6#*T0v+TI-{2ABm>aL1YyBNy0?$(WLR-U1ZC*Z# zVicZ{8U|M`H5F>@g0i)3f4}I%i{Mna3j|)Y#4YZ~`-xHx1y7iT!QS4m?!?KO@ z3Lsc&pFt8par~JLACmWkuN$5x>>EnV;~@*EK^k~G(`^AV?a8{TASVFZ07!P-Jx@bh zi-PDg4vc)W@7fL@f4L`zG~jX%l|q%G!WZ3jhA~Jj=AUe|uyTu1rF_ON$gphy!=1^E zP)2zFz4!3gqd&)~*MEzB<9(P;r(h=NCE^b-H+kH_44o^~b&1MW`12dThCA=P2jkHS z%DQpqU^cL@m=t4_x|Fh_Fj0+WZh2Eh_SYeHF;Z3}>{cCf7UqRH3C;Dt_0@41i+ zVd#_)J$*KtwE}W1^ZYXPl}vhHpQW^wei&K^U5mJDQl}=(Kr_kYZ`+~W+-zeTc36&5 z1Xu%71g+gde&@}1@bu9mxa+pBKh zM}CZ7zxo>1ijnu>YTBi^>Hnd5GM!G5>m1YRCVu`eKgGije;2pkbr&|yS5SI_e7K6+ zCI(zQqR>|VKZ@#7#PtmX8H8FT^o<{b04C^;K3+yZ-mSSdv<6L8w>Dt;91(%^;sMZV z@gAcFf)L3y-37YZ;2Y@gj}`#Fdz4}X=`nPfM9j4Y$Oj}d#(I#fhKtG27EWcI0H4}u zI7%mWzKXX;KYHY6_;3IHA3Du|TWc@w*Fa!i8tnnQJw!5c;y#GA0QP~KqP0W|S%|zXZ5-oJmeM+E5rRM+nIKWordeyFedbe$U8hDq6VRr&tb7n{jo$mKH^TEd{g0qSu_It%#Ztt|tJ0lZ)+(Ui1 z_qPo*oLH?{!?T-8KeB5J!Z$n_n+8vuy& z7C>Ts->3#?+_3|Sq=WRxe|$lV$G!ntj!Es z0}p-YLHzkwZ-QZk+020olZnR4XpE|!!c^Vh3yC^18)W$iv#La0RhUf1sH+;kI{7q? zAASN_=iu7yA;IsT*~PUo)QpVM6VBf zuaq6Slm$cOxA>C2Gj_@PrX=ek>lvsE%n0#|qzgb_9l{K6fqwqJl<^9`4{87Z7>G>;%M~;MRmD)yur=f9Bgb&^ z_M33m1J_~y{{7L1CIkoRn-^UIyF}y^75M7czK#dK^&tN6hc{dR8*c>=H^k1eEf58P zhEX)eV0CpBM8K(2r|_d6{SaUH(id^y;I&YC3|mzlW$hl3=Rtf>STq8U`*%nHM$%R< zIz$jb4S;Zlc`gi6i-8$f7egT5pbu-Fwf3|0FtEHhNYYRphw3k_ak@}+z%&T9bwZdz z8|n6MYJqAFmuLhDB7iJGDS$P=)(5amK!Pg(6bfQ)&N*wXV

p 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

wo8YUVk<qhacwK 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 literal 0 HcmV?d00001 diff --git a/frontend/assets/img/clans/bxb.png b/frontend/assets/img/clans/bxb.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2fd339d06c44070ba6f1e9a92ea92b4442ed76 GIT binary patch literal 370262 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≻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%0D7EQU5$uxbiw*CU>ocRKapcKu{Iy5n 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 z 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

%w<+!^Ojf?z4tXW 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%0Awyk+dqXF`|3DC^67C2R#r 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 literal 0 HcmV?d00001 diff --git a/frontend/assets/img/clans/la129.png b/frontend/assets/img/clans/la129.png new file mode 100644 index 0000000000000000000000000000000000000000..3569c0b96d989885fd8d31d69cca6daed852a8c0 GIT binary patch literal 81694 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 Rqo9CCK}JQoR?;Z=e*hVUs4)Nl literal 0 HcmV?d00001 diff --git a/frontend/assets/img/clans/lcm.png b/frontend/assets/img/clans/lcm.png new file mode 100644 index 0000000000000000000000000000000000000000..2e77a9739886bb494e2b5ba6747d514dad4d2c8f GIT binary patch literal 8985997 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®8W)%~AI+{EUUt%ra>p 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≺_xC3 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%0DS@Z*^jxhIM$DsI`@aU*uyzD;@bD<%9%dnuE& z>Zo3pN!I@#|Q1eXh#4Zxga4<9?F!E5#6~0>N z4||DstbmV2+t(Z`_Iio&U9$;~ypE&wr0PZO_($g}@kG<)@-kGV88fvaRWLV~1m*-Y zv;E>p-HP+v5etJ^4n#ymfH`<|gbH!O`MSq9v~$_lUHRI^$XZzqr{{7K`q5VYAtumC zZDtTvX=v(A4A!dxZZon5)7!H&3|%#iwu`$`H%JJxKSyNFI?ALoc-GP;ayJ;;wN>{% zCgfKgIW4QHz>4k;50lPF*{_Ha`5a9wqT3}qO(~;-qAwj!uGx9F0};qsG^KJG^T%$h zIGnXeKp!=0!Ub?~3oWl2KF4v(3}zgZDZ$ z&P1ZH@p-KQHUH=R{mAU+Eg(@j=(5AO1#C~?hHDjCFR(^70flKFQ%f4ykR{S_*eK&x zWXH`|5X8cN)*=cy%e6}bg`s`H& zV?Mr!nUX9h{QRYLaADTH-N4XDGP&UOoaUEc$0(-7*5kqHK#k=#Dmtb$K?dBMjFJbJ zEOh$jvB~f2^$R;Py$`en&LD!^i?qxB7tKT*~6&g(9{I%?UO z?{8mOl1)v1 z)?za62_Fs@AD$`*T;+z!V21>}LBm@2Pvow~f+)6OYo1K@we$;Icyr!Ro2LpoSKl$A zAi(7G=6GA46S_i=%N8zlEmVt^^#7 zok`S6-f~)o9>jQ3SotUQ#>a!jdfvVvRTb88o0kvIBLvAj6`t80-Z#fw9a&=|S(jWJ zbY`XRD_?OzX8oBTWlhvsFa7vRhq+ymj>W-2X-OWs=l65Eb_t8|I!6%RC%~Obvhq#& zA{Ao!UEA%9{OG8;lRg~xS75Fx0C%gLz+-X1U7*jk5h!p1mi+q(_~}0#7KLjr#m<2S zlSk>l1bvF%T9N%lJ}omyG)wFJ|LV&1DIP{@ck{6k_Ph9KF*R!=WNB-oc-!(2TE%P% zjuAtNwBJV9pkXA1&* z4?QlRCCF>s z(C^DmA({<(1lx3ue`UFiGWoI?XUk2_nOzRfEk1Gs;lC^ih8#q^S{?1vSvk;J431nx%_2& z$9H1-EqKPP2xQd}39(PttF%jL8*RQL&{-mLc{4`FC1-x(z2KKyU^9BFOzw#nyfn=m3akUH#eG2WBZ9?RNE8%`p@20 zY-F}3|69mqiCW*K56_j}Y&xYB=ukI|NpA??T3F6`Cv3p&0o4KYsgt%v#cq2$5}eu# zk1*;6eJhAFLir{sZTJ<0ska{Z?vHsbDcnODv^hZzv46b1L@V21bb;|ndOQ}5QEu=r z>0okFnc7hLG*~%ttg~c1+6**{yiVKYqqeernnRs+_t=a?eQDorF*)obS@qcWA^461 z#88ymqypbO7)itT{GW)P4xNC}Yqnk)3yxQi2gG{?r8XCLd`b5DN4KSUFH0kL_@22V+TLFEkG^DigSemi<(g>c<2XwCb zpH?C`;VmbL=PnC8QxO9xuyzqs_viEE<`Ii%%8(FauSMT3ytnZNys#ow>egOGlJ%3pq&K+4koH$bkk$+ z^knS9s(OUuP6(X>{1JS40QVAuX@<3RvCLHdye;TE^+?=TF+s@!loD*sA)!~;j*;jg z`DgV}=uHV_KO#AZ~@$C4<`N~W)coz0fn)t`9x{X z+@!k?)o&q7LkTjq9>l(Um7YOkR3Ez5B9#wED37SU|8Bfqdxi_M#7fkA{|EYixO(fT zs-w1BTM?90*mOyEcXxM4O9)7pv~(j~(kb2DjYxM$H%LiIH+*Y9-}|03p7Xb30Pgs$ zbGykkP%!ys&Kw4dy&cv9AnxR*A z03!!*k1N^lO^|@4)X*ED8$PIe0wu}dZNo2JFWGHJHLLjsG02Tp1GA%o8R3HH{QG*r zaPla&gDu6srIPyuac4@7j?$-|t-?$`g3qoIL7Fu9e&4tu(sYs`ZwH0WmbihekJ_-* zv`rhOX?Qn6<8tDj_~!W%P2bb|4K&z+{^7&EwbybOIOT zaK1~AX`@=1OClH z=M$aa{elt;YZ)z0aHwjjYoG!tqz3aBxuJW4b{05HNfHeba=LCYjY%BT=NRie($OcW z@4omsT0GE9;}s$d zV|p62yZb{P@FAnsHMVj1cj5Jxw=pYU( z`C_FVLaqc;BY&1oiCvuKj4pTCYQxu)h*eY-E1c6PM~wUs-*qG^t0tQROB0}Y-`YSr zUU2(4al3#Q)A9@ZM-WSkayXnvcuTmx_P z=4e6CYL@?gfgpBN543f2IMG|l)RxeG1R$rwi*0N6+65d3 zVlho5Y}D?S(FNOqZz5QrO?!f73e%+qF!IY&oOW~|s>&`NajIZ|M{x>xTK{}Q^ap%z zUkZVgcWX$ceL7gP{U^juXK;%+r{}?;^NIB8iPR&+9AaN`jYyLGl92arLa0T> zS+&SK^?V;sfcuXKeVPXRgczQ2n=|vpqhS?H~NL zo7dn{x7B{)#RQJ4!YuDpP@nV)TqGh+?u&8y>3;-LVx_gN$?R!KU0ZoEX_jgI1X+=! zumf!YFGgkYJL}%b!=}(A9^ri8HtxPYV8>Iyi{#naxr^u$FIM{tNe9UMi%S|2L zY^U6D)SG)4tHD6)oH;92(*Zv8k{Mbu z+-l}!oL14vePCGqhw6j{_wTt<(LkL6y8&R2gYM4{YyJZvnA3Gc$=t;y!Cz{yV8?^T z>E(08Hee4XRXXQw@Jv3sbLujZJF#XosJ zbU)3y53dM5x|3^b(Wvwu*7RIERrJGk`B<+e`v>ms-E}EhWye)qLKQy4ndHT5(Z466 zr&(1Mh3J)O)v{ zo6d5VxGO?63JvbUM_qxr(Xp|DCnfWp#vmiIrG``f=+QK;bI@hPEFfTWY@x69he3~M zZ*yeC$G{Q`ncVzn=8&Qgwg)At3ScjCZh#q9xZgeFL0L@8sZ8u>$sqiMH~YtQU-j4jD;o{!MRMn+Um z>G?JDI)uehsq}_Zbl@lL%Q8Ep0I1FA)Hir65c5^JG+Jo@>Q%c-`t#}d+D@@qqvPd_ zrsLe3lRv=OxtSBL@p8hJD^|6Dw1(x!Z1IdENvOQhwx+fQtx-B6fwl!n%x^Q%yd}dz z|3+LP*HvE6N;&$Qg59a}1g_w81G=O1=;J>RHxYJ~5TTGfVI7!4)ov_B({WDKKG~Sz z2DC(-t<22KKi`DzSgzNeUuE8GvyIH+lS>=(^h1B$*X}X35@%u%s2V0Jqe%FU`QxE5*2@L+_EAvW<3c~wPN zWlih#O4oTtL)TD+HsR(p+GiwFpfx2Gd8hp7U^hk%VZIa1^Y4eO%>#pHUZ^EL>+W~q zn1mD=9dCB|=g_eLh45QajNvb8Ew7`rZ3iwIMVlZ^|e#T75X>(1`}$p7{1rq_*DhxK*co1*`pg z4X4#}vk1Mf*Yx;eS1lc+ef0knqnay@3yD_wEL^ zdC6d22GvD#Y9_Dj+~`qUR%f)J7)y^f0Xe1HK0Q+u*$om~0b5@3lMmQ=poPVt>=asf zgEXyO+Lnpx~YN~jie@o{ibA{@Ci(ev%Km~1v>K(N(w9*g_hLk4bVuyF2UH?4HY&>m9|WLLE*n zt)CA-^BM>jA`g{a)cetL>#$gnR3-LwBgsu_7Vt7~>yun)Ms@#=Yhpfa(M|=2L4NZb zk4fWELVDumcI|G4T|jRM=k?j+xs3e+dA0uiG;DvFmiU#cwAJ9%IQrif?<_gak*usO z?vi)rCf`9Hkf^M*IJSk-qag$H9QR5N)gKwBW+~xNlL~`QcLa}k{&!Uh5|_jmz?5xh zY8vIzI{N1iIdE}7-AaENJ0BUK`JvxEnF;zuqJ+z6Gh7Z!*>@`*Hl-1W z77#?g23w!FWs<7OeItgC2$5`EQ8XX{KI^agDL~BxgABl_$;+pcAd7*Z8+5$i$H!wi zm8{p<9x1l)28+5c&(C)T4`-877WekgUE?i@G=cHKaAF*II_*6$$FUR<^wXQI6fOfzl3I?9#f`U2W#KS-68r(gL2 z@aRcXufc1Tl7dSX zmD4!0M1zKy1cF_lhig#^@Jyg%v}}@aw#|~MjXGMGjd6HgWt?4S)H<#ntcM@5;$~(8 z1D);Uwp?ByQN2MLd2ElpFe)sF%|VT6(3>7WfI!=r!5zfd$jEu|HzZtyWZGFW{+ z8bM=;i`WxQVp_3r#HvwpYmM(b4qDQnr}LgVQNeJ&CnO*r8GOGjpv<7aJE= zyttDwPy*rS5Xb<$15>5oMXVB3lHuyO1y&wNdi)jy5Y#b17A5Uj-&e?_sv_heY7ik0tvSbsnnZ z9j}nqu+FVWi<6|`6b(c1lu)5Q#NJV3L#L0QGGPw{Kq&EY-qw=K`~0*3@@|=vj>`Qg@QAtl}>&( zVB~7QXxREB6S6gMldJvwLFgcn^m+My#j2B$-e7!8;KP8YG1%7;@VTdUKHpb5f~?ll zA0@%@lVumAnUZfG8Og}heMPt_wgaeikVWFWCP26a;#Wsbigw=Dbzn8^dc`C8lzu*5 zxmxi==iak--g8;|Gu76Z>*?)C&$;7;eim=Jron^T&w_S;3+ zgeMzFALsI9li=!j*k(GPsq{{OqTHdIgI!%5Q7I=;SJ~~zbeJ{n zD1={C%2AB}=Y&q$LJ3j$?JLM@gibf53508S3hC;Yd2xN2JBFY5VD1Ktm+|L^aj0Ql z&3Jyj$={UC^k^~RKh@LFP6`?i3R1O8?m2sV!Z&`zc?zhstRW>Q*adAu3+nAU9Nw-q zl^FIFQ|N>V7o<)tsC|oVO^2S*bZpNw5O}0?53hJ>byQ3kh)hygbo>CZu$tU@e3gxf z)to^?;ybTB+o#UTXIH#Y<3Pjt6auzCv*#~GP$w+wK~{MDyrs|fI{kMBtf96BwxO(n zD~3cmk7F>f*-cs27tIXqH0t~iB|`>(xb1pLX@wDB+y(zbg$1LvE6a@vyl8B(?wq6+ z3v~Ak9!1OU_xCZZs)KA;@Qy;(!f0=7VjJ6Yq`8^C=#LbuQc4%|5Ac)F@vUNsrBkMi zqNhrya4%x)gt7%=Y`Q?GTVu!v$W`w5k*gGQ;?-s}lMdbu=o?|n-KyN>D{4jh=ffRQvq%}#({En$~C=@lc} zNy(@hzKKNp7T1mb`U*0`1aban5YUkPWW=&5wn_;oW&S^)^?DH*K73w3z&Q2mX_DqIbu2F%l9f=N3bxN6 zxeY!UfX@n?V$gz0hizGPi8h^HdjjjF9jMQ5=d|$l>GAsf&-c#k$q1T+E(kIG(!8An zeNsy2`MJvV?`HQ)OQ@)Q7f6|71>@7Y0?t_$R#tzT;&V{FKs}6dd4GTZpHK;4=YV=7 zPQhoW=WZ;6uNh>hpvnStJl!IC<`#tq`UHre0W@wP^t%gfuK|iN(6yIJhMBP4HUWEe zXG)IA1V9t@s+B8mm+c8aX*&eK#C~OqeT#VU%c0*4gF=rj1}h^*6@k{m9+u%|%Cfj) z&6*Qs(xB4MbWW0Q6CIO`K3n2b9d*zaH%Ndbk6*}rk8wUM>YNh{eNX1*-`Ns%Yj1wl zp7crL>DrxuN=7spQ67-3|ATh}WuVhO(301S3wnFx$44Z8dRAgd(8N4OHhVX$l0dNVK$3d-cw7?Y(_)h*%qeXjTn6xLK_$3pw z`hcS7YNwC&uBm&z0C;(T>sAIt6_37SpO3^%|6)GW`R2wp`|08|hdPytwB*>L-}MAS zO1clpW6q%|?zDbb7wqWBEyqalfspS;A=9S4IY*o(6RSYzf}kdU!Dg zX&dawhhwe%Jqw`#;w~(#YWaVU@N3au2t@Mfr|R1S37L-8_hNtX-whj_NnNiFLkY;i zQc^MyqG1U9aDZ0q0~%H$X5n~5opBk}!13R+?l9s|>j8ciYfUB?(!EH#9%5y`qS+)}c8Fs1yfEmMOly%aU2~$$w8mA#VS>{Kjy3K*E+x|3-?W-a} z)xRZ$Hd&q{3dKcZR!-%>$`87`x>0`ON|T|Do;DK%lz-<@XwY~Il@=}dbFfX0oCYLQ z%#wA44dCinqfm?IJN3VJ02S!Ai?9*2$pP8yXvr1zTO7Cc*Nmz2Hi~m5{dZ5tCr?pO z3fC5NDml-3<_AXET{Y|U+zZ@gXIhKMvY!bY0g@S%9-UmAlyai2Zx!v zId=46i}_`&fdw{btXR`vP*Z<)&4SP7x`?)8;&Oj2g{P}w8nM3FgR$)Pn#6>~Vgu1J zGI7QEvEUhjuYRssTyL<=tMD>os&fa)yeM$kDXVDc7<^PDbAKKSRQ`iPB7rB^5tKUq zPvZ1|5?2_E^&5i1w7mQ%zO0dzmA>9Ts_Tb8`kjD38~BY)BM?ad zbuI%|b#lp+oV5?a34S!V?4%y8G3Mm$y4`fxjX^2ozMzaHfyw7~co|5>puh}_h+u94 zD@U@hf?12-YaUmJ|EcM2U3+BoxN3`Q2$gFk+~gkO@&YxF;|9-{2DPAb7EHRo#2$x; zoUJ#1Q%cb6cg$Fln#6^%_w4W#qXm6|Z73h0cJt%e-g23BB4IK5 zrxN9>)9tqSU^NY31HgFQRYMOIZ1$%MUxFp0DM&gm1HjGK%zmil8{jZh01amh$m80; zKo2l?Z@|O}j;#0YdnD*=0C9^tTum5?o1)2QE9;^UJ#))GiLbvosYlkgJqOex+u5|qHl zW>o~VgL7D_I_?0Q(y;S|qf5@ad$4;Khp+7%NBr=|i_WGKA%V0qY{g*@!AtficHZl7j#QapIS@4Q6u#R+;b3D3+(ss6H|8VCRlt=3XX z>dtmN%QG{CmkwJluFK!N4_my5Y3 zo^G#{(mdPpj!yG<`Tj6B7a`{GK`MQ~>k3?A98uP;%Qv2%6|;6mQrN(^ID&;D<4gJ zp~oKl7_+ZH)!_lBexxKm332E$2Uu(OK~oBZuFF3Gs{hx&e_t93b9E}1SBlO7UG?nY zd>q;>p3{JC8Q&oH>Me~3O>8gE?bj3C9oq5PHTPZ$)9~iVYFNL4KxfN(9nFY&pq)?~ zSz3lk=Gx2LS5ykEDcvKKUZU@$m&>=Ipo)GH_m`0;QbAxjXv*R0bLGdFbUjQG>eS@# z89%wTS5Lil2{+N8Xyp@{^@FZ&+KAtBYZM9x}ivuIBbvh~)3>hD-57C>z@ro0)4aXzgM@a+%`j z*vBl8hKSW-vhcWt&YH zwpX&+M#^8ozjYob3dy{z>TC`5Ih>+c!)FrDh}h z-df(DD+K?g*$N4zpJm)Tvh=$P&k;0WCwza2Q954sSUnagCI=xSI$^zUUHtBGF&g?ADce|JTjNXZUFDjm@)Q;6i@pT+4wE&5G7I(wnbb z{5;x#`E+$Q=kqvsxYU@&7{I27uUBo3IVL6P&#qz%|3j)KhUbmmL5v~ zE)$&jDnkLEr(K`1q>c*;+HFWVVBa*0Ta)Ig_0aqzrXRM>t*@s1NHAp9a9I8QU}XK zM(ug7gMxTaA`1v&gizjSW#^N71COMYm+jTKbeYp1q;dvhWAww-)->p6NQwWBT11%w zd3c|Z!A^^?y4!|1orY6oz7!_OBmGmkNZ4DEN%Tm8W@-3I3f2jxikN14ZZ|)eSX<^{ zyRK9cmro3$1@!9UYU;G;IjC%JF!XZJA8Y!?Sl{jsy%6}NcyD!0SEwB_oiY*Vr23^` zSKC9T=N8A5Q#F<;w|T(+@o%<4;&L`C;U1;sNfFU0fy&t0c(6UYHL5NIL<1lNxUR7xcWA#dBzVIiYrDJMDtE_FF{&W4{_K3MW z`CX~GdD~!b_8%WS z*dUJ@4TJNXm-IJd_-BHCUkcm$s?fe31kt?_O)W!V?hRjNY7lrUZy5EIcrv%y+%z*G zc8-m@SrwN}L7SlJlVVeCTf;eq9|MLgus#K2Y1NkvQ7n3`F8|wb;F25c5sy%V?!uwM zA5i6$Z(*05!K+&~5oDHY*uq6h+Wb|V6CS{sBpp*}s(0*6g*oxFRrqvs5Sb5evGR=GHGbS(SFZnTp2`9PmU za{C;5djc~Sf9!bpUm&!vm>oY9i05uhK@|N*0{^TVVu)j!g9LPV+59*?zUTHf`1npA zV`MN>r2LQrKa#i4ex&%riP?2Qe5wdBfPs`db5b2HSpz7XB}WeR&`#u|*NuY>XIe^8 zM6}4m2`66UMXO@duThFODat|EBdDU#DrE2_<^d!kkh%x4MKX%`VT#o9kXxkP|KI|^ zJ#e-{4P4g zU((kIY$r;jEwF}Ovp3$(xC0PF^AD5s-|r56iJ93y2D^*ZT1+QeXWD&k>fX#pY6hPs zXw6{r?GAoXU_}-aIFy0=gvIB{Q>_?=Rd{H*L6C`ll5Z@Xg=n4a#l6}2+`p8Rc44D9 ze0R)qFE~U`RIt#(gx%xr!wFCoG0QB}Ezm(ADgICl$A2~`H4oYg0sDEqpnkmeF=OR$ z>6{VJi;1T=(JQ|=I$KIg9>ZvoUJ!U&Ctf>>3JA_BclVM=e@7tWNIgzx{!(GIJND{u z+07R`K*K9NZ->kDnbgmWz_gmUzr3M-DQTosCKWVj<~Je1#v1tdHmm}gfe$Jqg6_J{@=8nk>ulu z%Os>{&}s({BYPD@bQa+f@Huq3M&6l~+f{PTKFByMzE!NMS**%SRZqgZmvhngf#e7{7 zP6Zg;b91++Rc8uxX2$cB8#RfG@@CV7bV7d z(nBpdM~#i=>#yE1b8Ge5yNg%Yz6zu@v`M|~rLB`z=InAgLP%a2hv$9l%<|&whU1*I zP#xtKtzJ0TOtlf@`y)jtlwR&SYWvKT_jDhN5>%~~VoHyNMe{i|VZg}bITwv^Bl)<@ zZzT^;NoxrGxm`FwcA+k_jXY>CMDY(C<=LrlR@o=U<9)%qn?iK#+g&n>F8IdkDFe+5 z>y|tzbF!pzn)^pV`_KV1=f5=9t8*C#eD{pvzNoKh#L5(6SVtDq>IWmPc87U<%2(-C z9$|_3dGjcPP)++Te^vP}S!*3feYBy4O{{h1U{C3<2CR?eN5fIBL^LF)L~$o4NTLH zfBxC)=zKsKLY0j(4Mc&ZK%0sn#bVSQ7%H9na#S)CZ>cU@6A1q*KFE}SMPT92UbBrUWH|R)*l2QTp{j*Kyq!`4X zi|@MC=zAgksSXP{YVZRWdw(^kemLWoiNeL+cb0`N;$iy6QP3ms`iVDAhK38MY5iOz z$NU^ttw9<{0zU-nCu|inm7_L@z*`Ja)yYFf>sCf6l{P_8!!4$tm4>WPMjOPgvka3RZ@Q;iaW_tic?z`= zl6uN6iX=|W9Gi{C!SdlX1A9w(iY-S-8cTVe#P0}mPCzrGMc@DD(jVOz$pR_~fT}(M zgc=^N#n2||?K}NiToM>)-=5pQpKsiNi5PkV1M&wjOqTDkZg+qa7>ty)P$pfv`!hQ& zCOk7`H|0upqFq3gcm;ykjHdP2^ELuvZK&eKftlN6s30REjS1(QwUfIA0UU&>-eMID z6R%Mu*O9kgisy5;+(IYVEq$^u%ncs$F^MTGF0-d;RYM4PB*cVVO}R%kaF0EEcV%-U zMTPnst^6V&Y1>Zf^yE{{p>r@2d;D8Au61pWnA>>ca+_DZuguzqTwH8f5)YuCY zmW`NX>+3Ekd~eOG4{!Zk?f9IM#JD04;1ZHLG^I0m>FQ0X-Fdow_%PJb}Ua)&M9utwRZ zr+>_(@F2oE#vqVtdn&SqWj*fE{b#mtN|4c?z+Q`Q10gm~M48u>Zff$ROnd9T>^TH? z*lD+Y$EicC^VrSWRF8;vZYu~`Alzbj_zm`l=S|W@l-*Arku20CF;g!f+K4~3oR&p< z@w!>TJ6J`Z&P|jkC3uOzDR_q9ax_2u{FwDbwCZk!-|BKm!ig6|(jYVB$Dzwi#GJ;b z;br9Sm@=8MACBmm9PU$5K}#W3#Hj^CV$n}HSqe%kYWH{8Hh(kBl!S>}fi4>bP8;{{ zYwgeaf{zRRpyQ$+Y}^uTt??758a_?C#5v&#u#izI?`th~CZ#Xk`6uw~W+x9y2>2K{ z@KpHd%AC9JYOWSDpzeRxCc^Vag^3h@nfQVvU>Vll7hX6-mG^a6t#hE){o5*&VXUY7 z#^)$5uFjwLRE5+@KXi+kdG=@NOF1NJi&s9ahVQ!4gcO8R@OUJIJlVVW(P7q>`?&1L zJmO^$;otLgNeT?M%^lbs8`hknL}hXhYIdAqf)KxZ-7GbQqZMyoz5Rhi&#O9X!*XFG zGsKHgo1Sr_&avxTrl}0wqKO{e``sP>D}%Y=Aa)0+aZQ?$}Mu8hzFgd>O5 ztN~B!Gwub*z!8BtvkA=lV3uqJ&&ZI_L7FnZD%k7g_DrG2X`i3QS?(BL7HH`F$Wnq> ziCGl&^kw8I=ndln8*Fl`ikQWz5J-~@dHKRTgJD+G(cDCnlCAa}8#vgrRT><<4o7m) z5tFyhYa8=x*YssQhik+y2v%O(FD;}`dbI7qNja-@+D)}2+ZZQu6x3ELg;kLGlB|qu z);_*urJ!x)kXV}G5v+@HDE^X&>_rsEa4%fR#N_a6RmwoXiwBC!<(<#5aXz^`pT!wDAiS0d}YC6U53-NH3bvj@$Fqw0sN)!{uZ z4RWxmvB_O}N&7Vi=s9q`5bxL>m= zEfp7%8*rl|#Pqd*A*oA->5>suiK12poKVl`sLmY<8YnFhI5Z zTMu}5mP_OXW50OV$WGNsrA^hS1|1nbnp`xS$0k`9Dev_jx9L|r(ub;zov%g{2{rqEn` z8EcZL0=5s#Zw_hHFDyH~K_l(Y0L zNLiuunaS5?I5NLxz_2Gk>j&A3v+AXF>goHV_~IDF2yys;*zEIZk>X#r*brs%a>`kq zZU@}YAr_6x*TW=xfg0_{tY#YDs1smi7K0L0fk6DW!!-tk^`RBa(4J*`pg{n428ae? zs9>N=gj!)i{!ZKXw~|lD=kSbvFMZW$Mjv*;lgggK@u=NzzUx8%<@A__NC<(8@!%|L z@sk7Gd-zZ^+koyEuHBHt2u0 zCFoyB53jYyqhUC5=^jcLz76lZNdkS0RLmg8f&ThUDLB--ClVY%xW^y`MTMfWEePEn>}_Q@hy#?ZCDjHyq$FW7P&mNMD7AqNggDb=J+&Z0IR7 z@}a>|V2Z5QoZ$hJEjS`vC$3Nu*HoxuX4SzU!1*P0_qasf6($zmb z_x(5De7+`vZsK5o4GmE3MN99eTKYtSOkr<5QOw7Q2g&%8=Awg5TWkF5*DHC&+0d^LmGZl3lMj_*Z{K94I794ae)-Sx^4pyl{#vt((Q!(rY_}SI<8pMHT~b zP;GEM1g=$RFRmV`095i+m4!-9fKJ2>82nH!FEH^#9U)+XpR!i0wO%lK+KcWO7#JW1 z8?Vg_*FNf`S9MXQH)D*?Zj%UyzthdY#)>|Zxes^d$&sx1imMyMG{%PhncD=^95*h#5(g_bj97-0zk*X@ALJKF2MjGVM zjTTB7${>r2-JeV;W1W&}tz6P_JLRCQN=u`r+>I#4$0E*4f=q`)FUp-pAr=}3Lr1TJ zgm(m+M`_zHE`$CZUJX8(Gt^?*wq;y_w2Jg6IgD7u41^96veHBkKLl{klotTvRiq*3 zI|OUAT$_OKi`7s|L{^D$79QN%_@oENl{TbKa?=rnBCX{aRl>!r!udMRdDg`L_|iO|7GH;-q-9jb@!b3=vV>kDhQ%j zEE56ui#gQ~H0tasi1KSIWKn7BBrlnu#R$>GI(czXYFX`j^loDKn7qI4qQnu{57I$Y zc{1OWY@@mhVA1kFM@wh0wTQ?Vm6OcMaB93l9m-KIwkuaIPh>UpgHkXZz{MQIP|2Wh zeg4w`s`*w|q4EaB%8f(WTEb?Zi5^L_aNa(1Q6`L-8Bzbk$rtPeY|E+?cDXa?2`U==s2Cz{U8$C;OLo& zx@{Eva6qotXesr0l1<1$HoHeimBA~}TYc?XYqMkv@TuP7GH~=d4H0Wz>m={pZ(MJG ztv!n^wnWw_VhoIm^u;V9#KS7Fz8&6IX!y{NFASOP#R%37K6U65$MSAaG#8SIi+UHQ zE70U7YQEbi8SK$8G-TqV%GY`gx~xOYsh`QSZZR&)Zux65=Slv2SRf zawvbqsQOOMbCc3*PC1+IdN8y2#eu+L&8hjD`Ckx)#5rEZzy?S*Yk#)c;$OZ%s0@8`{>#un=Pg|K?f zw=PfAu0ntrcyuaoS#W$N)cJKA#rtY_?(1Kw@pHSUGp3v6UBO-PDC2;5kWdIhrNqpt zDb_OZM?>(VZ#A{uKO@Q5g-{C>(#Ca+7seK=B+RP?wzn$$wXW>5J{bS8qraPM;}f93 zXz69aDANCK@k#ISu3CDS>wK@lgFkED_9YjC=NYop>m+X`WWrb;8c}&myPO`?lEk0X zbMorA5t99Q>a;x7Jmf0NlJKE9Jspo8w@W7v@1Oy4eUGDZ`dM45iA+nA^4x`iP!w{f zH?{kCwJ|@D`DQsViGNGnDSN40vT5F@v_9?D80?T9tx2^$e?C4*OaH*yY+U$wjkvbG zJ7>+iKDAh7H3xN6WlcoU`&>vFY(`x^hj81X2EY6How$H-WhhTrXIGnMyk?5+9DVtBT7P}M2q54TZBz@hBGGvZN=NUQYd2(nW z_g&RKo)P0Lq*=gKL!>m6^2@nZpTb3`(_`#B>4QF;i3qhg{2rDZHq&}^$Aw$GFOlFa z`qP{cznDPHZ&4XijPk^Niw9al-XPmZO?ZE1^3YW5`e2YY^huvH@W}uh^^Vg>J6+ph zu^f->hqxTnjQ@pC0}Ayzq6i81f1xPWNr7TH&A`49M1_@?m`YWV*fSKQUZwi>=Eea2wAdlqof1>03O0 z_UNTF%~|tbdh^oDuRmPe+i$HzP>OH({yla|@fPH8bbbhf-b3fkdaOe0oL z&muVy!V&jkTEe^qxfT(@@AvC~K1mkztwLOaBI4mF*ljMe@zj^%2+T0J(t)%jCh|G3 zi~jZg(5n-Wt&&jiIhom&CGH7nU_MjJK*CjRKRi$6%V`4)540z5!MbHJrhR)(k4sTE zP#))(nT-oB-O_(_E8x%qx=z}(b%t$*0gVJ|VppB+PP7_HR{?%gwME5lpPWLj1|1jIGtg6-ChktgNb^1z5>~15+9REP9(w4bzeAs`|CvY5tfVvY z9b2Gz;rfx7Ep&IUhkuEEc*3|9mMC78O@egFF|V=RqF;l?t$gid>4HzNm030O-1g@} z&8sZAK1z}Gzryg17B~m2C>!ERf&V&sdF{Ckrw>br1I4Yv>s!Jj;<4)no^Qv`ulIWh z+NdR4XyjpOn)xyB2gFG|nQ3Y{Pb#)+Z*dD<6659rs}w^>=P1keSACadb0XwR<3(k@ zL+aFJ13wfeOU$3<&$|4De@WSwCkTrmlAn61u;hYoA5^J?sf_#Hemn;q74t2jdoldvx34q*>jj{U zu@HKv3dyY_MQ5zd;p3eoT7PspjFpsa+Am0JzR%>-t~P=LXNE-T4?JdW=8)=LTsa?p^w_^d@GO#fOty0F8 zIb(nRe5T}9A;cTo$;Cp6uKKdi3N6o6m(#2PTMn>K#3dl;$pH$BNO26XfAR6TQ~}g( z=F=b>G?8@YbZDK5v0E><>Q%V)j*{x&#j^MP(SQ1AKQ=}MAz`~1?GQ_^xVKbm!?s;5 zR=Qm+JcDZNH!OY1vGobOF7Wnzw-y*qp|5jKkGM-G5yeAoSbQ5lsLxalL#I-l zwB^$3@N}buY)DYG6}=IzU4XWXK!b^GAnpY9lUvRpRNox9#wOPZn&kwrkglws^oZ33 zyYLOdO2_q>8X1HBYQFKs5bCMlAJM=9(~<+gHdGi}d1i=}VMP{9kjD`6o0}-bhhVM5 z>TG#o+N*HrSh_#ecP$2zSCh|%rlzQ2j36ZEky1Gtf(X+_ zS@ZMLee+JLm9ngf3x^B@nmV3V5*mdTqCvw<;5A&ssadH zk)(eGM7vPo+&PZhFEl$lTi(}1vTO}KmkSJlM1t}J{d%Nm*a8*90#YaQUEhUaf0R3` zI9-($uZp zKDx9JVl{$x2+e(Lnl zakOLxo9fWqU7}70qFO=cTY?95?IVFgOv7&Y=A0|2UwHi``F@fk^eYnlxwto*f4IWx zxNlrDz8%V6Zhm6qTt1I(a^J3xw<6iDnr&884kG`_p0Sq=Pe+VWY^gB5?EjLXMvyjW zNP+bG2lau_INxE1tgunU$&_ycteE3?x#Jr?yU9d{88s|ZpQQ}*(n{MxZu^mDcVEa^;Vqy%GJuBcR$v=qgWiVa z6(#q2Ah7=2Qa>1yGS)2!(&TUYjV2{`HN#`}=Oxm}uf=zn9hl_r>@d=OwSz{});6CX zgr1o6-8W1+9%g(-`US68;#K2+zxcsYa0FWSEmt5ThIUNp;&!&gKshD9<|Gwf-IXbxoE1h)#`Gx zZTEcaLA~GSqp4Sqj0xMLf^LjFV<}Bjls&X^G|?jeKBUgx8NxP#)kYoD(qFt2?J~x4 zyRG+>Wb~YVT+Kn6#)W3#LTdA?EIO-Rx8-klXy-Q^PFqjV=Mqtux|`_{WjcJz!6d3n zn=s{u5rjdaf#?+XDe@@udkZ|&WZ4Gfd$1Bb13d+rNh=U#TQ%zOjpcKZ|Hs|rEBfWX z(!)J&VG791AFR8P6zIDV6h_`ielbFyx$q#dg}bQ1_#d=4*tdMWn3U3PaiRe&Z!sU! zk(OV>`9jkqKvNXjIUV=*R~=-y6ITiUL4Lj+%Hn-)CRi(J_MynPLwoZ-9UfiZP?(rw zaR0nTSj4@&*yBu6m)f!KCv>fXJ`NARz6;zNQnX_{r!Xdgm272?Q^BwYR$b`WURB3g z$~1&7z|S&)e(K5TaWV|8e*ha$x0~ztMtd!QmJIroW%K{QAkj=LLV{mH`{IEY3_Me~ zk}fX}l|@No%@2ae)1#w|%zqcUZ3JOAfhUSq>y>0YtzkJCyi7t|H=C$SoIqOTZp!%c zQaev&*Y=Fvxy=lE)?LnAu*pfR$)CTUiDtFZK1GbeXAt@)e+Z9N&2*f%Ro!&J-Y2_8 z_BxqaT4>`Ix!bLs3(G7Uc8g26*o57!p-~8_Kn}U3w{2gbJBMvKZ2P@>iC(lv5i$C8 z=e=PJzuP#G7iY=pNYhix5Rw?Y)a2jgPNH^%@e+qlV^8fCM~N6y;d6WwhNhKo7CW`^ z+!l4xw|uLLuW5XwKA{nli_(5ZB~^=AG5F0%O`$AXI8LHUn(id7X+=^*tg=_6fWZ-? z%A1o732~TN(94)ex1BI&hx&BafBquibqWdi7VUU5zyf7dL-(D4PYw13we~1BE!Fd3 zMrG2Y2b7Xu?u9I^V=e=m(b*)*fv&}7N{)N`2O36rkY;0wlzZ`Cn z+vSN@g_?k@7ydu4&N?j0_uck_pp;63gmg=H3xaeFh&0k&QX-`|Al*o(gh)x3fHWvD zgmergAq~@_qm^Suk~3~m=fMNcZ{Zj#oq1~jP zR(Y&u>qD9U>WrXtb>>d9t&njh<~w>Nu@LU)^+$e+Y__%L@V7i3>5-t7du#Ftw0~6k zogcQgK1Mzea+>KnLP#Ut-M-u8msHUSXi1=j)uh6EyiFA|A3(JRL0sD@%V#ZhI|Gvb z8xj7|QIx`b65Dd3fGSQ-P5m46KmrmLG*STQ7rv}3P$xlz_y=T+0=-<-Vr^7wza(;J z4OEEb!G8zw(Le))!xMK1h(7C7Z2I!Vt3w=PT2jtYCbdlJQd0 z^=|Y?UUdnU$g0axg9Jt;FPCQzf7BYBWCcD7Z2OlAg zZ7bhe*E$I-)&UaSA1w~?N!*Y#_is7Mtrcg;A8=L}U6fy@2G})&0T+T?1DVqHS0+}Z zCQf?%=VWfvA;^$S*1C`B+;;8N!NVB6qWbbTs5QU(^P+7TM2XD-N(LxLp3`IMqAAs9 zRI~MM>oKj5ZMH0Y42RFR?j4KY&|+oi%>Zxo3uDjc6B8HRt3KkOF{K*_zI?ec?sk`C zL09f+0t;Rph1e5}qP(HMCVgnk-|)%()M4xy9>0O_2N4Q6{q(?2o_h4Ec~87WmZ-Y> zk&ldw1E(@v|D0I~KA~BRM+*o1kBp*#t5d(zy{yHudM`0?oj5i&%(OwTg&$VG@RGF` ztf!rAp3;N0O-!%S+_oX@XkwmF(jS!!_3w&Ge0&me#FT}Ff8?+TEyOIZbcjoZt;NWe zp40~rxq+`U&{vIU+=8W745sz)c_zME_7j2~c7{Eb7cPo8#r-TwadILb-qm#8JTjv6 zOraj#@FDqI)48ubaL!xf2%yYKWb&qG{KZTwfp!{e?tn zt)8RTcGdKR?|ocZZOTWhJ%-L}z>)VGBtBp6%uxEA|2F-KTBKX>-P7YL-0q56I2npm z({avRckG(z@IuuMeClmdD>XwlUy2@)a^WwaV<&pJyRl#S?ct&hsM}XO3 z(T(0)-;}VQq!KTlf^X1i&(e}KX*7kk*RecHcPh74m)2T*@5oR+*zGf-rin!d^jCKq z6C}3F507$cI4eP+#6f>CcF2ckit+I5o4-X@`yZs&HjA>?`r=NjH+?6+b;%b-aCy|%A<(6t1y}(OLUQmh!=`1 z_-yxN?-lWb%56#NI;Nf1%@RQG4r+SQ;QNvN6E~RqO<%cwW>e6>RtvGP^exV zD9bmUfoBhrGjSK^ZjS~=vj+fJcB9?8|G^Z4{>hlL@Q8sn zd*jySKwe9J!$MSUb(q>!;p5MPwLAe@xaJe0DP$p8pt8;^-V#1G__9-A1j_U*L!ULHwGJ%7?YE2*+WWqxkgNtj9t{K>K08|+z7z0tv1go0+onIp)L{;WS*8?MX zc_fY3_m}=TK@JYwfJbG!v=s;Kskk#t7Y*OruXe{#Hq&rFZ|cf;u`?q3jr_g2JI}XH z-W=CGpRG;s{OF(}M;j;7{xFHK_Ki}mkF0r?z~in)D{X|3@^1{jDg+-d+_^Hjd{6A@ zxLFbT?H-T#_>-_t!IIMSXO4Be+4FU$-dBaA3wzm7SL14FxO}qu+@eE7w|%RVPiKsn z#;2X0XGP5$a`O%LS(A{j{K+foXH*Irp=T&=M8K+w<9~fA*yd+5UUMzbG0+HqC0Hg5 zXPBH$e9Jc9Q~!A!)Gd4`ASfB9_>8YA>;FZmc^+hD`KhG*Qowx)>W5zH{4ibXz1nOLR zeJ$N($T1p*W1)KT_~sG{H32@xzrY|kz~3qtWLVSOgM=Wc3eIAsXbKdZU7k>b!+HPa za*rQ`k^1^xl5W|XVZ#|%-uR}~A7y>ZLLrgR@@m>~REU$ArS~Ca`b&_M1|KNolj={f zNdfie9v+E|>Wb#;DtG@iNt(3>VS+F5*VpII9~(8ql5prkuf{tioxrSt;hmp9@2p*{ zqp4hwhcgRaN6FCW2b`5H7|QvTRV*#ujth;pT%yt|KfFMl5o?;|NS^$h-_aoS#dQu% zz(IR${;HMwk>ndVC_La56BBz%%!ZdK4LM_g!5Gj`N^9X}DcI?H4n8;M>pr0T2};q5 zk$i4CUrYCaybxf_G!m_!9Y`0B0f@0GtDh+u8LPo$CNK9ETEOA$wL8}jVmF_QR{hwR zl9YenCejqmK0$7EmeoS8Cg^2lOFd#=3k@m2o-*`jE`p)q#F#GH;^Sle4#>e!=Ykvp zK{L=C$`GDcx?^9~j6pdxK0$8Lg!N`2`_gN-n*!|hG`__o!w3_#mxAA90@sxzSFJ%A zj6JC;a;#PDu1xGSBl4M_AtGW_&w-x~n_FZFbqbet;2ek9_4t~6WyeAXUSlm{0(mVj z)O-h-SI?QCsj~?NBkD5WVhS++orSBBho_E_{aMrX>))IXmLD28D4T_WKF>rL_;3I( z0Px4}LhCgT4*^^qI1IeXD8|NUF}5Zv)-?dWK@YgL!5Twf$c4MA67WZ}0xs;JQ3*@~ zRW_R>BPV5lxY1YJ-Fw5od5%Ze3_6Oej-rY{7nMRt!_@lkzg#Ob{=GeGlCy$*FQ1;$hGpf9vgE}xqsw$G90h;FZ!J*FY z9@so`e^$DPoj~tmSBAQ5K}M~ zfNuBLpbB)(C6=Feb-AfF8hOe&I5cfb%X(ZsNMDtDfG;{iKcXEyZ)xu~ z;+|+zL1S1GbF>l2Z+hugDiiu`-{b8QI?K1?gbqXS0ihT(v$69;b|EkgC9h$GOL8)&_ROj%aO!A60D3-NVbJrnbxU`Bq27jBUk+ zT>ZXW_F;UUZw`}d5RpkJf*B7l2C|CqiHP)lTRN9GUrnGAU0RF8BbB$w>Rn!|uq1z5 zv#~lVxdlkNQ@}M3@VJ4OE~p)=bsX0JXth2oll#xzgXl6IH=60a&_3CABM1Q>Zc&sO zvNB;S$7`}ad8ueyFB$jclk7t6fjpzJhBRm>A>KKha}!z$HE(YQa8P%d(@LfpCsKyK zX@V8f?dw2;YU@D?0M-=B@;?dWm3l;^$f7B5G*f+zio3We|D;X`pt@msp$26WOd?Cd z>%S4F6$ObH$^@se4DV^dc@+r`u|i7DI}Rj?@my_sAKB)Ni*!repytch2j<|O?>qF6 z-iFYe%BOLB0=lvS&xR}L5&%kMw)muzDnba$AQ+z-HZZ3T#{u4Yn)^e{1}~!qz1lq# zB+sLii*27eYnP(tob+C~almpki*w%Y5@u}ReoYF${^acavCEx(PC&`-l)3y$@Ew==)bzHEOUp5i&fkfG$~z926F;(!TAc8j z`-b?t{1XTNG-tQOE2G_U5QoG3PV8~Ds+D9vl%`4gHlIM@rF+rzwDHmCtr`Qg+}iRMKE@?{dTAE+KsciA-0o`HcFd)ct+P{ z*HYIXw}lZw%J~BhIz4DL+qdf)dWWJwudbL_+6h6}1T&F-1M$NqNi+!#X*T{>An&|3 zq7WD(eOWEN(t5f3v+rxxx1DbGZ?@k-S_P^l@Bxq!a>{hempQV4#4%zEfF7?P?#ON% zDgdfQJlR1Gdbb`?F9f1Ql;T~%)eh2YYA4IBEiD;|TJbj}&)Wj5GN%6|zJ4T60Dd6w z2IQU3S_UYPRPv$Cv6T$a-2mDx6+TV|fp&-eVSF$l1IsUT=0TVD8e0ODa)ULYi~F28 zfa$#IS)lxoP83gBRc#!g*VUk)3Wy*%fG|pr6^6!Ki@j4*U%3ozn1#Fg@d~e$R2a+^ zdXJfPhN%ASBx>+~ya*U6&<{0L>p-^SB~C;bx*}5248=I0KF9y!2`AQ~amRvd9#&2u<9Hx-MwwnMlSQ9NOJ;^KV8}d) zXY|Kjrx9xJMzzAidGH>B7Dm7lfCd9bC6L6u2G}$=sM+|<@t+zlaeB-flx|5kcwu_a zx!r}B9N?n6vN7_BAH(vHx92=o($DnNEtpJae{#gY=2{48s>3#rH5j4%Iv1Opc}ehw^k+h*~kgV?Meo8k34_)2dKumJD5p0%7dnVXadMs3xa)-60sO}7)%~064AIfPA3|HEqCu)Ims?Ek zYabF@=M2kqCrqn|to@3bcYG^fA$wGqLT3U7w7RBjyknhHY@@bVC!WL`-Y75M|9Kbf zS?9sZN`}<2!-C(DTGpH8UL*fO_J6Fhvu^HJr!6#lSZc99aa;uQEgb2rgq)d49Jk4t zEBpx7FlfK+=c{Yrj!}+cZT)`Uv~FA#AhCXtu=6+mq5k&x^m-w}?t05_{TugR3QU{~ zQ`I?w^gir{v*@ggYFbUM^rkwwow_ae+~u3Q0Ut<8bloTCPxp^ZZ$PQ0|Hn-6)12C7 zIN9RQ7_|Jv^1b!tdECkuAe$OX9wldKzV&FY^^yyDwI)2>bnJAqL4&e*bUDDH*W{rj zMw83SEG?aBihJ0~a*J@%$nWF%HxzAl<|DYGJa(CCYFYK!+lNwl-#-YVgk~M+&?B(` zV?)-mIUTMEm$h_z_K6o@=K+Z{a$Hes`4WjjL!R{rLtW83bq){Qe(95C`de2$c^9Fe zS(X=BFmIo`LY_TOru_FSF=zcfHI^7le|LlJ_3a?jDnbuemFB8g!W*2kLSd%vb! zd*6UFOq4$$E!o5`6XJJ5$*{Wz$FMus^gCaL>ap5Qb zDY?5KQyN)={x?dDxz>XjsusD}#Yno?#YDP(^QN1bebc*TN-iMphJgr@+%aT^nS^-3 z+yJC2)3Xk;Gj7!Hw*BpDgthmSv*8b`_Ra?=F4LRCWS`YI1@h1LMx*~={E!SMbT+MGor{^3g{aG{jYWPWc%9SP z))}a(s#?OowU@joczBO9m(X^e4mDx_96ZswP*@4*n5h{V+w@n*?^$L&#>2KP6*I^+ zpsRgvOt$5`*gO0J9Y%Ilf3Ikxx9EgoK1vBjYwdseOTIG7*R$x}K zuBiPt*O$|EPItkKKnlgLz}uQiR6@Ch0P(tpCs9r^|IfGbFb8BN^VqCF_^Jcu5R+8e z^IvQ9+owL$PS%9UEmK`r=STXjexjh$@u$=pCd-#3b~i!AJ>4%lXl(#WO z*_g0B%+GJamj;x?QJY@QOg4b$@fOQV9uX0&Cne*uY)NsI$QYbLlK=4n1fu*+{0`** zH3R@joG65kNz;&&GYvu3b|&BYw}9IXlouDIpId;XiUM&hxb+Y#L{pgoW+OPDd znt+fIs9cT_iH5SZ%EjAhH#eXgSBsceQW9#80-6B?!UBw<1dxK( zprQ)&MdA0lJ^OmUGuFOVnOOc|Ws~>Zp&5e1CwuR*eYraV_-C1bo=gG}sSWF$p-%@G z1sqC^n?C|xg!QV`18$+Eilbr;|8Owh-mC;(#qcZMv_9tQ8ai*n4$5I*%@y;?dEwD+ zpyJRJwXgqsZ0~g?4k{~#p=ASNcw?pH!<{tzPR+?$sefCj)A+7ppR%`j*|h#L?mV63 z!Q-c+*TrE|kOkkX8R(1xG^&@pQoxdk+c*I=+a2Whh*@GEGVk(Ii^>*Q(P3s~_* ztz+6)AHA?4vfe%osL0Bo34HBl&5Z+<)4PL6wzbvFmiLjAkDp%#NWAk&N@k8HlNmH5 zT5!3%IJ6qo*q6t8_jm7fD$7JBCBU4z)oHbtL3XOVL0bC$7B%JSY&Mz3e#OdE_w520 zHj^wE>k$BL`}@@s@{g6eM}Xp#K?CGkkS5m%`;;P*xx0UZnKLc~2b|MaZJ9mi?-Z3d z8&hU+)i&l(9YN#KaAMlem^cZHHAM9u~+kn+sO? zhu^#OO*9$0JRP~#;!|UXzGGZFLdUdwEh}VBYrZ%XZ%tNi$IjJ2A?5=LiGM(&n3i!z$N2S%r<6_OR1hUiCoa&x`X9t-COqDP9o>B zC*T^RlB+HNapQmaZW58SAZ1OIvTN+V5si9ZLk+jPwQ;oFP&)#%yY==IDLq(?xY1}m zE^`6ePMwF8oMj%-x#-q{c@xYrg_C)j+d;8FG4C@+C44*$11phsQ((Pgk!C#vKSbKe~==eits3Qk4Fq}En~ImQFCRZyG4g?%iQKaxKTvXE^U ztSXCjC^+8^p?r(`1oLH%K?w-cQ}P|02cBKpq}ns9{}QqL6a*@RH>o1XG@Aadd}!Wl zO;<}7I><&H1+GD~P3~s)g8y{>)#LnUX4!pF0^GCT(q$}m`Mo4iw=~CAw>2l=?`Bp8 z7jeH)?lY`zWP$uH$E*sCJ-8>bUr^INJBcmtl-y&@TN9GVosw?OmzAkyL9W z_TtO3OTK=L#l%FX$tOqgPGI*)JtY6WTfTSk_BU)eK(qr3BK;C3rlRl%O#baE6`br< zIhH2xF(e=r15|el=pW9gtSnU74#50gnEoefLa_j=BeuAh4bo2m2Fk2>j@x;IUh_4q z3E`TKcwCZb{_52s%4SdF{WklMhv`)^$E0Sn*FAR7hKgp6uV~Aoh=u>2{2sZZZRC!Z zZ+=*7^oqzli~5|%dub#J^>fpgepl3up=sqLYSt**t6uGLxKQ#XuC1+EEC%{}e8My) zcz(PNdy@Uam;uL8KwlDoKRCQ7hBM-S%?hRVHSpa@YUBf*iAVlf$pC)%70@yO@JXQ( zUo&DLs|AL`<}^(DSidR-Q0|YwUI{=nhxkp}l+hch@&sNE%QDL~f!ZwS|I)2!%~}9b z?oN&ld__;V>ox(iOnKCA$8Kd(gS;a=ZBZ!`Q^`waCO%P^Iw6(frOjxCA%V*uuR%5Q zIysA3jf+pNMvOQzA)jqLX*@)ZLetkC%j*i5vmfA;P`qrbZ`bBbM3+06TJ_D0ts7#D z9-+d>9weRnLF3Z*krhK(ZKy$jM5aRD^*%*^cp0Cgu#JZ^)BRCD|7l-pVXG%Y@gs?Z zIR$jRN@4f_raa#LIQFbHo1lK5Vw|exeYBvm&>h7s)&0D!yR1pS3M_htcuM&MJkp^4 z;0q0)UPI9YNM9eUUs#^^t_NY2m#`Z~A@wKtuSFUFYl5ES)6;py!=IKFk^GY{`Lk{M z3(v3E6-Gn1PPmT52JaR|6|KMRkKaytqQSCxI->A(X^h}?(Xl5V!A8gwCv=hlKd30W zOe0Ll(!r{4{2fhA4V%7rrNbl_up9>AAK&ukkad-j*nw9z0dgl4Wq5`3KV7;E_``3# z_2W(}@M=N#KSbb-I}mL%PXOiC&gH?`%w%iNgMj__axe3GKzmk8OUsO0t#PQhJ z+gk@)T+rb>{`cgBP@Z5k8J{gr?$*6O`Il>Ns`IcwtQSI&JpFLr?OR(65DS6&{$px` zTM#Fb?AA>JEe!tg!a+SQ5bhZd zj;)?fn6WVdaSSp@0@!~#lrVl?qFV`!e>z`5#Zi^-sWYT=gYBrKash1SE~viRi(%3+ zoNDY#4EWWH;Y;mCH8wup&6I4^0p=yhvH&=_5Km14b#+9Hg9%A4AGuA{4Gj(1>&*Ml z3SC0L(*lPIFTEFhK0s-ju&^+@;Hn|ZgtY!$-IUya*4hP8SwzIE3Ozs$8i))YaAfa-KRb+`L;z1)4GAr=ETa6x1&*nI>~M zX{H!r!2~wIGF_HyE~cu2n~z@-#uF@_Qo~q@0RqPlM2MmN1*q@*D`7tCRoipy57yNK z7BP}NfZy-~B(x*TUa3+?M@JumpZ@@`@S@kV1G8FuPeC;m1(w!Hz>J_PLk3S0PnV_i zk>f;>AwhY1H*?ikP-$QtBo_cTfHfjZt=1s((2o@K)j+=%a6b`DJooFINfwEwym^Y1 zBxT9>z%4EGeU)9y6Ni=LW-qCv0BX9LXRN`W1nKE8#T4^nMQo26VWFg_-zO}}bU*2q z6zm9w=lz{2WBp7Z=C&^}_TkGoUqx$GShnP~0C(FJp@oH6XUi)LVlf;b)93YtN{$PA zc;vBWvDN=#^EMSGT1yiOW~9)-wzn1xIY%euZVgvxyQ1};^WwmLW344Vf+)__LN7=e zn^!8jJ8t`CRw$E`ST-l=;bo?r2=rwI)8aBKAG(jt+f+lvH*el-?CkuWszl4fD%2DE zG15^aIN!=up5qy*P7%3B7MjPdjBQ^lVqB3l+UrT;Myxe9?ENbC)Af7Xmf+ppx5CJP z58`zclzhJG!a)Bs2Xpv9rZ^c=1MacH%JA0qo|e$BrBC#i3aj8?dbYw!a(!TtGCyf=iF{)IL`^IKBpkb(ax6Sp8X9>2?2s&(l(p z)~!V!DWG^8SYGYQwig+dS6cmSrV^j%J)suY1GD9vJ2De=72x!aG>r1Eyr0NV4-iwG zak0J{rr=e2jb3w~h(?}SN-1NYBn=*0NI}_`8L46ZfZ3Qx$q$Wg&XT4>DRhqh*wMi) zG<&X`cHZ$cm@rzzag9GHlO(&vy>>{W_t1 z$dmff>qVKHD+DUzvhD2F%TP4nK}ek*y!W?8GbJLB5$n8^-!0RNn|L6D4F=#5AwS zR;|bMy$pkePf9NBd@7#23S7%JcXtboia}b03rNKN&W*oG!!g~}G0(ExB=h?4 znfy#agZqohm+k1l;mZ@oBQ#%2PT%|?2qBN@Ln z(BrVrh!`uZMwt&I--=3UW&0ocDg?nonLEI`^pQ;;jN7=r;HCUUhC~|w-@@J^e~V|) zJC-t`k%)8>eZ_9ps)5W^@4?nrPkqW#F!>qWZ7^ACvQ(uUTkCXXAC#d#F~rst$Zpfe zqF32^+p!&%JqXPiaha1CkHx!z6lW}73W zDOgM&ts^x2K8Ft7uRbC86Kk#X)B5l$EF5ftLPFGwc1!n~bxO3}o4#)C;WYG?!FL6c zGmy(QhR4U{8;yF7BxYu2V1^_ZXun@Qe0y^f@Gm3u#_l#Otu}*ow4wavbd{CFVIKp; z%mCQze1TPsE)u}>=I0qkfH7JnFi;wbei)P$o_u#l&+B?I5dW$SE7rfOveJx!fdP`n z!7cH>;|%ffGm^qN%_YDE&Pt3kkY4{5phn@-)i%(vcXgi32M|xtTOJ?d81JtZCsPpR zQl<<*8ub7w>A-(+!dRdpaF|x{ga&!q)&q25&In#BEis*@a+0uN8$AvO8^=;P4UGqo zfDT%88G$jB|DzP$o(dafPYw9@LzXk-%?@%D83Z9$1%M0zAfrP} zxPtW>ugN2cFXQYg$y^YU4I=$n0x(J9&u1c5V2K5m6VNvq;tC%89n;|F<&Dcyz>+C| z#9J%7w{Chfi?q(j(XaL z@&~Y`3lBX0E>~dJRGAd2XjsO%`Ky6S1pBXiWM+wm-DMGhW4LyDykwnz4murvs&55h z`$qu{%q=N>@>KVGhm_$Gj<3|D=h%%^H*;Dy5ykaak=o$0 zo1Zwtmg~*;Jb&{jm3Ej!q#`cv(La(6)kzugG$sy*6+>HFu$%{{E5W#Z@!K?fbn0I4 z~; zu&9g)7vg91o#2YQfS-mG47Y9&A z;^n6fh~kL08DvzX4p6@Cfw?Zkvh*8VeD7O?@2+ugl<-2IRkHE3NF4FRDZFXXG`GRPDQW@NN%1mT;4btFT);%hw`1 z&#GDbErQW~EAh70z5EZeCIVYWwS;GA1`5RDvwE$s9{zm6WidEdqKBF#^Rd~|H9>w0 zgEcDK<*Aa7??}qB%yYV2X4}-9L%ENL4jtPL5HBxiMT~s9eRa~fel}PUIQZ1?(VFx% zsF$9Zb^bDoxD#BwcHLTd@adhleSqny9g_`jUuev$` za>xJP_1$$2edtQHvF&lbaN0Tuk?n!A^-hlR%aKlrB9xn7=6*n7u%pYCtg=p6dhwWaDVB3k0fIiv9;#>jW6gp%UTr zp(I2rE0Hl|)AcSinVFfaj&~d~EhlJ6(r@VjlNc0|1k*L241T`8`p$W~CFQYyb^|Fh z+SdK(LCs9d7ucO*aWBD}1p@N^ToYbBX;*EhOo5mN1U$m1uXf z*;9q{>*=X%jky35;*}4rtUoFcJOO$gu?bkbSiQW-&PbbJyhJ`cyk0uxP?+v7S`wi? zENRtgQo^7lCV#6i%?`9UEZtbTQyauele0=($X}zp-FHHD~1Ce<}Nn2Az5*6iS-VVxy6~H8u_DT&9g=OrX6v<-8?Ag|m$}biEWxdq7DY!89g{o_c4IEB2SO0R9hxPi12S%I5+b9c z)4V=q=5vaOMEAcg@yyht?h!N7nQe?`oOm0J5Gky)pX4XuZDPGjpjtOV4F)`a&x*@d zKiS~^rIlh?X2> zolrufXgGr(QsL!VQM4=Tiyt9fnNw(NOyJOfn5rP+r9~3-JydNaQQ@>#_u5e3zSIuBIaPvWzB~2yW1=UbojL(>7p}VwmP8fcI1a5nH$ioCQFm4#B5q zS~C=1n4VVh_7?6ok25F(`v!8*Av!y&r3^Ov>WeDO%4~qec-Cad zN}?-OjCo~*&k<=(ZRf@YEBF^cDus&;xSd1BK~ZO%1F4M-s%dsTTuFpVx1=9(eMEugpE((z{q@CkqoblK zLAnu|WeU~OUmpz$Ys(OTbKY$_T)n1hXJWlE_T)_UL_t{z6l_$K8I(cv_m5mHA^*LQ z0U81%`cJh1`{#8V%KPHt;tcY57UlaIwgt=5wLAby@G8{63e}ea`9tY4B9p_@!-EG9 zEnGA8U-{O#)De=~lDef;U6nhEmZUN7WWwuAq($0u za{2C+eSLrIR;u%uhuEdp zda}WR4HoQhzSv_Bf-$TB)*q_IXfEqUzWn-;tTL#E`S(f%yCGH#r!Z6EC6#3G0Ud%K zmxB&mZg9~k7ZA6acu?hOkD7I(@*vu4TU0ZCT+rN{4l!%NN+++j=jdAv=Pi(g(24Dey!{9$L1sXXVJ)DTY1zA6mv`+L zN(Ux=m|MQi%NfrR##VnShQyBkUoqjTmyy9d4=agALPZMAxQfDv-m&&tMyiS2iB1?8 zrwXRM<8)~ksXPHHHCXG)W)U1oIMEh8Y;PA97CcNWE)?G4$6xzC*q25fkU^sU(o$T= zp@yo!#m{N>q-myDOLk7eGIg}GETz0Jo>h&OMeezx60WqGkJ4f_pKsnNZ~H@WvvKpG zVK2+mgLrm02}eus>BS>AJ%-0opT3ZIIHF)hjN~i_K6$LNxd%Hm*6YIph10e4h7(zk z2?ylPXh0{qzvBs;{AjPy=E(f~APA*QHM-a9qe{AqUw+66n(~wC{>DXIIFGXBofI>) zT%Rl(vf6QSm#+IAt>Y1LK&DQ$xBjB-$|lPcB_2*q4b~HUkIsL*fOeL8b>^5_1woWG z4_P>(KkG6_qP8!>s!6Q*rZ_s3^-L>j^mpXxcN2W>L|*r(O%O9tgiYKR+Z5$`n9i10 z=%ux{wdU^DbDUdkfFjaW?LQCQ;b>hvLgKbakNmk9D%8l_Jhc&d$qdgC z)+o}XNY0sf8Y{j>%s2j}rJqDof9=`Qs$OAZrUdwa@}nx-5qc0kMS=G0?{(fto3X+u zDp9_dYr}+z279iqu7^gS1o&=a>@RG?UH^-)WkL2*)HqZeyZ$6rrkHhVfS z86AT+aZvMKQv%I(5lYe9`!1jDZE8xIVU>;%1_t`+i4o@o-JihiIJ}T0CPR;hCd{Ut z7_Oc&aGZLEpUa1|`dKk#=f7!mnmjZvU3tRIq36@y8^g9;a?Z_Lphhf9OB6VlC9Hns zwpoi7B!U;0wM6^DEtHti9fRSA-{GnoD1%>T``3vAW1=tpb)9Tb+nQu{t;NytyiIYs z!I+7w^yN_Mmb59dHDwZ2xdQX$mTY<>EOF?S4Rax1KPuH)vSR$~jnK+uFuCc_ z`pw1a7LkbVzT%_>TJX?tE>&C~{Zz2U^T0Bu*N-;(A_d;Lm~hA-O4TRky*S*cj>fWY z5-oaT`1uT;DLVa4y0vMWnD$K}&OfmHH)@%ztq)8iy-@xaq^NcxoG-(SJm`Tq@ju!J zLgH2X|2wW3EJ{SE4WL;cuo0wxeZV24^_cX$TKbZIV!rYIq#(x9t7*qrAVOP}g4}n7 z|Bi!Ey*YNbmwT&7v|E0MOxhsX@|`>%WgYe5GXsquVreViYPYJzgjj+=1j&M#2dyhX zN+A7Yw7}pY%YM_r?f&-<0^*jIOkaIN5o<{#NG?5&J0aq{CJO9q(LCfP2J*Ixqen9~Z1g ztTen!5tv?Mna-uY58bJ@#^k6vib!Onz?CgCz`sMCzf#!d4OhKwRgiEVs6n3?fo(2isr4e< z632!z_?bw6HT>0+VB3N)fzNs@@L{24k=50HqV1X52+;I;uyj{J^dpw)-(zYkOUp=u zTIEK<0<@^C^&HO(HX2UH3!S}me(beAH!iRGu(8n^Te{Nysov1XKEDXR>|72FsdF`N z^8u4yFo$v86#S@ANPc1mraOE`F>DWTw}B_Uv|Tq_qo%&T2=3eKwz0bl3ifIted##o z8jiPn8PF+cTLz^ErfckofU!gIz1}Cq6`!Dm1ryNyV-No3q?;a`S7)snVAudRKkzq! zmQbJ`tb#u5;;+G?6K4rtevYJ=hyDz#-~fT*2!x=Q4Tu~dx^dv2ZCkF7FriUA!Vh(}C18jEjiB#NhMSm1%;rwk&qk{c-0#?x7cPiYm1Ko)p$cP2vq59*BlKf3-iL40{7}3ubBG%qP^rV`=lmM zJam!aMjvYJuh8oTGb1$go(Pz}bjD=e-m9t`3`esqE7mQ!catP(V#z12&LR?5mTf%} z2|Sr!SV^AsnWRe!;dSb~rT2}}_2~5W1HVA9TC;rGtobF&|1iy=93st@nzW>Wx)=On z5vFmPspc4ng%9Pf0fVEk&Wruf%e}3#gJycGuGjKVbpmkv1#fn58BxWZ?0l&(&b=o1SK8R;*|%)4tN*luajKU;1<*GZ@I=%G-^l>VqN zFGY?76ztvI-PCDsHa21$uzfO`q*I@`KI9D1c;x2zXxyM{>UCFfJN6y*`>uaCv~GSE zBsVy=`$4#1U|}9g6D---{zGre5#+IT^g|Cnm_Yf3s|mb*E0h>$Ee zY;9nag*l9SWW9xbh9swD-|3deWU#|f<$ z!Vy^kI*_V+wQVE40xd|OhmgBzDdPV-T?PL0bWL+b>tcTMIYJG?h|!#gbkLj#T*<)p z72L+yNF$(>?GA@Rkm8(AY>?lygCsEMp3q%)_z3-ZA|K1Uj0F%&Ad;; z+aepE>1=;VO!ix1VQxs!efRkwar=OqvTK&y$lhe#R|p*P?=7?!b8gjS$Q`P`&ymZp zUj55M+Z&ytyTrb}Bh=oD3- zFptNxsVJ}7lIHbM5RJ&;BJi=RPuNK^@Dr*T^tJA)I6E-INAlDS3H};bX;!uGtj+QH z?4;6KsW7XkSUHwY;1p2oy~EFe(@vllV5Y(MH=68pUDF3=a8UWvB?SW7f^4BWFcZvZ z27FmzOIKz(5emYh_lb)>JFmeTOhn;Q9hmk%fO4J~pf-O6i)zRk2TBRBJ5vO#+lnuY zUTETuC;GR~?4=H%Nr}Dc_-->_D1^YJyb>upxHXdUcV_BA*;fu`*t;i1chgKj>aHUV zdy7;C|6k(>r-7V8rA2&HrKO!VGXo9-{;v*-)^%;JWJnwWY{pM8t%N@teqkEGI`Y@E zQg5}y^qM_J>VlP;ni^0taWIjVXlh+|syZ-0#0Qe=9Os*o+S|==FlpFG#_i?E(;QDC z$Uvu2i9IJ7Xn4=J$_(xCFdve zI^J1hRM3|c=$zZTjI5+7{Og1`!RSD*^6>No$F)2V9p*Eu-L$J}Xuph;i+F~Q6={Gz zxm)7iyOyWBr#`1GWx%8vy3+f>;Icw{;Z9~^!bh*sg;o)g7VYA}S_=ci^j^@ZXa#vF zs(^JKuuFda)-fvAWX~0`W0s6UN^vO;(vRGo`;`()t4?!794!EuI;2lWBfMo=Gl$> zQ!gtkjb=N`!}0@#RC3N`sWZ@ zHOBYtjM2d}VfKDn2YFa2lF;UAs8mzFItQK@wenPVfajRVFtOiLtq(xlLVPN&rJ`4U zomQD+g6}y8KIxZOz+_X;645fvuVDo57RW~M{()2p3uT7z8jUs73~|xr4P;KPot(r|oDwrW5MQl_tpm_6R-sx3V)R z)ljng1gudW_uMpXM;2Y)$bN!9!yRY5$fKMw`7|Xrr`e{Qjx3JcFw%AHh_(YCF_`sU zym-N$wR$O4zQQl0yWG8Qy0#g3r2rCr9Bz&nV*bd?k(rRmKaZ>e)^2BcJmIJjN|$|i zXOdTc?J2$WitBtwNu$;AacT4UvyYsu;d$#YYMLU05<13))`$|pIDBghr3QWjsdUDP zYbn@m!%kl`Gu$oQh(x&2sk`BHkM5-* zefH&AL!a5jySkNTW|GWdcsoH(tppK+PYK6j`RAE?zHfV<^djHQAr?aLbbC$!F*{+Y)Df zzVuVC>M5g`OgjF1c{jVztyN2N=j!Y(KU3Zo+sRF#fwbx=fzbn!bYG_Y2VGs!>g%@! zpLcrWfSpw=4Qd{FG>eo%055p83Ln4W*hC|6J5-iu6jd`iyx;aK)QR>v9v{TRd!SXK z`+6~#n-3LF&&x{~7Rx(suj)G-4YR(Q2zv-5-Ifg>+gXRo z-)s??vck^=4iaXaGx}m}QW`--w~*&U-e+5FHx2>kphy-JQXQLbKmPxG1zP{6><`}E<)qUI~F-sCPZjcl`4FF{QHzw zAsVrpV^7UV8sr~@G|~V8(e35 zMbQLA*xm4MqWx;ZevNb|7WvWK@1~mr{n1*_lXR8>u z!HXF*D8B+%;qgQA7fqhBUto$wStO5Q60f9$gl06Qqb^{bc*{b^xb)T11JFlZ^qcRLM;Yl2^5XdY)pgBfWl_Ku!0#~eSONj* zDB#=$(B9F5J{;qzH&qtlTTQRCKm=ap+8lYRZSHGmNC{?zfj=8c-Kx03va&ona)N5L zMr&tb0gx5;E{z`)W!&5nZ-*iqjqWT!MWGwQBa?Y4mtij`$f;lJHc&!@?^Nv^P`B@& zuo+;U*Aawy)BwtS&Q4J`NN}l`{D%SzJvljfldjY^22&PtSr|Zqeyn{ElFMJ;+F<38 zGAYz#{pz)25OCH>^9q2j@a45A;C=walh}|%a(rv!&!1%g2P`NmDq0eYc_jH`p~Y9! z^N-H$IBC4jiDkp=pkvNUqmpq@BX}De{}%I2vmjjvR_}*pF8&c97>NitsjhK`y1)P> z3*5cez{>I^SZK&;!4ub{45a_;Ht$)3ykZ7u(RrE3J~g*S8q*AA2mti5PlTXOKIUvhJ~}>C$uF_N*J;KzaRY z#@z8AzsvjB0u5tE1Ch%*Ruqlgv7BX0%w%<&dE1k*+P*-8PBm<`$_$jjs)NnDfLjuC z3Ugo>NVjj)BX20yWrUWhz;g7Y<9?gP9V}VZqDC9Mr;DnqKj9jAzn|xEG6ViSTZ5rz zH_O~6j&|jLx^s3_=#A&r9jJ5@D%VTr>NV8hrJknGL|1#LzXiJspr4Fpa796IBhcbb z+b~>p(1@)H2jP=I>;@{J1E*~f9Q{%%-0O#9o`R&)nO?*mTKOuW(&s{p;~7e?Gp~Hl%D(+0h{TVPY(L@fGH=vM zL*T1ZKmAerxpI|(A6NUKio$C7Mv|vIVHNJtsoqqZa#+Y2#%#MC}1<8{vQeuH{VL~e_S-YS^Ui=h@#30dOqy4xdo^k` zu=Vfnp*zFMZomE>FULj(Py;Q5$?4{G_}OVqxznMV~I{E{P{S)3iOT|3ab z3_WNDgu3S6Wm5m9Lk}*m@CCWPOOo4>6(x?s&V+93ve*5zm%X$<)2p++^ynU7jYWrB z^L0i8YRmTQywMhD`eKK~VrbkgD1TZ+Ug#i!DBx78$vJ^{W0Syw$}GOX^;7bz17`ff zt*-T&NZQVh;otM^(z%FYJ7bN0|18Hl$ExEUA-MA;E-z6;qWL!N1E(-ABIKAK2@lU- zo{7Nr^&Wvp7vK9amQ3iQc#Z5kGjj8pjN{Ou7=>6BB3B|F#1-FZs%VNZnU7#a=yhEV zvxh6(v^TyZ=)Zg!U6`vVX-`Zvs4#GSyZKJLP@OeB2GF%@ zB09lO`I%zi^rY(?vj*u2@+)lbzcn%-ZrRa&wmlM2y19wDD7sttTf9h-v^xB>{=<*q zVsGv{gM^44Ia!j6Z=t+(!xrp+w|Q9{+qMt>Sm)0DApwWr%M27)+>(y{0=X&XxR zpuf~OyZ2?ZBG5a?=}T-BpQ!KpeZT)eK>?*PVYT~H|P zzB6iSV?#^z$hp$YD_yJ*n4pb+$N0X-)x?1j6jT{Q(y8V4_k+yXBx{s5<$k2I8j3-L z6XW7@m5hG0Y3q_l|J8#k66-TW+qVf~s$3DTWGgXx;2q{?O6^I9C6mauemqV84co8B z%v61mjP66Fh^aVamH3L|tDJ3@0riRFz@tG5d;-pi?CaRAptl4axy%Lb=R)5z3bp$L zeIK|fJQ+-pi<0DMlQ4GD-sW<^VbhT*$zuKejc1A^LocC@5&v!uL)}LdaR~uK>`Z70 zp|bRcJheb3I^vto33d69gQuT0K|l;_4by-({uEf%>Hsgr^LS~(+cs-ziY@G;jNG@p z(k{tq?8&%r)x9t=)l$T%irpkzgP1M%SR#_u#>NbirN>OF=aB={k@jO{G2K5%I+0VU zFbujQ0Luk{X2j6Z`==E=qyODOmvC=$RWfM~iyD{|e9rVEbGv0I>wQ!G!l%OeIR4E_qJ|Kf-cfd&dS zaD#L&2rv*6BghxAZ*A=aK(t`LtJd}HSb-zi zQV^_nK{61`H4UbMW3dr>W)J-xvF3Mb4f;wVz90tS4J`cNs&$mV@7M?<{06KAdVquj zLwkU=Ax%-c>6B3s+$9Djo1HL;bu>l>0(!mZ3WD8;4ASCSQ=t$jL zrZru}ykmC2!2svk{o9qG1}VyljY*(sBq4?|V(rqIp$((#o0w{MBPuWmH1526-Epjf z`S2YR?~w0L?_+?UUz-?d#iCbv-$vm<-R{>5=erM7&blJi+U3Aq;UpV7?418A07^VS zika_G^G7fe#fnc#;}Mdj0zyC?Ktn@WkXGl;UO?tuGO9hS&@SitA*XFaX@FMgr*rqN zE?mr0(DBuKn{61s@~Zaygtg;)zyU#-_kc*hH&9z87$wjCuHAKrMD&psNzzFH_XPwG z0!s@J>&~d*-zUU1`_o`aNJK=5(pyN1z_Z`X zeHoS&mU<;N99@zee;EPsmgW!1`Eb{WWb)DaYVGqraB>MI1x}3(-k0Ffkq2TK{&$`M zrz)LhBPl#;FCwMT23_$8%f~-kVVX`9a%!+KnkBa7z)c>ue4#ai+k<0fxU9Vd(DHY) z^iH=usBaq)G(U#nk>Gd7B)ap%!MTVd<%#n}pyzCj4WW(9eXt`_BcnovdzZ7z%55cS zVzmid@LXM61G101jWY|N#5|T_XFb5n4ELp`|4z5fS>;cc=d9iyP=eEv4$40g2|j+O zNlzv&+VBi4+%FIBAkoDZ87|;*1~#0m^Jbv^YHb8~%aX1Ym}kpsmP5reiSvH*7+8kz z6ECtp>P6_Ak2`dFs^>-2E0WU{%tf5Q58t;RA^(nk!&~xDXvPju22|f-nP|GNScV#iB;gdaH&shl%qpXD=gLK zI__wV0ZFd2v(86`^_$D48-R{b2D>&Vayz5SIn4MCZqj0P{DQG_(Wu*nxFv52ep5e> zrnNctMt$q0b!)l~GJ#KDgFk4HwN|aQ?RW{#zcdg+hr^KySrW5(kNr}f5W_}b9-r{_ z*1mPX`1-@D3a@7ciD4>lH0?(mqIs@M`xZ9O>4mHY1-=R1!NIx!BV43ZSu#?6jV%Fan?pF~fbTbNWyEmBHqX=`IPPJcmD4jq)Vf=b~(PojBSD-1qNtjqYsw z_9xTbteb-6oJ4<%SW4Ysim_l&nX3+TVltDuE{`o${9V?)2u%(#m2K9~H)N{05+yOk zE3t3V^F8Dp$L|joe(?zE0jeF=JF=nq81hQtzR@AW&Hj(w|6jFxi{qoA%m2{6UykcL zmfrC&@#L=1nvS(mX5J$Z1r6g1^_f%3iNy{SUYmL{M`0@8$e=~hs6h7^mN{LZmv48)5 zwMyU-2j}+Csa}&xCHn{cw4jnSw^I4MfW*Z zxsBpFA;+;RPZyzv+J_^<`9fJ2GaWq`IE*2#3=qG+frsGUkzsU_viLRjuy@6Y;Pb)v z;3I&Alen=l36?GQ=Y0n^^H-922t90rua*qux5Il$E`fLH5SQcG6ak0a0_*J9S6gD~@q?}BoY`Lq6+M+<#nbZmTG zf(8?n@Se51S@aU#Z<6wjjvQ7OZ-)cs85yS(&*}!{>84^8h!oJ_=pOp!&=&W9jzBNs+>*`|H8A;t=eNY z*GF^YI{)u-5i@#sCJ{T}{XmB_d-Z^6i%9TaUVx-gMxX}%yaPMe!r(W+t=W&^@9z&S zveZj6GPD&2>R{&mOyf9!#S8@nR*wTxfu3&Hpx@$YerVF54=T@q*n`v?2VVAdpz8>b z_fge&$UH3^W0cujpVGw(S8`a$a~}WxO^yf$_6)o}e`x`B(xwvVLv(b@ITG^c0tTP- z-jnd?A*;))RY6tU8{KN)$LxcIAW&z3^8pgOU;2Befr@UR=8S@CrAE+ZzB08ymr=EH z7O{X=@8dM8BQwfuVdDyKSOn)&?>Q^(1CCHr*&?%njiaNN(DnFl`WTR^0AhDZl|2ZFpU(5eTnIS zK5%3Lbei;9z?~ytV_5ww-9mtjrj84y#~tU#Flea(%!g@d!0HB-e1kVXkkATSTLs8k zU#Y95L$BInzg+<+7zsgI+?ul@l{pcksd|tuy)-cXItt~cem=!V+2hcAK6=}x{aHFf z@+T$A0gM7(c{{x2K%b3C3q5Ux2mH6{o$62CUPzBhO=n z)fwx@CoTE(=&wqhwnM+xIE}v^($2BPhtXCcn=D_Z;>Z9uz~8@rNkcHM(u91u)xC-M z>p%XBCOYyu09!-0EhQ!gyueM~*)drTTk99uNm5FDzMer{Y|IJp^lFkJ7@4}Q-Uwi; zIp$dIRLF2bR>7v0BdSRckEp3z@Jb54<5L`FVX!ROQw?FA?~<=v!>+1Ig)4vL+4j;q zR;$Z{WBfFKdPLweXggTVu1Ki z9g2P``<9-<+DRg=6a*Ju}^F0v|oTHJnm;Yc z^*3)E{2n}veDNJ8ROm`A|pU`Kx1&l@1(&JnY!5q5$zX7D|{> zJ8O5svV*2BF3~#1t3AMa3pKFqPZvSs#m!Euma4a8 z_q)hW#vC20<$Pk=aaCedZxDay2h?_S(rdE2&PKd(6-DB>y7Y%^FTnTA37ZjtMWTra z=H#qbx!YB;r2T~N0zwru>O;VD$Or@4<=Vd(`uv})fyV#J8u%TtNz@?awgAfT+1>^R zDYt1THE=rU0&NpI#t`&TGrnR0eD#MZl2e+%Gn$opE3FJJA(v%U$-Ww-*HMxoaW9Bs zBsVGXQET?xQX-d0)2Cn@Ho_TGbX)h zk2m1>1F}(|xg-@T>?@jQR{n72XxKO$U^v0vYBx*21}Y0ug0ZN>&2G>7BT^)jERLCz z#kn0)gl*HKw3JyPY@kZZtwO8PBLWeD21MO`iBSQyISOT?leyrRul z^HO0yY+uLtPr~zD6>INkX^T~US*A|;}- z+x5xtUwuK`CFI!ng9sEp{eD&Z7wmO~goCG;Jw+1OOZW+#dbe*Wo)2pFCA|_l*XI_> zWjYgGotSC+%9qAPwH-Aq(WWV<*i2>kTV+6}?xAE+7@$!<0@$r8E%tA2r1#Ty)4JrW zzs%{Vat_$o`Fnt6e4)vi#Wl;~W;}$Re?TycZ6S~v(2Stec@IM?X)2JFJbTXPckN=v@f<8@ zi}bTsbm1m=t|UYH^x1@sq+9ayR^PqmjU|0?@XO)6eSE<){+aLmVAcSvHlP86kZq9B z$d3w5@Z=xpC9Ma7V){BA$5`-BfPd{@y&G)8V~GW>A#4!f+8{rB{t*c-l^2OO7X+~& zNDsKdI!}sN{ONFB01_oBB5*I$h&=48EOrJ4E?ojMRdo~CP=o7{x&5ztk~*|afT;dZ z1Q1#z?-Q(pqwFmq1v)9g&_(W?M=3OHpYC%Zy+7TC`EJt27i-3+S)Bv_$l z33xF>uz=3{R9Ns9FJ!0tTwWdpMun0KvLXwxA%Iw*U?ez$fMI>Ez@%ck+~7HJ-X;h4 z^75{ZoUy^qJCS(OHju)GiFD5Hp?;BvyQeedo`T?B6-VmJLY!BxU9#IWT?Jmqg^Z;* z-gu;{ML$i&iL!P`_qkv&DQgdB)r@LxBXa?*{O<7nlFKH=oE;Y+831sxCd2HHBY3ec zkfMRoHvkqu!?WV@6vVcBy@aF(r1=1xtGe@%e?s_<5rAxpwJSGUjp!}nW8c&|QPf(F z-Db?mp!Vv2kQJ+A4IMr*#2v9=Rw;icciEUJyxx+2-7y%6Gk^YY9GKgB)WXnknlj0n zoGS0p8$jxGwdD*&Ly! z+n74fB^|@J;&et@kjGVgR}gj^>k*@iFF-)2ge_61N#B+5#%p-IIiFU(zvLyc@KD`^ z@CYz|5enbC#EEBq*tNqv63Vd;VT@j%8BMqO+fcdpVdh6W!cRNeZv)M$HO*+LTW(w5 zXIDISiTyTOibfBa)rkp<1lgmbDf|Fkl7ewIyr*n2!u3r^bVM?HrnXbi*4+?(RW9AQ zU~W~ELm!Cwv2t>9QixHI!8d%(c%cj>>?f9`bSVa-pAUWFZL9yi%uV4f-oq)JGANXHhIG%=*J$WnM$6@=tuAZ6R?Kjrq9r2c3DKPvgK zpi=&jJKkB_x6QE>OE>Ppeev1g$GZ{#us>-`@ISZsrP~%4=;aC})&hJPpm_&&GGom< z=f&9IsMZ{f1uwggl_JlyYyj4oTYH%(mS&NU`_%c3cIpCJ@>50*=J}c%MX0dv6?}C! zJM*ut!Itu^XPWN&iXq7lyjik;lI@sMPSipo$3Z}Ewq+Vp)ZfI>DHmfex{4P*YPQpI zyJ}~BW9nHTkO>;6?1)T^iKSHgNI)`(v^3p^;$%Qr?rbCh0#NOBnV`Tsrs?r(vRkv@ z@GAq;W#mw()*F-t1#ZiT++qOW$Xq{n!I;$lj0|2!lj3Im|AYK#^MGEs5_Wl0Y(H?PaJSN{=h))uElT!JGa0@gW6 zNyU&pF@cx-v88im-ovH8@y98{Y3pv--!sqkJ6(g6>9ZaP=)uaB9V<*lU<2X5u ztNMk&Z@u#Np~~?tF(ZFbR#RhsqtM3|we{lnKl0W`#y&#US6P3WHf<;dm$vUPn>89|SuA+O4 zGq~>c762br2yHKJ*{AJ*+ZG^LL3O`ljVm_GsQA(bR+4r)G`$|gWm@JXTX<{!UWA!O zz8?VNEbz=ZBfSKbM}gat^nTAXu;t+4?Pfs|3~S&WUgv~0iQuwm$$;n~-Mt`uj~b%s z8nWe@Ku<4@Tx@0tXAuX}svMlYqqD+#3FVH%91%e%MF^`nhWJmbaqEfddTEBxX#yS! z!T1N^n1x|Kl5)z-s&-~FeRg%tMnR=*`H5UVW-PMUdSTm_n#oG{anjvLl>~KY5^pSe zh<4}d@M*}2_3mhkmL(B2X^XHp3f0*?Zeg*BUnBfoh~RTdqn?QoJtxb)tyjU@%upxD zBan*+h#Bx~>FesU1#T=QumuG`;2mI50$wwrBx-_#IjghsIc(Eri*u@Bp{N5Bs}v4f%HDEffW8#_?Sr-p2Nt1x%u6urNe|7;Zf$5VC=U* z-lM3r&Ycb~XVB-hE3G)%>Q!a^C%xvhE~e?!`YAi@BU5&hhV6#hhzDV@BjW?Rxt|kC_9g@b`jGE$fy#!Fm~S#M%L&CMQGsg&RW|B zDr7aR@)HYO_$a$%6rX4wq?wt(o>Yhalufa=o%oegsj|$u_ot3vikrcEy%z9` z@FnH=6S;d?EjD^W4Sn{PqT42gT)9ws@9T`BpL{l|1{WlTau%NZWBiM+)ctrw5wBzh z1aABaRTu)$!^oib8ni42M8zgleS6@Nb~T)U>6B{5se|`T7g(}`I%z8oTUv#u34gjrZ7c5{PrkfQQ zs~;a94J{}TgWEnq8sYtn$O9In@5V?|980vfYf;k>LPq_6W0rtQAcZK_ZUn&E7-3|< zH2H575u|BAy#o1p_Xn^?M1*5*I}wNC4EeO1zzw%mBJw~7{XDREfBqTh^dRD%KP1Ew z2$OPa7XeiVIM(?H!Z$684&+4^Kp)Blk!j$a4+h8x=9WG3By~g2MN6oX43b7bX+&Z% z9guk>Wa9PSl1Du}n>%A9+O%cmndd%Pe{V=SgAl!SlpTTR=69=6Bn0pkcO zTr8}!YEb=UhV?iIdxM>EBJwY+s8o|4ls5Fdrt#TYo{8cFP4ED*GpWC8#=LeVp8#Ju zFm+&Sv?={GWN0v~Q#;TJ*173{ zdnZ~#n*nP(X6PWncJ!Qj=|QoTTh>WS6+dkjU8G$;4G2_#x;_j{nE>fy2{wJ8{OJjR zOd6~+MH)eNbEp8xaXF>wo!Y|q)hF7>B}rPNc}%t__iI<^Nn5*SFif_kT)6tgnu`9iBB&;>YCaqt*pvLp*uo&bu6!FmUK79QgCkYQf=U;O5>n$$s^rSw_Gvb02G9G;T)Eg|)#wRp-^w@7E=C)*tuF;=qc0pDC>YhR7t*7gZ?;8EnAD|08eS`| zP%0frs-dO#kjaYu&@eRvmjEvF#;1;JsiT$y4e*3WbM`+l021OAJ0D+!d-Y%272}8| ziljIj`^o;5C(AxZrBk%Cn4W*(z_xtTYP9OjM_$*>!9R<2snFW&lb`ofa44rlq>@{r zMA78_BEXGwzR*GMpis29-nhlDnQ7xTLa(@9l9tjbxL8 zDG3R`tK1_??aEYONQu)w#8iD{ODX=WO7vqQS>F<+*U{UZPWmUMRD@F2ovF8X3xS7! zLyfCRyqNDhHLA7hE+?+qIPUgP29lu(>WCSLa zd=jl%e&6yxML+-hPm&Q{j7B93eTF8&%7&Y8Yt&{~AY+XW@t3m}LV`q*@*~acru+YN zUhcx42cA49FLalr)tL{$UbQo|PJjZ5!SC4#RTTTyNIbW!PlS zOiEwXqv=g5eOX-F&!hq5>L6@lU!2C1cX=3kW@QSSY}Mx%h5n@%vn5~PvRBpaw)GDr zIjw@?O$07g3>&mdhN_f&E%)c{UW8Dp5@b_WwPd2p;#kW4>4`rrbkS>8H*-|XD6VoV zOxXJttM)2H%q~8@vd#~VL!!vOoJelTYV)Lnd={m8Zpgt}r^T*WyV<_>MM&2IcCMx+ z$F%xsa`YG5+7L`+-9!v_f7f8<+=JVjSRGy%*44OFXiwsXCK6ML>w6kvj?U-ifdlhb zo<1EVY`8f;0`v-(D;u~8u^!u_yW#?cDKIiQ>!hlTip8T zRE*#PL2^To{sm_(6~9`AkKI$sFjcL*{H|x5it-drW=WJ~b9fne)>k?0f0hHoEk{y= zm65bq9WVDXXGS)QqP|)5vm5z33fN}+`c;{eLx173x;VXZK^yC#VpB^B*E1BaTNn~Q zh2(j(rjnpvAs3#{nkhk*k|aqZDHg6wARCx7>O}8sAmmK1kl$@p%C5~9`N47VA#pL# zK$iSiTWNo+O53CCc;arIZl}AddiUw*-`yXNK9P5O>U`&#je8E|SM}K=g`uu%8}oWP zV*}I#6rAFCa2OWzhh-=9@G1Y;qqdNy{VZ!nLbSLuOt>KmFshMmg7+;PG7j|^P8FAz zsbrs9WPJk%riyg z!QX8#wJbN|)aCrv`+(x=P7>HwOxNP=v2@!b79weVzWwiS*&9eWp|Aen`!#*m;%oJ0 z52YGPplKJ375(fgPBV~^5{?ukhlH&gZ+UGWH8sAXKo>6`x350hxnW|NTHfk=nlU!Fps3+XuvHPtin5G2E=8VOy%_+^jIO}R z(Kue{5s;;hAvX=o@VW=#PXR6h0{3N%VUtnLWwa6BU*J=?32av@(JPc?;+X@T3n-=2 zoR({CkT8(CShqVp&y$Ho6SmNF{7QcD75#~u42llw{bbt8KW1fql4`x7p z7FVkb{PpA6bCwlJS|WiUPG!ftj!!qmg? z?UWQE1}oR>FVHXAqc2ww50N;3mdS}@&xV_iK|dJ8RK6QOZX53e|09MDd3S(536HdKRqMkyA+{a1Hk|u@Wz7c*>WVM2CVoXoLIXNWF;XI_T$CXJ)wN0jf_*@3G@{U zr5vWew}Mq`5;e~y-j~nXF@It8H*>BI+q2zg=o#^(0A^SQc?MqVx_q7fgd?H0+^Ea6(?Y|*H zA$8(#gzUVmqR!4NP^t&$UsfP_YUsTY3e+lAP)*4(A=nG$TL8^t0l-}V3l(wwSv`E8 zpGczm&L*20_BI^C#1o$O|)F+mLFodIdlkfTfkfm-z- zp7|GT3DA24Lais=XaR8|w*?b*E*pZP99~C^1Tk{-$&pz5!|=E(&1Rbm+2$iD*4N;W zf$S}^{5Ix_D|2iH9VLz?`}qF;RjBfinafYS3FmiVBG-E#yZOmul(zo(a!K2RTV3B? zoX#!N4t1fY?PG&%yqO{vzHHCegi18SWxEw0>au4}k8-OmQU+4_sAE>ZMBC@O8j&lB zA(vqCHu?vK7;U$_gTr2g&sTcM@8LqNmuDl-Uz?A(`?{AD<2Qw0#aP)3*`kD`363)& zi@%#LE`+l{S99(Q5iKH^cAyM-WfdApImHNXW+J7!mFN|ab&*<`7kETec7a4qL-50D zLac<$mZAusrzV2>MY#=Tf-c2Vv4r9uA(8|(%F3pM9(MB6QJ*8J8l)mE?U|jHlWUps zBt@J!okVEmn3gPhurc%HLxp^=^5Nz$AMt%UrR4YL8s;k9v(a|?jKK-w#rf>w1ef#u ztyuQ*C%WBmZ zVKM}Q*C$(oe>2zFosSsj-n^q~TK6Q>F{+D2Tk#>(*G=N0#c7-y7muSv%6q}lFyMfr zg?%I$&rP7rDM7buXeHcGM~3m9tnLR#tS)C7>eh*o{nHIUmYMNAn03<6 zR~XDuz8Q+m6Ihw60f|Q~XhoH_%Y(mN+%j1I%M0L_T(Z!aVViqY8SHfBL0w%!5$?`? z8o>c;;~Rbv;NvieobpSXZ$55}{;fi$-oe6+IVA#yekjfh$Kt!N&o$Iy3&6`*W&y8I zusXmLB=<#|s>4ML4^O+gB^-7KyG0g0-&Z*q<(N3hb`Jcs+tenS#k*#ifMh5`))zsT zpxzv3!1j#$O_P2@ z+(MV|Dvkjufq_5CAdMfY9rKDPBAZ|D&CKU>oa4>|9%u-ozsqBK!L=htBfz zhHtRh^j%k<2^E|U;~jCOxvZl{11pBYp{t8}R$4-n+Iy^W_~fDfjV-I-GHF_Ib$dj~ z(7r;vL{%god;&sHW77V~`QgEf*V|=sF{Gk7Aq@9Qb?=82clYGDOe66jn?&@In{ppD z|8i%a0CGOjXr+lsMEOwJ5+p7>@ImjCQgz8PFg8 z)nSP}zGCJ#PEKOV8(^+h55ITb@W1cjPhq|x>A%w{qgdNHM~!LPMtT;CF6LQ{6pZZ< z-c6nim;F!hXM$gs4NE$f?~dI-2=V&Um0!C2-#0maXL^j!$cC@r(b2Wx6257Dk`6X$HWt#mH$A^XK|GP5 zLRKy3+L@`0DPExwOV%+6r(|hTNQd&v`6q{Mf_|ERO7W|kWsCW?pOHkG4cBtU634S6 zVz75@PfQq43YHK3+VsiWYypGR>guzGvFU6o-l>*^mamx)8{2dv8mqb1 zU3<=veNFmW;XEeQS}ASp`x&_`r)u(zXjR=xarC!}fe=REt51KcciS1f#znno(mB$T zNcp1gn(k+Uwy22{n+ccoYFIpYBoKijoVCKrkrbn4HQ=tSw4c8Ey*gm1s@m31a&GZs znR|F1i}bm(v=8M|A(v|R*w&@xYZ2e&eSEzcG58wlRIJuru;Jv-85}*=6WAEh$|u0X zvjT9U3h#L-Ner9Je91VPqFr}28ouFi&dxED-Tu-)u!Cw=?*Np1jTM;fc;IfoP+Qdj z>_ND5yl_H0*eU~~s=YJ4@rH|>#`3zX+4iU&*^883fjN8UgNJ$3bk2fBEj&HUF3Jou zJUHN^q<$1m>=&n^R=bJ2T6Ny|TtqTd^SycAR3so}dle<^`9+j8WJ7Ym)7^duH&(9!7 zAr@neQ#0^zEOEp7mg^Ky|3d$P#WTc)j*9&)H~;TU1i4WY?euqGuL2UwP=@w&<-Gdq z@y~x~o`s#u|IInM8<6M}+ZC9Y6LEHbYp{BwZ?*e2W{Qj(!y=d)L+#SDCZU0}YizdP zB>ZHPt8x1Q!SokAJ`n|{2I^1?$a zw9|@rH}Pj*?qiQ8s;if3LN02MH-57l=5#KB7uIaj1x0(jPe>CJW9kAJnT5u zcQk>;npgY58?e_bGIZ%ia2)i7^Ti8u?Ar#=eyG{A!~f3BZ5PFrxeE!C(pDTVWc(`W zML8pRc`!qf1%xgGD?Y%teEQXS{mDzBYc@jI#iQcNCLZuu;lJmB`W$@Pb1(|a`O;fw zn0z6G4;f zm(clm(7E&e`D?Zbf-D{e2 zY~I^8W5>J?S?PKg+(&1p29#L1p{SAe_2X>j(dp8nb|kQ04@YkYRGM7%iDslsNnq`d z1a0kSn^=zzNcw}3aAcj=?~W&M?wZiyD!IUahEcyQ4XRmzKD`1~?t(z?vAHYJ?!>&l0>F)|wP%*( z24n!_NNz()nIpx}e&Q&Hk%NqR^iJ3Nr$j4tQ4I&oAM51^=H1E2D>ZlqpYS8H4q&hp zUOgn+lh}%Wj?WX7%k0lacFgj3&M017*$Pn6@CulB=88{9-}_9Z4u`>eibO}H4oHMa zODn?pIq%x8@6Ul9{iexb=`Wt?o+Q?0G~Pb5ibaRoh%Z)p=P&p=M)@?sm-*4YkJ`bQ zk(_cv`>hew-?^iz4m;z}*4-H9JAF~l?foU6QPS1r2U$s&t54bn$6(Qz>>(5&i%ZyM z1iw@jlf{Go`z0&E%zAP3?@XpS_=_#4Cbgs$Ok-yRn>tqADxW8ztJAqL!E4_8ck#NHRS6w*lV(QT=z<)}qBd^~>o`ivd{}i|gq@LBm5|rQ2%mbT*k*&X@ae*Dvq9 zIQk8K;rlhtI!k5VT9~4yU}&tu43m$vi9|f$$9ig%kI9CGk8fQX^f%5%=2@NB9H2cZ zgu#LY!A8fsb3Tl$JxLBnTU2;5TKr%38|nRo3T+ysA)gl&IY@Y{W{TI{{_Y_GH!iN% z+RbyrciY=|Gj9Wu8o;(LGqpmh1bv8+r5i5dnP5DRXb7g_iqmsKG-8G%tm(PSZb>%^yR#W&_MfiPzl`M_F3bDE-9>ofqwOhy&CV1u{ztDo zD1@%#6Ylr;!&8pXOw|Kq#_3_JAOi_ zs{yKr1l1Y93)6948I_ce^`B+nzw=02sM-rBM_*gD6UgacIp~AyNsj!W#TG zv2tC^u<#AFgb^jKufZI0U<~6=tu~7Nj#y1C7st+m6(4W4`mB@cRI!13q49-iXo!`X z_Dkf zHZ1lnwdtmQCIna-5$m+?&+aHB(VkML7je6O=vnW`PnkAZgT z3xoMKabjlqpo}9*loSb_Jgh?8$B6h%J(e%L7#~T}b^B7TQ+0>)s|XOk54PR4Jsuo4 zim1R;No5f({n@v#9mjC%>iKLc(n%b5wGS;)l2W8G%JHYHv(pL#PD4{>JoaBwRr0j` zV0YMb{M6fyEH|xWj&3A-{-cRS{LWaH{`c_Gw+ATfO2{hTk>lj^G!<-ugI8U(-Z@5P znZmghct{*?J!P9g=U!mP-A}2G-9rfi)fDQU|0(pIa>mdg3sTgVP zyRL|OCNP+Qn=2EF2!X8LuZfk;mnbNpyx=~Fo_2dH=uk_fWF*p@|*_Y-?LfZzMvEAYw-v^{F5gY^xIqH?U7t0D*>MBWZ^e5n2BgZN+Ii4O^Axn11D87|K}=S? zFgtrflrp6p)Uc8UemaDRC@Zf5dMI#;gV}tyF9Hi9>VjU5|0ue{Qf2jXH+8SXRZBJ5 z&)Rc#oNuj(!pO+W&(`p_zYhxHL07YqUtvr>W1GXtGzN9(UX zod;tDJd`E@1kEpTF7Rsr3t1%O>;~I8NF)U1XJB&Q0w7>m^jd!m%C-RJEZ3~hSwdchYA9A02ucY_MZcE8o7?pJ!RSSme? zy8S>R8}bA;=85iL~2mLyZaPp*ss#Oen6K+d^a|# zfr6a6l(4{+D6zQGZe|?j6%sFB6#Tu9`kwdqekuCJ-&*T=<__?i)Bq>^vu6Y0 zS>tm`%hD=4UgCTBixzm`_8{(FoTa&L=-y$RXGNeU3JMDwFU3u$X z{mSO4bZgn_0=6j=8747e{+G?N6~d_5XXzK`hH)yHDEvH7#HiS%>^TxV!n9tm-k>& z?R7M{B?#fI8yh?{&J-{E5n)Fpk?-#D8B3K-5;LI4ewag&4+Z)EuXeNY+LikKpi$ZS z=4>0n5kuQF|Cz=5r|6A6CD` z(iiT(-f>#Tpp{&1bJL;zamGDjZ@ZYzcnqK1kFv^(su^mvG%EG85E~B#Qx82%10@#a zB+B?cm?Qu;DEROf8EJh8=@UD5{IADP$|&fqsBt~+$)@2`WA2_TJgaZ9Ist_V zEdTxPfO1@2j4wa+Uz#BF;$N$!MWFdtA^gu!P~ehchJ|c{o2iR9y2V7#4K4j4rUS4T z0JlYk>j&vxR%_+t)}vcaV*t0+y*gqb^RO_nmkv^RWK5_=Z`7LoMnSho^Q}Jq z$;iXknZqV08tJ!5;`#0B^)Q3U98RX>U{W{~%4e0R^k2lJIW_&=ZBWoa;8(ZQv_U!? zU9A%16B-#sJQj1*u)@tcYh{_S94E8dX7>BJ1!tJC6Uj7oVG!pC>uB+Y9`cS0fK+@n z*$})uT>Yq=r>!y6hgsr;#yhnec$T7RqAp8-3Z7^YTMJZo<=Xv`%Hj$&XYT0mn)%_p zk*rI+zS+e@{N8caxxTSbu9FulD@~d*A@YX}RNuMOV87Vv~cjgA5++GC%2m8`$KKNBE)H-_FuoQEQu$X~8&$ zCy8!p{EXToImREyKA0Xa1_fKqCgMON`sGUwaLfe$VQ*0N4FX5cA?yyUR+`2-Ffn5P*WJGdIS$~b`tsWHmvx-XJM8zQ`(X~4Ta?gsiW^#vT7HGEbmkp zb2c$)l*RpKIc^zxm3R~N@CSAui(X2tTNYPq0*`Jj*0zyS~g_w#~ zEM)eac-%5%XOe(}<`t9vTXkOpKcyMYD`(&-27X*oWlj;?ljQj)AQ1*gH9$%Mb}*8g zAsGOS4Q)M+u78tNecu4gD$8PC@De0`3d|HvKJc*AWgAmXKUL;D;Nkd+&2s4h7Za}nB8{kAO z{Wg$|e@;C9nSh2K@HhsO=rm^$u=N2}8I%`>jxt?cq5)2oT;MrHA#(LOX|pKR==(0M z%8)aX)FQqd%vpxE$cB^P{(4XZ_*a_!_7#jlp;ag+0n)79P~bIME)<`WF6f46Js=IO z4goSGr|1^U(aaZ;{+@n{KFtGtB^oBnk$kEUJx>o6Cq|$ z==*5375ocO%R6*<2VU?xP+JRamq8}V?R^9=biI5nI0PU$;3i;+k^X>1qs$8Ch`?&x zh%cI1&RYmbelYi*&f#d`eB8<3)XH;m_c?Ot#WS$%VeK6HVx9Xcr(kw+)tNsM7)F$R z>pIpjBVfJ7HFS9bDr!N*4UqOg#tce90msKjP~+KpN(oPXZr$FcfGyQ`A??(8uQIis zJAB1_DMC|hvUG3jynNrb5gHZQ*t+^E)9>X8B{$h;eNBZ?6XHcvuf0f@H`s8l*NjUGolm>nbp=I-yKfZPam0OIz_CEVYx z*eCMFBDJxKcf`7|g{#*0VTQ1Vuy^Sr)&>-E$I!_tjWl;O_meDoY zB8Cl-3NbiNzVbO%$x0yX;r^ONqD>haJt$`E2A^p0C3j~gKGhhb%p4jwCoLQmusakzmW&9-JB@h zFyrxnz`d0L*M3gpGl$9jM?SXUIbZdjK3>6x)e`^D2LFL$UcE1s<4Qlo*8?ym|s9ovWZ6I(&#J zLL7vm?T<=5+gAw$&Eq~1{ZXC0AJ85Xc$L3=!r3uibV8F3}5fx&oNGG$sFl`|1`vb?^5(W1RQ=;TZ1Wa0}1#a9``1YtG+PV!K_z&-T}u zOZoesyo*ca!79(HK#su)F{Pu7P~XCoPtAR(j9({lE~oYH^YD$VE{AcfA$0`B+NF{T zy&M!C!7s*eQB{JAy~l1wV~*Ko9vs#KXXf>g~07gJKa#O|DpPv6nk>N>5Lz#s0+HJNU_Q#RN}7 zni*d8>-7paVw;-J#{vZH86LVzVA#xV@=k>E%xQ73T)J$wmI*WM5HOrSh?rfCZI}x9 z`cdIIUkE{fUM^p!qXM>;n);m*+LTnu;CP3Nv1Tv?yhD;KsG_2snsHL1INT*v`Q3zl zJETkB=bt2UGJ7?aS{Ah>F~ZUR&OW41+a{ntmcHq^pNhm29q^6A>$3ba$uK(;i~?d3 zg2gIKv_+x|yFzDO#BlXNl-UfCBn55VU9(O?)i)R&!%tp6iDmpaTp~s5*bkRt#CHG@ zL!5)tHEh(e4tGB-1BCbhObhOmr+AmRhC% zgnaR}lo}PefWwb7!6l=3bR?fUPmJS)Sx8>p?&NO^An7GEph;XS z)mDlx$7dL5{4`jNolBHeH0?3dHxi62W@Fo!1JvGU>;uCuK*I$v8L5w9g!{i)uIHK1uVv>1V+0~D|(l$`vmz;_A`QN{e>!;ZHike6zwSXR9 zc?&(kNA4*b>vqOK6B<^A&bOr-wDO_VY6QdI32k_F9$Vxa8KvPmdPGby#hZs4gSnX% zAhZk*vijCMoa!bJ)z*1?ifdUXi-*UE_Q~-ANB!b|0bIC}s~Q;@sR-Ze;H;}LCLXoq z1xG0w(l(D=1YlTu)qIrm?C^2{&Sbd37S`1X5QXlU;9Mp{B?eMml>Tsg_Hp0DKM!0l zPXepigb&AODt|a?9n^_)1q-#A36M)a_*4-bNdvrM4U7I*=>BiOq5+97gZ*HsW;D!0WT z8Q3S;3E9)LD4d~vj0>t+TlOOy_MnA~DnGBhoCEK07(p06wt-^MpWxs9HYorv(89uy z(Rr5e(#b7^DuhhA01^OTwH$E}a`q#-Bn%VjEagqH zY4(jwyGclL6&xGLM+jkgBgZ}`=Oge{PsgY|K$T!;1wSu4>oDQ1ey<7@&AkQ{PW!y%UieK)(U6fdWvt3*MARK3vD z2aw9Gy3?hxqR3^@<$2t^YYPh{n;)#V5LX8@YdJD$yi{+xY5bePe15@! zn=az!&H6lxyLGL*gkr}n`ntnokA=D9AM(koVw>PHd{oC^L63`IU}}4l5c^0+k}hWY zAp`b_N8b(_U^_4LfvyOuumS4s4QY zu_Rhe2<^d02s=(_n0umKQXg>VzSx)Uh@*pzf(2NY#rR&8=n}wWJ^ekeF)d=mVyacK zDPieC7cl&_CvrC5IN@vNk0#C#-5>UM>o~TQ+amV$c9MvE{#C1 z978!>bc$v{#c0I!^`T8$!|0T^g;m$$`%IUn{;s+;j%Ci;UMV(ZY?t*N-3j%_lSF+Z z)qBkhEi6n#I=i?zH^9vHW800ZL&}Adp4~s+H96KKO-m`wgjy7v=DoKPvveYud6(&B zqwek(zk9Iy@!wNyREo9AZ`!7%bSn3yBo;g6ik^=O-nT#_aB2FGy|XMZxGJ0Ie$kT9 zAJ}>!7TUS$=tgDRl528sp}2F%7?J-8RQ3L)i5!0eL-qr)vsejr`DQY; zyC+Upfq8F=PVpfdf?yRJK8_|_`(ag_pdqCm|J36S%~RJg(#N?Y&yi-|t!Llr5BrKS z^4g!r)DN93oSmH^QW_Q^D{=$lybVerk9H<&d)!ngEt%1{tC@Q`n|>{5R@`etM#&3r zHTs0^fb+h-6Y~pUtbxiCk|VEQt%Z9O-y|+4_WvDB4z?_mitE{^KkKBQ$@={DB9+}} z%Aez>I)~xyz5*x)Q4P2mW_6JL4A=iP}TTyG7@Fsv9mCwI>Dx zSxcn#LJ}}T*bSV|EQ_WJPOcOKi>L+&2c+W>s*-1sW!X#EGx82@Yd#*R~zD~i0y%m%dt_Nv*7(tjfU zd-}`U?>ALQ{_x}rb^XO1#Fk^keK5NnLiB1MBldNBlO%D3syZ8{ve`eXgT+9`b5(PR zy9pu6dDRxEzxuELy1sVpV9nr5Akh(2h5t0DG!fFT+og;&4T>U@)I~=LcHM8BneEIp zUhSOC$Wd;BqZknU)YElo864Urs<8nG9tg6tgO-1chSI+)C=o!e!5CHU>&*K8v2}= zBjY->lW&H<-?eoLd&D+7sQVY^E#+7F1B+kl%{Z6Y8f6~ML~pNw-tZhG$T_!JJLDI1 zJGmm&uzIBvGPp-O+ol$dWC)*9+!uhNd7u#p0P$R(9UcDT zTN1}QLT-dVrMTFTg&WjdgELr2d(kMG7$s8+l$4b#92Ugjrhn@T{0Xvbf$C^{0HW)T z_l+apC@_>h!3iq{*jnUZ0lWo+O8RryV<0JVfaW192e^U4%-x{6)MKU2+jI8R5H*MK z8vj`1+P@N`#*=}bZKjBsm)wTdXBkO^f5<;yFG3}wm zGnJ2}J#u~vvs8p>p4OO2ZiaK4l2~ok=f+~E}#}HWKqo87C5}W#l!RK z-+wrwU&ZB4y3&+u6an6Q1J?FL%UgZq* zO1E8I+u5oKJ&W0mi5kuy*Rd=X?A(^YxmQKc|UpNz8Oa^o!irdV_Lx zG@)Gz1om-X&s4+S+%NwebZ_2+C2W1DOJ&^ZS8}M@)C)<|%E)$&nCr?c(WBH6DCV5q z)Kz?GsHt(TF4q*s(;44A8S|2$noE^&V|}(mG992~%B!#9(H5ezpSFC=82aFpi_iD+ z+~84hXG7TQ^e|$b!VRfOv~H62unTv;szf$y;vKmsDCqv!Y(zq8{L`8 z8IPvndQ@Fh)qM3zAw942grWl_Aw;f`@B8pD@zq|b!;Mcs6@s08{8`L|UJ2viy30Tn zE|0CM+kw%-$E`SlKWD1u6t?VpF(=X!Cg#SO?QSJ#mH+VQXK8!au4TZ@M+c^``~0?) z_LfMVaG-#pV%jG+*tSIrr|tf%Jz#o8RmCrOjfwv(T%Gxfmm3)VKO%s}{}usu9D_j4 zPfwYWN^q;d7+QLB@W?g?E(?sIP8A_g&hQeB^n=W!ro!Pz_PN#*C72L<%z%_*QUhE} zK1e-zl$-ac=Z+S>apkH?-HGjil&zu$BlY(OLk`8a8AjPlHRiTAEM6|zkL81N*<;!wOtE8LHQ9BqS4~8E{?STt=t)hp&!r|(g?A<$ilfD;M zNHh9=Mbvy7(6fEoLs2m%o`&OIm&9UyEnyp=s>RLzZ6+)ve)gPBp^0aae@^6zaLn#A z*ZWHA!)Y!=y+yzmua|y44K~%6OCP2^?eD$oaMSEsx139J8?ZPL2x6TBJ8YbVvgebv zB?}oSPObYDm;i?)N~15O9w=xZON$ZZ;1SDGR`1Wkt}n}n8EmS|hp8qRTR`}h?ly{c ziO#@G&F)%f2o>xXt|!p>XBcuj$7m5ttE+5JL4#J^+@Bx*ivj(?OIETcik0x0GfE!P z{rSKrWFaccMcDV1Hsfz?t{J=qsUPLDI%Yfm=nS6=#wy4)RI2hbc3;J=H0|uw=A{kI zQ;!CvsG_&%)Y@SE3|iy8YRu?km*U(JnTJ*43)$!<6x*7)l0MgHu~U4LxKTmYIlKR@D4n+EaY);;pIhIPaLlyuMzuc2z- zJh{P(nUSG;L*BZPLlIMMtQtSXy>L3A>R&{Fs8xh6*W)CcpY@6*$(Ozhue@Jmiqr1h z(&2cz5l77D_mUcawAP>CI-7=>da$Gms;t)xxUyOm6mRF=YK!ek+ADkVt^VaSccNi^ zFhTL;%l*&n#%*&aWP)DtPov13ObE2OH@&kT8Eeirt9SPHzgtAg(Tet@26_I+z>7A*YtDx$o@Rek=%fr=>{6-7`^ z6`IpD`f(x^u9N$S%>-e&oF9l^5od(_K=b?BB?7LdE~w51Lyh=g7O=G|L35{PV1Pa{ z2}G!tV}f=V4)N2GsHu8K8i+*LP5usCTI)~gfXJv^YycQ0>mGd2vgA)|2)-HJGZ*T; znt{SZ2aSSo;5oq-fE&~TQ0<~PZM5&{JtkK8-E?pdgcE7d7@{8fYlQa7Gwg9e_yRJ^ zJ#dU`C;+5wA{|`>PIaUm#P@{bDv($C_3_fX+0)ky!e}^6FBNfM{Gx&(!UA6A5`%_V z*x@5zHn8JlAddo@fu$v+r%ll7m{Y`U`zsn_P|zGH=w;YF6*S`(rsW47P2Pe;7un9X zncGba_gn2yUFa-)IKnV!r@deM-LbK=F9td(7%Z1jB4l#uY!gMXN?mQ(X1eaWl%btF z@BS_NjG@u#ICtp%W5V5N%E-cV7XK`iQkhLdk2xV)reol`w>KYB@7n0Pbv&BX(h2Z@ zaIPT4Vls(;p~BG}UBCn_z3`3)!y=}nrh)S(!cT#WwgzUn(ER1|p_wzQkd^90Ik*@g zW`HnuFAmE)dNkpV2NlXVGvp<99U;FKgYB}TiSyIHg!$_*R{Lu;xJ8ww(I}g6Rr0;F zS;;ht_twVT3|Ntp!vF3xOAsmxup|5P@H%N>qakOsw`UD5ul zQ==-aiuTn*45>evcxRPej0w5^9rppQ`G8%I-q9un3zaQR>&7&u9dz zwR&bTI}?w1?P`C_#5xxsSQ=m;hM(wpKwYheH207?PnT+EIxrfCH?OUu$q z0Jk)H$^a2{U4o9HsZ%GxwXLn*7@4{TRh2 z#*YT82NIKwiff1WpGl_+Ta_x&y}ohkmGmN!l2+R$wxD2|Y$@TX+g@12y}b?!yZ&1; zxfrUVH4)^quaG|H>Yym^?Ykx8Bw1522?l|TS>YCq*w3VNpMZ_=72^!v19Fl_jRIu* zl&J03K7F8k6v)@kNvo`Hf~OuGv-^YEv(@-Ra7}wR7l?zfI1cBERGSDS)297=+}9w1 zUH#<7-zWNYU`PiaI|TjmNQE@?@X;9c%)%(q>$fYv=^!jSuz=_0=3dkN^W!^HnJ9z- z<28h+M#UeO^6A&v{{$lyNlGW7LD4lEQuHM}ef((QO7{i}qh;koKVb~V42;=~Ct;tT zh}g5VJ;jcQ(WtF*2sIDFY|Xm+`Y}ElL!(!L&VFee*(4jr{4DC#%1&53cQHz8+wnnB z8UI|aUTJNJ^6_l{>|phbzI#PT$-G8P%=M9zGmTogH|-xKMFv0F#^R=EF15V~;3*}) zUS&vOZuvYOcASVU9qB#6;%Mna9)7>)ZxsdL40JweDu43Pvh)CRtd#aq+>nT5@cFSC z8nHy0=;0pizvU~CS?1lsw1b}E%+u914wZN1==kJ)Q@WBj+p7CgD+TMA09I7)reW0S zqrt&QmYbR%zp&!-t-V~LBjR)z@zOSGOjVpLc`SLhX z8tlR9a19*R;}H`Z4C83|uUrc_tIpTM7(@RsfB#WN5HdB-9CK5GQ#stE;8=Bi?p)?c ztEPhEW_}W46GUYBvW7KMSnWmBB*GV#UcX?=AEPlkHugBR0NiyjR{__#bwK>QL;NMI zU2^1pCd@Zm$`LCde+|i)Izc(l>e0yT>^C@k6BN*x=#XaHmF@@ti-;RvU0wtjCu5l% z+W^xO*};ON9*`?vuZDi4-JEtbIB9O}|JZnRxYK-p{tj=j{Tm%QR#Xi3Mfzxby4lzl z*$?D(C&CX?UO%u|9mWzNTcT@{Iv(@-)Z-C#H?YU&z^s>4o+gE7^rg}JC6rK9IkiO< zf0o+rQLIz9h5Xw7BPy1yiRO77xof!S6BK^+-gS*nbW@;f^WoJMhCd}vXzb>B1_8;} z)9d*fOwF%|D#aP{^Yls!_6K3h^at@gB0d7;w22kL#WS3)9FPm=lyXPDIFdo1>vflc zBmUcuA?=YF>W@fsoVTH{3nU;!#X$z4KMq$rt^eVq;Q!vRU?_YwTYKa!zH{Z4PKb#{ z)}vMN5Zcec%AtUU23i~m1%)b$xDjAukayRntRVx?JW!rBi>y0BLNMSh z2L%O6_Ot@1Z$ActnzRui=EF=MGVP3;Tc789`Y*N5b~E>mDy>mV1qA<ZsIzdO~zLvmRn%?&_5d z!uysB&d&rgC@M)^run%{_{G%on3AyM#Y5{?V-=6#E$&5@NY2ydN!K9(o6vpOF^nxz zYFFdEhm5Hp@*osR#!!US@9gZ{1lwIQ!Iy8Kh$dTpC@x^B!6=L+KQ)b_HUU-aUb*OrUl_E}$ zoSk7@&YKndJt;r66h7GYA2UP?i)8funI6JSU43*W3h3@MFYf!MN2uHD5HE!(HDAp# zw0u=id~Mpf!od_Os{3c%11ivHSJ;$xiU<-b_f2E|N=$OimD9+wkO?)06=u#!XVXqK zy0RdsSmYl3)WDGhp3czakjG!IwQafcmwLKvJk(`~`_5B+=|RDWuDrAOu$XgP4M$D) zW$)Sr3UYl7bFQj#--yt~Q!5hs6;U5#tJK}gv1bWh=D zo?0LY1w82?Y0U=mA`;n#gX%JRe&~1hkFRHEvg8v(d@XL8!;`1BT{$-Al<%v)Si zaQ`kak;%bgOn*7D{@Vt&p0(H!_1>VO6@h{nz~@f3ki(^9+fP|M|vISXCv}V89=9G-bqj zIfEsV(RrqlKI@fv@jOy}YcOnB{y{pn9GjXX2lXMr*qlVjqm+lYmq=ldCRB`#^KCbN20F=f7NMHL=CYDAFy z)E;K1U(||xfM(~t;)fNcM9@hArr}F`a_KmO;u`riXR;3`RN`l|JKssEZYU6;YVO~Z>K%AN=&r5N=#?HPP+upzIq*PiD9rH9o0XrC*M`~ zFH;^|@e13eHaESA9`@OmX66lX7L`$TJ>NbfaoV45^rh&&d?ievqDnOC+IFPOoh(P} zm6)=Wy7~!W1-!V*?tr$-6~Vix@-?3|vgJgBRXz_4#ec1J51iDTdW9i@oy&9ZWp0j) zhlht=orh|F`k;0di-q49LjkGjp6*Sb2(XvS)}al(53`Zm&P-S4{lk}AYyxz&B!TNt z!dy?G&;}S)0d({g+t-T(1<)ehEfnKWD{JGefA)g}W04_zzr!XjPXYM{c5DwilDF68?5Ie{_RqI4QJ|;b5f$Wz2R#Q^V zt=|~7r5B%@{cA4l57WmE?27qqLde&M@4}-mBf0>K=wYyl3-vKg0RM%^=1Qgw^G=XD zD(!_)ePAnWjP{ALRUC29yfzMi-);HJka z>|1H3tV`tSWxlJB$)eO9GF*B0oXtz+V(ef+TzG6toaboNn_?j<|HNzSR2AFe-1;f= zqxYr}eK)Dhs-knF7ll!n_{va<`dwJ7F$|_io{TEV*W3@_|FmQhKwq*UC60DFcl~DK zVTIQTI!pIcPTq%|8>8j{j?nQ}k?_$U@ zP$t2g=saszw_l{{9SR6FNN0}O41@|n^CMLetx@s#@lOulUbu_UAa+5hGP?8^=_OX!`otdqKFo{ZW-7${t2rJ95$yp|W*4Nr{I~tLe z%5_ukLT9ThtU#2O-NJR-@)PiPE-zes_U&mseR>rNV<<=hkI2%t&iXAbug}lV$1Bi5 ztHUK>1;Q3aR2h&biJrOOfV+vCr)33O8u{I_`1!jl1daxar>EasiNd-P_ct5u!xp7# z?}J&+)z0BF#GVs|dZL{?+uv;kC|?M!tDgh=V0#gRkW zqqi5?gdnaISlj?81lfb+`Rb>c_mtP%pROG`?F#E+Efu#dr`htYJ&P}T)QMq|RqG%W z`Idt3EMBfVZh|yJ-TG6)_Lx|lm2AQ}`LR#2L@f#-WO5f~xIgoUndZ6Zo#tp*j|gRF z2tL1h<${k(ZIEt|CO3Jj%@*rV8)GYK@PAZ&4m)(bbMOw!3GAzSDtsJl8n`u>*}vLNrZi!03Pqc%-7 zJDCeU&q3HD(R7E9bHr6IHH4rdgUdrFCG+(?NY3*gBM1v$z5;GAHYd_UHDd`xnD zvRh238tCbH7u%-synEhR8mjl;hDQ;hFQskr!Pph z7!;L%g{7RddrcnRXK5!0qJqah{J=mh?~Fy&KC1{vUqGG?BR(U6B5e2`;^-1s5jd9; zVLnJ_!3j935o`QXQ>9wtoA9rK@L)mZ=(skc$~h048mF@&z?8*ccQ}4JEaHuFS{g|J zc0j6y&j~B6Aa1`}xMGk4QnfWUE_Meqk z_k}o7)YU-uQ`6gUh%Q8aC?WLj#E z(IqSzZabn&F1kN>AM1~HHVz?sdBt$t$Jk*;mFg zEXa0gdFHXFbR;nJ?{X_;X2H4n>8B~f?Q&1w9Ph}l-30!ON-W==+8F=(-Fozc3d9eJ z3hy(HsoEV=udOuScD~7lH<2jdyxL-XdpCULzT(TdfcB3gjyI^D4TlQeewj}Dqjc6u z(*>QJeE0*Nv`?dqljuE8t{WT#^;A~l1dRGUluPeCa7Z6oT5Hq(AJA`U+c$oYu312u67t2`b zc-Wft@roBkyyl*3YifnVn&-H+T*b9niW8B(pWLRV#h{Z@-S)0(-NjeWR_IoUFDo^Z zz&#NI$g3&0VReQ0izqfRo7xjEa-(%&-!8Imy~i`cy;hn<4U=!a%Xl$FqDg-E>!~4! zN}6*MT|(9Z2VLT^gQ|e~>H&;@6dH{9^+zpd$!TG#!WL#L5rt2N7kSSS(rqf#dk{{# zo*-SLSx-Bl-0%M?`iVSv(6A^4S#re72ef%C+(IA*zh~kf@xzJPxPH?zRQdMxjxUrl zwmI(>K21q!TcW6_+Ai15+9Se%s@F2%7uyF3-`HzXi+-H|*(p=xcl}#JGF?Y!-;Q-}Aj(zv39z3xr23$)sb^(9qb3 z`Kj^u4=as^dTpdqHq`jk3;jd;OA4lUub4_=c| zK?mD|Yzl^6(!tmEbycsegIv|iCsWF`HxIl+!=k$?%^c4*1n-t@!7Dq8S*wti*Ovkp zUno@37=FUe*4Od(VJ{paa1}yB*7yep2N)r1{bd~JkJr|$c}aneUg`M3?6zEhK8iWU zy!zTcO1nwIXK-1>5d@)hqzyUxoapYdWb;Q79k;e0`i%)iPRL8tOmzNm^VdJDxY+GF zZ$12Yz@R`@D_=Q^X=b)AOcg$=vzBgqMTn8YF_9CP#}JSf9XOYW+0Pg>lf)1 z!)crRt6fEd94GemHPUe*i02A+(K-r52GdlDwXuyXC4QJJMyREnW^j-Z9W}Mb!4nkh zfoi1_NZJE7G*c#%rONB88Dc#rR$-i5r7m|>*D)i)C<$c>73D*cwAhFg{KNP2I&u6N zLve_yZYfu?KBY`3h$bt2r1`LY;JjAJ@Rik?U?LZ08qLoz9qze~Kjt_7x+dsyb3QUs zy(juprBPUT^EWG0?t&3itsb2UTx4OkV5rXC;h&fh)!aY7R#jEC`PYX(5jAr?pP+}l z$9THZ95ETg9FxPS_k5^I%3go^!E^Yo;Zx2jB$V>t%%$@IMA;G)e#QqJEZ|rA-wF$1 zhB*O{Xecq!mN?nvpu;;skjDwZvO%dcx3I9a*Hqq)r-ug+*T6=y{u-jE*Y^I7slrnK zXb%}}z}W5hcVndB>b{hmRl!+gBnkqvJ^4Qd%6ybN+U{-LOYNMifUsF-5I?~HWl9B2 zsq&y^=RRY~v2&tBih-nHx=v7_qw}`d z_mPqr#7}&0U7S062q7b6MdaXnHhVs}dwv(WJ>JUyF1Vjo9*b7lN71!t4AVUNb5*(heKSGC=;1=_*drPROUuYLXXx_iHUiB!s9{fSe@IpIhJ zI=mY-CU^zPl#v7qB%@~dR?C9VFHRNfPu9{JekSVIL&+!7I|tPHgYt`6Evo#t4BMxV^7y-h*@QMPzG7}jGxHp=5KhURy}tjH zYrHbdCH~v7^T9SOYVV2u#ddb)^AcB@m0reejUo=x=nH=Pf!KU#_VnqDEvNi*Ql?0ZiYgHv&n}D^Y<`g!4jkoqPR~buif{HZr_DefnQmx|gK&xp!(P&Q+KKiDEBxGD2Vj>+YP4?Z)NSjs1Ma`xUuUv3&MUR| zk!n}iY#aYft)axiKBFXeA;#|EvabkuDe}n1e}*-XHmhw|j{x<0Cn-5o^>^NL-9Ay# z`if2mUZrg+oJiKBZ){s1v8toM|3ge@MKgH0&(GJz*9QcSem>)u zjnt$JHMaK1lzniCM)NrLd_??G7_J%gw{6@FarI+x1H!iGZ9XS!)i;~Zt!)(#_2~ot~5P8+gYQve+msBwb^jFrQ5HZ@{V$KIW>G&L={!41>yy9Z-F-Vh z+NSlyEuz&6E zxw;MM#P43@3n*K5(n|3!@efAZ;Wd8qzlg%K3$CVjN)}s?sr1RLBr%x}Pwkh>S_IMYk|BXU&pf;KbHq^ z^@!676CR-}7gcdwFzK`XV4`1s74rg?APBs;WA}(gvKGPhfYY*!*BN$2B_H zsD~*}{!8Y14fajvRrglGaZIgDlhC-`m8nt^SJGR<%-ybZl2!qs>ZC5=MYb8JG$ob+ z@j+fpv8E03UnHM%Z~2?a{6_JJyP9_yU6}v&CD!NWsmI1IR-WP6Z^Mg}-t*6Hb8HqE z{0X1Z%6>i(?}Hw3&06gH{dz%0*+*n*FKOxS7@H?{oLRj7RY6WR^_io&h5kb6jS6!J zgB_JTYEz!jnc~06tg@h^fFA-jE0Z(qsGo=x@>QU{=kh*t3AVk0yZAq@!RCv8 z?T>a@H*9M3*7Ow6sWf860ST@MAz3tJ>Ob<`M2-{F;oE1YVRS( zj)(%2*Fw+1LpbS?9LvJh?K&cT73IrUVj-bOQhf&fdVylsD`Nlemt|JzeRM?wu;0irny5}ob zs*N-z!!(UC$+z;sfZb^&Vv>t=WUn*?lNx|RM08kR7HwKbBB{~%dW&v=knq064PYm6$EQJHs0&yH8`x=-U zKv#kB4JL+u*r*hb3ql43n$La$?Bd16#u=Mw--DrmD$7|df6{*6b!iJK9c(%f zyAs0SLVm$?qt2YL=PgbUKB1>sKIurt5OD)$YQ*x2$hlzfeGOA1F){HXI1Nz2-wR#V zm=Q2WRd>^x(2)A6b@nzeX6#Y$GLmaD*8lyRcrqv6l=1Uh(gB#7{~Tmpk(p>>3!h(8 zb`atKGchUCp$4<`bBhcSTtJq=AG z5x=DHH?&|rb?oK$(RwSis6=$Anfjb2$|TpnxSct%OXg1y^_E2uT|9J)v?_c3E+`0I zlIJj07(Msm_5Z@KPxF(h^>rn-Y4$Z^%hP;{FP%%T>F*95{9)NuV|-)uZe-+ot$lN1 zG4f^XJKlVEidbf0E;Y5Zq!khf+`Uz_!-$V5$Dx}oB=cshLgH!ZqqO8(?UC-oI(~Gw zs%2p{84Ga z=ooXtLoaa!Z=3u2{b&qg%$l8ao zVVu@a;zHNVF^a*tgg_hGo^T_oxQ0P1F_clhvqoV;vXs9j%G28_SjwO%QQ3pk|OfW zP*)GS#Sf0X)6#Ih71ZTkFEtIg$);>D-p1&Q6%azsIJw<2Y2m_}}<5+E=O znf^zB2*HWl=)wO-X6<>d2BV6r>;CkR5A>AwJ6udS)@L%*(TBB&p8pVkb!#OERVBG z>-WebUhytmwx$){zI)(-`X)O&-*)QLgI2Dnc$D(*62z8GclDoeQ}t5L;P&djlQkUK z7MN@mi**;ju#3Swc&MfIsjz|UjU)e@DL~cYdh_O zWK(+>k->n6G|WVEQ=xWRxXdE@GsL-(ZN3kOe8I5U#{;@?-kN+v9j|(pZF4lqnRO0D zt;%wX-T-As6b6d3^hPkFI?mDl)#GN>sk9dJ zTR&cmF05uNJZi}$6tA_$qBpzJ7CsTtV7gGR78NFL!?;JoKcXbW$FlyLc2Qm7f#)9a zHo39c38mucDGAB8>HE4Ua~eh6(FIl6wk`sB!z{J;-fC1@EE_9ajb-Q;*A|XK{E3GS zq7AR#ITp@SV_&jL&PX@eopspzHdwXtb-6mSt9ih!zLNQJO}-sUcA z{KbqsLLj;lQ#52#HeXwnVJbRA6KR_1`CABKe1c0B?}yicGOUsI9!9~n0fvZ{-Q4(` zs;W-7i)WqmTO1<;{Mta8W@RY>e+3F9loG9H`DX5V?|LHmtM6MrSnA&#$pG>Z5+|+x z-HF0(;nR9^GI38zr&=nl2N4q;IXO899|)xa*U!__Qxo?b=v<0LTFVgvKPZ*F0yT=H z@TFV%N0WA1C9o;;m4*hQuLxk2(P8F9v=r)m9Cm!kPd*nOVu0hytyv>#Jw}71j^f#u z^Ye$khZep;yJs*JfPqNm=~E*3NrP5z7`%>G#4k;eYY@NPOeX?aIT#QSa@*EXs4bh^ zVl(ai(ORPR`11#)L&K?kyU9RDWCPoQ#4Uj2bqwGG}U0*-YSAI z@1NtdRVPK7djDd@5LXJM2V-p?yg?AnScSs7RfOXXu+gCdTq;2tDbtlRHy=iN6B~#+ zuOfv?A`2&XIiSnVq2)w{^s4Tn2*y}{K5e5fm}QSfvu0+dT<^%ThrTy(n`->0hrmX_ zF8Bz(eI&pD>lnU+B2)LALeez1`R9=w7>^S$9eCSiX6{wxxJQ~wag~tAhJ1LJ$8>2t ziRwr#XpFk6B>pPjN|pgf?`51Uw~Yf!x{2L~iP)5smF=0DFa+zv+5ZV^X5xS$ECX}g zV0?-5G~X50yt zwqO}m^#*#dB>tiTwgz?nTSCmqe=qajI$;XVNXugLnzTQ{ab7!|)=C*VE+L^R<1G5y ztfQY&`<;z{_)y;_w_R;%bt$Imw?Kx4g<* z!GYU{p)3wTGO_b3qkAf{B+DO2ys&8e6%zECWr)#uO|oQi72r%kT0Wm+^g1l?>WzUI84=G=Nl7vVcyo0N#j?7J~}Z@nU;zcW5y)N*>} za>`$^U0Ez?RW?t8=1#k@n+IMR=d% zva3~aH#P15nHKK;?{&pZ2JEy?Q9CAh=HbBrBhfO!rs3oY2Y-vw50Tw2dWC!qy^xCB z+_x|`z!FEEIB3qXhdgBkKPBw|oI1y+ldXO5^pS>|u^cIbc5Ds1Xm6Rk1GQbS_g7JS7!bHTnsIO9W+y zPku(vA~}HzP>0KrNSoWMg_SRUx%gp;wrgI3jS<-BOt;(Ui=@pek6TtCiR#ROwWux<3SOf{S3GQ-Q%&w;%!g_yN6r_225*6s!8&+|_fN3WtBH*lD zw!ha&i-(6Nw^`8QPnCxf7DGxHtYUD@**Q@+fXbVaj{CLf*8Lj1E9dmWmhoGgH+FLH zENsOIF&i_s$%yd8Du(R1-9)lyuxq3a9Wylkj~5`e+Dw}2AvSLQIc-d@mP4&SuH@%V zjceDrsa#T4Fybp$%^!Q=N>T<|L~@viIZ$*>7z#2H z^1QXN^DFza!TVK$&8^?ud5k7J3Aeb8ahN~i1XB6k4W`Z#L{~FbqB?w;_a&^YgQ|=V z8!f^K?Jid!t?=jvZNc*&RLs_q9&E0pM&3ovxgPOLM`->NhB>(d_EsQjTS?ki=yW=! z^Qu2(O6cxGhQu599{%Sl2j8w-zJ{^AJ^RH)i5%V+h~WQTkXd5~+rHD8uSFHNY+jKEHF?c{_?VrA!M)uy7J#2eez!-r9Re%E1n z^FJt&q|D6Bzo#}esUcVLy?=gw8(Z*&Y)vxg=)H5Tkv`^K4_WsO!0<8*CC45fsh+#d zM5TP7eU$3gff+aun?CY2VCmqoJp|v7_~m}o>yw{JW5>V1e1(*lzkHVD0K6WM5~xKZ z2|{&2_PzR>b*b5MSW}Kv13vKF=0c*$hOd7Tz~K%jH@)Fn<7P4%d{bbVk)HIKuC-wp znLYz`7&2^N;|FEwHH-inju8M>gNYCR1-Q05BgSR79X+TpKrE$T1j*K6g+OrG7Ghcc z9{~Z`&%@h?jS8+Nwc_#Qj0|%aB0$1G=;46rg!Lf^1b_ie1_ulpQzV7>;NQQHHDurD zal2iJa!0Q)9CL*JlPMaS3jRB*lgnH9DVA9bgm@Q%x^oO{UL|%ly%R!U)fl!!Wx{Cv z{J9?ip8fZhHy`RjgsA)YSdfN>hA|)L4?_o|H9paux3;J5bwooY>|3Np0qHYqf|UrF zs4&`>sVOH&-bpkVsMyVKZ?pdM5apTV?V`wGW(XGq zSXc-KJtRlEeuRNIYueKil`i$buvGhTSg^m#eq6HOilE$2VhN@pFCA-2ZN_YDNzIpE z+WxW?@u^d*F}UD5M~5tCxa{S{9g2i>j>t5%A3RKVG3uZ~M}gdlEAnRj@HkL5xFtE> zRHv{hrQGJOSzxj$nN>z!dj+O3DRn98qCNt})B4jt0|u4WWH>Tfk;+Rlq&PBC&SIm^ zjx~~4Nt~F$=WnnBU3k&z2Wms|M+^#u&nm5+ZPd(FlZ2@yHi?Px)dngckk<*{o#C2ueC1M0-pIibKd`PkMSEe<=!*Ts01s=>a-No!ijE}fVG1dG@TRF zxqO^6L%ZVY!kE@I8>^j_h=$MGR;tzbwkin=63q#Gq}S@RCws8H4q@5#<@9Zt-Pc_n zF`(Kz!76cZMjS)%IeCt2U}9T$b7^I$Bu2qH!zfLHoR@D_nt)8=)2~77tfFxwc$rRn z3(6b6TUDz^RN@b;H}u&uz5!r#S^iY2I>#?PaF-p|0Og`?YnRl4biV`f#AT z&`~`Onr8M8{H1U|o}}!y^$c_3m*-0)#8Kt5RbBiQjthklHSHVQ*)M-L?CmnI?+#wx zJS*eF?6R%Q1*w1aX<~0fGi+^XgCyE;_-N9@T6R3M4I5uw^F0u~`|ubg#lfI&Sp^np z%jqX)epg#V;$vo}gDpXVroIl*6X&AvDTOyToJ3sz`1){$#E>r^e;b!RyLmOcwNnoo z)Y|D3d(!rYVLpl&^|YN&W9Nr+V~m~cdEHqd%6Z`}=fn;}4$oB*wa^5;_eqc;34Rd_ z4RL2l7sZARRo^ZtPwi6?a)Rxm=ImEl^V5>zEQ`)~O0MsJX*g!8?|jxp>!7}4BluAs zOW%BX&Af3sQm2^NGRK*6yR_U7pO;eqlUjzJS1$U*gu*)OwN;GVO!Iu&r}zcF>M}3< zp6$NvTV2KQJMZvo?e9kc|L+leGPVj#(}Sd_qkJaj=~he|=OM~&3EBMfm8`Wc$p#T4Ag^&?1y}}?;H8NF(Q`P`x75+-PlltsEEjuvu6%g`FwlTn6<#=jE3_iJw*z^78jgWW z(T5qgj`dtOuS?lrB&3-Oq*LXtUo^VJGmp0?d4C$iK6pLhDElG zR8D@LE_brI?Ep)GM=ide#b2;UF9_LOv+37HmiugW5k!#xUa?wT{fkOSRh=TgAHpXv z$u?&d#}cgVBhI*VDJ(pe=5zJKH|EdE$!C0=T~s!!iSv7?H7ZTRC4*>R9);50xN$?b z#^#AICm7qdMyacg~H+s%wanRphe%yrWo>j8&OzVDZ6KI8Q#Z<{N$ZVPQe3U*iY!U(3QCQJznsH^-jFX z>n|^F#Hh*>CCe|F%O6`m8CEU^gLLl;@pYFi6(x&C%dfl3SC6&EK0OJZPzYgv5=vBJ z;Na6xdSS3pQ|h6ToH$;}XTPCL@RxyEN%8sKWYQp-_n!VEq&Re8 zS!>QyB^!@w`*x*j$%x|oM}7HGo)s2qR=Iy-*}Z2{oZaCG_I?rjjno3QH;DO+7z#Cv zq7vH=^*;6O*VcG^j9owX>DzNTAuorP)l90Fz}vL z+~A*ap%%Qpd?uQ38hE-R0WP>jcK7xI+Uw&wf7mpmM5V4BF6}RhXBY!CAGg!9Qi5=R z2J?q@(m|WVr04Aeq_hNym>}7ffq{WUmlxtM!W1M}uuQhLkmLJgAsbu*Vqx52f#dYz8xaI2!H;EC>_y%Vd3I} zMh%t}L~IZ{`r1bwI14oa%i!jR*(%z!@+Wv6ko^uQ4J!zQ5HZoh*zlYW+$|;c%tR6Y zO9tr$VFmfCV97M?h$e?aw{5d7){pJ#4F&CjTtjbgR8)Jr`TAzT-u}0PD?E^``Y4dm zMzk-#zCIoBWH8GkTY4~PKy2&fP8%_>L=?f_P^cNES&~@$45k!lr9h9A_a|(_3_vL) zfZmg@U%&1j!1e)w@xko~@q+@>7FoRj-t6=KTC%OqdwQNyHNLdk4uK?_a8>Wun6J2V z!`dz#wscfXQnjB=W~lCcI(Q`^C+80+7(})KZDstMCohCb5fwVIYe_4STK>J4mDx4N z`^9cHKyyV}9L}~HvynfK{)oI@e>+1#PL2dAte}CWP$>oC5K1J$%Brfhu^gXLs0-<$ z6LCEhT}9sRj5jyamm1cOVCYf-?xetgBmXyZ$^%9Nokwv({!EpH!!|XAQdX~wI%`Bm z{?N~-(@_5l>&^}o1C7LDFYb~;3|I)2hw~2-4P%;OLIYw??Z}@TF?(>- z{gEe>bb0;*ZGcgX8#r1MEkGAH_9>sT0F&a{$jQP_z~=`Z>Wr6 z?5?@mY@x+A^}Clo2IKAQtnv3Rf=WBXcW3g#@4mY}PVtPdQjM9OG$~wZj4M#H|0xG_ zaZBPnj!7pUyKDNsMi{gOlJf7TSV$8iVCYSjekJ|)5&QEkuCg)-Tjzyhu9>~Z=a%+| z=_3-Mf@XmYx8^u$H7AHxDz`qjx(*(-3N>66pZXg4U*=ni?{^-(RNcNPs!(4(t5juZ z`+0wq#myviLyAG8Nl>N@w@Tf7Iyfp!ye{KIxo`9t|XgnbTRSPx7VMY}q?{9nz z4ZL^S1fzdI;!mhziyV}Kw5+Vh^k|7$2ml7E&(rlyn{%Yvt^w&mZhR*v80tH0d22;~Ye)tEhd zYnA00+<5*>yy*PqRp|zUWbAm&QFg-_1ecvd_GTIiC|wQ+$fOWrA*(n zJTL0U2*8N{hN8ENrbR&8fJ%jVK?)yt&pkqgZ;x?;?}8!Bi+F=^jAZ9)3zQQfJP3%j zd_EcZ{M}XTBZc!o*#EI!-WTe{Ukvzv88kQb$XBY< z3<4Bb1N@AO?j5+RO!DZADAf)Oh3PAlFQq;FcVDUA(r3ecWzteTR9bsm!8dl?4>$U{ z;y`NlN}L?U+?n4=3V?SP5``O*zw_yoT@SeYBgqichf=9vJWLvdn+L}sK^~jGZ8YC5 z+kGz^w|rCl{f)$S!qoZ=IVSK``e^GrOXB00p0Ez=%8aJdcDx|9QvBEHIPa!{k4yZ) zg;8aG1Y}+ka`L7AW;jP)Njuq(tmCW-s(yZ#&jk0lew{J~8GFte&t$g5G6K7Vaytvv zzP*NWsMc?a{H7e!H-Rf0Ib;8(jvZUYetoei8 z6PpArmAqXi(neN#%?c(Byyw)WneVo0{5Z~D9oCexcV>Okj_0~F`ST;o!O^F~pSbAq zt#sQ4_Zg++&0;{GYcs{|+mlZ*v=*rjQ<;4o>Ns8GSS1syXP*VP8pQs#zsRO0x`TH2 z;W^ifZ`H_ z*QRohv1+Bgov-sdOmh0Iz8UvK`;@}CKd$qDJP#*Ec)&{K8nb*Urjbyoe}VZa`P~#m zSP(iQeTqQ~{Dp0w#w8I(DS}7O={4$VZdGdvd%9J5ZcI(~ZhT86BtR(O;9mf@0FsGE za0Bg8WU%V8difHE*+Q{8Srcp-Lkmv_unGw}VgO!r^k<=yF&pXsS{%2^wt$UvTHSqE zm<%@Bqi(@G0hNHo2(R=6MthUL_366um5(IoFi?^G3Q`m6baipW%lla2G)Wq#HNwqw z(rQ!4a;s4>babsj1lzX&Cjj;?;GTjvvW2;M;Qum*z!{qGLFN2yZFN9pmucs#GjZ|p z$$%3C#7XE|;CcAaXQb_^Dt~*~mZ`$(;rE-8uNMTNie&2yxqE>($M*%V2I=^I#*2kY|1h z`UI@dX)#cds5J6=fiB>6^bc`OFgsdvbEmis=(6H51U9)&@9S;8Z8^HwKiaI(=f-;t z&-`My_S#{PhElP}kXGHu=x8UnM*mF{qN2)h$2K%H1OqKhQlOx$2`T0%!i5MRM zt0-)CAUnbj)KhTB%`8HAxVxu^TR@-#WDdA0#ke=1LJ4**J3itK-??sSXqcNOkKEC9 z#C%&V*ReOqouf)G=J=jOCS7n~t?8EQbX5Usk|^>bgQoz%qQf6_oPjz12`ClFA{f5# z?zG@0)D0BO^BqD477~syj_$%*1)42loWc592_#sSB$l>3>O2=00t9pVWvwV3gej|o zzrzGr=!iK5*3$8nZ$>zYWa0=PYnEi&)kUreELHtjUDf1=18{#oRSt8C5=QRh`C1)< zz^KQ4oY+2&Lk?gB%KnfSz(lCab9U3wrr3T%jw$n$>S;4MtMUAET2x$YJsAd7x{cM< zqSwWQ%g0MYYI}e#ao%pKT%1aOoX3wFWlm44{yZ_Jf~e2Hp5S~*ii`c7f@PW2k7VF%A#q|L^JX^NT$vZ)A8REoudozLM_2FdD!>p zOIoVtJg1C8`n%(e@#PKmN_%p&Yr{6K8gXH4w}b>0C!Z>I!XE4?%)cMgBUJrdh@bSE zu0DP?BowqYe(HNaU03$-i{b<6m%}z6uI(8-t~O-F7h!jokERf6zr5)1SZyZX-xo$q zGWL_TmDWQHr*(DrC@5fqB?O)z!On~^wo#5Dk9S`w7#A!%?p-(Y`B~vA!9FJbiN95G zd~t!cWBk6m2CvxN9v_d*3_%AL)Beuy&OHC@4jg_o<9CX_lMG~d6}Ru6iM0}B*-K=^ z>N&mBv=dvYruAX=6@4;?e*4ztVexpaJ=v(i=cw$9b0g%ez>=i+_vYF6>^^cz1wrg( zZ2TW#QT^Hlyp_b5nz)Z%ew*JzY8}0fSUor*%XJZjY-p$h99vu+(OSgEqSMnAYgJ2A zzCauWMAj__%+MVybQh9^SM)78zRjBne0xe0l-6A$xT{>tos7PnYJR7q8-FesP+yW` zJdw(}yYc6>P0x$wp2d$DY=?Av9N7y2vi#9R!Iq-%PISJy4*N}hc{MeGu8#JE2QJPt zYQV%V!ZulUF7s!a@e^B@v{6mnNjs$qyW$9wd{avkug4IC)$N0;M~6!2_HYC5d^Kx zk*nKx4@?h)(LTU=9Lo^Q`6ROcEfW@IQcI`2Q?_bANdFzZR*cPz_{bqF{RWydd0Q#v z_~XId(E8)`Q>`%DE#ipGnKPg6rmSq^W-sk8)T*I!dUTl26-;cR-jo${e4~k*;VLJH zz+pA=-F)y5cv`-P0x=7Oxq7$bLS^hsDPA(YqDbh7nF~Wzd_%-7`5QtCTAzdyaFFy% z+SQ5p6)~LbW>42&(A{}2Xf$}qFpQEbX?189_%eactV7Fhe$l71fPs(FdGXklR?Xb@ zEyE<9<{P{SQM~+@v8~T#O!MLkPTHi@-WE;sN8OglU9E!BAxPj7A*Um+EfwQk=J`h( z+b^n|t6!loNMcv3qA~JO-FG1vOfAP5S<%R(mznZkQYRg(Q@SNTmy2U)>m?XP_J(2)9yAHs9=FBD4zfmW=bq1r{VdJ0{ zuT2@3I!C@VRIf~%ap4)o;_^DQ;tKBVJomBW8kUtJjfxe#^K#l$^Xu>r$EH0+k1Scm zyP+D2If?BjOe~nvjIt!Z@xN9!8cu~NX$bcI1PKl;|dK#YXj&Td<^(R0|mIAlRPoG z<$F82uen*eJ?jxx9!Z&$)_wdN*Ct{jL(#Z-;*Tq1c6&&ig5EqvB|Lquljn$wmB@*M zWw4akKA)hu$@7ILDiVP`L>;+4=QxCTpL>2ENYAS6+jwZTV^NIpH8 zC`^RW{;L5(Hvt!tKg<$NtNpn{G%92~^(}D}QY`&<6hoNk<6Td!+gW?(^tylm=K1Ag z7pzPW7b~(pM1%@>=z-S9M(9zo=&dvhwU@8~(R#-oZAKb(LlS2j#Liu)a!+YI{m__a zRQ@>>_824swNzX!AK)B+UV?_#i>r+W>say**Ojv_ zK(Xj=O+U}66yOgikbikiJ`QJ;n>}87AYSEZqLf+JVPwnPUC#N2PyyT*45nf|5vg~# zet6-VwMANVQH)pf5tUWYKjx#4NJl}P4~Wvmz&ZPMqyITd!&KpWo|%x+QvD-00Tetc zbahu6hu?cRgB23QzcJ8y%VMuVWx{Q7@|Fz|yTmAP42 z6p`GB4=)pVfriyw-F+~PFh6aDxD4X% z1w;}o&_LqS$E(@1Y-EY?~=!nQBi=tdsL>a6ayWyo0Cl8gS9XB zx(>={tvV@s2xHZ{&CNb1^z`hL7pDYB6w=wEEIFkC=c5u@QhGOm z;8mlSnlUt;O^Y5{#Ub6*0Gn<2k?fMJ)*LTebWvCL*Zy%h%}GU7EH@FPe9kRYJ~y=3 zbgqx~ED_tmmw5mCFt>*O8~*!y&rthii|vzp-PzUxk`+V^YVm4iQWH0>QSlF=nn#83 zQAEi`B^0af^rmmYGq+yrL;pDSz3l$geZK@DdV@xxGj`d6iWepk53oaP3>gc#S6lg6 z>4d+dlxB#;9N3QZKW2K|l+Qnq^U5T$idl0PJJ7#Kqh>KlgO)DZ?7XR1oyAyGpLO9E>&*q(AWW45J-wLhY`7!NJ?AS>D#0 zVbhMyg?Tg3I!ipF5qol0=J6AeFBh$y^&ZrgKR9cv9Ditg-yQi=6O2?6LzXhO{$E`L zK$J9?JecxvjHa+!U6YD<9qj{u2_}z|-O+z2GiMo)3I8&&%cTg!!Z?~v#F!7da&9nCTruBa0U`e7uC}EIj&3Gtcxl+oB`GfT! z?xXjgMW@VL3TCv@Yep?>r+pJNBb=GOrzw*pGDbuuP@%!I|;%$T+bp%Ngdw}Jbm2Y&TI z9Tc=$;($)Rb{V*W+47R8rQP$N5;@w2ChLi_pq0sG~m+T~*1Uvj6xFazX>_dmaV z<)CBC`1ybSv2!Unxhq!XOMVP}4ATHzI*B}mbG#WP(U9YhI2A;ifueANN(5n7ze3Pord@dK4ExIJ8Klvs-;3kLp3# z?fos%;EusRmahd#5k=%nY+I9N=H~H21A4i_J=H1`c@4X{I23rHE`d5s)R_G;GBr45 zx6ldc(p>Qf32^lC9@u%>id-#So%o#$+u(_GQn#~I{O&#;d*1M&hXW86=7uC@ZZW99gVlFOwHa=z2cijmM2>=7g^$3S4O9M zwoesuEH0nruh$#s8`E?7|3BD`F`{8FYC9oOSy-8WZyo%UO~gLT-d!yLaq&@MnrVtZmZP57_go!qa{m?9+le(|4FP!W=CW;L|b zB(*x_vrV?gT2_jSao ztnya_B+iN=9oY2TK1`(Q>5i1def%I3togd=&F!vkPFIC9`5eoNv$t~joc7Pg(Vn|! zk>p!Q^%vrOyg95~=ic~Z+>EZ((DC%4ZC}a$H@(lOe_FVzhd*A!MdRlkPP(i5I_PO; zo+u}MF%F6HeX}W1w3dpj+I+^h{4^8Bk?rz2CKJ-~K?<+MG!+vm$Ib>w;qAa_*ynox zam?*Dr%oexTAFZao7%-xbX%fuqS#WqC$`K1%QYV8+XeKR3RbSD$M{64h2K!0TO`E< zzOu&(qLD|Lx$$Pj6`W3Y5DF)t-r}@dVJ|{|OS-)yo!`22lXe*O>2Lfp!o>9DM}T%y zi6I%HD>`;f{y^VXN4jZaDIE57|73H6z*^6ft*0=I-eoduBHB@EF}5z{X@U;0Qml#1 z@Fry$-%GM?$6Net&0%9erQUQVrsGO`?ax?d^DbmWW;@}5aQ`92n?<814Dxd|=$rv` zFS#j6KHmDYzub1~c2E8bRRNz&!^8*+Eb`2-f0%P`@ZI`t?J*gugKfy4n`1EYF;K_z zP2dbm#d7Ph;^2-1@`mc-kLD;dKlmDWgOJts${O9ZUvnXebv6mNB`5ADiSiT8vY_8q z2Ez%pcsP%Qt$Bl*a|UEu@O%uaP)uncp*On$VjB_@YWlu)MuJ~6HXWTv6%MzQS6J#- zNZVNeWg%S&&dhsfvG*7MJd%;*>>%vF*7ZOogzGgOF@B`;=!>{B4LheZY=V_}Q%IPnKLEN0qQ>p|m@+-#OVl z&O6;0VfbaM)=yjsHPOeAi9l1`2kasUS|(cL-z-8+7=Hf*3R97I6%2;aWC~}ov8+MN zLeeD!IFI-_md@gBTmzn6I^mZ$UJ4^7CPC-rTT!yZsOb2nL4v_0C79kb((9?{*vmV! zZ|?4{=EopS<;iSM12p@euO>DXc$Nn@c+LDrteBj+%@;zSTS}7FZ?`cXY&QYObwT&|#TChY@D# zQ|ba4GBf+fY;o6{zB;df!iSXbfn~Z9G&j|3v1y(gRhx8$cGQ~3Oq%6tJ#|Hsqr!&p z!AQoF0$GIPYN_#j<~-zTn-Yn5fpDo%ZVxL!(Y5G zRL9WnWcy#O14Qdzg7JzbFh`w9*D#s-4a(~3sxhdbQ@&@LNPFXaO5-^_A}~U*cdk2) z7dXxg!<MJn$3xFQueB>C(EiiDevr(@k^T zh@1MP(C*-M-WR3h?sBv>q0O9xhx2s{WK;*J$#$sU#1WC%D#c+3S6djMerSu|-7;G$jA6Bu;0f*L5qG+gd`@Bwkd zk&9UMWmy2|E#sk=8|n7o#Yl+>IV%_UcTQ#kR0#UDnZ^;aYWD*`iXcRbB{MS0aCSaO zfuY@2o_avGk5s&8!v6a%Rk%GGLoKUPGb^|6Khc^_<~+Sj(?WcU4H69R?7zPWvNV4e zzb_H1-n780GRrJ|db?mB2O|;(vpL^>6yr@C1#ZCD&%k#-`iGw64vwpk1h?h_7^r9N zdWfglQ2Oc(7XlM+DXTo;=y@f2bHYRXF!~q?iRWzhWFrrT*qQWlxCt^YiXKo@C_m9{ zG*1<|LELXEnu-;dn_K#8wInvIgk?@E>I)GKzUgfXw5*-bbzBBC>sxJ96*9bv`1pFJ z&)L}>bE^4B+Io57!Ur75)nr;p-VaCowp}PuA?;e5Uftg6Db#y5_}hs;(k+sJiNhc@ zN6)^XQlR)nWZ0l<#X#uJH>#Zo_AqTIvKfA#zP3p|3n!=FHZ??Kxoy5UL-wx{OuX?o zYZcA}Rp#YbD(NRz6#vfnF>_lEB;ZFVl4gdJQ3$_pAu2lmILXahGV-S+;}Z|${+e{TZW_Urn; z|CPsF$*O}@_d>L6U8W?`TeW4V zWS*02CNyhX{F4i3;J#Acd7{2HT8y8`u!u5#=5TY=+F$k3w}>{HMF?|UO@zU#NqA>v zBF2&D%0Rq^a_C|-hEvMv-W7Y@uj5arsh?*!d@h`{4+stCP8RqZ^7Y>;7e+?kCM!p; z{xEM(pm{>VR~d$@k-C%1E*bP}w>hxWGVVD{AyO>WS&N;FSA^@MGi^{Ut^}xK${h$n zW?XDhGGaYg$}7;bjc*SP>}$d8!kDA~o~SHexnDijT)2Ne{IAjHe8<(fr|$(vP4OA# zvqpJslz~CHw1*PR{ldx{ccdR;>A&wSc5Lzp{=$PJi^tBkGp04&zBe!Px$Opp$1ycq zhm&%yCS9q{&YRaxa$%>x1<}>$kEnkRqGRT*=NSk0Yeak;pjk_3We5xUwOAluU2#U| zrlUhG8dDO1pIBc<9W6ol{P%mbLJpf6VZWUezplv__A48!1vOYnHBZ-b>4!f1Zo?QU&Ks}XpWiHdH!Ks7&4{2`#sgM-O6WIbbY1MD_@FEFW&E2%>%K# z+|ozuIcG-PJ2~?{PQFw@X1mx8=6ccE0u222%~vui#Umu4eBU`YS7c|2zbQM=wmK$V z9s6Bmmo}`sT{d2wJ{#X|pB(x4_{LC0bm>BQ#pc|?F;0Qz>KDhh^)2NEvf1xv|ICJp zRL&8W&rVUT3(_{O=P2a#rwNipN(45Gz>7|NG79$1nPy3{$jC^Mb#0@xnNA zh?O`7+?M)}KbfS6oELx}6xDc=zP0Nv?mFLVf!OyKr$D2MODC2j`#~?qrXYiYkfb`*En8*Pz;pPyX<1XspbXc70E=Rf_8Mz2 zm5=B%oMCCw;Ru2NO(%vZocQrWYndXNr0(B|U95pi@m=K}4GpaW{|?(RJq)TTCJ(;g z4*gb9uRLuIyp5HFm)&q>gxv4%+!t2GCTzJCzG0KFDOUHhmbT<$ON|^2K5<9tU#5Z8 zf0a~Js7-Wz^tqL#q?%R{OJRw>sW4Erni)%FBeTRizyde6`_B#Ob3f1Z#jc}arjSke zZS`;J8Z;EB_GZ;f_yBDxY1p(fHGt4+(ew9?&gD7kECMi~Bas9~n>xq}!3 z&=xHu=kWATlu?F*(KWn&5}TiM^affd@5si=gcHg!T9I z*K@_lkgm|TOP;l)yq3ueAy4E!VsWIIEej{0P7uX!H9f%W42)@$@n}C~uH+9B7;(Fc zd8aP++ZJmOkK-vhvGF@PNvxyQ>&x7&gBIASyu~58y*v+-cziAzTwL9yznZh&KFzX_ zeMf&QLBp;~puO^u+9U2(lU*Z>IN5X(eBemYywS*^F*EEJRF3Yn%{(?5tPNBYy#Hj8 z$frY<39p6hO(;DBSm?NNUuwnb*hyMY$1vC$8`*gFjy>Rz#Y2-sy^Prwbu1CY14k}k zZ7PsxV%7PB#nd0L+9f5I@Pc(PG7sOR@OTYV55Nq8sF*F{6lPi(IwFj2M2v-w*vFyX z?uFCe-^{QB&x+R)%%ioMY;(*A*y1FltejO(&3bmP__9&|b5%^*NZt7S&8Ix*R@lsi zu-ZS_TR|G_D*i{@%X<`|TVZ?+m_T4+Y47MOwk^EwUhf;Tkh-_hSKPD(b~B{H8+K`r zkp(PrWnds#>5E~!BB!?aU24Q>m$8X7Pa%z7(4ABYMH#SQ4?qKBG||wNQ!73q{CLfr zQHVpf5Fzlk1Yui4Iq1|44=#3;qqO!}t)KDtS}`@k&$^F%gz@kq;ADV>BGLd0T*z@AjhNF& z#x^sa{^u=?fOTvEqAKUH1Epjw%i5E*_THsXr4}y08*y`U$7Shb#I9J#q%$5io0~Wtv{{w)DI!B6r@AT;C!-uD-u@leBn2GG4^vUMO)pi^od;Cp_ zj)`Gx^?3qG2V`PLXi3mahRDCWiwe+LaG=){&s2;lJ6atIK10RIhGRaDzRFeup=h3M2MA`DZESP}97h70xSnz}rsVn@LtPWuP&1 z*dKbYw6~P~c@)kwx}xYx6gy_of-uPr0({H&7`lwOlnq=YCBL09d)fn>gW?~ zD{nGG-NWc36S~ci3Wf9E|0XBIs!IplB0A$mfieWD2OOWEpS-7TByA%oEXFOD_k>XA z)i*tj)>a*#S~8JKUfz<{DB7A=@^4~yN|<}2jAmPR?vCxZTf)?Z4(P5#2#)`&_ak?o zuDQ_|U+UA+i%r?Y$|%UIB%FIrg5QC08|_g`=MIq*6SZjKuQ6VY^1hP`(nF8g z11oBk+}&?N0Q~O7#lu^7IhWgr{eFS;Ng_f_L$CD?P@ zRUf_;>?Nm$a%$c-&M%Rdyr0MfY48_xD4s_RuVYGr8oFe!kiV|lfBhWXW-)MD|s5b{o-c=eofZ-ujY z4~y^b6RiO?1rC#7!SZy0_UvYC<@sx}PpbkAI84?JRByt5f!k-=$*o>Fv`$7djGo?C z6=PAxju?BbW zV4Dl1eM^#~AU2TXT^`sL;t^{q|52nWOtDa^P;(9p)xt33U3s}}jb~n}+HPZ4{4Hub zKYVe;|Lo+Kj&7}o#)NWvD|0_#MfzqXdMSw+zIa>Y6I4sztS-Ws@q5`;&#b~22GJ~a zf+H>Qf|{Rf3^P|4o0`V!JiA2qyWDI9wyZ$mYpj`cqpxfEq1?fcj;bV4FXI<c#IxKzKowQ2A8E`o@CzOsYDtfTiK z2nRT_HAE8lFCPtuJnS>oj)4#t6l8xn`cs3(LlyoWL-dw4b7gYDcUJW7X_N?etms6| z`7>YapB+ywBlF(T$JH2>7biJQAN}Am2Zf+4V;w~gYAPDF6j^#hldpQ0ejRix%MFYa zZMNP?Q5GaZr7kS1`|$QK>Ux)T8K&hszRb-%rf7YZCg~y;W7KZz39md08f~a+@|M*ob^Q6@w z?TGiIo0Nc=0%LbKSmLqt@4b^g+zPV(-kX(|nN6jRIWF^CnMTc7DBxk^S>#h#guZnezDKnKhPZDdA*x#)gq@jr1_G9s5?_h&Yf6`P4Y>2Yoysb z{v4xE*v_=diaa)8rdtWnZhvVP~mzx-?Cb>R~?<{qI@UTh|@!Z^BA87x+s68};c)uW_IAqNWK9XdAfB${nGFPk#H?${Dy#PcL3N3|u zpfv@z0odMmr3~S{%IGHWL5N8bYPDv(l2lv4%a%#3X2&^FO35e|tFv)v}d*{B0 zTj`Q`qUI3GYHhjK(|TH^UtIXs9Z6&TiY3)CG3Bu?~qyfTRSbz}m^YCScYBoDa;INMCCD%sB%@5GXIVL;m}|{%{(7`w7F65afQgzU|#X zFny5YKtkI{g0i`}d0!YV3;b|k=_86j%3EL#LrMN-3>gxnM*V2UPn`S%Bpu<$F1T7d zk8mTaYIydxc5-RuC~4oH*5D@|%9kBfB!Zcdfh0B7t_ZQvK|e-X4v^Ud#^HR}eM4v# zY>Xf>R_rk_74CIBgc%Ih)F2QxP!yW+U~DuHM?CU=*7Nr=L&V)5nSg+x2KCArcp9+( zF8qE7X$@HIYZbRYHuiRNsQYSV|14XvFg|(>>!Gshh@L@1Z!gxuLITP4A3u~lR&zs; z40|sGLiD}UkUG4C?DIg_I5I4>Dm&jJUkgl(=c*>mNzx3=Ez0LL20%HY+PY=pV6ndy zi)!e*OSuqtNBM269H`nL;`YFlmykj0aF8JzJYmArhC_Iu6GzQgPz~qlAZ! znO@8I;$A{^=gAJh4u?}b4{B~_P)4wooAKN#KqY@B=9bNj5h4E^8=aJX!+VkLT-oQBL8#(+j3|Ba+$yI*_i-|1tyT4faU1$XhN={1=n2V~?E ztrl?eR`W%Jh>z8oB)Cy56keP+H8L1?jBnV=;S8!)xGW!2<8!W+!ykUr)5;DI+!-xKT2UrVf}W}I}K5hs&ERyftDSNe8?tT^GCytlCou`3=a%0$017;$|BLsjVoYEwVBV4w5wt z*P=+xMqg1wH`{ZcB?AFJJvv(v@5J+Kg>MOP1!lZ?uMTG}_2K=CiRIhn_qukJRt8P3|9*(FuJJIaM{>9nR-o@2Hh(zgZyb~Qx}C=YyTQ9*ymwvIO_HxJZKp1fbIp(7+umoBGs_63 z-`$Yi@&7ZeOvo?q{BJM7*Tr4dg#T-DQT_PZuH}cRShy}KrX2r32z?q!LDI`S))Q4s zB`rtkSe5g1zr7d7qgSWT`eJ`xW7XzZgqzLWXW#YDFsfj-x5~t++}Bo|>&!V2u*aOt zD_1PpfHHe6 zTed+lmrnASKt!0^B%dBvfvTuM^(N;~g6wYKX9M4!(QhA4&+Bl_*r+sQI`J~K#^m>< z)m@&rh$1QdLHa!*x4(;gEtmuEIX-$h8mBN};Ty}^eXt{a!;M;UZr$iOi^ExR{5~`k;YpJ%7gWZ+O#CF^DVU?NQ-Lqk*O6(q1= z-Bwp$51S8+6q$ktj+zGoDXg0;yk&1IKYSA=i|Z&nC=S_{z?d$jy8g4&#~V|t%8mcv z))ix6pz@7GLm8wm1i+qB`-ul4!del4r9dkXOsmGF7vNyIh zQL#QhGUnoyNNRa!l2DT*rEqs{@^62_<76}|cp`i|`&a+%VniE0IPE`wj=TI3jLo|~ zFGP;l;aTO*@ifHuRCH&O2uIp>SmME(7ir{AG>YDTz|Styr{?7dUfD&x{YC!G3jKW! zOy)Q7IXoxch33oVZ*Uo&;*y_P(BI}_5@zC(yIo_ zOItr)0J_@bQm@ihYk*o|bC&qR5t+SnzrMT;&w57m1INMBw`)lhhUGRKanv5@wbDdi zoIJ$!^OrAAVRaF((1|SmIg2l_WGV}gP z%E((7TU0ZJ+mLP$-{T*YRnT+J0sgr|3pF)H5O46&+%~ZRJdl9IiNP=w2>c~ve+ez# zNSq#`f3tQsFWq17f*NA6ODMHrrfIb$FS^t~JT^$T{h;>g! zfWv_(nBQm=Qhetpd!F#XCLtqRfTy7uOd5z04<6c%%iZ@7;sdNzF@A70xRtpo&GeeD z*M62hORZz0empoc?wJ|YXwkVV+V^QOB=>+khFqk*(ySv^Qy)%geL%^2T1MLzQfx$o;*qD_`4{>Fc&0qWKb$69IT~ z<8%ebf(1up+G6D_sUzuaLEgOv^HL6SO3D`l*Y#}StN*>uI(*-G(@alMA!8?Z<85p= zb}nAkE&ogU*|y?0S+xFk`xTzPz@=3j+In-=ghF>@pN2tu&huvk}?iH<)cH-v3#ve&H z@gEO4lN5nOrL2#ye>u50aHZyTep=Poh&sJj*_QA+_>PABedafK@ng@cgDWdpta`QX z-SZ5~zSyt`4!+?D?>vviftyc1S>6Ukv*7nY1Pfi@9cVSNJ*HQhf0|BOth-h%P?DeM z(sHU{g!;X&+myO=Xqe{%VXDVrs&+Dp@x-N`wltF%#r8#q>mLKLu#*nL-p11D@zZZ7 zM(YOlRyaNFg04Ko%A_fFe56c-3uoxincRgqeDh<(enE5!s50JLFRr3XI)!D|2~f7= zKL=K{Cg7MwDvlN!h@r3lpx-Cci4`;UVO5fWAc%`Ada1rUarRfA+dpsg%e$u1rVX`I zy?EV_cIfdYZOO;-=R;g6oFM8ftD`UK6hTr!mAu6#K!I#OwAUZfO-VY$vm*oaYM-WS(w4UHGerf@HU0x;YPMJdS9b zjk#Qn`S_tQ`u|>h(f?nIFX>Lgcol*Qb9};_1cvcI+6)qu(}dA!zD@?LDJpaP#v`xB zjs!Kaw96v(3c*Cd;2>--&;0>8&)rVOrwulb1|6`LI&}Yr(3QktB)qD;3ak(092luee^}x1=nWCQID_LIAjM?X+)8vG&Zk{p` zM6_z$F1&v_{)9ytg`4TtjilFUFA0;(HPbrZnK!ck3Q^_w>W$TkLv0Ymue0-u{0(Z6 z_9J_nKzQ6C$830C_s@)`qg=Q6 z5R{0ro1Roi@X~CnO%4;KbSX|jdl)lS7Q>$s?N}1r){0Gv+yDetITO=IpYlJx?@>PR z9Pu<*Suq-wpwX18I~#UCV{XP!w$n_JW(j(%Gydz_zjwDu(4^!O<4ML#Rqf-QF=+9; z{WG-Tpe^Pfos(PUtNzQEGhEX44Ie3G0^Tp(id6D+MNcOBxQW;M+le7tCmu$x33$p1 z#!C~^a8yXbaKgywa&pOJT+=Hyo2G6+1fK+<3B$gnCtcvvT9g3HYjhB`*Xs!wvwYt) zZDb*w^2~j*DN0JDb|JF707ZO<_-CZ%x}2_FV%qV(mZi!de@dMKg9-LQ?)_RhffTMJ z!Sj|&|ARWxo+Iz3(Vi`f>o}6jtBluz@cPw)PA(0Irt3maq^0*=bXGaES6K*{lDu!! z)o(s}JH`;Bsw(x4`j)+GGuk^D0s+=Jn>W#>XgF%)=z6W~+6St3Z1%TWTHnbRG~#wz z<@HeZsQw^|M`sQ*TghvCH&#oW#_~l9BhYs7w|3?5qX(`N)C>&xy4IY%BYE!SICiTj zD7^k3$aSGKcN|XikJUdW;?OUWNzN9(+IUZkqL9&6b|Q(>|D10Oa0*BX1$eK{FSoA5 zV3?6-E*Z9g&o3PAG~?0bBs4w@$7)u=Qy2kE$;!%(L75QJQR+Y4Tl6#jLAUT#w@W=Q z_WaAM_18!LeB>1SzdKw*&jK3M0A%k=!}y^UIoasAs>v zp~G&D8(onLlMyog04zKROinNyAXg6ogL@rrm_T>~ws^e!{OxeT_1hE4V*-HDAr;Ps z`DdwpsL-6@;o9l+LE)#Rs?%=6ggr+FMn)mOOHlw)R@8N|&VoQ17P;aH)+dNd1N9TK zLvWoyb)mv|r^N!tnSLn3M8-Y%W)agrY&r_HSaJzq2_GZ{m{9m{5upw)agjarzP5n` zlYmdGdBqZ*M-=;wtP!p_IKx7KKo;I+Dty;q=BusSqP3naEEx4{VQsC*x4Mtt1STrv z?N$D57Yj;NtiZ&jtTMdq6OqnqOu_}pd=~HKs|A(;u4#%>O|HtuUWR{)1 zcgWsZ*?VP+ki98{L@K-NO;#l%6Y>e7&Bp$Fx5CWAa~aJK!1^1|vjIkSs0mYDHa>l>iW-!%M29uxCQ*Z(|JJ!QKPk z&6WcnXxFRjES{k{d$((B$9ra9{VuEXW)w@@xb{UCNfqS8)>g7+4e{Bb;wj`M70K@} z5{aC#a)(50>*Z>wdqn7|k?)!3z;$m!WzW{npJxxXiHFqI@kI&plie^?T?!F>Z@lT z>x4>s;R$uHyl!#sOF8sTMA&mE(0#T)|8JvZd8ad>A^XY0c)e#zP})uDbAF1alN+2H zM=S2rMemQGU%RTI|FmNTfd`IYoV%XI7VyT$R{1lTJqnKEOEtG{!`L9Y%nuK1$ z9b1;t>n*8!Q}z$5wF~5&(AJutqxq^{Q&T3PMLXFoJjQpIcUGepwOBK|JFhEczxT?B z)lG^ex@WI>FKoF|afrcOMJ=C;l0bbs*2T7s0ty3O*VH^k(%@KM%Ix5V9{7iLLG(-n z#;H9`Cr)zp$OAUaO0q6_gGcEoWkFs-%opnWv_xv(( zrd5tAW_D7nqEpXyS^jD--We$$K>PwLtb?Rs?_h8qbW<{8Jvb2Qi?W`DaB_gythaC% z*;H1hK6Z2^s2m_Yx`>x6XEXQ((x3gQ;tjs!s?z_}>L9#P@WTIRjQOHQi;hToSRHjq zQ%oO_1wYId)9@(Co-ZUiew?%1qZ(of3)&yA_HaDDI0((-%nc~`_2FJthFkrM}t|BiI?{` zDsX+^_|cnaQofY3FvZ4j<~JnhB0KK&<sS3ui%ZT5In&TcK$e_A(j$#HZk<0IkR zlFt+JVxvS$C=^DqX!i+J&2h>FLhVq@@*omlfkW}SNKyQcJS#opx7xEb?}KS$cFq&a ziQrG*ZrJNum)cLz3+yc@&s#A(@m*Y%-RqbjRM(GxS1JLqr=GA8?E=BA=inbn)& zt<%+KG(S`Kvh-7KZ)IbMox}c1HX-(uq2H9AKX5L+8JwMvSYvtfgb)8lQUd=6dmPd% zUH(bB&=kpr-n&T|2RY(v;Y8THuJ`3+FGXL=p(8K~-J_cnx54AY0aHUquJ`$a|@FCb;J@;c`(* zk32vM+mW7gUHsQOTUVjOb0Y;Dm=`QD;TXgg+yt zh@j&Dod?u~f*4I1{HYLk=~AbWZ|Y1PWM&(ym_MYbm_~mx@FtGzRqIJPtDJWcCa98& zp}-bU7Pw<{^Yv^1H~`<@DVdoZUE~aU)y#mL6I9wzK@X@D0;7OK_CIHOP2L&rmO8q)Q_km?uMB++Wj&ek*bz$08tzpF3odn1{gQ9hR3{Sz4;t@>8=)VA?jQfs`iF`O!~O;o3w( zhY&pRf$ELTZc_+@|Bo(fJ>f@qA{bac9sCTk{3sAFn2Oc4`zfOHYd8ZRwMrkbg&zSn z{jV_rj-5S#M>&ho9Jb~qZXrq=y8%nl?QZFRd6Kk&J=Yut#u+9n@rB> ztqz>^kO@itKAP&+;jSB58!}Dhy!w=lKY1(^jT-P2_+2EY_5Lld+8F7R-$lC9Qp;CT zUn5f?z4XKFo!(0CKR?t)R#H*D^#md@VNwDIeleZ)@jNwxOKvLHdOcbn{qh-x%P8Bq)+zhoHG$kQQHAyjRdc*#VyAoM z`ZsZT(Mlywl|`nteT%K(it<&K9XBW{@TT9Tkk{qB>nmD&YjM5Cx0j^0c9R-iC-u6t z)HPE#y|<3S`Egwkmx)#TIsUhmE>8TXs`^Jt-bz}LZ)KEtBc0}MgpK3e#Pn$MVqWNY zX7}mhTo9<@FS)m_Y=tfLpoa@w6 z3GB--H(iB#6W)yE74F*j$VCppad5>RAt{hBZ$hvWQa%K?^1j!y-`IdA{nMyznS@tV zEJ3jJ z-l?9IZ%$aU#H3>^pKPOGQs1p)2%_R>aA{OpI#Des_>+5?*>Lg2#Cb z7z}-nKfy#9eTpQfC8s?ZSRA0G0CX<2vxhh@<<1XdSDMfEDG)ab^d~-!$};>i!$V zHU+3O-i|8wF0uA6RJB)=4y^7N%&=t%;Mmg!DAe8>6!(+sGu08pu9;J-{Dn(B=Q6oP zT3c&zCl{(Tzd&D@Zs2_0-G#U~+KlY#9uW=hKk9d)Y;8)f{BiZ_=WqX{$Hg}0dV4|5 zu$=nc7lq$I5nV~5i88ku6<|KmJsJr_o!JkSbRd2fX%bY#;yLXUqdS}q#9H& z^It0{NIC*G7)|Gjl8IGc%R~&x_qn^uetCNBR`*(Ei;k93(c86R+QP)Ra*EVt6_3RRKPx%8D^P|PO<0XjCkQ@cVp1_IHy&L&MJ(vh?}yYkQuZ+xP$iSiDGI+- zU^_lWB9nflSug*tx{YM-T_UBA+%{k_v@OL!Rzz@TgJ34brzHLN!=xt@Q}U;Isj)iu zZ@h{m99AL_G@^WBAB%n9@VBM84fZ4GZw8?!oV(&wSlQnL&A~m_efOoWX}%CV0+DR+-2;3ZTl(db$%@`5Me@jdEeg| z<4tIDBal6`;mz5KxSJ7Ey3VO;;Vu{)vdgc zQ5+S$Ymvsk7$eH;qK!#b+c=Tu665bCY>KJ^irmKZO^QsS-AZ(CNZoeISGZ2}eWI0E zitMVu>lB47Ty-Y}J;iWbK`9o+Q6>-OOaXV7F$(h^!G1eN)C*5BPV71n}iG9`1Kw$8dT2_+UVKM;IR4mdqv6cp}+BFZt#F|>z2E! z+{zI5gcKP3pMol+4;@6I=Hu^s6QU(a!ybNk9&-zX6|lo0ILo#(Y^syvaFhpkJ|&-d zCu}`P$N)eQ0|Nu(0)NNDAGPG>PGK}a*BU-m{c@_tqTM$t$i_~-eBuv-3KE@H<9N++ zAiKspzCgE}as-RWV)f5^M9f-!zZVG{ZQBOK@y}Q(L}02b?C(8l!5-Q`N^T(#V+UZG z-ImQWdc+_GxJV}DHSe=T>|#xB7_zWQ2eBf%W$8XhxyA&i*HuFv7g*V=KokJ|rRo4c zz!h>uL(u7y&4;#^RN3ab#i}oI>U1q zUw&!xDz zCiTJv1M!3vrh%fcBQ!J=HlEM^zgmF3A9wlFdN1*set3fLhO~9?0PBhH7BfO#R@uY5;d4TzSdG=JLS{ z_G~B4Q=hh^iEWc|V={UYvaX`@D0W?NY>e5L@vP3)K@uqm?(KuYOJikq)IYp5oD>!wKwawYSCxp zVli#;;`X0?D6P57|JsP_^_Nb{7?FtahHGDlONhdDwo;V3n7=9ECj7q3uK)G2g1*>U z<7duzwGbg@LIW%=iYF^i87FjzWHiN?v2dU2C#vE9vAh-h?wOM>(WGTI%*yZ!GoikUe;c`LpuP^CsGs9Uh$a%4SrB;Ex4?d?}+JwsAV$ z&RS(8ilh#g)>|E|T3s;r*Kd7J-8jL3lEfR$`=1b<_UfOK4~RgV&s+(f^kRc2o17_2 z#Z1wEYzT9w2()euM+BPHnyBw59TfVJsI4T|(@au5CDETcH7I{rlhH#E18S1qauVSL zouW$ZWNHij-sl*$_1pAspU2L~=~3O=3Rfg8bYjEeRiAzuaZ7{ikKuJLa_Ppk3h74Y zBLP~}Y!^~&AMdziNPh~gpA;;LeR=~?bsL#?kC8lw!E;7_OEBw|qoCCQj z`7;Mi+KwrZ9)#nQlZ}8_(GC(d2e%xNtFM=cMl|@pE$;AtqCQa1Y)5tGYVrQ;Ay^6Y z@A9}Cy!{qJObDJRD%ixb5oQS%eVA9PW6k_HtE+R(ihns(lV3bjDJoD*Xa}S1@as*8 z_{S?X;p4nx$+Ad7-B7P088-XCme$NFo%nt9go|<-!J-7dQu@C_t>dA|(++}5+NPzX z%7P3SHj5H@L0hs563dn6$Dy!ldHDTcV;nwSY?xvUTq1$`&HLwnD$k>l&H_~0RCdz; zHc=(^a&kz{|8JZI)e@{$9feOxuyav!u&nDtXOg?pbu0eUAAa(`&GO+)xKG5DqnXgQ zhNKpSZyLvtHwjiiRGNIa1m4!? z5K4UP*A;!Sy&<7nTixAdyqDN;NtqVgNzF2-saHw}43qT`_T;MRG=#o0?!xh4iR+=Vyle|CGF z5_#1P3x(ueNjoF-=~X4D(Vf#oQ-5i{eRcTz;N_ZY@T@|YV8`Be$O|?>3igA)w?1o5 z-JM6ZJ$|Nv{^v;7K-wk4sr?BR-DvoGG)h~ZKScu~r7>{dQ{<_z7A>{+BpJd88-r*W z+QYEREbC$uSDyaULUWR=R19mY>n`6tnf4yjIOi*RrRbsDb0?l$-J?W%_N866M&q4( z((HMN<8}}ziCsuET6h;B(IkqZ!~Bkims#_M#{P#=6KM+W0vm=i&ux6t+J{3K6?q@j8Fqqo?Gf8F<3CG3Hw7Zl(8KX2BGo@_`It z$9E{q_bD{qbPG+C;R*E?A8~?RN-L)q3P$mBj_TAkoFj1}!sfoK2A5ZXfP@ck$E~`8?IOt+wRZ@)#rm(2&ap)yI(zaF~6t-uhe^`Z0 zg2!B4#p3gDfNmj?zrK#tO(h6VM`)Fq6N*-Ht_*$o8fh@({bqKcQqRK$i3 zyU(cA))$He5!=iER9hbYF4T1r>-P-GoyV&_W{zhqN~YGUpq&`Me4S6PdW*ev!Pcsq zeBiICHb$)_(P=%<c+3%pjU}LAQ!HuNzEd(;aD1Ex$(01R=jhD5d zI^x=H)aD6{Y*1r_v#;140JOPQr=UgS%TY zm2t0_aKmGR+aJutk~0zBhCl?$gXqO{G#c%;k(r)82T4uAJ3TK>p$!hn6t{$O&2qic z(TR*Gh4eZ#hdblY>;|ZH5F%&^I9`2g2KFR49Skf`Q`%Q1L!x@LPh;$OCRa3=yk5#4 zM<>xTC)1fE+#{+kEy(w54?*LJ`4066u-$FEhPnCoXoz3PYm?Nu>B)ly->=F zEUyUM0hS?O7|H0mdX`hL6U4Ln*Twm*nmUnNd@)Y^<3|0IDO@q~O@4mKh=B>#$T{dF^#excfa0jMct^g?hpplN_!*C!u#5`k(NYP1?> zMo-H6S`&n!tJJH!aNhE#ZIvXFq59A#;{7(KRF&KLZi#uQ0BCANrpZPn90Vxg! zr*8J#QWV)?F{xr?S@j-#z-EBP0AghaFAE0qRDQE`k`HDq>8F-P8vV>UJ)z4@EUan7 zibHN<5P}Q1s~wE--k>K&x@kd9(>`3Nx>82_kY6&Mok$ODO0MVyc>%i{o}pQY#2s?M z?niJRc?TWs+=s1E`SJN~p6~HLNtwX`lN5;cnI2#FEWh(6=;R~_DZ2r{jk^8C_~bf4 zk$u3?k;@Ir&{WfUt6eacu!jh`Dsx+0dFl|mn0SQcP3PcFtT=c0lWv5qbdat~VUB8+ zo&E0*4QS6hg!I!u@2RztXX!PS=ARJx~EXU7w%8!M*X#K0@wJjp0G?v6_cuRhr& zF*%Olaav{AD2OE5$k*|TV5|BW|LU-Ho0&#CZZm6h9bJ=_BYm(S;WczNUii>z=E~CA6H~=L3EH+|jjx@ncG~5kPdqPv9!z|=hiTE! z`epX)lo8$F$;cS$_pL8h!jY9?;&Y|Z^u=gbV$zQnyd*dnrKqyGgV2j0x9I>*?;&{u zm(iCR%I<>MH^a5IRsJSehUDFTVxhBWe;p21a!`yXcQ5!;d@?Z>O_%!6BylZ1^AL1` zd?RCs_p8tdcvR@8&-^Ty-A%WFVlzAAYQRd4f52Az$;ZWg>5+hzIy}CrFe_Gq<~8Hm zq)9nlLj6Xs?e7$BY}Q>w-|xTd&)Qr@@=ri+59+ey)m0pIDJ)AA^HtB_i_kTTSzGY@ zo$gs*h+dq}UYumPWGrej<#55ajL-c)|5O&wnoo!S|NdXm!=Vu$9l@TBh-(NFlo+2I z*;3sW5)5a~?oQG+TGbI7F83N);hE{?5W);$sE(35sgXlk69=+=Q#1f>eSWBWu`0Jc zVfRu{N(x_|Se(1@zC1|@u89Wue6~iwWz4Ii?^}fIqb1bIOtCfmAOF1j@94cG2deR4 zilsH(KihIs;$(VqmT3LmGmL$ECV2<~_F_+MON{j=3h!v?w3=i}l}pl_3>AMA zJa}cjS2m5q-5U408@r8P{lJ`>AMuk#CM7}-ZmU^Kq;^SW(9Wkxz0SMxZDM<= zc=_K&_G~Y`Ay10XD`n0hFIn|O`=9SWSyLRz>=`y3x!;%}5FeA{)*CXGsn65ws$vft zZq%4_3L8mODrWjr%knWW;B|42Si>vb7;D^&hLjaHy^}w$`7$H5I3dpQ>!owmAjNgB{+#pN^GpE(+i(!_X>NqY*~@qK1|}x1%fAmFe+(vyegWG<<}b}OAsGSr&=Qs6^?9jQ=VD3@ zY`&`oEK$jpirnwImqD_JY}*pa>JG`3}gHtk19)*L8YLjVajS ztKj^lEPp+&u1G?X+$EiX>@E9{-Dkrgwbu(&J9yV42|p)HOjD8YBx5SN6ba=xe~Y>d z!KiUuSsGJ3f><&-W$L7bbhgV5i>tN7X=;X-wQmsFYx>7FmzG~0uOBgYyz~vos}zll z+#2=G@%ZXX)4=BVf?5`e?!4(R=lWN=Xj{3w@0<)@O47y_CV14aad~pROvY)dLScUw z#9~`O@5DCDKF&gT_0z74L&oh-lyl>W@n)n^67e94|Kzfb9(GHYcXBD#|jACC7 zLJGLP;}TTA-;)fgO#1yf{7+$bXD*6ghP^qrel|VD;9Xl5=U!~kIseZ6#EHl{q%?gH4 z`07@b){al?ncXktEK0_{;kak5Z>MOmvkrZ*`!wuie=y)p2d}+#)3K8ep&G%S4*9d& zNZRJ&^nMt9@4YK#Q;vAoM4E{y{Ra9!@j2ax&RoRvg(#aBI`NP|mnsNLPGq|Wa2$}H z3;}Z(l)R>&!Sg-=EHR=Uf&&xO(8T=;&ND4Yaj5AD!@Po2KOyZUpfPp;trMc`*;_;H z0uhe{j6Z+zqUIzWMGrD-r*eo6{`$a*lHansyIW1gXji&zS6WFwVyy|8e75EkkQ4#L zO$B0Zq!$1jm$c$Xt$*1r`_gf)t({8LqbRTx_A^>q2ddoNe|pqga85#_9x{DFZ+`t zr?b^AxV<{T$0ZT4#RPtR``}<1Rt9y_u`02I)hj`a9Rls%b4Z{8pjy8`lEDlN?0t}w zp|k5|VVy=2k&jmLR$$z4U%8y}jiAC~_N%uRgbr;le1#kHwpz|#Ib6bkzksMhmE$Ve z=v$M96Vh^_ZlC1Z<4~7JpaL~>aG-JG^QOyVO4mX4lA5FX)3355dpIazWr2#ST z>cR!FHPk@}w2_m|1@YgbDhzwSCZ9c5K=sbZbV6Lox&&))$fzTp8P6_~C=l8t+mo&u z+@|}6``VzKigxgU`P$nxCZ3cZDg?t)D)><=#>DX=kKKAOS7|ZdPhyVUeZ{>RG195= zG =u3+RHn}2!JeUsw9e?_C%6?@hUrA^i)>WYsDw1t%iWT5xMFHc|f0Hu$HGI*dY+B?_26mloeG)6nyd^~2~A{aLP|R)E`e;46rh z*h@L}#IK~!64fZgIK zYN~ZDF3)=7Jf@FBLp`asZg%7Wv!=FAbwFu`KQn%qn??N0{v{CUJhS{b@(!OO4Eh_Z zl7IDHL~0*Q_d`&R+z#mbuR-EOGMn?)=+9fC&-4%KO?YJYR03{q&Zf;=pi0{+8_s6- zcjR;v-BJFLg;)ubKcsf=e{PbwNB+TSp2>eUL>z8TZ96dxj~>A#8FgvFbOU^&k>wMG zlXH4;BHfRp)n0W~s^+b6@=fesmWcu!>g3hg71zCEy>3OmmKE-Y(?>ra&kj;H?V{)JtywJ1rscC zx-v~E=V1&*D++YB;!1vrOqN$Hua7w~6{jb$-dl*>waPmj+1yM+=MDx1PnWj`SaGC4) z)BFD4sZ|mG=#jdDguWW{GjfCf{^{1ffsz-SAI)*IjiemzR3t=q3J7#tR^wUx_@~L9 zwG|@AngRPAHCn0McoA{y1}kT&VEMI<#uqb_S1qlR8j0}2Bh$)4=G*2=s55$y(7=k!lTGZ zCmS3AN%Py&a&4dUpEBB~m{&ZIJJ>}Z)(L#rPyDKHu6(dHZ+JR0d!`FV=h>r~x72r~ z2)RyusB?^Me<&sM;82lwDOhxj)ERRhxs7Qd*L?F%wGuB8i_RT2f+sJGIPU4u5T{!| zL_Dei+r??`P`>JIQBC*%JsE4p5fQ)LB1u4T%_Nmj)@WILn+yQ70{UbwVzUBy92fk{ z$VuEY^uz+$DvbHeo+NXqC;p=>)Gk1Z>k%XZHmFh~S}c@`*t`S|-H;ni^CDy*B*E#m zDj2;`+pnXlqphTG#m-sbD&JwFCh1l;8_4sVa_1=8geS~^jr+IQwT~iVYUUWz5BhCT zGzlC_rkCF3zHRgS`%&kE)0;H9FIb~T&6E+&7!3y85tP&c=G@N|S?I5Dx<4Jpz?pVz z&y8OxR(U;j++ut~%`cYK?bco5j`j!IJI-`3K33>biDhJGBRPbKCmEC@FJ?A3SALWv zS$+!6K%+S*RV7|%y%zY=N@**496WfpDY2P`bog?3RQxYFagn%3eU&NY`k7~&O**dA zco^Tq$bWDdwD3457@2ZtOxYY`_R-}Pdkkf@)4U?i@gvjL z*Lk@xGPT})XVmwVog1%kM1Vfi@mZi;G~stHb;8EmLn8hhl&=+WG3XW3({VJybjZ!k zY;sj@=tYG~bR=9(^ozT*dYtdWHOj@zmooF%_s*ZfUoWqX+I37D5G{w8+#d4w;3Jgy zk|3e(@{;Y1V=XD04xGM{u}QL|%aU25>7n;|Z|KoYWMDHW`LQn@NQ%+r4eoab$Rk6njxb?->*@lBBRIe9l?XrrX;5Mx z8O=ih;tZG}z8!=>AIQ|o_(1Gp`p=&~V~Z5HpKYFetjJ0*Wm8YQWfX7UTR;5sChCE( zS4+z>%pl;eLOi+P39|?9H9RosfFl9J*6Nw)U~%xHC(N2G5zC`3BpHcL0$pqMy)QUO zqYl(l0=fe;(l82@7KhjDART}EKeP{t7=Q^P0JN`?Fbn|bR(SW?D{%}PVO_C%#pdP6 z4}fNi+;tkaQ10T$#dJi0geRKjR{zwkz?auz=TeZYrqaDA-1V9eQz4lyZ!fFss0UMO zoN(RFVp(X@#tgN$nf)9HOCbTNUUH}N*8)$syMSr!UhV^nKJsoMnVG=7A*lv1Q*dHl zSX5JM;v}GiVFZKO3?aq=AVLsDgOV-44-RDZC+uWEJK{Felmb&SK)q&>EhtE3f#C#4_6uDBV~S zUAfVwLvR1GH>upYJgU&?E_s3yct22jorR~|LDHn@}9p8jBNoh#VG5b3~=Nj z*8vS-NR}!fU|<-8@KeQd<6c}p_-ugUL(Z1~y$Q<74xnq^N<8>O4sY}#ycA>@1fULv zA(O2mL+RTIKWWKS{psLMu>n{XQGOtpA+*gQzk!Z!{ZR$7Kn`A<4gx(SJsLWG{bq_~ zI8&=ew{kGj@Et=Iyn(7@*|^hGrHc_-1>cSjJ=8mG4`AA+CBI6?C+Q; z-hBPXr+jo~YBlI0^NResWvFWZ_4T^-(ozqZ)5>H_dJMmvK9iH_2qlp|zz-NKVjE4a zM>MHdi3~|D&&2BGV{mEQ_shP@YDAh(j;p#@R=2sB3mJjZbH-Cn=oXEnNo0p^FkiiftG0CF5OD_i1?>}Z`fb$goIvIaLE1mCdmsb z1>os;j33$1DL!*a07dZ_Lxwpa-t29`4-Wq3=e1Qo-&x<&@_QBg5cB0~W8SZq$3iBO z2|ncH2_FY}@XB3=^S)_%sON6VulZ@~;j7XV9J0Q6>FaG9KKk}s0CaJiL9SH8%tKm4 zV~qsX#2c$wE0U7+(a>r%@!u^+1sH3D5#t2BBj<_L|NiQoRI6upxf=s$4u_>QP=i-L z$mzHopaXv|{r%!N5juLc<}DUk(x@m6Jx{S4BlVOkerhjPp!uEzX} zSL6<5k){`D%tX2oR_59b(HYGN+W!t{eZHd64#U?QK6c(qq&WKETH{4WhrT?2_1d+q zrA^tdz)@Mjy@bp4zD{TcKW+9;;1zT({kN{zLR{1&s$wd-rD-)cY|UqDP8BKPK$!KC zk}XXGyss*^nXTojWFM1fY|Gs$o@m&_ls*2<%5c2=MMV`);k(##uaQsDmX?*xSGks! zYlEaV=$+Sp2irs?n^|@C^@%_pF7<5Su|J~XgQpN~USVlkQWbTREUP}|)RTWrAAJeW z{%)T0gO;{=Or5jh*YiGA8U0r}|1(q|lf_P5O1M|S|3b{N3@XChI%CJCmkt;m3rmJqL+!qMF0M@X9+-{{`&nMt9J`;6SjHFDfr=gNrwU(57}KxRTcLmDPnCKf?% zVSn)RR<^9D>aroR{3xrR17h<(ogc3uhtWHllz#dn%g$r(Q;>KPq%K5&5byHspWw!we1HBhi49}W z_mUy?DWWnxnZ01x4)HhSPcx_Z?Z$ngWzy_Ke;re%nk@5yN{;85n9Qjp^N0OgQj`#>ZNAs$2mdCn1sUs~mf8B|7oBv*^ zZCdaBT1qU1&k0bz1>0P+|HfixPZHw(eR@UC#%JU=?u@!X{_@qe)HAd0^1oev#^n1x zp}nOtLE{ZMt+8u{s{}V9%>$v(ynQ;G~P_<1u`xgQ#>UAWV_>a6?a@KYNgj^qo@H_bK%sO;J+p z4c#ZJnT_kXQBDnY$sQLv55J5q+Kx#LwBE!Tp>T*A@!jCP62oc0lvF!e&cec?pI<(x znHW?nO5$~2Ln5D!l>D;qO<8v(B=A{81gHQjJkFiRg=59ubi$I7>V?BjqmK1HcAWWk zvcn_i?hneaSIzZW45GQBmoF9ZsZD9*%CqR|)Pwg6kOoCa0z~X#h`12oq6{lHJJp;6 zv%jl|(PwyRv%mJ8*A( ztn-0Y1XMJ`IRpuOl{uVy3duf@ikX2Cxbbm~ZjEw%rev*B>COF<$|QRh-ErGNSM_FI zwdsQp$P@(jgO%_$AR4zIsPF~x<=F$g@XxQ@etllFP6gUp05C9c+jN3N8-DJ!fIlT~ zkwR~fL{XP~hu4b0Oh}#&y5XY z0zHuU!zMpx6)aLLjI^8918UL(d2)mEUl@_ToI=fF*IEBbT&bPg=<^&l6@MZS^h0el z1875#&k<@KWns9QpzMuYlo)M*l?dot&i|5l1JCwQ)U?e{7OC=P{wNiCF1prl0A*Z1 z%OvHqxtL5mK|0sI*RO4{f&Mci5ii{FNk(0rZmsMk{p#Cm*CL`eI`4%iU#-}52yv_I z@}?vEf@@3HweoM(SLWih65YB;!LRc}J?0Cke-%3~b7o%#jjwq4h^Uo@9#0KpdCt_8 z>E`=nHz?!gxRpoV6=r^aLS6Tq3&0+8$!`@Tm${43ouros54MUrcW)J~u+X8ayLMc$ zuf``;47Xkz6Z$v)+C0pBY$9DzG5IyWrTuLF?QEG_`^D@bzgG5wrDQ7?%NQC*nkLZV z6@RB+IwiPU&=rVPCm|<*h`j>Kpv>ljl^F+^SpV_amNyjh1n7E5CuiV|n)q zw~x>MtVw=B-3osztoy5GdgJe`W^&*}yVqme=euNA0z(HCBA)!}RXyAou#)k*xW!Au zu#_A0_a0!J$&aqo?7rvf9%tzC?LQU2$5w>z8<)nHxblzL-sNTVyYhbXuGK0b`qGD= zn%wVH?S@*T^>1`@;HyurJX14Joyyn^ocgGdhHt;os|haDxIl zCS<1EX!P%eU%N?pcXD3{oa^{@b_!w^y{$~~qE+F?ON7PM)_yZ4_cz(&G`Td-GuV{W zZ{P?^HKlG|oR1p&}V`kng zIh5~cda!m_!*~&ypnUsuWAHreDI_HatuLsS=DkU^K*3K~=Cavl-z`FGyU?wbMF_z|x+6Pn>2< z+528F=`vCEt49qJj}ip@i0t<9L#2Ixx@tC2UXCb|l#aU*GVL<T|B{OX&+-J)fVLXSEfw%`X&dBKm}ExzJoLgO3$`sT4U> zbB|gW49lAk`yreR8!&AG-H%7Z-(G_F52y=zi%TQ;%SV)5xVqcdFhna-qCbY%iH|5_ z40Xrt*&IK`KzZ27o%C7p^2aaTiZ{71H?S2xgNFs;)nI}fhOYKRHbVR`3;x^q4nlTv z9;Lr$9Bdz4+K`gdjri(5h&}nM%@xBn=T0~MY5_gtO_TQNcq(qTaLVq6lynE4ll%6f z<}AfAi|OBY6o`?whAKPGn(sSEKH+9tLz;t)z`lNF(o*9ac~ICU)&}7{JKCc-a2$H` zYDe_O(}!-FnR2Kzf2r)#)1V_Wdv8fnOraXBBucJy&g@stHlO-4QDWvCaLFPTd@V{{ac%sFW~+9fL=o0W-F$0gqg(Mi`7OGx|JOGH`lz;HK$)JB8J z5&y=frN(Zzr2tyWWI69w;?+8VbrSB+x1wzqY6E!=BC)B7e{f>g-|%G!bFvaf;T$&D zjKRSdSZk2=d`Zh;oMU``kJdS35jRoEy8ZFSU&d>Mgs}U7zX3&n>TMDvf_{c2@nJp0&z0IK8tV`2?-={_=7(1a^qD{5*wG^Px-<}tsEM9k-hI) zE^PCW{q+aeL~Ob#)FmJ?{wo=TRvrJAi_~D)+@T2%EZPEu85tS*z!JTL1R3O@kEp}| zIFa!Ct@p5uVv3`f{8x3=Zj#bliXYfWf+iAE2s_y_1o=9^@jW3Sp`!aeUiCJdkx$N zEtTSFgPSL^8r;Ym1VZFPs0Rkn)$!wI>j{$M6Q_d7%??bWJwz$FO@D;1h(`wMSRqN1`16kF2~01{ZI- z7mx>teo?9y9tqD}mqeq#-jssp`Hyg;k)e9Wc zN555YGFaL;IB?K%*0=HIt8q5ky=`&rQbI*MEH~6)3%URG=QA~1+3MtV|IzL1s`@b# z1%+0Dpqe6u(Z&|WKJ)}In`pY;!9pExy3$dyWER%Pzhyn!53GP%Ll9OZNf9}>Uz0s# zg30MJA+@@vr{}}A^1qd+H3U979hEyHLoD(>K0-BZgP)}V)gzG)a?tVBH z)g??mklUGUnKa7rX$e>)+5~GfT5VG0Gq}b#R(5j`& zYlzcAZ}Vun`v}6iz3-qZNUh3{6B{>-}?By4iy)=BGH6Y(=#cehlDI;(NM zy8|1gCPF`^UPh8Gn9lQD;U*#qBfdPir^h9NXMh={$e!6r(rub3L1WTb9+*$TCbbsB zq_rgzWyt+Bjph5TK|+yu&#LUOP(?5L7O=4e6XU9%J|n!CSK6z4(6X zU>ZuMxr$wgxI?@|;>V2C-Ig=f!bO-w=v8r7mrm>Y-ecNgJ=T!97eapXhLXIi_}};P zH8-r<^drPQ7#k<#j)PBQY4^@tXBln(9*)q2DH5O`Thi8~m2dHndM`i3;vk~-Y_wb$ z(9S{>MF=+II$kz!eX(cV=;xd$?D)p%d8YXoYXxoiC>No(Rn4qX><5d0Q_b7I%Y1@N z)uMFpI8*r;=aKwQxKTpC+a(fX5%J_IN&L({%e2tmtW7vwS!0S@cv~sO2ew@5* zk{9$>^6^=z_3n08SKs%93VjLUF7b1QK2Q_biDMzuS#2Dgr==rYy z4ulYRaU`)acya!U!lPGM9526nE4YyL`m-sn)u-=f7u*sD@5|Ry*Obi@wKLl3q@6e+`&P89POEfS%3-x{6S5zsveJ(D>)MG}UEV@o`gC3Hp9SVkZBkya=G5|3<#=wW%hmgM8S_bCOKUjCU;7dn z71fJ4-k?um>w9n8JmM$bDUQ+79V9IZm}N5QHe(&qpv`W{EWO@@=~H=kzUGyMYPPFa z@=E{Dkr}yO$KYT1E%hWirq@b%EhFM<7PEgO_>aC&%Q zgvC|Xye>F_()Fx+VUGT~r%@hVArA%Vkptw zCa12BQp(u8F=K0@hElz^7vKu(kgeQ3W_&m&kyZDTLRS-t*xzur>&6ilge-P9S#wuAV&tsA|N*{%!f}8RUw_~ z^;s4`3t>GUVl4NiYw?S7P5i(hiDYSm02)H0VDBJgqWK@aEexNKs~ryW1OOz;aL})5 z8_bi-!6#u0l{?JmL+k1xcu-TH|QBWH++aZXk zAABJ&PO#%%Ml#3&ji_1s!zOqr#J1}?BG%v6w}r$wu1^Re{r0(!kDURq?f{226%EaI zHFL-kM$)Aq#|KPrNU_QP=v5>i{c}=bB7V+Xu|}$_ucBht!&-Ln02noR%DRA*R{(kn zQuoR%8sdRZVR(FaZ@kia5I%)THHHXc>Z2Iu!>DRW?uhP4HTV@s_`ubx4k3-exP>!y zR|LVk$;wiOT7%~y6|A)BWSlx%fPM)|O7{HtVU+sXW6y{fi#jT%&Qlt1qC=pE!+>_! z<9f^F26|xQ(|MmE<05v?K=9by|j489z%?kYmbc4Iq-qs~X=`fW7{nz;eX5vpr z%UP#jn_faH;`$ww8r_~8!GFlPc_ z7H#-emzmzKLXC<1+sphr;(qZPJQ1HMXo{B$@IL)JH><`wIb$}dJ{s5~-1|3=uT3Yq zZF{9_Z|j*|Kug5S=u9?+2pv*Vc^)!e6bp8EvS#_?C<=YLe8U>%5y4!)gm|njVKG*2 zJCkgjwD3#s+0%1=&8af(3 zu|hgB`Dg!tw8*$IKvX4SUrY}$pibd2=aYzj}-0-5L|T)R)J_r!}Ygxfa5_@ssuWbVD^d&~M8 zUu;se>t@~P{CrIP;q+;AF;#m*liJLPN`Z2@x?{1YUv{FI6y<}AFdk)#JJ0q5G{jo# z*mHh+O&cXjn}mB=)lUaOf5aIAikvQ7Z?gx+kM7o^T=b)eJa4(En^=0*-9+Ql>LYLR zHB&Tbg2e4pk;!)U?5`p8#}Fz<%IkBR40#LJV9II}t}M5Z=+F*Fa62u8r8=cB*}Jr; zEqdbNrSa#iY@Y9LqHBWM)Y(Zm%J4Q$GOhc>bQHw&yHS2b+Uj=;)Et*b;F&u5dh>C6 zi@#^bW=Ysuq6nsCmng4;x{RYEhpv>qow&qPtcJE_xpHBd$|dSrtV-1ozu?lYg*0gV+}q|hK?kPKc1S)_-g@8g zd)lRL>*KB36o+EFez!bdbgq!jwX-(Dd0G*?58?ccBE{tb@Qk%_5GM#K1P+;R+;~m) zW2E>4U9t))%!f3FR$t9nLLp1yYO3u)^7KEmo7S=Cj@1>sN0uYX6^iSA;+OBEVrwkS z;+EAc3*Y{y#}Pd3Wx9cq!uPzKu^H^T!WXl1G@I7CTT2N}td-0ig_2|Pj1pJ}pvovfw^a~0 zhe0EFQJaLn(A0l^F##ozp&a~s2TJ%`ZTm-a_;HkfZ{c~QVS##W0D?l*dy__9p)n=9 z$1@mc*QtA33|Rct&cpXO+YBX3wtu__Vc%Hi*>>53P;Zy~*2g@R9+((?LK7jz66Z_T z#iTync*FrG)u)=HtyY}_M=ev|)&5kO)=~WJy}H-4-vtLuN7Q}4+8Z zyu{ST?1#>bAouYPG#dbITag>UYH6Y}O)Tj9gR_oarh7Ft)PK5)$Iiv247(sNm7q;7 zW4+tCYc4-(;`7=t_mU69$%t~QZJsMaj+oybw(i<z-kN`J7HOhY=)_wyCdBTNor zH29Jg{liZOpPATbXEg{N{X&Jwot$(j0e1b4*`HmaF`4+{ zWsaocUOma^+HS=;=Fd(M%)|zm3M#5J$gzeLi%40o!sC;zaxd2*&%CfutNJBcG|pME znW@q_8B6za#&e)C6$Gh(S(l9@jZ*rV|KWJUr7P1(43+ve2bFcUZ2?o-l&lJo-N{w+ zlNWK9KDdS4gIbl9_As0ox2-f&7q4wf*m7SRUqFNbNowE_wwe0%pRog^+JP?uO0@&& z0u-Uar>N26LEngt>W&vb>pM~_jdWXozuYsv+P#>gJIJ3vh78&g`jB6v@8ps507vg# zskLRJ4ox@(7*)VRr6)9___^&JH3naG%hCP2$vwbiZiF7|Py{-J)cYF*k2L5Aw`#Nk zwhv8<)>Tz71l8HCz-4-#qBOW1tU`1fXetHi9|YmAN4#ROC&G*)VvFZ-r)L_On-MtL zXeeQr{t$*4s#XO=Hl?yD0D}QWn)OMK2?<(*gBUS!Yr}V>Nc)#Mrp3e9h8q4TXxp`k z2OjS3cG@6oCZnjR_=--ZL{-#s03282u|k1OBF&`IZR~nOxariIxf67S34jQHFIYQG zgMkQg&tdQ#!+@p~vOjsFp&m$$i4D1=wNDbZ!Wt^Db%`Wy)Do=4p;$@r|%q0i6 zkXsQMU>8lD<-#X9{oAI`xjVS7qT~#VVrw*9ykg@&s%HjQCP5v=H(F?DugTNGlT|uxasDuzMaJWidUZ*zB@9f&hP#TT&?pibJl!U^Jjn>bT__7 zpSJV@(R@hFf?1udZyf(%uk5tM)++-1F~7;{voZ|V%tNK5PS!CT2lwtS$TO(pu$IpF z-n?OdU~n-1&P}rJtdy7RB65JzS(vNx;rf+%fwuKynBx29W(zh+pOFV=@96B3A*Vi< z%r&3f_f$=m-PHaw&lG;P%~tPy0TeQ2h@$u40S;UU3lT~@=muXO&e!9(Kz8az-_LaZpBTxn*+o(HhMY>$ys&khUfr%Iz8QQ*`^p;@M; zOuIgGZRXwLi-J$9wOR)@9$24aB%hZ2hC_>tS}iJaG0V>j%<|`n=81B%MQO0Wypot7 z6&P99vMeI7q5l1>R-Vz)YqLtN>Oy6TF&sI-*Mxl;GFm|fuA3XdLm0Wyhy}B+hVg`Z zGM}qCreLfY^dc;6mJ*{HY6gUW1=y7NO}i`qD);JmPvt!*l6d-I1X1rb_-sOV3`GzAfw0PKoB87FJA0bYIJZPRLu8d>hX4dx*yGjLlr(as`s?Yef*SRv- zb|r&sqv9-#d8W(1`#x+sM45mWqF@VEIM5H+CDD5xGyLT!RvFSrn|GtW_p9IDdNF;V z2qiNEE+b*+{swO1kxb#_&!2ELzloVl1wfb(`?bz0i-Qhy?k`lVzAjwwKd+m*z&U#w z!~w4sn-PZ?V&^{BX50qRK2-{;cX>9}?1EZIPYV3@&HbjL#IC#g?c?CKgzI>lD zsg(jGm_`aEqaC&SK^Ub>yJ=;D;UN&%12v1HF=1sX(#}AEsLA zpWnbn-0uFG4mv;rV*+F#fnppX7@1`KD-1<=(ztZlgl*|WkSie%H;hdn)U9MhGpkx` zj{@(mXt&vDs8jzheIBwlu?6eU79DX}5e~D%GGlC%yV6HivSv0VQ8ppL2&548;m?LM z{^Y?P?&@sZ{cVo|!R{90x3@oRVQzad-;trBx3ME=(-K zC?u&AjZPjU<7J#j7DlFkshLHDrP&@TmGjBS^BvkR+!x$z^0u;~81z&bQjBXN?(sYQ zoA^H&lB-;fPD%7X%(cB(m1;mYUDqB>cv;;-C#$KS!x+Y9?c{KvGV4hreYT6OVrMwZ zY)&6;()TxNY%uYs$J}qkaV_V0mmV3v_k26<_ti6M!M;VcwYATMY=yd+V7wPyKgxh+ zb@1@wR%NOb*L9mY{2EOu-PRLN1KtYAfCx!&-~zQ{t|dt^WXZ4j_;%(z?KX1_VKJ6M!QTXdrW2AkibFY`KLfER-`shW?Lp z)sHs(H>x>4Z3az9`N59FV-n3ndCM2ssvp&Z-Tgcdw;)jtg_xQ=Q6T0P^q7WH&vtfi z8h>=^WTR@3!LB+&T+B04Vs@8-MTt>=>T!GWj8=e6@Qj)l{; z&9U|=t*H&5V62~Xk!}H_Ci@40M$@JvaJ#Am0h_cW-8`v}d#(qKwYj+X^VZEkbhvcp zibI#>)DM&I-CzUW?g&d&dOWDB02HnR714@Q1MGvK?FAN)FIJCN{>|9VqpQ%Ts3%Z~ zSGdfapL2Lz9d3Xp=rUm6K>OnVXgQ$Y2ed6gYbY>nfP)mI-++ z1xn_FIRIpctlva|NEa~f8lScMm&H@+gB%mc_X8O;XfhQPe*y?m7noH3tVQvH=(C0d z3_$k@fwjAWQz;(*O%KaDR707#ed^=MjT)Fro_axfPG}V73BtA>O>(RtD7j0eN;o-m7MS zsR2oEOOLnbQp&&<4&YgAoP-LxE)|R2`xPKqL#{H&r zjKqj6W8H0P#~mve7Mw;bMZfE{cE0PsjGIY{b=G|dg z*4P#lK^`>+7uG2~-$9YF_pkc=H*368np>{Y&a*g$%qjHezc)(di*+jCX3%5k+q;Sf z;QUYxKN{?dPdO{|2p2jr(FT8ehk{z&|0L5Amebuwm{&|=?bUTRLXoV8-pl{0=9v8c2y z9Sh5Phaq^5xi@9Kd^y7V1?q<@e}ady{&_tb_iId4)P!MYPwTTiek6 zF63rM@hJ*S!L>{RPa1~2nbd;kb4!n$zyNzkAEU4y0GlM(7;h(1{a%ISvj*ah*#8dL zfS<^i4*CCMAsO93h0LzND)L4BZy0$zVOEBjL13K`jdp}p%YP#!zjzlqetbIHx#f%} ziG=NkQQ@VH^{h7)+C`v3f840#tJPIIrOW($V2g90wX&!Ut2BJmI8s!vAPaVGeBjhzyY}xkPHI4=*FL9| z#^;}kKxIgjxpaMfOpyqeS3Yaoo~+@e&RCyAfUyzOp=5aS?le%ZnB3$=^e?=W#FqH0At)khuXmKl8ST>2pE4N?= zTyz|g`>-@|tRr2~yCO6T8CMF|w~LdOE_cVlpO5GsntUltepe(hQ|^-fN%Y@Wz))63 zG^&6RZhgpB$kGhBF@MY2?u?Xh+{}zqsCm_d`GW0-A(HwqzQNkKV66RGJU0mk4N+Aq zwjqVzr!X9Q3UUQDv0x#dYY{TC7pe3T8I#u1_+E@fdiKmXx$56%`K6mJ9fna9X*ede zyVS4bI%|xLZr!Z1_C-CmC?a>~A9+%|ZAMx1k_M$?VLK_AF^qTj5wMM7wENaIt2!hs zBv{0(=j)@X*nil28(Q;X(k|(2%~|+pVsgVohqy2m?BR=)n-0B(GB;=7+*=@UK?f#Z zD8vnNEx=@AVuwW9>NVnR5$4^opcW%ebtaI8^qw{kA5RoKicMB8|Hdr%O!<^8Aoc4> z)^VWyixK(ZTb*Q4JqxGS>ocUwo;g{9mHzo?NwVU~-_?={07U_ruN>G`4x4@Wb+6k9 zrvI438x~Eiwo7A^qfg3Y|LMHH=L0Rrz7!+Rvx7}+yi>2DGS|T@11ME!(C!52CV6Ym z)J!7%xF^w0r zz3X;qy7%zy5vi?4$?ZmK_nJ95jtAAH| zK^w9)4-YH3l!3$qSVrNBgU>-D7Lf6Vz?cR0b0#2d4%ub^`lic4CJr}hy4%;PX`s6n zJkb1oK@TYL)Y#>qiNJ5gK7)#GP%;A8%g}9fjXm=Q9rDfq^-{xqQ`lj!*5(nv z1x%PX;C$QX+H^(&Cay_1O#HT+RTWMRH6X;od`(Mxh1THyxm);HYQVW zdaG@W&$e!V!i1}^671lIrd*k}p0vZIh3_H~u4H%DM4XixI?u5OEka){fQBC^>i$Vww6+z#xya>G` zE_6f144NMsNPqS~MB@O=K(N_lFiL=IOh?~u)fG&J%vOBba< z%ikdabF7S~gK4&c9+GLIA9I@mAN#INc6PUd()8Wsgt0UYySz6nZM}PYsp;0oDM~s~zg)+X z+_xSH4ow0~sA^j4Y^V|*YY(HQWFR7vApxhhWF=gHusWYK2Lku2Zb6)ldyRC(M=~; zlYR8_LmSkLZUW^Dmx5GkyS5r8`wg|tQ|)rnGv_QEl0Eevht_;TKruoSh zh>2V34JLS)SmI|+iP~b4X&+;Sm+|z~;V0E;mftaRI>b?uVHe{`>1!K}-gEZXSlPj< z2hHtJ3eA{M){4L3Sfm`SIL8t#`TVhN!_YmFDtfgu(^9v%ST0DgL{hk()`ozWGqbV! zn3-4;1uF*6d;}LAkR5)IjSetRqNIFv+7+ZD_mfz#+gWw?zUj;GJOV3XH68Cr3#JJX z@fl`V0z3TlLINpG)lH|Q0*y!Hr|%XGCzJH$)3=R2fmAua^OL{H>*K&w7p{!5`;@Wn zFF5-@@jia;)yL3%x+R56t=s$HbaiFm9EiNIS`hZeh>#*d$P8XMv_`?xrX+$gzu3i? zztMbVHouBEZ+Pr zUnB97p?5+8O+sBPPU)i`j;Mq(bGscJEP@PJEEBz+uTPOkP@)eqD*<`~ZJvXF`Mini zsJ!$fg|W`&7Z2tZgAL1y)0tFL&N)iBED>Q4758#aYEmIEUb(eppi-3qFMEYf!WIIV zpHjPY;6#$l4-mI0FyWx5r68#cbzS1`J_Ksl{nqOrO4#FXkn?bKL5u~I3D}iqR$F!f zsM}X|Q-x78j^EEmCVLrwo9TQ-(34Al(4_+*A5c*54@zXr-`ni|@FVrywvP$EnSPk>Jp zH?5UXiO7-D!VmrdFAp*sU)~il)xMS6%)mHq}a0wNZ-hap#+kROQ|H$)gk6ZU&{aN!xz@7(=K5wBxLFI+W zY@Z7r0%uK>8w~E4pPL#_d2O9=J?YPLSO!e=-~P@)HWHF|FPm*i*4Eyj7Xu!&mN32u z66f2BH>U%W4xgJiq2wfeRaT0HY z_h|8QHR8k?gnqYa&n>X0G*5dEy!}YG+>(D3vHutk0>W0a=P=+XZD?in6$)(w);kEK z2myc!f1|c~k+f5Q5MAKg@!c~*_#hFXAGK)K1_=mx2n9obhcJAuy#V+k({6iMIKOlN zj{eLsrw}E@uEWdxiACDx^?)@imj2>XH@xua+B{#(8^J*)Kxia-{*@J!p`HP$@fh%X zlo|2Cwr#){wpz1f_>MlJ2-~ zY0qId8MD>;7K5wFo0v=7`1P-;{-@l$L-P{I2@NJw=+B_Elo?vMLasyhA-;b!0w*Y- zM1{Rjk}w#WdjVq+ie7=KyAFf{pkg>MyKaJ#7D&j|ED4@W75NbZi+OrwP%>~h1}_Lq zY5*f5^epgXI235bpsfz7_V`GzOq;N?y9))-JU7`hSD@YzV8o|O7b6R_I6*8)+#!rf zI;G3&7oq~Kcw=J$tij+Im=FB9p#L5Gq+rEcH3|L!Lw{JLiH%Lv&CShz-LHvXIF5NO zC>WQ=n6Ct1Jokrz4EG+v1{L4<3s~ay2`Tb&m1vC|ck@)}Ui}NEOW=~m2G0Glu`wv~ zru%rByuZ+p3?g$-U)uS((=);D8)2N9P~Q zw~b(=HZd(4|Al35r1UEWmj5gM4slJ0?{>{iV$B}&q>knoTcrw86=yqjuc{-_8CItz zY6nHwWV`ezTxQ|ao|t{)TUzBq`WSU-MK!Jtk=S;kHV1;lLmLy5&G#PnluHj=r1ppR zM%2eFxV_`qJgj<3h4YO5ohV3+OX(bJ5@ql7H-y8YD`v@#KNgvGZMqEd7KBkBD%UPjg1eXO8S99QbBllRVsnM z5QJw+h6)K~5DNp_&ps^*cqfoP?TfpRdZ!_n4F}S5l#6j62YwtLmPhyR=hw$yf1rN+ zG{$x8D9nQvo2p!` zUB55?A~3JC3QoG#jCS-w>IW828&Lpl5@z6Z6?5;~_FW0hG~yVVGrNcU+De+^;le)o(xTL( zEqI=e&0PyV?LIBfEV(5m>v#q=KRq>xrZdapp^{&?dj{MtrE|5=SB0r4RWu6UvRtH? z&*3||o?e-3T&W5)&)n`C?7`PMJVkhsqG{*F)YXN)MTl=nJ;9nR(eCJczNWXEAiL8Z zI*I%$3t_vPf{x7UYim}y&F+gi?CUnaZ70jjS~95~mAyB8+>2T1#zPhxaXSpgq4+y| zzcEXhyU%%4{gJVR2`=0NRDMQSP8D2l9r;8*9g{w?x^ysjueIQ`sem5r&FGG$T7B?L^71+OQz36y3kdtYeVD6Dl z$(5$&?D*W?%7#|R7S3VhT8=dm4lK(IE)5Q#^vucn#McDL z`VV!qX=bnp*QPzxviaNzZ(`Vbd(Eh3elFWv#@@NBLoh2%OpvmAB#ta^6HX2i*W4rP zW$V%MJmL-1hY`EKY4(|%%>ExQz*ATpY)-*JV`K|YSFf$1Nr#Z0sm8xz6~A{sV( z(|u6^G1JTYI3V+QXz9W9@`zW2-vTofX5dsGMSxA~woAKc&L#Gq>)BvtbGOfv?UE=_ z&(Zy$qtg|}NTE(n)_je8uJbW29htP$Dvux2yFLTWrnKg`rNYVF)7rx&WhqM=%YTMl z0&HF~G+2ihe81%h1K|<#Ucq~us65Pix>7@RLWkAaqTw?cE&nratiD=IQ?z- zFyuyVA^`V?AlL1Sm@IC}{8fU(GOKLdfp@QD=4Aa1@8K<5#56-d41zQnt_4DKJC`u2@`5LA%bHlA>XV33+DHF>4;y2j4T zNIVOr#Z9MOIaH_NnJ62DYdC%qo-GM}-IAOX@wSV*oRfd^YWvPCZjzPc{*f)-rs%Yx zl2Iu(YAXBSH2sm@J5aQXw+lte{O!Zf{@~nMm1jDtl1)rNO}?KAgdt5KdTUKAtA!AF&fI z3r9l?sx&3kB8OLqA7TRPS_$PAvom+~32Lm3ELG?~6sP$j>!)F&?U56_FGS=>412`O z*Dh~9LU)O6!%CFnHIDUobZQbFMV-ck%f)fj{GsXYenwu6+?2tLACdCqQo_*R3f`9Z zL(zn0_H3<>>-)5hMwokG-U8GGF!TJQ5xkLx7JDF;0-Egro6_!JcBpV_jWK2QPYO{) z-RGZ=4WkU?(3)cjAo=0sqv@-VyYF566^~UY zV;c3SaB@v{+pp-lUZ)Z40RpZ%h~BUYgf(2nU{ zuRXqk^(6>3T)6Y&%t%52g&Z(}J=R|dd#3a^PaPt;W&V>)vL!&f_Bf~T$y|I*1h%LE zSnlNP%%rguh}l0hg(ad?H1Q2E+JX77?sv-k*~70g9|3*<&@?d#28uK&^99m0z-yk2 zWj-cArobVe$1~5<_)H_PMM;720LjYM*4BNuOpp)&K=UrJeS}a4Q1{((YXGD@gXuBp z{W_m|=RZPEf%UNww97Kx=0V6^!uQ;t0xYw^R16XBAdC_a&w*kMdFvq36_|%1&elg6 zoseXI6Ao?d4n%9EILZ`XPdmHvJmNBFKxC1QBZEt911(E?w!}+#RhwOvJs%ERkHg(J`uS8Q6-3t3VvZv8AP<{e4C-^MZpzHf^>}ndxyD zbWU+O(1hsk04@dIJt(XI#WX+&Wue)JGxNoNpmnLZz{5kEwzuoRe-0&dY8TxjphjMh z)Ojl?I0RgnNg*W$tZrwtZGHCSqZ}8G&tCsoFID7ZX6-cE=-(PR7<{s@)a-<7UF%5?aMKLEW)4XPYOkbgk9jqbxBw@MD z>jGLl`-hS%mMbfLN>PxI8zpFlcSZK{l$jp z%6L;SV>XC?8TS3mWu~WMU;jtcYku^x%R#IlLYSJLw(|yyqR6qY&W2ZHj^(sx-|=c) zMm@nfBKS=n^D`qUML7M62tA{8=cn8E%sNf|?c=zP6Yop4GdB8vI%=)|3XmT*`uYC0 zQQQEF?jwac!<|B_K`d?fKuVbvbGr#Qa*#xPRZqF`pl*|WS5-SJN$|CE3`RKba;H<^wITj(fa*zX1-FL zvMqsol^bvqwQ!ezB;?im+-weM{Kl^giGm?fKAfAo&dAA$O7XFiK%>Ei#0$9S!CMAg zRk7%tSi#tq#%Mx{GDrduL_{UpuXGumMnZ{5kKTpqp78m2XkZF85|I}h7T}9~(d(0F zIz9gYoFlCp5qLJ(?AkfFoI!uHKQxcrP*^A{sx9dafURrh{C?|$yU6gQOo7@-A5mMP z8v|ooFyV%YT^{2PXF1HIxA>?VYyiy0K+NMwfjF`A>h_AuRmsNjVb^ddM^*M3h3D1P zW|yYf+iAozPw(#|gbm%qNHg_`0Rr{TOc`;dfp)Sd)RLlSj_#eIN%jUfxi->qosm;< z$s3|x>2rfYduvS2$}KaFTkju1_hX&Fz^@f@vh3I5PIy#7S%LC>A@W?h>iQL`>k{qK zpFf|j=utEJ{*lyfstnZii4vz$+p=4-q3<&t#?T=eERnPyR_Y#)~+yap}wyO9V`84M}~rt zM%dm;9X$3_CM8&uyG2mfrH3PoX;h9vaPhm1^kIbbWWTaG1ABgfnuL_e(ag-Z%=@C~ z{wDLuW3u#R=a5_4N2kp<$WnQu$b9%#ad5QwVW-0tym|v2Ix9gE90a$Y+nIDe!7;Cw zp0v&~Zc`9(>-cER== zMH}G#fxP0t`Wg$I%{8Gyvq7fvKcf3n&9*{X@*)Uk8ci{xeIAvcAt9moPY$$p5*o3# zr%Je#Ty_(d#1?*JUIOcM-o1t!vrU=z`qqT?ihqau!mbZ_6HdL9==9~FPuvKne{6a>32Um8p|5 z)M;LB^;S3bPt#;)Fbqm;Ywl8P#ZpF^KW?`$CBC)h`Y4G{(xQt#t$^j&H|ZKTg-1`i z)GbEi*AlRYo{7N%ow-M!kFhi#+=g2 zaPG;M%OZ4XHUeBxD{kXs#B)LMfM7rcgVyqc_$GnSFS~$7$d^UCD;Xq28cEZZN(DRbXJyIT~pHk zF2WsS*43Q-`-amOaWdzJ)8x6?r~4>y&l*0zIQ|x$9i|sjPQ_n7bM68A}7-2CpG2H@6g^JgAio zf>-mu9-tUMSiY84O<7!VbxZb>KecbsN2dD;RAtEXa@844j7O4r4O8{RkqjOEZFFtU zjMX;(X0-otpw6R|LWzjvUcJ5e?_!yH1yQy5`3Hd6kBxf{{0s8cK%*{E?dvrG-OJDw zqgfpeOfV362n0K!r6L5%`bb~hqQ%#bm8DsdT@AkqOafF-P7kl!^&)3 zC0uk&XzB8Ieyo;AXqOx4cYK^j9L#KN-#_P5quKg{uf2tx{3n?FRM~HAPtBZOarJxx z2Av26m(~3B7sYl1)}5lAH(SQW)ULS5Mm$lnU*pNl$HMuCqDCXTj=Rz^oQfv0;8U-W z2e5JeYLDo1KC^!ZcW-ocwjbG;*SU>x&UQd~##jvOMi;KmNi#~Fd+7gE3&Y9&-qj}^- zV)u|oXf6u!KybxRZ@*qGwi8a=zQ6M*_o2ic~e#%~}Mp)l)wTi>0q)bOds z9L!@|%E$VYtjxK==20EBP>ep`O-dIyi1$jjA+C$mCmkZA%jgPzn{K6^l}?!v@ZZpW zvY8#2Yef3aX&@-6R{XGY`<9z@7F9IsFNXEVPqf3y z04apgO|U&PQTah_76m+IQ$u|`U>{-Ki5NJv`qsR+tG8GyTC zvHND<%yzrp!XLv}XII@jUJnF8BCoX1c(EEvbX^{@TUq5AUbrH;-xK(ZAGgh63@v0(xCsB9IeZ+2Sf8evNZImONLtGHfq#Af70Bh+hJZX zvLbvf=eEl3=YN)VoVN3qFk6dxY++%53+RY|MCN)thuF8_P_yIwaQn{lVNZ7p<8c`S z$kNX{KaTM9a)t&A*Rw9!BJ^6Dadl?l&rB~?@Tz)$4p(XT1M^hpqlmgH#+7q;v;CJA zjP~pOJC66uNP?R|1UkKXIEfBHVl*7t&r;KDc{MC5TN^3TheNrk|MEJPdlmI;n5mN{YbNoTzH0HN!;`ln;9_hAF z$wACF&xLAL!#r_J6X%*do;x#hLg>B&=nXxP|0O^FSBlcn;t(lIw`Ci!&F1Trf%0L{ zTHn+D`q423$NILaFAGN|Hg}aI4_8=Oxn$7s=9KC`njpaCJzTLMC;(z}*e%#G4T6L_ zI4G-=san_%jz(}GrjUulP-->ubO6&FxBEFQ6gYeH<{wai-@|;IuIaIkm1n6X+uc|1 zvZ?kdpY;EP{6llGZyEb%C{MqnqAsSF)(_|OFdBC90_PFwv#GOefITp2H>9I`hP`6+ z=8)^HdU1sN9`QB)N`?x#uu==*USKMFa>^gO;L3tQ`@{M7kn;(|&jtWi^QWqO#GVE{ z9Rloy1bog9oxOe2n`(x=I{pi$F7YAPwwz1kJfrWGLbV;siB%{yPKRD2#JRFsVrKC# zCPh<48r%P5s8W+8xWa1-afRzks8`wq-c6S2Z!E)DN~n!~W*pW%B;TjcRhE5Di66%! zH{d5f|3&RpE%~6P6uA`gMwYjI++l9@Vd3-6b}905^+0=Ph4vTB`i4_eyXtR>#XIpW z8O<vNK=Q|S9HSF6C>72ZJs(g-QvY9_j@5EZVM0Jp2I?tM0` zCZ_p=>ZamXR&b(EaA>nt{2tk%d8ebg`BeWr^eJL`m>U@c1c)kFr4c4-_Yw4t+NU6En0U$h=>t0nhqWG=fs& zD|LG5xOOA0)H&E8Ce*t1XKhj9y^?p;ryKN3SAez#%wl>tfF(l=5`tN(ML(eG)gRUQ znk5v0P?<4pc#H~m*9n|@dIDR3(Dl&S&Vm^S+fpZ?D6aU7n=&qzI2O34bGr<~VWdNy za83p`Hl>I}F@m?<%@N{7SH{~eeRl($n64II(n*syGCSaHLGiMpB1Fad4aOHJfdFzJ zkai1(GsxW!u$5pN6RTq4oY&l($@IDA7@}=}Xd?)f%mDKqpjALRv*lE&GFT~PWaN#Q zRlx{=+@Z?PDqjK5RE|FXUNUNL9iDKC&8@BXARi1J_P{-8Y6@)N1c5^NH9ES|`@tPh zp#T&d+S385`NWA#o(Ooi!0Qd7QPr9QyM?5d?tWfB)N^A7H9WWxVp_>D;WBPpRC>{= zf0Xo4NNx2c+LD3@(zCG8Y+8oov$HcW@j+=zFspF;xcH}}yc|q_{}24sb>N$Ac6msF zWe^CaK&3p}+h$3odsAf)E7s4?FXV z@=k&c`RnZLTsWJ{J=4-?5Rhd>k41)K7!K=9MJRf%%A+otGh){gMyoJo z3x}?i>?i5L!boVoN*mcQ zGCGQ?)K@vd3i%fG21TdJn(+tgWGDVPavcL!!-}gj}NWJX;&eM&Py1-Ctl3` zW=`PGG3T#8avjEU9b30%=HL5#tazVZo;enY6UkZbaV30t$lv|z6Fk(o2u%dg2h(TH zk%>7;^}}9orZ7F@>-~`_6>(skt0GANX~X++P6 zksap{zWd83$mF4Ojw~!>v{D0s%$wmZs+u#xsMh;|=)2FOThqxv83>P?V3S}K z!Z1)!VpFBRBHeq&8JR@$d+%G)fKTvsKoIAydW3mOsj&LQ@3#?n$XLD?t9psd%ZPR2 z-ty}Ea2(W;fsrcxLvodn4|%pO?a1rMgP8wT=hEXfCv14BN{V}9)BJ7q_R~?#yEyKm zKoya9!AD+ClDMehO-(j60P65d$&S+75K~0|d8piR?&$h?8+TYpl!x-qyR4V`odsT9 z0;&&v{2GtEllxnmSvYk==&Yk~BJ~8F)?cx0=Dx&H;Iq8{ASu7aZMO^qJjdBZ%M@|h>3^i8f_~C;zm=+_ zkiL_jsR^rUY&@)5BI#2zb*>Di+KPX-RF4(f7LgW+hs@$>5g>nUIDd?lBup3f(QmGb zF$06JkSsu6ijIU&GPL+0t}toOPYgA7BHq0b^bI>S>0+Bwl!IF^gdTEfeBgxU?5o2@ ztw#5EIO&`EIJu=NCBHuJ4rE|{b>1(H7Sf#6d2<^3HC?GRFS_Sp=^yn+G!v1U^esCf zc@32hWQM=3Eh(%MMdx_RpKbq;cH`ha`NT?+?t!{a$T0o3CaU_X%)s+Y!b+?6v%A|J zy2KcIO8CJ~hM^Xi6C^?uBZna+LA2(fx^olPbcJg`6=eKsQjEvZ* znnL9`Ju%nG&_({VtD4`%gs`vsnEreo@R*+WOZPRpzSZ8lvrO|!Orco*9D9R~`*-)7 zYf5zW>Y`y@5H!q>}pTwjBaSn%wrnC^^s=HLT zCAuOU^SfWwCf?ox0k77Z_l~wyXBAk^XF(wL={owU8$kRrZ^sLy;vf#V=Sc(r#@IGr z&RPN~@U>x{`{)MW31 z!4-!bNgoOnATAgfX>QtS1X^(v`C18@ju8PoJHA>&h7QoDK(7lJ3n11vAcpJS^s0T! zJT?^w`X4Vq<`z(XAb|@ENcI36UaD2s28as~5Dd`ZEI-`;b$reC`x}N?2^IRk{qJ5k zshOEufW`^%rWNX7A^+Zt4aRwsei9pW=STrCZO zc@ud2!8=nUCukZICO*m?AcM@76^K;yWjWYKUS8gQqZbdj!AKIUp%yl2h&`B=*7qHd zRCayj!{7lpjJ-FwB<;4ZJ&;lSV8Ysv{S>TrIeUz2St9s< z^xpiXA|}iFEd6@gffU2W-B+eU%-TDtorAUqPW3Z3PEI7l2Tm$BDOh`>7PD0;L)>w3 zIcyp;^8bgdw~Wdve7C)6X=w@R?hpZKknR%cF6r*>Mp~o=6r`o48>FN=B_*YsbFcs2 z`yKn7*D>G&!$CcZwXS zTvctzii>LKi_V2&)L%;wQc++dvC^u^gxcTw4Jjql-Zq8V8{@+LdH5dYM;8-qE|}K` zpYE$~8^O68ZKcSvAwV!8Sw$7Crj>_7kf`71f%g0{&Qo@1hE zTDVz|zSL-0MtK2mI9XWPhhc{HtfV}P{q;Vb@20hEzwno|T4uQ*6XdwLn_gU8bp?f% zVbEyCU)gesn)`IWbCWD`gDY3`5eOf7$X#r%FY_J!^W-Rd=PAUAv2aS@%ceefCE2&K zF)MaC4IKdduRJTOmVTABzEz*w|YNme|7H>PyVk%4Tp+! z!T1^&ep{|qe6sl6eg%EEn_|?snj`LTzN0Dn+}q&yOPq1{xYF#*18SiLjgk=21U##N z)A2`>hABFr`GF?|1m0saXc-7YONTmmj@zGvL3I0zrkkJl%l^=OpgdZ*sJT}cc{Weg zxXt*96zjJxtj(=o@p&8xg42o^a)?srrI`KjG}(CpeDf`Xf+#;l?Xyl2LuFh3bQ)Y< z;VDc^OO2%RUO-WiimRw_Wsg(@aAW*{OUnQ$hbx$Xhr{;u-}%%M*jfcBF|bb57k&z{ zoP!akGEmbjRFQNI47VhY5ZEe5&WNAT33o@$V{Z|3HYMl1Dg`l;eEQv=zp91;^y%xpr_h&M+FXUj|yI3E>u@9 z`U^6(y-q{g{oN5e6O(B2^At^F%INhSk$^A&8Gc-DziY5vstw9{^q0`G7k-QP_JFFh z>BnI%Yg|yKq=tOWccFdTZ%Fr_&q>Lz?-RPe+>YcN8$@D_<7lhau6Q(4R6QKuHv#_y zboa{Q`$zVk&eFxQ)bLG-!{Ap&q&@gE2Os_Ff=iem z)LmeupdIN(1<{1xgzr-mV?gL@wJ9(q^R4*K)#&Zq0rmo}T>%6G z+pCZMr#tllWAOB$Ru5$l!ZmP3=}*31Drwb2EBs5Lh;??K4ZkL=?dbaYWIOCEF5c5w zQ39KBh2-x>Et;dP>jt?Jg<;#+b*Q2=OgyOleyH6HXp%5s2YPlssSGqrMZ)m=^KT;N z&ZnrVDay2&V)QU6I5dNYafZPi`eO_C+h;Sy)qSD`iG^Q?kl_Xg29O~e2gv_{Greud z&lg#MV*VS#O@OyD0eN$v+R)*z zl5cJFmT<@E;a~1;*Gv)~A=`pL-u_Md;?VF&Usg<<9S}CO0rnh{ZQ7si+Q*=YqIL!< zbOXCwXQ0__Z*OCXgJ5DtZtl1LXpyo>H1OgeY6&Vw=;E(F?2F;tRKEicV=)(lYm7|^ zcubj{F@28iWL#o)%-oMe*Ign3%>&onS>%n&>rZNllrP{TJY}Mv1Z8o6T^p)(0&Tx! zkgGrUaW5CF*8Wot1G2_Owze$rBp|s6)D+Bo1`I5dk|KFu3uAlM)ky z#$bxfv!lH|_})MSs*+IplN^+YaUReA*?whLjkJB`uaLL*ZTc#RZ-b( z{m70Y76P!U1IzpyK=pzoD4@whjWu9N=>)oMSq!^4hVwXMqC(Ct26v_p>6%9qo>CZ z2-pl@kD(H8t0{hST9rmQye-Bn491-1vUXXC%uUl4sZSddx+m(B*2I~5T~~X+^BqH> zj8b-zRi-m!21UEh2?zTrOUI_Rs+fa<;YB`HN3<{@sq^UV=DYY-pTOMvjh*|A)Y&&S z6|au05AwMUOhXJ1Ua6xXJy1S16`-4oD!+717%!*XM z*ahQ0UUZkI>30gFN-j;pLt%rZS*_kt@_Ob;{OOKHA3F-YXO@=d)5hPaFH_mN4CI?1 z!I!F*1R82b^-?9ydmG7D?MuI!h%vSROkFxR`z55w&z?oe`10wHbJIRg5Q1)v7uX7ypjuCu0k-5&_zgzJaVXAQA(#9twPeQki1X$n?m_i20urV8NrK zU(T9>w9A{e%oxyifaPQx`DbC{$g5wt5NV?5AArb3V3M0oe^(6_50cQ8V?w}Y=MU&r zJNta46Ye*FQFg7eSh;9RUfwG=`^+5X@bcmSeL|6dFn|7%9>Mry9cf*Y*Ds+~bd0!@ z^YmO$1#pu4bX)nx{Q&QirqOc5!;<0cM7k$nj9kw&wDm%_l@)c`3Og9=P3zBt80$h- z;_O-~+AV+nivHi*CmS2mwg1b7bCkA>&ZF8FL~}bii-l&4`vBa`_ijhTwqOy(9;gV8 zLO@;LJv!Qkx~!h|L>}k?@^$L8wW0!)Xxps;GV{-Fi%J^{#7; zyPJJHSh@e}CVvbie>?{*wf>`ilA_gG9XwRAPKhw(_*MlDA3E&@8D0QL`bW0VG{>MA z*sotLuaBSZ^}kPR`(Kr|cLUi@a$LFuUsS9q&SpMX=VO{vL!zeHNTmJUl7rQet;c=i ze5=l*$V$eSNzpmGHNwRDRMx{XJF+4qv_766ZEWaob38ZB4i@TSn3M0)cPl@uE%+2D z@BkNs-Ys&0fuK4I0k#+;zI;6#eTz!B!*Ih44ic;rYF1U$8KOpYPhANkgdG5XOwjfp zo_T3IAJ|HlmGf0ZkvoBW5505{>ALT4ok@qw5DKSC=`d%_F z)CL21%FfpV*dV;04nk2c_YvWPhNGr!Z>=}O`M*n+{o#4)&4zPqSbP$ApQPR)!89Y+ z%$M=@4b$YpW|HJ=YM>Ow56yS=%cdWX^juF+uFO+0hu;l(9letiVcr->phkbi_cM6B zQ%ti`dt{;RPuUTm)2Oe&TcUBUZNZ7RYXCBl}0VJ?eZJLhwDbY0vCz1-B0`(9MO?{Sj=VlyZefIzyg8+^6>y3dZO} zws2Ymwi_1RFUt?%##>Xc3cKdi1}|*D<_lo8CuV2+0ZagLxI?EaD0c;{J`lwUuq=ay z(r~{1kRb|oEa@Ub8ZWDK7CrtAXxP2G=IMlv1R27y$NUHq&e(V(z* z#A?>}noFIbSVNR_H5FUbCqviT_cMDlu=#?+>(Kpt?gPr&NM&AalWl)L>syPAj z37CwkX1I8H({J{HAD4))tKC<;ubOE*WPOyL}pc% zUVYy>UXEG!yRnN(kY9WG< zNrsCnNxwm}6q0YC3l#e00c{wbY|+`8@C0bD}|A z!tnW;?XiCpH7!-gn}f+{Z6tVT=jZ1tB^p0g&x|r?WI--)e(u$(!GDa!RPm-?7@Spl zXg*x3vO4nWth{Q9JA=Dgf?fy=jB((Df`CL|q8*`55bOdk3Q+LCE2PFkpekoB?n#LN zs$q&WcrF1{tlQj8Ys2>ypXCQ{X?QE!xYRku;1~%tx)0iDhl%vnGDGn!{5gpm zPA})r{wdVAQ)Ud(XAJVimtRNFXxhF>t5f+RAzwHkqt}7BMg^x=^?E!G>F45AqNEapgT!ZB(21g#HL zc99URccRAY*M$6{o*at*$DD=}c%>}Dt?J_kQf0vh^{*C8*JKj;+G?6=`6_+4L4uUp zjPa`@{Ew)LhvPJ#D$nGXsy#%=n;$TJVd-r1NU(FTxi_%zdp~Kd`;Z}ipnxedQ4pg0 zNQStMO=qfo4GWv3CJj2PVR!d_%&*nNOpV3=ySJ%48SV^eIqx!7+SR5i^Zt(e`UN>Z zJgl6FNowE*I!;LX?g4)_A{Ba9jmkE2FFWtfR;noO$jv{syo%Hn7n|H2uMh3b3m2j+ zrSFM1Vjpm%K|`PFsa$=cIN}AW)CV&-(!_~Nkv*?95)&emV1%FF5A{};S7kk(kQX_z zJhQShEKZm3YU(7vj*U8=o)cOUS>}9n5hb;vNl-mCwA8Rly+-qeudezUXH(q~>8jjq z)?zwOFm0Dpa}fP9FOA}j#J0ep0q;1EUTllINY?O~)T)cqPbq?Wvss&G&x4Bz)EQ(` zCL}ns2!+O?#vNX9T>BaDopS;16)$A-`R^64a}%0*?FBWT)(>n7lSL;5li5Fum@GJ= zg(vA3hJ09I9D{dM_L(GUdp1&fzpj4{6n@-sTz>h5t*M?bQ1)(>Yu=PA>ZuEt0Dav; zvOt21oT)3^8kSs2)WhSA_73q(IM?Sml5p*s+sP%T#Y6CB=L?P}H_iP49ZPzM%EZyK zs$p|tDyz!B#v+zy+j|~s*{Tzsx|Sj0zM{Y{!hJrDp}Q*X@uWNVy2t#hk=d5v$A%EO zTE5r?7|9oGSvwE}aILf3C{ODgcU7HC#EE*$Z=P-Oh*_`Q|0Ah@eLj%06G!$TDon$Y zGa9(<6@XPX=%NnJlPTByaKyWhT$J=+wzrOtmJ*G4d*>arK9!(RsiWmkr?Yi`j%X0@ z;D$*iH~^}dJg@Z8zC=>lEzdDC{DdpzRwN8bjC#T@P1rZfLN3R7pz|_(R(=PU6IU?lq#$kC8ULyr+@QAe4WI6i zDS?1e@;ZR(}ZKGqpB!o8+rtAIJJ1;|tITmL6bok8OPB>cIYK=P)w9MV!E;{}X zU37ZJ-$^ie#^>h;q1%v0`<*`I#%g$tSw{SK=e_@y7;w->fK*he-OF`V2IQ{d_~W2- zlv|uGq&NF2s^ufNo?^ORT2q-z(36JDueQ*&#Mv<7ZRb0ZWwFvEhzIYN1S6ie_pLr2 zuAc4|ByjS3lPQZ=uc?+ZTGw&hq){mGBnnbah7K?bjgj=7D8Ma+bkx5u)a#WKrCjCH;Jxh!QM652vtDf_EPIV=p(+xyu+p^423sRA)+>1Qy2^Z1{_pktp^ zU7X@H%}J{gi3Od1Q)j5i;~j*ahts@J-zXswk@4iVqU+^3Ty$U8%iao;#kq4%W{r*^ z+Vp+F+p6J;qG{hB?|k)>)a#Go35`!$;3n9y5PG@C_z^o*I`Y)7Q^za#TSaA_n{xLJ zXuPg%FHMRbj^p0D86+1PFlsQHO?=&!aGYF%cTgAi z{yC#rQeM)&2yd!E@_1m)n9%YjYCU^_bH*LJdShs(a@#t6wK73&((aMyi;*HtBQf0N z!F^gIcoM>umgwvTThqmD4D?FU^0@)~FH zXV2C|B@zsn0^>`-owdIR)D0$={7aw89Z1mN(i#J%Q*LNl1~wi=KXGW0Hdkl!0@{9n zKf!INg$0NrVB5nJ#@1+dX**qATJ5H{;f;mh>guY(mOhDaVp1(rqVWaXVL<03v{?eh zCd$C$2Oi}>xMDBuZ?1RUN%uQC3KOX0i=U(+OP|Y9obreo18NBXaYB|}$OAj6EHVO7 z#CCTHbEKUy*v3Wv*mKU;;dlKeAWz0YMHKN``MGWA(7YXOn^W&I3;cVQ!e>N}<07}x z5ZDWVHqIvG*`2OWj3EOukZ0uEwY0Qk&K;f?X)J`x!woJwjxFV;jxwUzd>|J&@)=#R zB9}f)YQ3rtD8~C_87sREH-8sE9n-vhAQbmy=6hnfyQ(_53rxE$mmB!;3@V`_D9Bm| z4OR9{TLe((3$OzqrWVvg1F+)I$rjvGH|8`++&UuT<1wKl3ixl3^AWVA7z4Z&*ik`t zeCR$3&|g3cvT&-FA`FL42Outnca0TZkLuED&@XTM%T~m3th=f{_PIu(-Nr(vegnKZ z3_%r^^wjrhgfE3P7>lT}1Gg$Q-q+3#)bN=fi6X-Ub^s>fc5^?K39>^2r2z_Xf%?DN zLoh8*jx|+pY#YoHXn&GvHLwJ918A59b%KDs+WYTMzt_d|dr)G-ptFB2n4-p-m%i24 zw*O)%j=CX7&-$@lFt;vGkL{ad-00|N?ek{$_&a$_kV30D#YI}}qQWAw0KJZ@Va2+MCQV;<(C1OY0$H&hy<6`kPUoUu$gIBn( zS-LMH(!$f^oOZiJRjdYiDv(L>M1tDuJo(=j1!l)CB{z9v+{0!c?YYpwzZXC2{1p1w zhHG@~$yUAHvj-N$gXu!c4HAkOGm(j}c^KO?LeVBES085*z(R@~%SI;xqnEN}{YeF9;9yrM#-HSO>L9)U7*tyemc=>R! zTodv1$Q#g|$QzF%HRD0TERf5topoye*d|N3usIJf#g0!8?Z^^@1z2sh^jaB9?W_K$rcOHFRfix*6@vDN|FP}d zPFH@l-1e%E7RB{F7gDkfK?gt&o!5rV!kfZCl${jcuVpaFH4T4lSl{ZC0_UX!H4>x`elg}%@r`$@-8pa=! zO@A!&Qr_v8_j_v131DYUS8wXk#KQsd1qIeMVZpzLz)yrx(jFf4(2N46d>~!R1MwY) z=W{!CXr30!xD_|Y*Njc~Y9Ggv%fZpyZKm4@H9Bpi1^62bRl=`>?qVfb8f1z|*RlHV zH)u}i6~o7}(s#U&?Mgq~8i-a;iIwZDgE1H~wJK7FuI_}sTWGF{U#g@;|Je9Aynj{Qx%!&!|GJI2bSj!Gpj-RROhF@=|E5;Uq+cHuZf``OD=-H;UpNHaZ7Sq3rk)?;+x%@<6_aHwJ8w^~f8YIy*@1|H8KSf&h2 zEkpZk<28Ws>D-hh%#MfZnIrw5fPCTLfOzD&kDRun8qb?$vGE@^&V=EtD81R)*)X9| zM*_f)3(WyHTj^c^aZN}{x&=%-EG#U5Q>wnK&gdtpUN-aFs%J>^p+)nlFLn1xdrg$b zt5t>J_w;n{j_}o+qo4b1DQZwcvgQ7CsO9l?zvba_5ty4RKb@@Kz9n$4%2I09>+-(4 zX&^U!lYQu%JeKZ1Y7>NIHr5%Jex(-Bo^x9&uoJWBV~yw+hj+5pGomP+pd({ctwn^cZiHG#|-==d>qa!Qn< zhB}bJz5(|;R~5YmtEy z&4{1Jg(Gg-#=vIV3$*V*j&Fd{K!WCJP!=>iG6Hqa$F1jU^DkJ-jN%s69XuFFL@vMJL6;<^oJDe4^e;LZ!{4yd+ zN87>7H5EC&^;PFw^HWBDzzMaK6wleSr#o^$^0lvbSTw%VpAwY|*+CTT#AI8RIdIx< zoQNY<^HyP)i#@rt#FqaGOO49FK{A5xhA|H5kMVO7G*j4bFn!XV;U>~BIz@ke z8Ps%MA!0cVu?k$TKK@IeuW_J@9UC6M87E~&4kox(%3s3{i;f6*sDTI>H1ThJSKsa<GZc?3x+oPQr!4!4fi+0B;$i8*Wso%Gq&|ryjd=Pb|Dc1Z@-`Q4|O&dxh=D|BfSa7 zqPxT|@I(IL=o%~*qrT7U(bTNEjak%{+a}N`c=KVcNYNTr=S1LXpBgfKya>2?ZQy@{ zQR*h)v>?6YIlS=iHw&HH_`}FhWczKH;Wc88*ESL4uL@m#0;}ltaHBrK%d+tr1it)N z3F*{tT&ey?{{r)7rkwNI{~kw=OZ24Yda%l?qLk9Q=(1)XcQ7*<@K9ad-6wz&=I}7% z-~{rBkJlpii|4~Xn`2m5xWSTggW2!~wf&U2y=$hN8ZX#FEtCh9(KeNPkF^0i1tZvg z`K95{AZHAe%#9sG%Ez544?AZ0M7-V$U4t<>6((a7)6#6jFtZTlx3-goeyckG*R-=A zaDkEIf6LgXG&Xm9!?UyVmNA3vua`=Bhs#)N$87r}?>%6&bNO5ziXml7)FB4PCn?sx zl08jT(Th;IQ^OXTX8~zY;0`6j#^aVtwvh+5mvw|*0!APAQ(p`nGUFkG;W8S+W=e$S@ECsB& z(2l)5ZKz)sdK{gN!h;BvYil?Q{;RV#Wi_6hmQy*lS)WIT*<{5puUOJ0lFOI;I8pfd zv47Ft%ViGabTQ$rVHZxDN~pOlA)PkD%mPp$@HtnuKk`HN;>uR~tsJ8%FbF1$E@$JH5ABdBN#{1RI;eT-_!FkFYB`68+7)+)U<}zlPAo_9N{Zz;!jOPz&JO9T{JAYQ6y*shv zI_;iqCtdzpXYYztL9i6JE}_U4u27!v$}g7#T{ns3eT!d4q~)_xN6{}sso!$_Kl82r@_ z5p39(eAB;FwJ7})boxXkX?7H*=sDpWuwht2Ogm zg$emN+;=4AUasFiH7cZ_lx=D4AM{!CrQZ%sa@HRf6mNUG;4Pg=2!^NKB)8k>964fGjxe% zKRa5>NeD;*8TeNmRZK)xZYS`+aSHIh7$q;5mEd+E>sKy%QI31P+sI6pqG}C{AGNRj zF<9j;TtxwMb#FbJbKabuQQLlsu%W+r<P#G;Hg~IJ` z)@vQAQ256Wh3KGsb-nHG$Q;0A4i~}Mj{N>(cZ6Y)PL1^8L9J=&c-5^`zL6jDv|N@o z^P8oezkNR^aZ}Vvls;U@^|rMx-ayM@@T`wIMk9_R7NcOb?dl;+ye1-b74Jz8?eq)O ziTHajm@Oo9-J2BlRf3X>!8q2~Vq38C$=55E-5J8!Syh5gtK%Or_yj^{nlE2buB(KL#VGhKb(m&Sk$ zYWCCKdvcJjAf`l+j&G5zBi3b5kclBZy2SY5GIjAWA>jTG=sO!FNyIa09I2Y0z=CkgND}Pd4d&i^ZqFt6fLU~ z5D-&zTuG=+)n_2s_Kb}Cr=x!!#AA{OJVs05YPtWFsX_9TIzNy22>O$$7CjE-Lvmjc zZLQ&BeKpQ~CTT0gA?i6O_U=sYlcA!8 zh_Ct7J6BPC)nLNbwD|z{8>A2+TUsVh<<3g;F%7cZP<$qM@L;~=>wr=<;P^Lrr3dqI z$E&BhI;eqJgDA#S0AE?za1E+bJ=-3E!o_YRcONToG~ChYen){qprsl5(|@1kGxZ9+ zHTheTnVjs)xZ!6ulituTj)k7Ugrpo|p_ZOWI)zTi(h^ath%ca4>)`ftN{V#gk}WWF zaVRnKXnv0YM{bwD*Rm_VXNm^iH|D?!Vi}vm-y4>(@MG4*Wf+nF4ez{Kh-=dg-seu4 z!?80b*MfmwwaG11cj;SyxD1$+Sh2qr4woZp-MlvF&8GqeCLBY<0hSV$6NLR+tg3DD2{9)(m2O`dHoPhvWhASS z_#V3J7mQP^zcX^Xzf!f(aQ`rT0EXIbf1;^`pOqSSyrg7PCsrDV~S50|nn^`J2Vjq(o`Adlu-Fa|sA!!qF~00S?Xyc;a(#a*E+eN~pFJCgtzU|LNz2bu1Ag znuUeq7Z89JE$l5PaG+g~%5{spvL`ob=$Q^sbF6ESP<$!lO@S#0Qk%h;0Rv9=oZQ?! zAZb6><|pvqa3b{Q&p~_~vN1u=(}m-|f5qiw-@lKls8Hid|KMxrJjA-#2+}25dS#H) zA94jjvjA|$fdXKlDsh1L`o;!T8+-AzHGnh%6E<2Sef%GS>k;SaM#Zm8uKeuuXI9oj zxBj}pzpT>h!mg@*u>NG6Yw*CofQHf0+1XC@&gPv?9C5V=vL$N zjeUd!1O!0LFb9JT*z~q7V6_3oq20; z)u#wvFj9;g$7&!6hQz;?LJs~CI)^p$w?|4{uFo9{;rd75coJVccrA7gsp&m;b{XUU z@mN+>1+g7iXi-kzqEiy!ycg$KYWm#T{T8Y=@i}VCY{p#b6t#R#HEYqR-MsscfMut`2^iGNfHoi$iWm#yyiwaZZ=DKpnKEavn zS5}f7GApGaBGpa^9IYJ!l~E2v&%1rh?+hwt`O4V-q3SGdFlqXY{q@uC@XKU<(;vNrEiG4mR+8rYo_z@>di1bSmND`)m5Xv4 zMxhAUl&S5mxts-+e~W`sl7fQ#kAT;|-d1NUEiTjZsQ1P7e5SPLP48P4wuQ%+2w0N8 ztymhw8!q29d`lgY)YH)cW>WRl@JYiE3ZupPk^5~C&q!t84gX(T6;rwDEbfi$?9WS- z_y?Z#UfN%|nBRS{w4`?u>SB)^UJ1YWmj$eP?GHc|*)QkSccBQanZ4I|JG>>dL}Eqq zXI{d7pFCF98e6q=(Wlz9pN{N)*z$UJ*~1aY?Vvx7c&3a*uI?au=7~@l_MlD-v}H$B2R*U{`|>;qM&Pc znzNCqak@1TYE5G{Z>an9mY!IP@-<^_{v`wq(+gj~?9ZUnYZ~m6nYhFc_{ES%>K^wI zj>V3U0oD@Mi1)!6FBt*vN{UQR7+# z#j{Iyf(I@`Q!G|Nfn1)$4 z6rJyKbqQ#1g@uKuOxX0b3R{EiFWa$xqCA(!Nv@eFLz-5ol?~wyONdB#k9@KaJY!n$ zFH9gO0*_4RJwO71XiY4&^vdR3b%WQ|Z)PYVqW+ELcM+CozNk*`@>z>!hr-u(!@C8S za{LPCCQXz^--oXc4*B>Kgl5|W(Pl^lMBNKwv@f-&Vvd|D@vFxb=6k5vIm?=>r&FH& zoZ%2$8iW2Ui020!4axV1gi=C7#Rn~d`iZw+6vA_&G4`O=B&?3A0|}Jvg&4vRaza!U6km51=IbIO+Gv; z4nfqH8LUbZht3y5u|61;%{mPFtmiv(4iu157mVBH6> zi~_RaAgJvHmlxC}47LaznjS0!G5-l3A&6BWh$jvyTHMf?j*YO+djTJx;8+1Ls+MSg zR5nPZMnf!ja0&pc2Z+xMk{e)Hf{N{+B?#aZgLw%AvnQ69rK`0RU@*n_-^rs03F$96 z_1i(6?0dd^0s=z-Bn-I5dX0`j$@B@TB^qjh3V4!xmfai*W2+-#+QrdWaAC4LmSbmX ze!OVLPA6dOMhOlC)*0|s0WlEN{c-T|4M5Wcu-TMqmdjO?W_FyFy#9OXV^Es?9XFsc zf&%gw1Ak5p5P1M~2rPNP&I&rVfMLg>?S>9AHG_$d@t}Z|Zv9TU?HG^^NtRCg&WoCO zW^^DHBgk6eMw%@pZ9V}e=}DY}ZwLrTU`wjH;^^)xSbgghJzasVR*~U zsP6sdd`K1_C#onT!#FZYG0osyI++|ZTfG{CrV{TZuCNE?Amd3O4o_Y8TQ!0tzh?Iz z#uvmb16Z2-ms*Kbw%oS5-;vAl{EbfTF&FKlFlmZtxH(DN68<67$))z{q~6TG8Etio z_wdYQBH%K%5~r^pSNuI07bV1xmi;NXu(Um0Q2;QT1TY=fE{+k~ad?~*>F0@4{*HfF-`xt;m^P8#x^aHY*~b+UBB=d)j`OU?`SRrT zg}~%6PE?S0LA1TZK$6n+0aA(>1KQ~%T_5uEeA>RiN>PT8Z~Bs!rZuNE{FO5^NKTcq zllP0r#U#a+!=}~$;{}MgbV&@yv{6ox7fOkVeoZo4-L7L=tyWY)#gxi#ii?}&yQ4pv z^Ja`wNk#s)4~~F?lIu#|M2vCtUiHYq?hL^^^UWmY=Z~x|7P@z|j2yFYZ`)G>*p$7S z>o1$nAH|!G(+F}ua*hbn8y5prQEu?3+8A6)h8;#6RMwYhPX8XAs~@D- z`|<|P8ii{&?uoU@CAS@hvQ<#-7x0->W{z#~q`Z-_={cei1jmuM64kK6F@ifN?%}#g zc>Y~IK3X;)VJo(tVyd7gAW15*Ue zVT0VXy5Ic53UN82b5R#bAIl-Ld|d?H??IY7E6{Nt10?SHKpe{7#?-BJ+Q_?mN89QC zd+BqHPOqR^Wf1`K^xBA`CnOb;7C4?ER9iKwS9I3a{`|N?ScEQeH?P_!HAZoS7Fgw` zq$TEY>-Eb=cxo0RvE<5%RUkj|gwXPEkw|b&p z?S1|&EZyW6vd;=xvVpIEbM>J)pdVrnFLMmB485hV`07%pY|RN0-`24xl!b#6=l|vC z{V#9tmQ=m`8QsADnm)XTe9$u){=o(+-uF4&BZ(uoofom2w^0{Qqx<>6wx0z9%at??>^AvC@Vx~ZYx^4Gf2as&YG!U8QY0$p3J2_+h7t!u2&qhT-)-e{&Ky( z@NE!9GA@Ut&W>ZY4~;oO`(i zFRUF*1={t`Hw%Z+dAPC->at`h$Fg5!&T1Nzus}iaJdme|L6jV z@>WHTK3Hr>09MM>o!kJTBGG+9MlqWguDHHN-`_SxF9M%}8lw^{iH=RI9x=^E60e?G zLMa!kP-fLDUfuPnT?S}H4O|N;L!=)rR8}2+!o~Db0pP5~)zLC|vIDTtL{dvhia6hF z{=c+oYPeN`#usn|FJ5>(T+BjO$Xug6yuj7U#8*_hpEB;Fpqq&@OoF)4VBY&^`-4R99NP0cg zQ4bF*VMlPHq1FG@$v1j_>?|YnT*EBn)>Su7HRJGU9#`*+=9XwwW;tLpr`2}R(kQNl z#sr^MiK66cu1Q>8APl9oZO8tN>-3(nBR1NPSG3h`56TZR_(iJkngWOBQYwknr=nl0 ztzZn7rt(Xij+k?I4vty@-3`_WnLmgn<$hB_k$Ekjlso@^rmX^}m9j2jX=k~YwlV^9 z#^^J-OJGEyv(D|OFe$z}nwgPVD-ug_njQAf{oLFMes6wSOl_ld&i(42|B=ZAUyV$m zYR2~5D)C+UkJ+6SW}{B>kAb2KZf4aJJxMQ*f0cFHYL^{CE@kSY>1UW&T_(l7*3j`oY}!%ECMSSJj#LI0r}TKD;Km+XloM&cjhiYc7Xs# zAjAVc$p4C08zxMV>w=NM4@|U#APNvKa3r&h3jlr}+Fj2QGI3ve_QTRI-TZ8#oA_=n zJUIGJ>7^CbT@wKCVj*x7$DKc%-w}m17HC;pcMbJej*W~!$?hmzdOl#j0L{}TfEEnA zx8QmO0d!@tH}-AT)ea#Y!7o0P3;T@M9q$N6neSXXHw^>Gah*;au)Ko`FOX6q2*(PC z4uB4Ta|S7_du~774!vPsb5jVC6X9X`2S(vn2g#67*?km)-Mb^)qYQ!Ds^ID!Wm9@7 z^b1$S`}6oXr?}k-1BF>27xo&ZkeF-rg+PG`>lNc_ZQc9Nd6dYUo`gs~&u#|Vgw9js zxCvfh^V5A4uIr;p?e+Rqgo#FmLLG|DdO}xFfS2j0DUs#;pGd$#{-@gMp5iL+474;u~e%5x1HwC+pJW0jsy zoaxUa^$G&iYj51tSCw3B2~9uBu1-!U2Q)NU)bWKaV6t}L;_;*AA=23ciLkjc{RmvS z4lBby<7}D^>mU9DzFRwU$TQtNI4_>Y(-Bw;HJI=?3*DEO2Lo|uKBmqKNo+trumJlz zUHc})B5|fvM7bgygALx;FOd|m`gLQBY-493aIXvrPE!THOJ%E-gd+1#JfIm$Km&7u zbOJym%Dr5Cc+a?ef1LlWE#c8W3ciP5B&(*?`t@R^JZR`M=MrK2|3lSV21FUQTeylSE!`m9-67@BEr@h? zcc+xnozf{t$I#u~J#-`84dwb8(dqNMcdgJ!E--eVU03*JVA71`>wsrA(EGz^H#)EoKV5qY zz3Mo+sG#-B3vWDmXM~1ITVB)m#!1zEz!();JRHHv9M}oWheHTDKN7_H``xc|3Curx zjOphyd=q63euxvaC4((chRX(w1UpdVFF?0^eSCeW2b3~NyuULvY8CSpNXQq47gf|YW2Q~1u1GEe1zy+wO=RiNANt@9-q^4%7_Gd`@C=^x!h*+ZQUOnYQ^)Vro0u$M3 zv-H7=<^)V>LC3T7@(|O_IC;t(W|uW)-^pE3NLE@$XdQ~rW5wbMc+S~*VF-VE`Wui; z)!S-++N*HbpFj_yEED*RvhI>LRMx#qe=^QB1h(Zb$J#ex=+(|NN6|D7=m62IdLB{= z1G&}(f$Grak4MJt#+a1H*zODP9&}{1AayI%GBzfqp27QVr^`s8G3Ims;p2f(A$#Kf zk%GQ{uo@|c@cjAfYFJb0pE3_U&3%gEr3 zWxIyqjNbs>D%BF@VinrNCTmBd-KQFxnKm4gcz12Xe6)bzdp?D9-cGBERtdY)R^ZEG zI{4Oh>IAW=uL7#wUQSM5qI!G9!+H&W%hg_)^6dw~0ZIcr-CIIld~rbVh92FGmmS1M z%k>P!ACk%*Qgmnpw0=7FIvB7Hgx^razB6^SI7C`J-+aTVu&2phSp95+hY;Zc2aoW0&A8AolnM#tBzRpeIDw_M3jMWMeSH=)?7Flx#SGIPVSR7B)KQA6 z3{#p&@-Uoae&f|st@h4ZQhTJd=m6~KHr+3nv!#g5$^y5g`6dj}Cb&*|Kc>U_GLzw^ zYh;w0>c7p&FDL9JaF037nE7`8=(9hm@>B@XBwZb&Bbm}ljF2q968uBYX5u8{zPVQa z5;wqXY$h?u!=3P#SRi&5q770@$(O|LRmKxr>X1fG8GA!meT-ipnY9zO)dulhCS~(2 zdz(z;6+Esh=iPX9Thnh(8lH6PjA^;yB~NjnJU_*pY1t%I?P;ni>DnJ_>H*QyUJ+p2 zer#uE*`pa0a_b1Cj@X|<056JJkjj?=3o0Fje=cw-K_Ieh-RP9xO&w5gHZTj^0e1J{ zcc=m#P_bbfLGAoAvM6xka#*D*yf(Yu_yDd`%_G}CdKP8H-;epXJ#-(0%UDafzM$2r zG$$(;j_1*mBZ~qU5nuuU)?QGR06^-y1L0_>ff6`1@9#aJ#2#Q|2V{XDgOWDWcN>EF zoV2s0oBuwE{~o79%f&|9r2pir&y?Mhymz96L%uP04}jd*erlH0mFfY$Bdw)9+~lIw zRlVxV)N{1~8sG$?6 zjE9B*Zf-V#HxFq$B`e5y=e-61bnD;PB&7lVIn0l|RYYh5KJy2&!^F6ZUqRCXb!^n% z(IeR0LCRL@Z^r(ox!`|sFHcVb{cFCz{+EUew1@qVVvsLwd2Dky*1b3*L+8Dwnx*?u z*I6(d8EBxlkmm1(;duin62RL4rWJzmOJHl#0uToOlj>f3K5>KY)B(AI6?t07UdMS| z?$s6!iPtaq9dDux)x*Psy0-TA*+%!%9gX6*5&{8AMEL?Ga9slOgfeEaY^@J>+Kb^H z4VBCRCH`6=zuUkMVy(JLBM7(m#$=HyI)NPCH?2}-J5E~9w>|v$f7rOM+Zz?;EwN!L z;w@Wc3Y5j+zr6kvLL{d0RJ&b|{KCXHs#Cf*rsxyly-PJ?Q6PCX$^mc4am)gZ#IB{tG0b7@lT!Ysy;Bc|B`=HpE4;hRKRe~RTh zI$lHy`IN2ee_qTSJx({1+CdRqw1>ZPbI7vfwLLUN23fX>rvX3eN<(t3yZmol+KDnOYj`}O3yw6>1TR=ccjBL z($n>+aBQ5N-!&7H!zjWbGnBhIIzoQms78G=yy$8yX=bvX#0kA8 z0f5{MDppzzTI!=)col0hCiZiR5K}WuYLS!%CNkyH2D6Dw-o=;ON1{(L!zi>&uAXzJ z8_sH~MaY>i89sUiTZ1QdlJNBtP^fJ+{{k!Ce2dHT?@s(MnwXe)s{+836wexZqXs2}meWo-kfr;^iB&4DH#Hgfq^A}AP3CD(Ab-V)A4 zPp>l5BJ6sW{x}d(JuZDp9D;d%4t!dwcqT{;=J$J|(F06&ZqqK@&5CEbFjYbilhGHO z;Vc&wuh;FndQahg4&973rN|kqHhyW?84U8pQ;3-Z|2+h-J`;Fg{@*E}b(=sRvxNQi zSLHQcg3Zf$Pk|sqN{y`;{Zu-Z>?|5cF&A!x~F2 zcmwE@^S&fp+W`Iqa9hs%K67&`E#)H^Ap-_-+No4Tzg<)O*LiInTGby@cha-d$-4X_ zSz*FP=RCfNdM`V0`0CAbwzhvd1&(85b*D1VmG8uuc`o1BqL2@tK1cdA2Z3rE^W+{S z+^Y!)klXY`3^(M2xX&r(*nqg@GSKM{|ySsA21q-;)EkjV7Q=c_pbde<0+w2Lg)KKz$H! zHdt^nt`GU#C{Jm|;u4^AR~gYjfm^rBUbx+ab9LA%dcNL>TlDAKoi>fy86V>aNK=2T zkj7Y4f4lMXT6d78;TjD>XF=$3pnLi-3JB7F6k3OY=PuODI4<4F}h1@Gc%J zd{7%(Lq{;;hZIGSk8p{XCx|>~4WlD3dE^)4tM}m7q5g4{d7jaoR+_kcirad#4qTzk zs@s_^>WJVtedRaeKg1{n`-0(bNe?LWQ$Egx+H#+0jz6Gumuj{CY&}GqL^xugnwQjy1Tavt#fc6i@Bi_oTYWX%8tIS9) z&GasrO}--tYjjIju4VgjsP@xz>s;z&@G{#DJNRdTHE=g8nXv;)gLcYm6cRE-F&{M^ zE}9bjn{b+a`5>#Uxc%pGq(kAv!&Cugm|ZM1_#=2)Wr{M=t)B`GyMeC|V3utF1K##= z{o3xvFA`JW3IveOfVzjTv_Li&p_?Fc9x>MZr7d5zB>yGIdb1vFG-aT)d=KMq4K{Ws zwJo5Oqx~dvAmaF63>wfe1f})^G<#qUfNmLl9ykHRfNTebDhW2M|44c`crUpmWY;#D zjhSsu+tT5&;~zCBB*og0f1< zY#miDLYaMN9_S7*9YB-63>7Uf>g_ks9BsR=AQZa4(&S>jR2vH5SbzoLEKD^m&NG(o zhO^n)?X*}jC}#r3e4y)n5E>m(u8*$ks}9LHb##-*oQ@SyKah<9kpQib09y^%wp9Pe z^9i#zo@E9Y5JE!{0N^cP(u9I&N5)6$B1GME+fG@eyBg#EMrw5QMcSeQ@#RQGpMQY; z(EiQ%CEy+1fMONA)*e6Uy*|uOyG+2uh%fzGA{$hr_>z;VvU8FZSkT~wMq^)13J(|r zWZ(Mku`p^r&oiKxXy(4t(y2!06RB@%@Nq^sUvBNUVV5@KwEC&)w5Q`XF~1U6JTon% zuA`oSURz#(D$Nr2i{!-cY7|@!Yje&DuA2&ca!Z?dv#M4Fk=tNugVaS5eq7X6 zaYxAD*~IKN^=2xNsb?x=JB`VkM1X@0HGSa6T&OX1ARO!B2$jrlFYqC1@K4*mW*yj( zX#ZSNDn!J|e4=Md=BhorKcIyL-+L$kq&*>?{>g87a$}74e}%^Q$ajxE!qaiEjDaML= zGE*Nj-M8t%;+{i-Pn$kj`tB>hDp%sJ`Sdl!s9!<3Y_4dYFeuVhIQ!QiW;x68l#KHk zDSXj9Q_oh1|2qMoe9rr63+VRCB7^tVmWxzI9Jl+|p!WB4dBD?m4sOpm7KBlcHTM?> z^c5C+j?ev!6p-A9%~2!*rua8>?=8Gq=B0ZZCt#Rre|)z>a&dF3F&kG9x-8b)KJ`0M zYut)zep57Gk|3k1SEs+UyXryoE670*TmXZf?GhnnIGQv)dTm0hQ5Q|MXa3}@>+*>G z3C74!g+dITB=v}xp-ic(8x_`Hk5m<1nEJO_F0?7L7?~Ty7cNddz87uIt$-tVHvj0?BmS)RNl008++=~B>qzkjx*sko;DL4Go4_m~Aa7lDO<$`qr91e^XRGb`z!eBM#jPEaYyf-nk zM6`OJZ~a1nu7v6{%=gt39P)Kd7Sq&F>-B#yvTKj6YoE=Uh-%^$Mh=~WhAJ+J5qbRhA6u-+ zl6}08LTlFp400D5%d1r}XYnYMF;qr^aZCSWlW%{$ZKsmf%}zX=R>eO*>KJC;+HODL zwBV+2_CohqB@NTw3#a{FLG7AVCZZl#nVleZs2aO(F&KlcUItuY^#NO@_r55}=8{!~ z4e{tc02ajVzWwrw#kJ6)75eggyK1gBiX3l9efUX9YzJ zg2hQIyBZeg4T^fNnPb&c&B+JwvW%&Iredq=Q^}2wOjx=MR7U`cUNz9f_X+6EfeMM4 z$+y_EWZgNDY{r@9pmj$XMt}E+&3fC{SmuVcXn2V|v8jX5CAA?!{vs81k+sjEW@-fK zy#cPr#FOI1{Rmc%5>1O%3OSRht8O+$Jy-TW2Kw{Ay?G4AN zISKf#U1!LbtmDZitIFtx|3d?AiH?Z>gKBe6iEBRG%a=;tv=4Ss9NaG@`3^kuFjh zV+?;r!v!Q{S(`^0*he2wwR+)7WA2nc3|mlKRHYH~Rs84e70P=5wZwhZuSqm<)ZA%d zIqA2sD8*NU=!lkuS|;3>XoLe4As4GSsner#@da(@a|oV;c>%WMu;ko=K9Whbo%hZ= z@jUMwE5}|i@hU$Ai)=o`gK-R+5Jr*6(rMM|NRreW(K4pdIrcYacN@RR6wQ(Y-3}%% z|0-U>GCsTgM^=m^g;w6BSRlY85dyG+yq>^(EKJeK1%%A^=#&wqQiQ}TWV@*bMTT_Ed5F}lESEy7N?q( zPNn-j(@&c)>hiNtk~ugjHxHG7Fj}$Grc3;d)&z*A)b70Itx7Gj4c#4xzU3U&nIm>XHC#BNNu#2hRL}4C4e~Q-BWwBwKP9t=R@F*Ccl>4%`*D#oNb;rV)98`5h%Eq|D$r413veu@$z77F&%Quo_;OW?g;hCFJBCAnP+L6?wLHtcEoDxflfzZ!a2WyR!nQ^ zLz~=Hd_t|F;yCu#K=BwpnnYIH%#OoB(B6QyD`8|6sUzCbV~s4fVOhOb>9t%Om0t}l z`V^ghZ%R!@fRAx&0Oozfvv#vl$Z{D{Sc0;Gq}|;m9tzXD>y&eoVfA)Pu0tzyH@ZP5 zI6VW%*ow8+1HLZ*1v{oOr^C*-KntUX7nem?dW}DYGr9@qHM*`}c}|ZNS5m<(S8c?< zvcwWyXL1i8Yn6>6@hta3a!-dA1^!@zcLSbIJ#k+3PVv5H{&F_bT9n*<%nOi`aZDsYIeUm*AY1D;AuRIlf9eq$y!g+;&HfqAS{lYOUI?SJ2XCOC20HI zNVCDCo)2ce$KQFhh@mP+)zsqN1}i3vg_b%oiQzcreBC}NFSGKZsXpR&nu)=2uRh(h ze$ZoZ-m_y;4b#}8V)96q0-1Y;YN#aVYo%nm8P$r@2Y>bLnOr)^n2Lqpp*G293#cO~ z`!=W37`67=y0+(Y+8F+L+MZ?SdkF#bKPQ2#8)N27SOY1Ohj=S9JL{kYf7fPtEQC32 zM}%AN{lI0%%gFp=d|>$(V|0m?!x-xjY|9tJ6(DR|oP%e0+><}0H{Fae!W1fRxK{Pa$T zhf)0or#uqa!MRp9CTY!i+SB)$BWoAe_hqkWUi935B)+k5HOi&!i)hp=41T8+C!#rf znT4CF)DyC12nmub&9q~F#2%jChwwqX)6PV()rwiN;#o8qGN;3VMe@CUl}568J_-2z zXs<3!34%Q6bi8VZKWPbG03W`$78PS%sn=))(5#`Qg}CM5?i)1mQHVKv>s&^U#K_a7514&48H zkoxdngVeV^3(_?8_oex=+*Po6dqmV}v~bH&QBjTnU)+B7yV@lH;?GXWmXFJaXMdg5 zd!;&gzLRWx={xl1Vh#l5s%#66GUJoU!OBF+63k)%3@s}j19R<|bXvUQGP9bK_J`_j zJvpP(9VXzmM?-aJ2&^5q+qBXM$}&-@zq7)s0Ek^X&yE7oE^&A_SrZ z?#>^O|4w1a_Gm-IzN8vK{_N|Kb?=KSW}7?Gin1)`c6ze|8?I`Rt6_DwG*4peec%|^ z(0M(tcS;`x!O|$XKf-#q&CEAutRGRrO`*dYl7KKpQxzIBV(YLLoQLMn)f@X2o;C@G zr|J`ou(g|7GEzTGQddDNfg-bTWe?SA&~h23&d}EaQmp1_prZ>7sKtSkGIir`djhbD=+wv z8s&8EPdW3=o{H^9@!T!(wvM*6^vtEFSKJ58%s zCcGy<^M0(mVs3U0|ED}M5Q~jdd{%4_xCEIFnf9I9-T)LW}?^ z6pEQ&r)EnXR9mZ}jzq#7f5x7^nHyBF@y^%Tu2|7?!Wp0p^6E!fd|ui7(9x4sVbt8u zIfqaf<)@_TT934ix{+#rm?=#f65ACIf=@=nQBP{>Q$2lo18TDRXZ~7h-yf2w#SPYy zsFs~Ve`tZ<#w2?u=NfJ21Kw6W@r{;+#qQIquR8IkM@V(PW$1Qca9eZOUiDW!S+Up| z60mwD=U<9drWBzhty(c|vX@`tH;hsdoylGKO_pKdVwX2VEKa&ugFFuorcfI^zZvj$ z^#|{_h%Q-R^kYnMlPA$`lz*eIq?QzqBZ~ZrVZiwdwRLFZ3YP!$Yx(6|y!p=Bo;CZv zScyZjyaSKzHh{>D@R$6w*cC7fAHr;L?1UC%n4sHPo(a}nCav&UPH2~eaIbHkD))bI$p`ENiu(no{X^NAn z4@8#-nn&z+OpG1IzA4>%s-Y78Ma<5xhMwk&k@ zWkm^GLUt7GGd;z|8Ot0m~L(O>vOd9cp{xD;24?iA6~yiIp*`!NlOztO2_(-rL^6 zf8|J3EZvvL^LQu4S#PB2fLd@P)4o_%ZP!JUQawM++m%~7+ZKm+EUmT4Pz%lz@E<@0 zjX+K27C__1M+?R|$4M;x=t#vL6%}#;%5CMEr9~wnvMg=s--nqy@=4{z#LfNuuTKV#V>)=*8GHwmMXKP)Cwr3nnO-)0r;%H@xq$SHig@a2r1C-&CxJG3r zrk)sr8Q-G+<;OZuGDZgdR?fE=a^~;uP1YTWtY7IVP}A-l$YnEE5cTRitWh|{MEuz1 z8uKu~yA_VxnIj!BHgHLVEnZahfm33k?)s0w&4kgB-wqdLz)!c2dpHp#b^?DYT@sau z$@0KBhnP*HFv#PS(!fw15!slZNED1UYQ*UF$H?j$I5w@*6P)6 z6CIs&sjA;?*#v3x&Ms(%h|bAuVf<*qraAeg22VD<9Lr z9;nHT(ZxNpaNnK9Z)&>Zzw%mx$K?X%vADON-e<}i?T;TQ zt!k?n`Z9@T7_w(D54LZ-tZ;lLW>WlJ3WjJmD@vkzXm;_KP4et|2y2lHOX*(p2H&gL zi2Tt>weo)lN3-Z>4mU1z=~r!jfU){`a(gkT_l&*j)SodHoy!pv!P-aFv6E`$Ev+qy zC^cQTryW}5fmAs#aR0{nPatwo@|3LW;l43zk{CZBFAl+%2+~_|g5{?ww7Ky=fy%L` zhD~P7AViwaW#2O?O){nFV#lYV^19mjM%pbS-3S&pWRu?rHIK2DGG*%ZK+Kjp@ve(L z7>t4Eh4nstVwy7-7JjGN=WM|a_q+!B!POVv>sgGql>bv|*8USpq%yO{GG4blq3t@; z{Oeo5<+0-Z?C%F{58#LUNaW%(clc1vITrk~;IpPcLo}md!sdj6qj8agY(?@%pxpuH zvZi}`@99GABbcUuMB(!>cZn)9P8;J5S82&UktBmb zpIF?9;OPF|HFL!U{mAzQGUpsCJx7~KK@L5nzGL*Y_)3%yVYx6qeC63KJxidzk9vPI z-3(~Q<7sK4%S6H!&ShinG&m|GY3E;De&@yE)#@M4(JVdhu@#?-#gTSmL7uUJurZD(pBtgToJt4BZd#+g=}*fOzn;T6RUQ0}@Y*Ac_BKa;{L zVLYyJh{OSn3;nM*pG$SY>B7&`!aF;yUi-Bu7Qd_A&+#zhrw3>qUA|dcv<=4366VQX zn4Y}wK~90XN<#o1W?pvB^19QW&heXyMuPv#V9?3ysolPZg^oDC5+GdukAk_8E-B9Y ze_kfoe;A~e@E57^9*dEulm=mmi<{I-l>fn@_O*$^Ks>~x&p&(ntl8WF!=3u)Xso!r~_VrAW6T;NB?fsijQuVCREIL`pzAJ$~s@YtT_m`;3q3^Zlk-6$07P+mo z1kO$TbVrKkjvKVv5PUTD*HLnCb$fcofg24<3?8}zx}Y2XIUSvcCNolU4)g~7VyydR~O zlkbb*#2~olCkW=mA;YSwl|s+y4r(bZvS%>XrhJc|kz4QuuM@y|0A#`ccx1KQ8m+7d zau=u)C_{5~qcwodJhV;)fXLi6WpOx{?M28v{sjZS=xELd?oWQwaNICvlZ=6 z?CbM<*mWPYKbpdV`5o)f`PPfPIUhUrNC@+wUDBj0)V}PpCs~?JDgk}&m(}FUh6$o2 zjPZ8-e8Oe5@s!!l{cWM_X~kBu^nrHRsu){I>*l|KFR%m|KP)~jsl>W8x;}3O)s|oI z(vT^YfoU;^I3KV?596_&lC_N!U0icwQWRu<7mB-d&SRFTmZ&QLj6mWZQgu9Sd>wtI==`Ri1R75>Pph>4D<&9>8J>{T8IsQ#z$b0 zOC;bP1Hf7<0WTkv3l3PupheV{~birT1`*{Nx&OQ1dYOT6% z-`xe3r0}wwccmmYc_pkyU!EVK=>m5{NIWp`@mKf_wp5FHTOxVdJwHCA7cnDLPfucs z83TB1kW{v?s#Yk?^?k8ys zgGhsmb%RV#OTuyCTLGKt^Gg|>GH)T2{>91_SL}ymw!YZS>a(By7z)O5;%Ul;JB-W0DOXM) z)EP9btWNfjPqdz8ZwH+(x)R!cO%bnTil~pqG6J*pCGn_3)Vt(yb-E@M(pLIEUMy!m z3%m{u6J2d%!la!4(*0Qb6v$L!0Do zTlNG?+czYpT0}8uq^O>F3#B#*q}l&HiiB}x!uLP2MO5{GzGw%wY-xtPH=vlWm#-Yf zmWr%JhmWkrU?@GT24OiJPPwrxZe1b_Hd>x}XwL3Ibk@E5Lm%|~|H9lKe0lYT1U!bv zymL~W+tnd=nWSQT)81AQ)&SlKk_}Z3;7x*$y#yMW5&`kqX>lj{?AXpPjV5bh?8^Dq zKvs2z%ja)rMxQ}-z5$$E{boM4BS{)%YpUfZWEB|j~%HKdKIExk8;=E#Y7{QfbWqQK?mw>VkpS+KIeHw66}EOeTp zeE(6-{%FPXWha(uyS1EPhB0h~!L~7WNy8*c1erz{hA3n7O;~n4qn*w0WGGA~1!$m* z1{z})(f4tV87{Z}GC$>i!AV4TwE3cM8g{Kqk!E7?VW|RBkBYpOZ^yV8{DE7z;#%u% z7rf*Nc`Xe`i1z3Ar2`)QpMColKOd(<)yx@5NpqewDxF5lASa*#68pVZSBr7x9+9w6 zZ>Q)l^~U^-T|sfRk2sX~i2Sw1*`MWaf*o>zO<)OOfw#OLBQzuC} zhb00MO~!sjzcC(VHf{T+_X0zO6wUwcMu8C{J-i71|Gwm0jWEW%_G~3h!y_czDsMj7 zEVJ`r0I)9*A8ekzb-Q|E$RmLE`5*KgKCN1?RF^(F{pte}VW;eqcdN^EnQ|E|$XXY(!6D2oCAO@-gFmG^zt3*6ev zO}*eEY{U%VOAU1tCcg()jvIXl#X|ilyxu*D-X5@*g%$xZ>K^?qmM-wbXcH^iHz-3I z%GdF|7mS|=iM83?KZ|~ib$4p5aD3xeR0zK!6ZRdX6g=PPf76$q5ODKm)#LHAI@pj3 zjov3+?|a*jG0L3g(lIvxZZ!jP(k8>IAD1N?r;1Ain7rsGlG?Qls^%&Idli%sZ&SY_ z(fa9jKvu1Q0Qg$?g`PH0Yn=8JfYntnh?#MlFDc#^1WsfeUTF6dUb`Q2Q?J=2FK_xs zKUEv792WaPs~$f1S#(FqqY>?XR=CY={=4V&VYEjG^-#HmQWykY`g=;-OX)Mh*qr}dUEjy6>@#dhkC5%Vlq#-Q->QHA zZ}o>RC^Ec{W%Hthd2t?#*NoUfofI6LV4eAjA-pWOH&xr|D1@=2phSuMn6Ic z&?IpKu8_n}D+Y8Yz~W+Q-&{k7o1tL_2Q)4pB(eW#j=Tu1@W{k%8ah0Vhxbfl`>9$2 zh=_&&-eQH#+PRiA4M-+2YSxATev>Na17%0m(pzEr0d4TCtBc;b>Hep*Y6!zXCaXI;6TsL#<&+ZS%YqvZu{uX z?BzVMo4&%GIqsWrc(-%9uAAh1-tT!H zno804^laiCTP!-kFD3v1s3no85G-k;ya=*kc4MZ_U3@@97ZARCL0xRKfjh3tx{Jj! zPXD71gY3tWiAs9$TBWvyL(vGho1u|wWf^{puoGjcV{fLp_8NuXxlSk+QMG8jzR0LX zp7{WWOgr2>ErN0Qs{|W6KM1S8ha!(rvju(=FU^eeGx3FhBsG`Ys_U;}*LY)NEUWk2 zZm`M@$TNod&Q6k$tkuq4N$wi2waabu{;FV#ISeHCc3`Zk&a9odAyZIV3*TDM2~22p z?OT-NoF+Yr(S(>vAtBCFwb+*JncFWx6v&1(yfXCMS2!;oELa(a56i}Xs8RWapsk$p z`F{38>AUMA>YVD0VA2~>XH+L_4X!8hj`RUo^+yYwzi6o4J=RK&_^#+BdBcJ|s2g1?tx!WV53f2Y>v*>jL?5AF!J#`2W@yEI5wY#CX91=b4yOY{UV~t;)Okes? z)}(_eF41ET8Dv1r%~80p`|$qP`EN`f74M@PUzw30lV$MFrI4j#?K+27?;I3ZSdZ(e zH7RDXLkX2HGaQQitlXY{_Vvo%LA~S=eKLm-F#VD$7Jj};sU|oMI2J2ik2P)EpIv>g z@<`5sXKXkC@ry55*}OWz`Ymw!z`uNNoQ0+0v?}Y7F06NSR~(3XAW%CF#$JqbjxZh70DCwZ;NSQ3y-yY%`;Ysj{Rr_x2z7uDlbj+1<+8(HpWIs* z|DrcO7PWgozz9+qteCW^r z-=dGItDhxs2+u{{4R$yoXsgsdemGxVU2JmuCBL4uw=Eq`1l(ur@lP(YrdcBS3MctSo~(^ z=I#RwubNh?kE?Fy5Fl;Ta+z@|CQ;69^Y^oPSuqV4Y{2q1^N%VOCCluvv?|gMG^jRQ z=x#6*1=$g~C~h=rVszO#+VTqUK_PFYlfcp#!DwNw&C*2ki%(}pPh+PqADi9Ukwusk zfaeis8u1!gPzf)+-dboY4@gT1u}miC=V|bz`Rl z6~UkK=1`7gF-ZL^sL3O6eE0@#WL&N4B)$7^xoxkcM{UDdVC@SALIIJ5+~-ksfXoz* z8;w1Pl`RE12EAkr!-xJPJ7=XttkYzwW~7KB#ADc%+eLV6dJR#Z87KRHy#U&M@M&-P zq~q+j2MnMd9NX4wRRAX`5+WRGbntErRyK)o14_tDTYI9eXuTo$_U#+Z?Cmgu2-I`| zCw%wz)N}rG!@s{)XyoMMPPw!PLzY-Ek8DftQL+ZKo0wn(;dZ=~OscyM=lu#&3dl|T z1S>XouDx+|xLN1*#Il(8Fq=FvOuZkgmeBeU2;`fm`|w1G`e$-sb3nwRqfRV>{Q&0A z1HjuX0(`A#!5ch46(pLDZw0lemgFRm%YUn#GZR=W>nf(m;km0LQZX?D<24yTb`aZ} zX0#t6&YSb^LveCrRJNU^3`muQ8b@7G_Ih>y^@`->^Kkw!k+M`*wSSwe7*O)ZS z+!BPO%3^lCfU)VhBCe&il@uR8p^!5hB-czKyKGiQHcU3(7OkG}A)~Pe*+OPgxsOUF zbh#-%irwOipMaMTQch0*9P;OVc~%+`-pO_y(j<6er00G_S*oA$3RfgGSwV*OZ*B_` zcaauDqR`6aBp$}HZ@WYUfe6l3+cJ${Yp{*SZD!?2hJpUbYl`g}__0mVY6K#$k)&%@@4(#wf6_i2+!NH`9ot32`uqt=V^H;yas9t zmi*+AFz$2W1Wnp8Sf_|&;`Xy?&{lZ;j48BmXtgbMXbaMCQTQw(B;BMiCrx&4l4+W6pi4&Jip5$|nQAdo}ziyYp4B2LkRaUo{T$(_~ z$Jy$emLkm;lR(d7&&BDbj3fw`?5m9J!P|G{=iDUVA01pG=5M5^gCGB}Of<89>@3 z!NeE=bbGvh(1HX;>ZY30eM0#kibDWN8bXcQr8NYxXc&fevD+y-k&?i1p0- zXa4Tw0%iyGqX8?VM4|dL*FBh1CY#i3jKmwc*d>kTJC;SWU(Aj^+sCZ1v<$RSz%5oi zi&HPje{_n-GnRv4(*B+I=66FWF7}betWVTmH_d{D!sU5njPTB@T2Yqvh~djqn$#GR zNBqT0sbOQx=eTyi^1i#kq8eVI^uw*kMIL+7FddF@r+I-aKVKHFn-`%i-w*K9(v7gJ@6Qyy9|j;n2t4v3ta z|4J%$Umj1*4(EXCB5-JceXd_atn!%bfQk25t}$!ulXn=3{d_6hu4e+qOo0h7+_xO+ zoNfY>r z!P%(B^y3N=oYi&d%_ivj)!?GDnsurXB$Nc3Sc{YY8I&B+)o>2UTd`IynRV~~yf$Vg z{0Nlmy1lyPO2y0^7VteG){vnoB!s@JVf>Gk_FgGsKc$|Uc#M?*(8;Ni2 zavDCzG&FjD)=uo}0+M)luDk@%d?#KKqgLM^;b#jdi)eWK6-6@o6V(lrqE2C54Vt}*`VD_b@ zS{nlO3V?EQ(y;aMq~%h9+jbeg;mw%BpYD+nPEZGUUbnkq`Bt{&w)K=eOr#-#gv1=5 zLi-u}VwvjQ04s?CX=+Dvp$prFn*85%dKo%nDno?Z6}2Hu2h>H_F8Qg0T6wHlcqfF& zK0GMb^v+M{78l6j5BK7if{C)y-(XdRg>0pmHqU;uY3>T87&dUGG%QTLj3;>|1U9Ht zTj7!oH-8z_tF0Rk8D;!YdvKQ2K%mBf^^5cfd#+>cf)KRPQW+cLgZD0O+BQU45r&I%jaVA%7^*EWH_K(#Aev>fqMSphMd5{j!Fs$_2O4ZK38a3ybmhbZMwP_z(dS zv|Zur`0J}fgWO2YzUhaVCkG0>l?Lyq7cU}-bT$%0zDL)ppr}lni5nJQ|8XQg#XcPV zg&#f>c3N3f+a9Zl-8&rzaSCKX^PvyU1y0g%M0lQM$7B(-hy0p{xlKNqdxEg&ppea! zo%7-rztrtqxy+dg*~Gy3Urgi9U2ed}Wh|q8vx-*qs|)t^~UbC&+pMLYpeKArsLm`tP=Q_ zpB(bs=+@L^uu4pHPq0c@UrJeJSY3|rpy0sIt|!|IJy=7{YfetP4aV;?iI|HTb>Zqe z!oD*A?$LK-=G68hN<~J_hW>NW6?`I4JaYftpXD7VI%*_^ zMJrwY+@qb(%AdufQ@ZB%Z4PM!CT?`7tuX#e^NOnwwH3N@rfXcauhvlyYRoT$rg9&O z;9;?3Duyc3{C$cM_-%Cf{^hSR^6R1Gpu7Z~XD;JLtBpEz7{^Jf-|&YC_MR<~L}>;@ zH{dY`16ZO=`_hlGFlD51+AY>pB@&Y62ZwhZ$EU`x8=?Y_UAmboFGMVgtwRP;9Pi~k zz7i%$WYz^duSiCooo}R{E1)#m8jl2J>CM2dUc`Rlm1rA^{)0J>s3uj?+ z$Q2nkq>b~(ci7t$2OZxHdHF=J_haQ_*3Gl8rR(;XoO;=sV4)K_rRr3RuT zx6JuTQx#{RF(#Fxyus6*Yi6uN!m8QntuFbLB#BQ#o+L4wU$XV)DE6g2H(3Gjs9|oC zR0=}-$vI299!TQNLh`sE+4y*Z%0DFnDf~2B96dWIhh*_y>RV5M%k^c8q~0%Ga>PU8 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 W_P-BA|l`%x~G* zQWjFe0$wLOKSs7RIn=g4|dQt}EiMnHw{Wyyl`xnA@;!G7RABo4Lb zlp*cgMJGB;UYUtY_t=I-KU;7baRBAKXL$yB^QM*_sorHhI`OeN4-cQDOI>#67D{JF z9?iv+wMs#g4Ln@@AnrymjYQF1C_X{V1gB{iUQpr=KFg$UN7~mre9Ck)bm1i*;!f~L%IspW8%;(sW&>bVcr1`NWB-_MqZ~&iy>5FXh8X%zDj(Kv|Znw9j-lN*wa0Wg-*y z`7Ft`OQKeZ`w@oYkeMSBO~_<$Wska5+tV^As`S7$TAEkGtYHdYZ-Y7rr$T23rzIk*N;z zgz7*Nesxc7kMC=wDu2jAdNxMWsnWX;Z@Ti1SMu*GR78`#V1nN>GL_}k=Fk!;3Ox$E z`~g9PhqoWDs$xz{+U`o4FNgU@k#PTFQ)86%$f7)vcK9XzA)!1dY~(Xd`Z+{U_pUzO z7jfE`WHrj!H{Wirs2{RZJg`b|O^YzayKFYrt2M}+Pm3Hc?r^b#snD_shppSS*En0i zG->|XEJFSlcaL7;L-040y8E4MB=Egu-OzAQD!8__)d@;UYA##4FjqI=Tt=&wA!_fmi$m$CH zrFmMkJLy2F2)Tr|DAPW^ZcgQ~QO1$5RM1%43*?M4{p!lNlKctnGz%EKlGl5xT#2{Y zRgy*tOXI%h+DiCW!pKG26J)d_{i1mMN9ozBBh*^59N2nVH*&ZAo%p7QFQpNB{rC!6 zMsL|?cK%4Mfku7q{IgBSE~UbothOci>|l)PcBHR~OqC(N$z-~#vzVpAbc$SK`{{} z$4+B4Nb6Rn$+Re^x5(HMU~tGpxr2)x>Z`9T$3kWfzvFKgm3b*bSge9c zUO%Nv@x&-2Pg&$nP!t5oyqP z{mHI*l6XsM^H`Q^K{6#KCYI8=(UwQn>cd8Y`A;Za>HwEQGn?4^9q%_EE}Pn7RMMUw z^&gzB21kNuY2O7T@gt~^)f5P6p{E;tA-xMTZ$i2iFN6(0aofwE4>p%3gJq@cGTbqT z9l0sjF>Uz75L?~#ITp2dGg(AH$nx#-k@fqF*N^>#w`}_MfiLVUpr(gpMA{slyo}1rs@e>GfMGF~i zT33}{PS*6@A;?A*$=M7eb&%o03b=&=2hW)73k7_Hpn5ga_xJpDsVMp zthL{RSh#X?N>QVerXiPLia*>3m3FavcVI3w@M0BM{fp4cuE-U)olF@=1U!7MO|Jo> z7w!63^10ud)mO=huQ~i`y{;l~F%r@g#WFRhz4)gGxqs(kN+%Ke@Qc=Otz$MN`8c_& zW;~HmXu;#|RSKR@Umfb;(CZ7uw9s!-JFq`~43d~2UW0R6@c5S9c<)NB9#Nz)onTW| z9%Kudk*I#Uw=aG5a)QiQ1|Qbz#42{W@CBB~^jfeKF^ zHcE}{jfjKkH-$y zsqzEBw(l1P`K}&kOIr)O@C$qwH;OoOQ{CjqnqQT;+~1qVc@O7STi? z4_^ERC|d7Z<@Z;16IJ4fI{)%0)){+9P=3eGTJjMo${@GUR;MQr6b#)p5m-w={qGF$D$OG1I?DvEVciKtFsJ> zE8My??!ifr;2tDcaCaxT1}C^%aCg@PcL;&T-6g@@p>b>6UFUG;yWdpJFRG}nqPvT8 z&VJWkYdt|Me}iuoN_ubSFH4F(gMWyNrY!u-5GN>jFwf%X$FHpH3cFUUuk38uxg@$B6 za4%17=t}M9ekpTUEJ>~q{(5q!2E6KTJL{z++j2ZW1Pt&&buQF7Lh#Rj;^0-Q8O#n+RvYNM`mvJ%F}W zw}fD61Sa5{I8G&65DP28>v*=C$H1D)6q5DFf0E&o8NB?s@iAh?B2U&(8?Kee1mL~Y z5s0(FHNq!UI9I@Rp^^g!pl(CqY={L2cx{oI4548({ju;%ZN;K67qlWe)*TkELEI8>iRR6~%wLwoc-$#Um- zR`G$Splk?l31(X;bXX+bsFQbQ8eSt z2qaRCq7jdDO$HEPYesN(r0Hdfic^Y#TxzZTn&6w+@9F6+ZiTc%87upa%|AKN4B5m< zsr-8pBKgdiG|`eSS%4$?t~-cP9fUDsds=PQOd*AYin~$nP$4XhLB}LdY7#Wv$UqmF z={=jPW+BIU$AEYdIkJl@p`3UDxP!6jE$eX#lcmvmbX>@IRbswAt$~G_CY7dv)SG%p`o? z!5A-_kJW&c;brl|US&BekAN6CN~AslaR^=cypn39IKB9Ul6LCkuxHVUY$99$r3@}1 zG)=E5!4v`ZKIT*cRmX@tnLZnLaFuC~Cs?#mta7cN8&)STiL+1UAt+G4vL7&^GJ$}k z!@KERxRtq)k?}+~S}k2YXeNigyJ}&28zWhtb(?y@nCufQ)1zVW$zDuL->roC6D;9$ znr&^#x=?HC{ST=XYHi1>jh9iUuPgxH=!z4SUV8*??Rg_k>jc8hRMnRj&k;QWC?ChhkzOfVwpN%EHQu<-h7HkptmjO38OUx=g;= zVI1Cf(=9^(s#DuhBU%F9X(nwSnA)_OAkM8X95|K+OHAvN_g-)>y)O^`7*UfA=g#(3 z=aaC$*4B16Y$0d{b}|Yry21t)*Y`Q(>d^Y|Q=3@~ZV`o0bW_-2lRzs$#EP4#o3iBS z&f)mN$x9X{!pZK-H+w(X)d>oF7BXx0=^`w?UnmF}Do@=*;M~3wSj_f`rDcPKlrP{%PLb zXl8F#J}RBNNUwSrvhI1?*VdV07v3Cd;%VmhjU%}*WkmdroMsu(MU6McbYpl|!g(*D zj&jDU_Bz)8zPP}ZqaAu$w3f59>F)PlH*<%x(>|es_}Ko)?x|_j zUn^jh?e+SC*tNoz)J|4q@yXYMylB`oeB3_uJ@05{jojt#C1UB`I5o!OpTRUYot3U zA}9OubomX|xyhvSnJ~2Y z+s!$UMja}dp??4t@xyC>=k|2Y3kP7-M*G+UlT~kk{kWHU@VUqQE#eAgPeX+PHs7Zcn9ADVOV zYFSHpi=v6QdA~TLM^uO@&aM#<{EUo^jrV}XGO#>0*Ryy#dcD20Ex-(JG1&N*4Mkp$ z%qaBbkG2`#^b54||=EHdNG^f||q#KJd%@MlYGel|o3f8}+d&SPR&$_kDswWOf| z>$P36nHwAi1@TudePytHRKT_N+3v$0!vUv%oZJm9aC!N`<#8Mbg4a`cY3Q6g7A3uV zCZxwMzjR=rhxa&vMnUg?0klsmPZWB*Gvfmwu2<+uwd47iR{PsGvEYFS zvPoWKe63~)fiHuIoTR9dYtIi6@4eKIrH+`Ndu)YBEJ4+CP8&TEb8`{n7$3Vg zzD})2U+3asNvn#(Z!1rs({pZovz3*Spk0pbuZjuAISGvmAUc$?W0M|Aco35a3%F}V zLWk{67$pe!8d+;TcJXxi`Qjp~5&)c_<9*b0m-|8K4)Uv?BRNum9k&FfrKN3*@tvBU zuC^Dg{z^+TvbBwQD@_4v{Y)3M;>H2)-v-dyw3!!1B3>$uy&E7hJY1&NIS^{4vMmH$JBS#UNL_Qg}44?$)!47ORHQfz*xVsTAi<6Z|8) z<+J*0b4iyJ?B3Hd1IplWKY^<#+-w_)V%-Q#N1o*mhve>p#>Gf-ds@XQo7dwicHHtw z?>opNg$Z*-GlpRI|FwjCA)?qq;Z}viM&2J5MM#XVhw`(RS?e$sq)9>CI7CuI+aF_O zBzPrZ$}NDQmpHSE>0qxDG8bJ7(OB`seV_cBtu~+-jW) zZ-{Cxs2s#z(eOMI$Ez*Y-eGi?PJRt(Aj&Pf;+j@H)x75Xu!bWLd3ao}W>N2=`Y4dS z1@SZpAOBh3K#f16yQg?nS z1jUD3xxNM+@(a@PGQ$>(e`{B(vPlVd@b}QPbieZ2<9Z)8(V^dYXs)xZo@7^7NmKPuG52qPve4*j3r7r zl1RYm1LiI62#|H&&=Yi^iBI&DQ~giYAh}#ifjAY7286I~axB@rLeadT8oVi-S~nNe zG$h_Ep!XBi1VuwLb+ASdTdHJQgo3r0j1;YkTL*+oFz_BT!Fz6g4O2VYnd*~7=-R;z zCHdcpMfb%scT1eBplYO{zMQSD!_!YF7<;5w?DFAr*>no6D?spx^$U+e;(=4lOx@?X zY2G0k0su&tv&H|z(h}JO4QL7n?A$+3!>Qa~(wx9w1~uHGR(P)@!6I2|U5z-}zNC;_ z9cv{~0%_f36)J3IgO(AXyxn6bMf0r^!6V!G>CW+_^VJtH9m$tWpKm8g0CQ}{l2awk zvx-f-;=+k9(f0=RZ%sPjiyg8e@qZ67hV1kaUll~uUv*HDS`;qxuiAd(WLP6YHN+Yoxu zl~2;Hd|ivSi(@G&MppI>+Bv8?$LK1aDhU7xi&?)Vnl%*YadHC6!B_w&Mkbbwd z`B-&Zopiznl8-ddDCNV|G#EDqVP7ep5G>0i>}_MN^)bld0QC|U5u?i7F58!rOgWvA z9e?YqN+L~S+CC40cHd^vTbrqgf`}0{Z#?358tu9w_*){&Yvpaq!Y-wZNV$@UQ#li6 z4|$O=eZZWhHt97lN1nZTTHJ`9DXd;<0v?a7b#ZY?T6S6yNPQv0>gOY}PEmOU$l;|2 z{{3hDi-Gl~IMo_V50wuX4W-4eM8&$I>pezNTGl4-KJ?vPm#ff`(?!ptNyUEL`02a< z^T(Zl(CF0>qh;B@=1a)^lfe^@!OMZc6p@w?eC<3bRs9P0#4-aBP5$o(jhXZQ*p(hc zp*v_G%Cg(Zg;2zBrbX2iAe*mt8sMF|xvi zY+jEG7iLmfRoW6lEbM91Gs)^pDp&>^*+*$;luW}=>#@Jtu=%929wE#?Rg^5l(931n z&DBy8Uw4@^^w-0KCG8<;qfsFL6ZnL1_R!VqB4$(ktWT!Q_G4t^;-S^$PmVU4A@tKW zHl?Q)mRQ?vvZF_UOSl(_oZkhzzU9;%;_&a2MSRoE99!Yay`u<>rRX1>BPCwO5d{Ye zk6^qJGt5J0~Bi>pFkQ%|B2@l_5TYkJ4jR#3N5n#1O$Ct10s z5nQ|AjZnHcu*&wpNC;tgeqPF1gL*9EYkB>2`FS~Z=}hC2Tlum*{_a`qlynnZXdm}J zZ))PKP2lXQ+1dLLytZ>ST$yNAtS6?tNM;`FCwt_AI13*@z_tfO&$erln$4RR<4-CFFs0M(D5KoV!llw%%S5T>!- zdFnboRVqb8P+6$NqaYIGvU$ zjN9z~Aqo2eS{kRXNSarl7MF#bOt!kj&<=qwF{CU_D?9DlRIdPg6 zDY!_j5|iAU%qBETd0DD_URoez{qN@CP#mDDS38oo4VubxJEpMFWa9tdkr>#1QG(+Y z=)Coo6}i8k{Q{sIgW^<~T3tBG@*#)Dj4MQnoLCT6;9dgE)s5h{IQ8J5jPH)7Z;0O+ zhA$SWE(MFVb<@^OlJ_E;&cD|d-vW+7b-CL;yDc@_h)4DqT6;K4?h)2Gbvw?(Fv zowIE%%Bw%Q({o3P%YeP^JiP6%wZ-?zK*!|rJ$#B$;GVonY0iHaYhAVINO?GpSdprm zy7hgB9420oTfLiFR_csbTKVyJ*3^_N??)cb-~y@Gs=Brw93}4@arKTSS?QV{!*a2F zn2FvP3u}{}2!?jZ!?nSw9*L_~B3(4=o5(h=&!PS88tRoZY z3Qr+^9s&6wJ~8`SOm-(omOccx1ulW=&++Sflwe8)KIyiC2OzI>+(4WC=C$kYd~WRQ zrWLyP0tmwx1ZW6F9kIOb=7!AG^oxIEuLgfP80$uK)dCOnw;o)89p%32LF?>1ZFmrT znYZd7_$OBdFT91(UcFv-WA!Q+M`bU!u>dFiBMr6+J(5T|pihi(b)Lgnx4U8(elj=U zlUuu{$P72E@_Ze=%w!yX>x%(g2c&)Y$tnOH4`3AE18-`uc3dzjIopClL6vl{W$i67 zez8se#<(hk!xJ8tFye7ohcb9vn*Xt1^s}PL*KXvl4s_F!x0O?P5w~!3+ahN=&CsPC z#uC3YU6p z_Z8nrUG$H+U)Uk-Jf=`9A3`v241Rt3Q{uRKUQ)$EN5;TU?q3}c-4np@32&G7IiQJb zSyPh7jPk1>183mKq3{X5#7xV^p==K_7eB}<@GR;Zw&GO`Vs;}8CLKG8JSBXg6=iNm zL{sFw#Z8*@0%qlBn`^X5sIC4wjGbCF|6YHO`2q9qWsf-8337kez@KK?uPtq{-;1ln z-1+Ku(!>Ys5qg9~?UyF_qQS^Wt$9*J2*yJTK(j__as@2H1&0)2zWyM;&Z0%VEygb9 zs1y5!3r(QRZJ?BJ2V%%8^LY-}0VhB&7<@L+9oE#ChOaK4QLMl2ik*Y@l=&)3|^ z?-B(ooHDcr!8q3t3@mG#^KzQO5PZjPwf6sN6x1Z{SY-V;9zhm`^uC>0g?ZzD-3TE^ z)oVOl%WHB~D&9&Peltd7iP(9;?o+Xz0y23i4udy8PDY~iaxZwx;{4BT0zWk28HYQF z+OU+`N^oz)z4ciEt(hIK&!^5n?ROrXf#X<>HIX>dZ(csWe+6-ZLqG$i;LVyhyY>W= zY$?j#J0Rchu+gKP`tx(Gxe*CSoyUFXvJFlUm7LrCfD`3(E?%V$f_rLuFx^(y4 zTD1-_u`x2SNGvF+=$MpsjI+*na5_F1^{iKI=auM z|M=V5xNd0jvU^DI7ldb#?DL_{VWa~f0KjDZN%W=)w8=1qFUU`ll-g;jt-%b;r_<8W z0o=k^{y?mcMM%gXu;id&xT#{n2E=bQ=0$zEo`tFS_b|OdgTi#22zt^+{ZRjMO*W_{y2I6A(|=Jp$m8%}gPqXHuSbJJ zjOITmkhJNB6@0#zZP=%NXU$#xxlSzb1EO3CpjtKuFAl>V4OgsP2|N)t1pbqrI^%ni%_L1 zS1}?eKoAzm@3mcM{Il=+^G8ANg*a-hj+^VwT?~>}SjA2!LX&@(Rk_Ie&F_OX!28d4 z?xjhM69tZF2X3uzwO{-f0k^fE?}Q~NBAlK{ZA2YyW^^>E-peMuL*Rcrs`b99%>njO zH}(v(_#QK+Ma(-iZaA~c-grGhbs%cw`J%4l1E|ik)tue+BmN=Wsupxf4;Wr*h6BFFs9D9`H+LKo}C-$QWMYo9`Eeoeie?aK@&*a=Ie z@bBKs_mtNPwIx=8ca(t+tDHFB7)+0*J*vn*NiVTX8htm4H3`FT93Ir=@f~K}hh$*^OCed;PeZ^Rvx6+?%ckQ zMC(>zXk%g%Gd_Hoc?n@YD=^Q7?3-tArpzl&>l&DR_l(@X_ppB%W|!9|QxBBpu>AAv z$$=){r>zF%pbJ-laN$k@Pa+%+vtLMy7+=qmhys1AbtgMqvrfW1J=_V{!EPm=~$Cpqmq`e3Is%q8Duxwwj`XrgvYX zO})Nf&UqquJ>hy0@Ow%F5ETrS51>HaJUueyzR4-rPEj6TGk}ic87p(8?HRg)CF|FL{0iIPaq`-huo+iwapS38dfZ%RLL} z`96fk#@VMf_x$#k6I@6VHgqf^LA{zYdUBm3cZp0!4iX^+=>oehb}lZZe4Md%x6tby zR}_d(DGn2TIj#P@PE~-jXteClkJ_XK2fI5zm4J-zDI`IPWTW#1FiN-3En($I^ioOn zp6StM{Kokj&8G45qaRQn`wRd739c6p@xXsvh7$0pH0goq>c7sGRkb8j9^)5WR!#bB zeq(GUn(DAf8wwJyb1K~FAKvPyLk{qjL^Tl_W$M_9Z))lro!H=^$Pb@06)kI!Q$n9b zU}fX^)K7@?aY1Mkh=)rGvs8JO2yQTr;i=;?c$*rKhEwqd&6x4^L^R0=@v^CLp!Hjr z6d=)3;CQ)Mf%vR+tiw1*IGw%Yxx8zy`>++m*O6#Bc@A7zFB~)xI4k_zj(mH!VkEgI zm(MWCos?GE|3n|4apUACB8RymFoBP>f0eA9#5b&mK(bAIR`^02_|(;4GzDT10&S*? zwtz|Q@uBtR*?oakyVR<{&*PpAIFVD{oOY(^+6!zD&jhumtJU-+c6`}0R>Pg!o5^<# zocpw=9pU<({u2Z#VhuCKvvFP*;{7E3!3Q#29Zk4wJ?iBQxOF_OdUj%u-pqt0Ivv9q`Oe~Yqu6hTVU^w!d zH|+IoM1O9j&J2h97>HDuT2Ge=?XnLCJerU;?f}c!_`j&1GNN@`^Qar*Gd#*42uuLg z378m3Jom@}XYKyACs2R5y-fvx(y#%pd@$lSJPG7CLc%3vytb;UYy4@Xwf(cBv|W1f z$oT2TTQ|U)d3?yCA55&f<5zO4-}vGa)GxH-mKrb3n`dPXPY01rPz9OfN~9)ysZC40p0kv+6qE-gdi!alTG`TjggIP+=1?F@gQSvkkxPAwjbN zV?h-t=5#1SR|7NGdyQ~v^M$S}4T>8%tomh@S6LixeIA-r)StD0rE>8^G5{!Nl>uRZWqFqMPs}Y6)61EQjES$da-2h?`ktKjRkjV zWr~yb&fE}lsx6i_i={dx>}qr$h3U%*)DtZ$#+NDB-$;~&NW{XTQeq6-Vq8nXR*HjW z5=UQW*h)pIl(s%ig)gAFg7}GNPb13xiT`Ny{}GY=YR}hmT=D$(M!Awf7uJ1Hr#0TV zsXdOOW+AtU(8pe_aNX0-qT$09r{d=WOH1sI=!1;w+u8Ba+tlOg0G-mGx|c0KD&{*= zXE!7Z&BCKgG!%8_Qau9xO4w<3G!*j@Q4!F<1c*``D37YqwK8J(JwkVfxX~oTkh6}F z*U=m+*6{D0U)6qg2=xvM)Bf0_ccfAwNlk7_U@(J2kIuekBf(7`ybcJOjLgiNnM9Gl zbmDG&>KifuBM{_0{RW_H{>PKJ?0(w5M@5fJTQ^5$WBF4D80O5(()dYPI?d5dBHx+f zxWWM4a~^M503b^E*8R2ETJ@7k0mgsrU4T!<<%Y6<)&sc%bdL7oTQtR+qS$5LWT_*8w+3Fc1IUKLTlV_6f-nucNk57YcR!qVU;bAA} zSUF=fje#PJcSGC;76=>GrLghvL@0jhi5OiHb5>}@+Yrx&P;Ue$Cjv+vpyye(%dV}1 z$IqUZ+n#g0J^jnrZofrO#9g-5t&V2wq$~FN^(>xZj^Jn-yLl5(U;r4u-Y^pljqNdj zqdKwJ@;}8ZTW>sKC6E}zr6P{Z~^YYD%QG`p~?SVsB$v$Df!wBRu zBb83>X@*Jq0Q87;u9eImP7;-~QPQeXOICS_$@M9CZxtB;2WfhG8t^>;g|Fj4Fzr|7ug&`T zF`(2Do_B?ldkZ?M2X(*z9PctCSaef(OPEzr9a zCp7kE&@N2g4(W}>C#p#Cv1;{gN{e;*Qe`CYP9||Z(_}nb0H|aWds-fUW}Iec#~jqK zDwOuf#yIY#2MOFGW;+-I_i|vX>E(SMWw5>T)8O6B;gU-==QoX*2Q0Ol;D4dVosw|9`8&8@9|bk-FOd#LkYamj$Df3=p%6DhaTj9i`HH`r=d|TSKtv`X%72J z#C2>HhA;v;QguRYRhJnc3mv3A9Ot+W!(2f4R<+L^im5v{D{8uR>^rC7#)^ZU76?4$ zbdUIaQA=))A?qFRyB3q}zY4S%Y_pVK3uok2?FwWnKYm_j@%|AWU0u8odMk6V6<6-c zfav5N95$cfV9fW}0^VV-`1|sWRw2?vk79kZ2(RNBbb5YNt5n_6BFiv2qBuU0oq0xP zV?NxDPmb3BU|x%6CGok$5%$fWVmd=EO@E4#QSg|TgQbIiqh3igdZgr%v6x$s8Dy>&K zvd-X~`*iBmv>@DGC;UM#gi`3hrsUk@x3~$a&=?XmmWrxrfHbEi{A=bU=O1NH!*DcJ z8xos>=Jyqq8D-;y1V@)_GUPH(aQtJ|S@1=U9-){hvsM6G3;yLU?)4Xd{d^sO2;NF~ zwhN9aCkoHmvbj3VjK;0R3fbHBAVX6dxu&RX<88KN_(DWDL{O?{| z5l{uscX0%m1OGeE0qgQn3AAY^uArmBA3`M&4kKT&6p!BZ!;olxfp_T<=-zqhi&qej zDAd-m)&b378qJNr9F02x9Xipa(YZ9I>|atGfa>ClE?5i)V3l)PWyQvug(DrT4i?%=F8b3Mpo9c8P!=0@Cdx zYa=^CZ2{|;J+Q}tU}#{Un-=Zvkl>$8r&0wUa-3&2B!=;V`*_2AHs$>Jvc6KVd&nxF zo(GirorR9@k1b>6R<*^Ry|ryPQhE|3wItg!d+hul?e0!ifXHDc8gD zF5sPAt!Z}k@MD+qJUW!Azd@oyNTCr_%JeW2%6GprbsG1s**eZbKA-6VWY4D^17G$% z?+BFKb|ij8Nf=@`9dwfw?_;V!@A7)!Xq>FVf4`mNeW04Nxo{54f2C?)#6Bys2UinN z$psm3ZnX@?F(~=htKykh?b|s%-*NM$0}!>(fI)g8$RIKh2q_6(B*dMqocjI*xUHXMR{$eBRFlg- z_FK6ZkKYS6z^tc=C|n!2Y{Z#TyPOciIDhN<38*q&p06C_u7UkR6qH+*K5hdeHa5?4 z^e+C<5?N8BW0JyO1e+hM&#+w9o4*GYxV7(y{&BSzeA*fY%gzoM{LaU=%LJ61;;B|M z_}Iw;nG-7BC(hjxU#xp)d-Ncivx^%AZ8iIgbU4O{$aAY#*z6@Kq9Nw9886V5-7gM8 z{f+I6u+pYH-v^^zTT})Zi0gU@|LFWJyu&8W3r5cM=3|ZF&>y^{p!02&{D6$HSuX*K zcRrLMmyh{am_0sX<8973-{VP>Tug-~w1&ij-Gc3j-ZGb@XXq_n)poW6)?`T&mQp)) zK&NrJF7LVH_}2!W$m1O%y>21JSJF}bJngw!bQb&fy2h#@=Yc(@4FCJmpHE7QRDnqI zbdA-%mG$^s@*3FFw$^JgR;t%69r`LqP$N~)$`ql~fPlApA{!J%xH1m{Yy16yH8a+& zc~_Hp>>}45-PmeBU4!z#gr!a;ad3^(<&)r0g!E8Z*%m8r3N;!TS@-W@&rgC=*cA-y zNu5+{envb=$nO=WM#7awdme`}N%br`#4vnmS;>oF3VfoJrXFUCK2JEL9=%BjJf=xe;+XjeKSm%IPfUQqDJ*%;ikQWRdxkL_3xMWy;&=S z3Y!F7pNiS**%HF0<5*hpkWD!Ek6`!OT#?dV*z8TbwJaetyfnK_4sSIX#* zqqlK0N`ZNt?+4Kj|024s%*qF;`L_R2C(6TF8cMu=)HkJ?ScwM}6Y&}|?k?&4{tBtn~r$kFV$+KhTDKs2a>6pW7t!=^rJi#A-yOkm-SKgEVN8HySSp+Teaj zvuP`qj~fv7xtNaLQ5IDqny^PJB%lCf(V?|RFQMVhO*7`tOto!o(R1l`jZyWHtA_rn z2!&J%(>40}@5oNFI0oH}n`ip7w8G|=oJK}N$Yii<_z^!yYuDM21L=dS2cJ52;EtvP zN(TCxzta{2ju~=WhBxgGn6QTBS9k0qKCLzPLp8?K}Jk~H$R(j}^usJ@yI zWY!Ue1Ly9hSZUoz{k5OhK#@Dz=e9HCj=O)KFRJ5wqT_t83Iv5S=hi<;K)vp}&2xQC z^1_bf4vnIiX_n;aS@njZj>IhQ_IJou9~_kKD}(uLj<=gf7}Q9aNjiV3)xc6os5>|3KO_ClRRyi}pbTA@q0ywc48cfnwJ z6`NJDUmw*(%lP0M468aM8Dvbh(=dg*Hcaaqh$(z`i8cZCjt^&g+6Y@^MtZMD{9n3)Ei=oF6c}|)xyvn43F1Z5l?>hA*J}}cL0GYV&LKN&;y7=^gL}+|-3dJKefi8eG z_TRr0tj}xw3YwdwkJ-0RjDWD=`m!kWX#Vs7w8y?X)tKoq;c(KW{YBR^#DcBxxAQpM znyHtWo{hOV7<0yNvWqc-?Up?8~-a`_zzrRk5PhX z0u9p*gD<@noUK2L1U?jh%3G(VMB>L7Bt|m7uXB=rPD|X@cuL+_}xHYh|SU ztXAw<`eAk1e?@Xp-uJ@>yKnq4pbFshV&3nW3pb?S>V2OFMQe3zMOz?duKPx4FnfV44mUY*I_ z^l;UuLEc?a{QAu-IQO_OgMt1vrgJz(R&Wegavx)(4VF>RI4~(i5fSkdHR+YKj%|50 z;QC7-eL1sC{i#{e^c+2B;57fxNPw(~qznTzV04TCr}8&&8*mmbI#~c7EC5*<_zbTg zI0r%#Q5S06Kx5tVLhUD{K)?G zy<~^$L`Pz{e-2t7zMOySLzhBvjrkXmSkFyVe`xCPG8CzUE2RuQ7nUy&x#4d2zTaeK z5+xWXXkD+kNJ%xzA)kQtOR@d$JS0LKd%w9Fis10Iv@;u3M3knDCvhkR#+*EwZ{wY1 z6)Ro-cn2Em-Ow^IUHRIa)jn`e4ADV5U)@s=Y^=t=2#6lEQM4<`DZ!}BdkT(|{AckCcwNfu@H`Q9CZ==Gc?(i7bmhS@ z!>Xo|N!CIhi2(P_wH9**JT%d4=b>4%dYv&oi0{CRV7g@6ft1CLl0M{5mefwOe(0#6 z@;ow7wsYNFT&KRnTufc3Hrsz-i4()oS7+LXL8YVSqZJAp_HQE-F3ZqCZ$OjB{l+Yn z;D)6Paj5=!S35SIf;+5lpdcZzCmQKVFXmN{A_Xx710m>LFl_6$!}N*WwTsjw{)fE+ z{<|(%>Im`lVl8voE_r3NP^fksoNtM0Cbr6BfF%vkt^msR(p4e?R9!miV8SHEpO@2P!jYa%<%wEK33e`@RL6#_Dy`8Ww6Di6E=_1fh1EAu$e;Eb}y*_e&3 z%j)B2D3XQQLW+$0OWdv>cWFKjn112kmeGJh12jXC*?WP(+yEOywiLUI^cdDP1H@Wf zho=X6c5K}+X?+5(|N2azpVU`mNdT<-j~j0E!sd`wBD<=$z)Jd8^fk~P+3fgeS_TG2 zmL3U!kryEdT9&?;w&Yh%)(*&hWe`NG=&<=0`7H@_bj5h=)=G7rd^gY_?jYovb%IP+ z?m&4-ILtd|c1btL+Mw+|7jQ7Ql(+U=CuP$TTeimc$LBtfn8uV~_H`#b_C#;uRitu{ z<%ABH!bIpK5{NFAD=C+fRF~brGJuf~h8*t0=d7)Z9qMRTYF6{QxWD6I5NTFz_EWFN znT;i)bKtdp9DsLZ1BRS80PRc0cODl9p_LPksGq4n9>SCoXd-*I#kLtZJA`1EKt%)2 z$#ZldZEYRn_W1(vu@ksd6_Chkyz4Z?cpZ(5NC82T-F(~;s3FyupYu+Wl`vxZbiRWZ z;b`pZO4f{zh9D+RcHMIGKu$oIlz!-T__nv-yLRX!DUF1;xOb;L6kl(!jzGNx`>r{6g^7^s{ zfqh*;?#XV0SeWB8^e5ENb6+eZ_%c`N;Al+OD3HQX0Tc8m zm5$>hG4O28V)sLCv;KSIAMG`OR$jg+2@Ey=ckC=* z+)7?paQmj<)yjR2?aTkAUeIQ%R!nHDz?Qz^G$?N>v{xF#Tt^#~vl#9R&uGUzkD|O1 zdu#fXHa0$7EJ+X+P2yb`J|U}GGrH^QqY)LvQa&`gKy{h2sqazfg!k0{)byn-$nSK3N*Ki?h9zsxb81Kj1Q0 z!TTwr&54G?L!oBL1&zNAFGILVAQSSHmoU4jt?4h2Kk?X^)zs28D8tIS6Q-V5J(;gC8HAtgw<^zP4}-1K!%wEQEcDWTfdywQ-HU% znXy(l-?&P}l=RLT33UDSECBQv*M{)L!S-s4NV!f0m)bG77k{CZW$@8=1LCorU{J`% ziu@1CoJo|2H2gOsuWIU=BwrEO)Ys9qPHFXX4Pq3dsZa%k@i<%;hEjMJMVoOs(eBreVL$q z<0Mj9<^>DuM19fz5yU`=E`uJK-{zsWNF{a{?f%P=b$o8oe*OiJbY5 zFbIu|n^f)J{X2VDTBVh~o*ojQD*MOAJ!yhjo>2HG{~+h*ZeVFVckM3lVDG|+)kCo( zxjwjUDw|5ctj8_ZDI_dAnjIn_?@}_Ma*ve7%w55)OoHdFMG->y(E8Gjiz38`QW!72 z5yo!KBquk___^}ze%voX$$N9{+^h3edn~(IoB)k=CJoIb~lC<6U6z+F8xp*KYZXte-NxFc!oZ@Yny+z#xPe}>(e8ILyZAqMM8FWX9P z#}3Ua&qDXXIH}6nn?tRNHlE=QS?K6975snjNk#9FI#852CTp@yjj_iYxZ++P->+xi z2(Ehc6Z8ML&02Op&`>1dm$tSeNu4+Rde_~fEscXQ!$sic`i?w=R&_uDuX|Bv0F9GN z8tdaY6Nz48>w%tHtd8JRemEA%V`#DI;# z0sZRqcYzu9f=-=euR=^4;%0I`AHi&#p;e2PM`64OL1#mJ#*g4%o<|kO^f~nF?`{hn z_HbBDnn+ENO@Z+Y@zaz~LfKacj3o^Y9D?l@?>sx^aeg^<0}0^f+4k4WPKEU|A`@;q zd;?UuE-Y|Wd4lt{+b@><4w@)4ZK=~J1oFsLvqu?Ii6>0r^15<#Z8_Buv33KS`Ip1% zZ}w3MxOs|Xl-5v8I8#Y~KoR-}K46XkuEMiml+p0f>l>wl%K6J#DhqMSELiS*u=E0SN%Bve{WH(UiQt9$oJOch1fke2K0xd%%q#?7!ybC-w+FPp~dqd+YoVr2d zs;+2Y%>&cOb1oA!2|K#Td^m+hu&quOCvg513&v6K+WdXLWdV5|>icCz0NAa8K#K?L zhIl#n4?0(|U+w+LcejxhkWv^jbb9U%5`UbJ1igAysf1A2-C zGI?DiBO)T4KwrmolbQ@$1)H89#%w*u6*DVB&frzpMT%f zg1e}mgjO<~3I+WjO~2`Y@xbPQQ5fC^k{`i8=?n9Iac*PAI4WnVcecvONSI{Q35hbI znBY(57&K_svYBx zXl)yrg=+Q{*TFa*+3JP#g0Kvt6ImHW8D<00O9EvY8IzOB=}fJ2qhljZM+>aG#U+_1 zR>Qdes=r0`q;$7dA_O;ur3U^kRVu1J7~WMNYPvZPTlRotJ&gb>+If91pk)khTGjj> zD6aJSkNkH0cv_NVnf^|0CgFppOiu(C_@|)73C4VxLj@Y-QsnQ4c>_Ozocj^;Uzzxo zSFzkO6R}7GNnh{k|4?K)Sbs}3dsAy$0a^qk$1l5PCf0?P<#c;W{}0MC@wx{kG;833 z7J^?Vx!3RJpxf6OCL3a1DIG$!66=UR#Sr4A<%1K+j8)HEYroI98{%1}qLD?&$Ei#D z_}GeiBj_)U_KOAT+^m{lAsF<7fM&~(y`6?@99IMKHgfDE+8=C?NDGQ9CVDwKBaS1- zA2$E>0^s%#CJrsuWcy26XFLcWiRKP0_Fiv3vwdl)6_!|~IU9D~9iKl-gXZR5?- zj0DOrui#m0Ei@Q^D)h{b&~=7J1>i6*4f5eDbEDY7 z^B@ch+^!(=;D0C!wq73Y#5?8S;nDJUXx4+lTas#A0*?4oucD>>*?P}|HZ(fNp}mL= znay4bpnja$0t4^sZDzODo>x5bu}qTm2lCIT$jRkLIQv4sz;G_YPduu%e%C%L6%V9{ z<6*kLp1oC@ItKz&Ho$^wQ332@IeEvBJQaejcY*$*%T-A6ZW2;Se^&Q+%ElUKcPFPEP=iNu+rw=GUn^y-yAet4}{v#~cD4Keel?H+DW8qP&7>x_v+k_v^O- z@V#<^Ujq96?j37M(Q}3p=A8*^rBJya98C=b(fWXu>;jO? zL^E*T;pWnh(pN@E`jjXi%ZkU-(AZ<_J=t4Vs>79Ft56bUC{xvty-@niwnlgmcvBTW zU%u>9RJ3rO^wEkC?jHOo*v$by(NRF}hKVRBY8zxIfKeW3mA!o3dI0^p_}_qj^1P#w zB$_9Hl8V;har^}`uQc(O^&`)`4DxGLb`G!OE--cupkHY%iZ(;F>kLhQ(lgin4UUlh zSfg$)UqfvlSJJ}yjjqnlcO{6)^JHg!#bKl3Ib-^(vQF>wC-fhnehHK~{785=bW}s6 zPl#EA8cB{K>NcdBV%H4m>40JP+abD%>KEAOez7AHsbtFWlznh0NidvX(5&7k@=`*u1esePkazJq{mHs9VyJZ9A-tL{h7%hL$8%*Otq?#kyH~;Cs8` z@}B5w)#pCFL-}r{u->Rvlq}KDs~;WAqjr^mCMu$>e)FEdg#TAAQ&*#7${Dn~E3JOL zYEHvWnvNSi*0v*#hR;Zh@12tq_wwtS z7i61QKjTTxw)ls zIhZi49$B);f{|idLNVvOZZYus-x$WOePeJB!m>;{eNT(26X5sL;xVtlGZn7*(Rs^1 zF(81*4SJTp>A88Ucbn2V+sAwTI3IKsAi~)$o5)bov}D+9pFwEdB5Tb>oa!B(ihzV} zG!_(+;R^KUybJ^IWT5-(&r+kSRJ|d#wr$QhpG<~D!5UL($&_`SO1hMM{|r#%-F3S@ z{%{RxyPjWpWkd1;*_t(n2+_MhBN`@wi9dgIDS|3N2DY(kBeX%^Mw&-BFoT6a_b<0S zAnl$9O^=h+QQ)TmKQ7`kKRQ-WN>)S^2XDsJS7l~S8P?9!&%QjDenL199BM~e)5 zWo4Nzvc65?jZ5aQZ1A|a^A8$>B;E08^n5xo-lf&?^^Rbp6EBeO>!$hFd3w%Lvn_#| z!fx5$i$NUav*ud=IHaCO$_kAVb~lbV2^C)M$N1c3ipt>5ahWRa2NzDH24 z>^@y8Zd$0153dwIZ? zNa4Ltl7sPAor8)!N=66x8%Fot46B4+d``iJ{Lshm z17@OlC!i^r{O%;gZ||jNZ%Q^W5^LUA7yqw&fy}nIF4kY~HE>4t+*i$)k)m8<8y=kY zwP1!|MPLsKSXgQCR0WqQvh+74iB;SdlQ1Hea)F5}g$Cf|~hGKE^Z+YLKfT<&)=E(D=_ zj*Z@zGRd^>qiNM_W&PvV_+}8*5!`I3?Jw1C-Yi`e!^}@oScka#TSgn<%TVYDFk}k4 z-7JJ855S!8`h>b{nhF0s{d?*nj=8JE5M+Mu!vn`-TnYZVWOA5As@-@%vmnCTc^bV%x{4WO6gGWNAVw)iyETr2{_DG^yiLW|hHQ@<=qv*I zZ!@eXgLw>%2tz?cWIy)RsJ@5tDP`qnmod1!)^=|W$l_aMo-axEy@AtuBc(u8{qT$g z65Z)N*MsKn@e6t!ZA=zPYG%O#5c1*I52+$s*I+mr$-bKaUS`$I!AD`?KkHq-ZGa+g z!-Y-4MpMLq3$%`Hx9#Oi+8PFl`pfJz0ObSbs`ERjV9~F)#vw1)mivL!@XYh?NOYOL zgZc@m>=7-nl5((V+{41Gk;M-+-q`>ncliO44CI?|Z?oOr!!EhV{m;N5;1n~K&$41Y zjN-OGWN#J2Cm;d$iqZrmm}xr@DhOt6Q{Hdfe19m+120S$k>9pNHG(} zkcgza&{_8z=>~WbbxePfXJ4q5(wZd1hB>hZS!~wEyl+0sWgAu%gVe~HfXB3OGdNWd z>5A2VY1Kb^d36_d({M*@?F#Pt87gcl!R#yMB8hS3u%D+s|8hu)V_tT2TYBQo4Hd~} z?iHPZ2l196btgP+3Pcs%#@1AVN7gu#)2*qnZ{)s{*GnTO-`*kz-d-p2H3ZA)Od~0u zCGtxkQJ61HrDsw%_;6(falW;Dt4KaIRab9MPg*iv24lN1#*gm)nP}aKj4!D zo2pbgavJaXh>2c7Z|zT_bW(%vi=pH%BHalI`j|u<3_Yj%VJAvPFUt>Z2alSId(U18 z!2!EHl@v)wU6n+I+T5h)krZq%o&A3(;`j(D#EG7}+F?y&*=qZYc$3@PzQ8Pnvbi!H z(Dx#P>8nDVM52N{*_v3?nIC~xfMIu3ZO6avDG;NwCB6&B{YMBB{5an9-<*m%Gv|xv@#!FB-mT{* zTp$(cv+tVMd-<8B>5ML;t;Rrlpatb_o6SF2Iq+eo3S1Y&TtLs(0Q1pMOQg!dGrz5^ z?SuZW>Czd0X7*tETtMQZR+O7*Ql_}PMU&SNrlfx|v^7KkMPwZc7cMS@VJ6L(vTRD{ zTLB@WXzCx#F&pjW)2_a-f96j}Nysd|xUBw*u(Hz0%qg85d!WD_RF(QZCuOTNe*i>% zRg-~GYa)l?w8IsMTxtr7u&1AqrE4Hwb5qGm7pOG~ zymoCKPbPeT^gC~k()?STPoogjO+P=ZtaaI)l?QHh#g4VzWJOlf$D3m=;#sATShH&xL|2>!s~}~d;Z9}QVox)-^iit3>JOn^@+63pLlcV z<*|uXV^#ST@EnL!t<6Rn(AUDe@pmnCGjn!U+ZusLp6WKgD!gE;gBiGc%^={n_zlJ4 z@O)g3bt|!y>d`LO0mC{MqGSmImP-kuvC>LaV~zU{eUS9IE* zQXJIDSZaJGd7ueBK@2!Oo03G}rKps{vjtgau0*F&k=uuxDjXFrsPbaCseXn9f1P3F z4IZQ3mY;!#1KY)_B@z5|c#deC1ae3$JT>;;Q|iSIM+$92cRa{K?N*vLI?xo5x~6X< z%U~}z6WVZO5tydd&W?#Sj9uyznk=)@JVPj*l<`;CqNt+L6_u3VC6poh*TZ4uQo9A5 z>m}LluBF$(SwRIb|$0shD(&TJ8Zo@>Sodv+5;%~;&FrCD{K$<+ zTwlKWi-pnp*YU6_FWOr7DfW%s@+WoiP#P{l-ndj}i_^!|>0i%sssbGv{Lgdnv|;_H zMODFx_N6zfa8Gqc;F}gPIUXu$sIVk<^du{aJv)&fTZmHQBtEh~sY|bax~nLQryTpD zgWmD^XQY;zxrkr$4~FAdF~6TH145r|CshLjRXI1FIE8eptnjNYbgUtul#`h0INhD6 zpt7con*KObih_-CO_>{B&6}s-v2V=BIfKD(#m}QNLVtnOg-!iS;OdGtX|^7zq64uODv0M!?u2M2+|#Y znG1_I(Q#!CH@dk^vvX6ej=JXN*ub4f5C!~i-as>UR#v{nUc8~*auY%=t~n~%KN%9K zPgw+!$Wqh2sqd-feR*-;6cd(65n5rOZry|*MO%u$Og~>g$|zF&Lpy@b+2<`hKHe`= z{9Gxij0PjS;nx;~@~r6VzAS)mwF$%<4VK^=z<*J1Ny6%8a@C|%4-Yl91{vaHQsPK> z&yP?+7f-Gr72Lmen3G?d8KYzSqJA%w1$O_g_uXq|AxH^j71>MEj=xMP5R&$!GTV#K z1HNOk_&)3EWYQ<`yufCOZKK0^7s)MuHz{P`mi{>@gZUeU<8ui<|rYf zyf20LG!0#YMjz#trpeGTGWVNBeu}uU? zm>XhE`Fwh|qT$}rbrHu$vf(FVQjII>T0gEQAO3HoRx^8Q3K6))5h(7n3O48U9g3G6 zmY$V^+)KXZV8VQ_IteDq)EOc#(=%RZ0C&#cmAASC=(xliw!}^)vpXtw+3E~4%^i$g z;}}l1S3GJVfubCRUK~qrbZwrh-2JNEy1=s7L$=e1G*uum!Z@C6+RyUEgr-k)Sv6lU z%xT0uJ4$F+TI`pk@;$xpcLs8W{P9aEqYLL^85GpBVv78vPoeC7QNEv-n?t)CK&xg& zn}&3N*2>EO{PrJ+)Vg=Wn6iUh9Ha`I0JwOtM|x z+^@0pCvE%=-%^kQ_Z{Zli&W;bI@&5sxnm~t?Y-ZKV4l;LCHk1=gzg&B4MJf^Pf}7l(CfVQ;T-n*5 z%2=uk;M6vDMK;4#r8QLX6es<`y5A{fYq9lqE0yo_WIOG6`!}k1by*cE#%OF)YI9uI z!$F&u9?@rtCouH7=K=sgPanH6DoRKC67)OFqVz^u+h5bq3k0(<1Hw1lXKf;<7IS`W zhCtF`&7o28!i1#ok{qJ4AI3ECW?v&R?BeGxrb} zZU2)G$nq{*5Pf8p%;@>A%Q&(}_0wy3{lfJgP_1$%8>UV68%v7SB9v-|IqlhB%a*=}EP9}F;; zP$`teF)a*zmL5V>;ms|YLCo$YtV8(~8@a+ih~(Iv50HeSS#svt+2@OsxQ+}m1(OlJ z+iiGlQg1h*;(LD6WZ^Duf@%LyC6*I#5&01p)^65w^V?MzROvQ&F>Iec2lI`91*Z3r z+tZdI5I71;ezV>YrrG2-hH{HNvyMC_lu-qeqv^V^$Hym|w2uEJnX zh<+j5Mo*Q+5VrVz>OtVTT9!`6hd?qZnqW^d`22I2Kx1&VIr}~x{ORNErG1Lb4Kc=x z_DMFE%e{usFLAxKFVyws=rgRG8nTizN&HQrU1cc){1zxQGKSy0i+n<f$kdR zcT~3RvE|LJrvp@@kvz}-X8iqcadJr--rhaZsh$SJj8N?(4a`CeBTJ)b4^JC%Us??A zQ_8h#46fI~2}*dFQeuIDXi+@d-!2}ZzR8Kyl!iZzt%4h}Vckzg4YAt@Q?+VEaaN5F zew%@i<({6zF}QGVShgM{PUHfqW#|7zdB-B`Bj1wJh!3)dP3Gog?G9ej^8=%n|;apD8eJ2t4DbVd>r>DJQ>y7c zf+J43F(X;Oi%j~={~2wlY6u~YLv+rbbZCv5iKLasp98sckDlq~U-buyii$cy3TKMe z95?~v;NYNCDJZ;*0Nf3QZJ5D8h{VYMS~H%) zKdgcIbz*+JJ+%TnpiL{s6)&l3{-V3;x%WG~rQ^#XB%bH(hG7)6=^9F8{XWb68rLiAZux7XI1;`IQUmEx;cR zM6R?wYI%l|m97p1n%nV$@0W-^=L!4<&iJn`R12Gxrn#>Tb%|5fgScTbsD173kf`Fw znIFoo08LB4TgE6IFG-4YxWq>9Pnf1|Fn5tG*9o$*`D#Ycs?~V49NlWOg=%5y@i?Bz zuZFI76(gg~L#fe8Nmz6XO27w8_s94pNEGxlh5n%d zwnSfOUd`)3R|Fno1Jc6-DD9^KC!TrX!ux6L&r&+BjLydk9yv9qUAsOtZQIzy&I8yt zJMVE3B4-b`i4|#KJ&X`Sr@1@$D07{<6Qn&ZNzP9zvdPI0r;E_YuutUc@7CR25IK95 z%+v2CU^;gGEF0vJ@p|sbJsn+C!ki2xyMjDspM`CfvYV|866TxMceBn zlBLEsO|7kST&M6xk&kNa6Pr*{F}?6~VQ90lB8v0GE*fO9!;=IujdE3aIl-ZgrOXvn zQk?lw3R#UYDvs{FThkQk(^}$5b^mqh4K+>00(Yeowee9Xj%{;SobJlY!B=wQ4-5*D zt(@bHAmL$P2EmwAaQ-v5@C|b?sc@uS?w#uQC`t*dHpP<-g67EtrjMoK2c65^1|QZ< zcb<2+u|FG2ecRy0rr2OWMrtR2fl z{b!P3!Ma4~d4lulF6&38zyjJ(nhOfkb_34CN|4h(35Boxq+Z9(HbB*sZoc=f?%!^Y z@X=9sV3|sWB~6JS-70An5U-9*2z%GCAz6QJ#$!(ONe2)gH-R&oi)6d%dfGXGJHrd}<`ZZf2)djpZN$j^le<1y2Yishu~=i~w=UCV6nkau-4Fr-96Pq#P~7ccg^1 zA_J){CPak`gDGn+hVfW4S>;QDKxbb0>KFVe{ValUo z;gzVS2>SxfF3|iS+cJ8WvyGaVo#)q*!ui(j-z=@G{T3O9S{Ci3B(|48;wkl&VF7q& zx-ov0Hv{{=*L1Vf{v;J^*OeMET27LOi%YO=Os&t(r{3;koAcjo;`ms=yoJ&!Ce!<9a+2b;qd zPZvA3zc&wqnd+KN&Ppa3<_3>r z@sVs4h9OQ8fr{!D@88!lH(IQ6@_kx83930*zTX*4&Y^gh(inc^9o+S^!cIOkhlY^a z1gTR(sgsSML!UHPe=nmvu3~hb^MAYkirK2Z>y!;qr6mENhs!Y&^cdUT#|L&ffzoQp zz-ka_B^nn3F8aO$kp?r7{D&jhk9h-a(=D!+CfZ-4-uvk*#rKcTWFEX>=XnFsZwYia z>|n*MSxeuiK(z=2pC5k+9WVR&2oZ5P-H>M}OMRbHKCuPkQTr+3W53nOI|yf5%wuBh zqmM34y;ROmqpom!^~09{<5Sd-WxGlKm&Y@5(?C@4kC)tq6{r?5$@rStPpgQX2@S`i zM}gDyE>Nu%Y1s813jNb+^4QBgEwk)1l3R0|_RrciO)O%9su!;h?u4yQ)cXFaK!A1z3UWO1p_Dl+E7 z5IUJcihtxNU{T32x_xFggHML*xaGsF+XcjZvjB&1;Je^Q4i4yd6N!>J_V;E9YMY@b z)Ws^RwWHIDE*P-U{0#YyoWa3lK4l+LeE5UArh{kbu@2~$76@H`;UI&$ANiC7TQM}K z{Uw+8&`cj)qm$UBX2?V_vPg!AQiF$CC>os8(6`bLFTK0 zH7r$W3B%j51_KUPlRQidOx;j6<1T0|9jd7{BpjaU8cZ!Jv+5OTSXiG(YzALVTguSx zcCor-dDHeQLTaFu*@p^#v$1aH8Hl6C&NYY=-TjN>7Te_b14h3y!0KzCM-OQz zt*I01a3R^VZID`6uGUWfHiaX%-|hS%6yb+FqKZh^yj9oMHC*Nb#~77n)wm z()X)N-S$iccXw-be#{hU9Wc8L5ruqEOqK&s4R^?| zy{JII6sUnLrlwKOJuYgdvzMD!jz3$!?S3V?TJG)MO>ru70tZh9>S*c)W;0V$SSon= zWXe)n&}H{MCv9GxKTU;PLh;DFMKbN2yF97-U_Fh_+mS>+QROc&`)bkmOS(olSg(5^ zV59`DR8i{tLO?*I2f2<38CP|;<^3w2)x5?PD|#nQ@A^Cv-#>BRe{;Mv06fVC*#fTi zfL#~KlJ8C$%%?n&QH%ng;9CDIwx0`L*2rf+7Rp0RjH!@M^aQxCFZq4cSoZ`5NsJ`Y=PLXdH+{&eLT;DJgNE4u@uVt0xeZ}6>#9X-mH9jIzwiD%t%?yr?~=$t*Z z#jzd@86+eptf?XEV6S~Xp~*Ct#rNi-UJ0_;Y>&D?Dm)fr1v*R7jz8zBWe*vWH8p48 zsE&No!NnbOZ-uYF*naa*Qg`M>svyGmJU~2IF1mmIe!_2bLUGu8vvez$&plebHg9+1 zea89vZBImfJxW8Bxt2!d6agIpstb7U*Z}6}+3Cw# zPlxr_UzSI+D0Hj4e$rf<&|0M2$`Id!$voQ7M9bganBljhbnDnZfnB{`wMYX>AP}OEk(F(`{3{3u zh8dOE?Oq~0cF}FuH~M$8KSX{5qu1vj`;!WKh1~7T%u7<{cJu5wmc>kDOHxy)SJk;w zOhIqv6zrS+?Q!1(?I;sEOm-ezcWNa5PW)sp)|F)>92SH~XvQ15HYD4OWzID1Z=7fX z*U&t_y(3gTgnSC!@a6Y@&@8@V^WNV4QDNo%sy!dyFR@0 z1pD(E-}MuC9gfl;SiV;^=bZNFkT&)%apm5ZP6~5`dPBaP8vF0nT(mQfM{d0^ry4CE ztG2tkYGpaM+O`f=^tN#+Jr9KA^g(cyqPXyd77zYTeb$pwRYQnBTC5LQap(x5cse_H zi@DK9DiX7;R#?$`B}}RURM`L|g$dE80a2%6GEZP83y3Zji_Bc>@VuM>jy*t6K6n!_ z6#7eHIg?)gi($L?;~0=~3xIeG+~;;2j5v>0+fx4I@TQb8N~79*22c$`me<59^kaTia zF{pz?6(dnN@~TJ&u|y5Yt`f%F5LRAF^lqg95*TBFp>YbkLzUD^37Boi8dGOsFGG-# z4^MXzEIa)SYY<_!ATkJpWG~MWXU~N$ZsTe4^!<;i%gGHpZ!KLb#HfxB-TSVSDxSv7 zP)%jut}K6CZ|NbjfJN4SE4A#t6JL06Rlaocg*vz{c1%YiR)reLI`PD{a=u$c{mZ|H z(hnJQ0z|Z7C-ki`BT)Y@@?DCLeFsU?yo14(j^HXr+{`qxI&zt1}$hMcKO%4m{HSE7?jLyG%EXuPo~v zYh3V4K7#&$J?3ea%+m=d6@qDBt9dlk{-&>jD=pq?+o)XjM@E`<^V+UJeBCPRR#pxX z^8xA5q5_99Q_~#jn(~V>9|8YlJ$=Vnd->eC59R3?d0IBZG$9Uq>qlAA;ihRGq#M#+ zLP?;nC5k>@j8QWv?NUgVfZrxtfWlIu2odQKo!aZn$2738`M?*t?*43!rHZR*PJZn} zEJfU!8%HQY{{(65TR@=~`YF*BTS=9w9~bDxNTJ`QJPQWhiek*(`v1vTxb2~pukgW< z0D6*v;uc`Cp)NIdaY+U~l-dDbl`k-pcf-v6uDkimm2Weg?+YL5&?W$dlT?P@R4YGZGK1i5!IgUSTB2%vVKJ_bSjP{d)7=;hz6-@pZ#-BX(c( zDHFND?l@um_p?rMb2cjR=+ohRcq&@ezG`kcqRs|tbp!=QVw=~yG|r;~sQ5$dzDTP* zJFNV{bU_9&hQOX_TZl4AC+h`MmEu~co&mnPkHAXvPA5m-u_vptru}U-H?a6FnmKR+ zPC$>bd~~1&k>sd{b!pt+xM90}NEF-azNb4Gf%h3%nVG#X^0?~h;W9Ke)W7KIWxb(~ zV9?K*AN(%=ezE9_u>yjRq$)08ewzN;%rM?S37+l4F@L;-1qH_^CO$RKzy5?BaLL(o#)Dp4bZacq~CEy?MKatr}F z+Wo$)=$N7B+HbrJGRmw>7&E@hF(#phkW(Pzb97rdyw>0g!)Eb0d%V2YXjtioio*MxpuT31k?Y$Fo zpys27;ytpe9z_fLO?Nk&X3y|oeVxc@uSoSuQp|DngP?RSs04%H@kMU+>-C|oZPN_f zcLoVMlro0(sb`YLJJJ7Y`eC6d2LUZ?u zl%S!g{1+=4JfX*wflj}>gto_gHrLBIUgz;@UZ-)E*4Kwbi`|k$r%RCQzd@Vsd)~nDS0fcF z8)?~WOLNYjP#H;;R11p^R*rKfec#0)0zEtGIz)kDAiPLbLpiU2DJg>^>`?Zdn-Z}%sSdom?C%p+YI7{heA zJ)EiEZ#ZlkZ9zt_U1%z}2*wYMJ==i)QJ=$|f06CN5~!#T2$iMqj|3Y1z`LT)KcH@X z5d^}2g$a-)jwZf8q#KI^Y0Qc&&7x8r^ak>XlK&oK_LTp7tl2SStE9~#>`RvaG)a?N zo}%>W*Cp|1&_yVY6YT0e)e@i&19FyLwU#uW^P2mDGXPt-2*U7#3AK<(pziqTd|-ie ze{BqPUx#)J!T_A2Z?Yt$$K=~QB_%CVjjWDv5|aA?h6d+~_W4X&IE#8vq14u$ zjY^SuPF(abi{Xfm_+nO42f=??(xiUi3wWY6ez;^)$3+18 zP9lg3a+`!{T4A-E?J~M(ZB}ffi{HW!O#gib30=Meg89Z9`MxKcgHcA7@1XB`++_N# zkkVk6;F-zT`BHh+*O8Z`_>dk8ok`B9Nxg=GHl{O~YJSBAp8pK|Yv}p>1_vi)8;Fe` z^OSXbta`Fo`E8ZqzEmF8PpHZgGS$2JCOMRj?!xmttT%CSaVf{?)cvra_B``UhwqQtPdF4NmQluGxBM4#8Qsntr*++p zMIZ2%@6{Yv>5JO9cQC_EHM<6CuN*^3kw_INJ#@WQ#3yUU4a#D25&P~L9+^FzBc@285S@Cmvy?JTQ!Ha6?qF*!9v zv@N1jz6tDJEjh7PRX1#?wX z1Vc#NgW-*3$CwQXlD@Ur#;!K^Mb=|I8`fr9XUdsygrT7=3Zd%{9W}ceDt@T9CHpiX z*;<#ywGg-Lo1a_#b6Y(%ZjchZ>z7tFUB#}8JDop-6&b$+_a3c~sZsZe#Ft_R z*tz$~`uFaAOQycKM3)Ykdx?tXE37HsVJ9CkUps7aZ=Nn^=UF4z*zFxp=h4_+%7(ws zp*&&X82UDg?nFSN028G`nP%xmZ8|eZn9_UD8yxutNuLeL|BO%Uy8-Tseg>5mvg(0F zzDD7aU4!qfLru?%kBscGUr}?}T1($Q3*BiuItB|A`c%e>cV|Yemts&%TrzCj&`{)% zZ&&N-sI}F`yd%RrkstdCj4epr#b)^8AA1M$G5-`4453A$>1L&jvc~-yJuzHa>hNTH z1uh&;0G+ff8XZdMs2VmMiFPfM?|@73sSxWWkUu$GJQU|e5F_)1{?SDBc>&_7BIZDL zcG7ce4>>(3VEXz}$D1td!2L3{6C9Q?X0$g>{ASdj-#_rI+cMA|;8g;xZ=Zii;!4LR zBs2y*`v6}X*9OpazO^ z!_r;@#xq}f^V;j;;DG*<>MJcUxTgV1PaHtGs52cvOy(0OiQ~8tkdIB}*ZV+XZAXfd z?qQBBaTCWPO5}s#D=DLR1NR6e57Gw{o<-DR1kOI>;f{m8E)w_xlE zXS4h-nyF?(6uJkE(M~7;f}^HWkHD8>yRK&#fjT9(bPbbBJO`WiMHI!f-5^jP*Z10P z5Cn(B=eCat=qn{N2Y_WzMS<$+iSVy)w|$U9E2Vw!W`^-bPT=E$f$JY`V9g(8U~%&N zp4~$!J1fh~+&t9Zx5ahE*J1apUi)q{MLC%O!9rIn6kA$VJhxo&!SVrYp5eq^n}2nPodFeDAk&f$rVEPB)am?pC$Xz7K}j=qE7&z<65hx^FqPHVFfmhFm`h!1_U(iC;ZRC z&hfd{(fMfGHa5P*diYf9?Fd?Cru^qTO?;5hemW_I7F7IEKKm(P- z?x0`??8m?kIrzH&^tv2xfo|!?Oq2*kIJnTB&v>vqL_dp^r19A>15%a;#pGH-);!n3ksBPjesDPDl|=+g+z(-6QT0D^RXnq;yE|D?Yk`J~sy ze5rT!w9N5l2}WIO+llF*d!Q>G_7TV1;o5*Il5}*pqdx!eMgf`db`XcEuMDY}X~trq z#t^s#H0^X2{>^F$gcgsWrQ-n!hHF%VcI6ZQwWq6E;+BU;QL{*`(+mHv{{o zLfcNp4FC)wfY7x!0H)2O^{yN;L646-JTj!i0OEaqBUw&P>XUQ}fedp+6%bz`-P+m$ zDDauD=ujN`&u0JuEAw@u^7`juhJAAc)Vu~ZTFTROYuE;m=Z2iK)HffVuZuSXIwehJ zZh*}DddYzX^7-l)|Zp?yjO@o#FnNY&z|z zcho@VPWp=XQN1jnF%iCs5Uk;I+_ZUTm39iEn^L-hLa<@zFWJ3LACL&u|4Y1)w~?+suYPzt!wna_Ty-H|Q<-Bo}@ zyL`;^YOl8nys>KA3@53$9Gf2cvg$ER6|lt{5F#l0B>p9-kRdA4-UE@*es_zo1ERUC zWMc7_8mXMC*e%Gw(P92rJZNfjuUW))CoW`jcS6s+6fL{7o5CTQMU$R8QBtR8=&GUP zttqekH=tU6I*KkSal5@lg=}8gVLM*XVJi^ITd>FW@>J;ueFU-hs3Z@ec>h!#qQok{ z%r)J~o9@ZTH(p=8uVodf3}bJ2=)s`YQUG>Oej&6`uY;3kCt&I?O65&W#JqyAWM`og^t+*hFO zB@4E))7ok{#84tSk5cvvRt~sGS@pVXwp;Ip8?isTb0Rr)Z#HAAOzY1iWKobxYO62* z;Dp$_y-f@J@0oo0l6rrC|8{VH#gcm|0bFs8RU-==qe#I|yS(=sNTMU98Afl#@|ir2 z7KdKXTtFmkz$`%+n9Aom06FcIT4en6+t>+6V4WW*2NE-GZjYwKZ`0L2d@tw`g4tD~ z5Utf0?Ht*w{rK#wRBX|#ugF2Ap#GXo@bBFLEFI4ob%qy-EGjjPCXMY> zlu@RClSCPiNTXAmW1EU*-?Nir9?PM;&8VNu_=Mo98+C0CSthlL6|RNIp}BY(cBF3_ zAu<$-!`Sk}WEvAICc-@TKA+`^_jrqWF(ZbwKZC`=VYkSjO1Lp?IHB{x3vqL@&8`gU z0m7@!1xc@>VB0VFU{1hlr0JM(raJ}05i4NAm5xuFF7@pG!B8WRwvff1Vu`fRW{oC? zP_YP4ay$stFMNV4Oy-T1l^whZO_1e4FnaWK($`7l2Nk0IsOpu~pxd;Q>x_}4+}RaX zlANCl3&wz$qk}y9zNF5~T7@L^nLl-vYPa9&-C<=&K8v<^?7v4%gN~lS(^5H%!`tfd zFc?F$4~lsj)T9(I&xl=${z4CrgALFJC!wJ}opX2|o7oNzOx;*?WSMA~LG1K797QR` zROiW6DqB~hYxKTLVZNHwNjE9Hp(J%=vnYn9adJrStQzqb1henokD@%zlYL5~87@O{ zM4pr0h38bUI2Q+d=Yj+Nq0k9A8QSJ#IRQziRj;kMqqUBO12My7TENqn`XO-|QyMFb z=KiwKpf)Dr_R`0@T;WGyz<;~|w)dw#b`%3Dj{X6A0Q49&c0*gGG>-%-d;=;z-0~GiKRD_I+W0 zZ%8O+{@?)IkAZeHQH=K6ug@vuA1RXkXHle{nv2k&mUprPHwG+Ip`yx+Ye-x*6gJra z=!630)y=Q2uAXWkk3IYv#S#(u+_-dfiH9rhvFy`Rd3%}Gt2>_bgZa9fN?cr+5{yWI zI?aISmQW|H76$^{OgcJ+E5{tXg1;vw-T{?n931`Yc^yk_uJn&=YarnMF*{~&ebT$w zl?%SE*u#uvifsm(BoNeTG(K`Cr?sOs?fY9GNa&0i*SR4MFW5jcF;{Jbldz*?Fzi+q z%yPn{ume6vC1D%acXK^>z^taj5zg1(+UP<)6@tWO3Sa;L z_hM4VX?IRX&xN~eyEWYJ=J~X>_GDaX)4pi&-=K+!v;FT0*grf1yugp^!$=}$u)szf z;E8?l@yP}r1Ie_`zU*bSFZKmm4#z=22DA?&ptk^eU(o2VCQ#G8OZ;fp`YnAK+nm-x z2@DLTqL+=HE>GL?@m&ueTwT*+i>Iss-ZdbQAyWaXsM8$nXVN{$3J5j80eRH-sZ9d; zi?V=fdO3BgZ5w-{&IQI=J<;z=hYUbl0p7;(GWL%-5pBK#NP~gh+ut6!o&w&@{0j%$ zN6XE51yC!|fjrOk(bvs={91?a0bLBMGW1N=@4B{osI}+X{(k^z`GTmutA6Y1J9)$; z*)$LK+Z31fZh-0tq;>VG#Vw=iH4hNu-NtZw2Ic#oR!M;fzm<aK1jMj6llDx`skjqkKm@lCM!Z9|ADp~l=uPh4h3j3@Jyb4 zY&N}zvRMQ^UQ5hA`;I+qB!9F1%rNPUQCyPi$j(98lw%(Hyn>xhsVy__$(YCH+VU;y zoy>Am4ol5?Aiws>>cF+{?ImzwE@z_(oMMU4;jHTS88XPft*%s-)?cbC{pJWVv|Zn6 z!fdycl(MNtjkayZ%$01?;pLd=YEWEj6YXLJhoP~Ut}aUSXz1Mk33v( zxw`TLzkYxw&M!7;gr2WvUZ-L}A8qtqU29RE8>PD&1d#>_rIGHE zR1oQoO-Xl$G?LOCd-Fc~d*=M!IWzJH;|#;V!*gHvwbuHq{GeOI1d2DkKrJ)NXflAb z^1MDEg)`#l2^?H)7i64bmNp~$II6}Hp+@wC6F7()zBl%*BMtwJ*Ct@jg>iDN*4n&- zbt8+0l#}P0G&ir#!Cdlkf4~cv$G(kT*E$lLS8dRIdvOba$9YfaR^t&4aX{|A)r+4i zK^;JgJUp5QrMNX8T)h~-+&|EU zwH=lj`yG5cyS$#&1bDeP=I68ul815>YIgZ@y(tnDFAg8PUG{pGt!2?))o*x6gn!v}|0!F;#8Nz+Vuko2t^eR5M;6`q8Z4BVv$pI;^N}YTPK4O49apv?-V=kdzCNi zXz-(dQ_JJ2r1i0a3+n>Q=xMFu=pl~$Wbc~R>Ka1l*AlivQK9*xoSmtFuwEOqKOvDA zmWaO-b~4LfI>ZZ$t-$ss?>82^fGUEHgM3aGJIn$@K1aZpkn$SMIzz%b?rF`I=QVOM>cs(YbIMzR@Ih$U=^y^_bWlRh2jVivIdN4P zLwSn>Pop#-M~0d{g+{B4Z|q*do|&1s3D`)jgQ1qdYl*FU;{h$uAY5V%HDRnS4p`r% za)msM!a#gyq@<+MEb`e3usMA)__iLPv7HxFLmZMg?|?PrRe8u`IgBV(TgwAIEPzG> zl|6TQ5~ZwK7TSc>uQG)Q%bh-FAtT=WA?Jd+hta$@8bGm-^x(*N{~MZT0)PcjZ%;l^ z8W)P%bFosg3$u0;a*A4D=OMKXkfM#Ccq=ljI5glgyM~t*{V}MEE~;^a3wo3CU2?Ce zgh*wxn{{P_hOG!tOXhM_I9R+zh0o z;dI_5q)qI=7BS?2V*urzZ@!d%I)vttY2$3Ja}b;JeHT+z=Ku7wZ_(VhpeBy$!`Y}r z)MjsphO-<6ZD=@QlO(AnJ+$&UZ@@qM=?IF9mF-jT_dO=+qA`vnK~cg#a%hhe3!ggU^tRe^b~x`dWPy-`3bUC#KVE zlxG|w~ii0vfE$&KPlfVRr&ssm9 zCZ!#fDxP0lL^Ee)viw!HM{0Rvy}4mXByJdRK|BYFP5`YYp^=Oh(~)(0#WoU0P;F?P z^wU%5`FN(q#*&0i*f}{5Hvq_%8?Ym*S5p^Nb#oSO znA%Wj5Zu;xxPOHj#$W8mC@Vtzv*dpl4VY6q1TsLkLRSMQ1beN5Zo9dEzJgb-sPL~q zTtWU)vqmt4EhDZE(RRX3aOhnN#}IQ@k*)v1tb!%1gJg~MnG;uG+Ntq=vpP6YJxB1H zO)Susq6)kt2I2|yv>iI@4hKoJuuE)4%-RdGvbHV;smte`U<;Uh@qm`Q^#A}6xsF=gKZXn7-vjefY~JFTm1iIVODQ4^x-{SMgG*Ui z84M0C`SP2m3%Z-~3b^7N`{>w#uAoQwW-~DB9!}I~&n#T<3SSr-FKXD-{%nl_e~imoWR4|1VJB)p5Ta z3;f(FW@HChh=%I_ELAlANK%)((&CrU?L%dz*yF?rIu% zyL0sVD*Lx!XA}glc8xko1Iem4=7Uw1z+WW=PXQ&8e8h=)vt8b*pARf?r}5a|BpJwf z&%EML$=Grwbr4soH{w4?&=h|+pc&x*sqA3?#;{z@5Lpm@wh)8(jd`yLIsuE5KSy)N zq2R5{djHqpj@W{ZXWmI4`-cmzge!c-tgmesViSLbN9-?DVvp(_Q%bfL87S=|OB`)0 zfx{!wF4<0Z=8&Z8V*KnJau$?PKq)rl{<8YD#(hI#;a8rApeCKT^1E%RZHW!z+;Z6kN>~Ks$^S(co8`%tryU*jVGDiSF+s zb#?VxyK%A)NyVu}0RI^PJ;UzxKXl7sTT;aYimmglVkEOZ3yIsugcG*%1qR3TB)hEU z!GLLhT1#|#_R~rYU`cKidv>-8RAr@A&dv!c1Vgz z36>M#NluEh0nw8V0}sHVEg?km|9x(jp+ld8h9AYqOW`M%5?mLJB|J92cK{Lbw;`bQ z=eKD5#k?$+ZVOVDDV_#&06@tGEOUG-6Ia%v@!jIq2%zr20jtAHUyP!gGs#R3`LNEmIflWono&M zRlF#?h^LKXP0AeWOD>e^NIY%(qaI@_?Q zS6uVLrxV_0?$OF=K#-FW_ZCO=nd|fBxRHr8_eCZw613-2Q&j%#4ezL5{Wh7BBI!n~g%+ zyBY4!nkx_4%Q<=(axa8L)*LbpG?p%&Gw>QJ@o6Zuri|wR7#{e|bDnlwX#kf&dsq04r4PlBYwfwJi#D5kjfcm}E=!{d9K3f?bO$5}YF>e4r9Y3H~lvUI% zIJm2ABLn_&9LrSthgmohm2b9yRF^_BHW_DH6-aw)a*6x7}7% zKYw`GA%0AZ_rNx4d1APpQHl7i6=sXMg!WJ2qUrc-b6pe|aA)lbUTev$-a$HEy&_|# zxhUk;m08u2PuKrWfv7;EtNf*ed39*U$}4t=BNZVAKL$zX1dVA*BGzP!m!M(>HRg$l zLzOvg5{2QYBZxMURl{LeGrB7ahVk{w7gc}{yRyN^jqC=(Q}(cl|Cmz}^* zS>yWWkewzy=7pCW7N2zI?!GiFu`F|@)Dw_N;*G-f`zN0u+Sl-8#t zxE;VHpA3(EPK|iEb0uQ?m89r;|AU9c{g@By$&SGuR_;kRDf}zbOox`}nkv(PCam3+ zwH@O9ZB&!p)=vMAked}@&&Yn%qR8V*qpbD?c+g6|0o_FqM{bJZ9r{`LFI0Ru%A~Tn zXo=*55C#jgc4?_qDl`zIS(2yk)8eWniD7RHk+SyFAc(Z~wEOchgxi!QRS zuzu8yd8z4y?9~6sn3Y`ArqjK7Rf$DgC2_wMF_4kQRwcVE=q@hwj8-=g?vm5?ZeE#L zX5qJGaDx;aE`i2%sA?^qf$`g{!<{QD?hs~Uv`m)-TL)7M)likSMiliTi<6bcKLL~C z06sA{!#p^@XpJ^6J+nw|*3QM{r<0cL6OWy@`6irUxHh6U{!vq~x-Yd7gUm8z`R7CW z*eGRUnY>^8Xg(yCN^9wzzztyjQ86RnOAGckZ$(rG@0@!3+DCskWPrwJ2k3hW#nOi9 zg!0;U;nC!N?Sk;<5udv^98_G(ditvGLn-!N-9X`IdBe{{{+pRmglzo1 z6`{pDjWw^gA}D2818IZomb{gd-xmDdv7%}7=vgImwv`_d5-=iZTT8x( zR_2|*zKTOVa8_*($_F{ZNZ2)&5IY!~4G2?jz%oTrNwzU!=GhFniKCw>$_=3UGm+ zc{d&=d|FNtR{a3KVsxXM+c1E-t$45fXJ?!d`1f)IeR>o8Ov2T9Pq&i(-3UBmq?>O0 zu3(Gg@ni9{l=BG$lK2CO4Y}68hfUdFQV*96=gzXiAn(pGc+(fiZf1i;izIMQvEv!i<2 zelAOnJUR5}`14e_Ks(uT1X(VPd6rJS!Q4u=7�)`j5-Z$(4{m`+#9+SAjQKUj^ea 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ℑ8%=!!_?akwPLL?mM|h; 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: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 GSg$ahI-if)f0zmrhi{v!hK%J0`Q0 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

PW3(mP7Ev$kL78^vROv}+NZ%q5L zy2P+NiafIwlB?CFNGRD~1pcjHiabvJxC9!{5*{8rb3GqteaKGq_ip>fo44Ww7l0=_ z6h;MyxQ*%8ieE|1>_Hc;#3A%LEPCT6RNWJif843i(;oQ}@&{#vYCdD}%BL=L(V0@G5u^MBz$G+1tfh zcjxV7�o$8(^XZDLfz3{)kXQe#J8unL+U%h{D-W969s* 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%0AFY#N!5S@)PIP%>dPhHR%|G)*yb+Q_UG8r* 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 y?Q+R!m~`JP9KsQ^Zg>S65siT>)B z?2gxZBmIFG-x2q9_Jw)ULGf2=i2@yx=we)uUh(@wXnVg9g_Cv46OQPaP#W=(2g(JE zft#wTMq$dWpH1dPAUw9)W+1lPUb0!E-6ll70%#BL6v+0OKnDMnr8Gx&hJ(1UFlf)B z4mCX`4eo$s%q$|n$ff&QGlyv0(PFH-TZnvyN^zq*hUvL-z3o_) zRS^S%wHrY{u+ptOg8`l=0c*2J3}5uDx4uKCM!1PL&Pe>p61F}*PlMAg?iwW(F>v9D z<9k3h2xM#nd$5yOXA+bCs&7lBgTnHp~ZXu-98xU1wF=L|czW%uE0dhRM7_(KCDvDLXi&i0lNCn?uUvtVq87LT<(z%Pfb96jMe@6nC4WTFqU8Ak!(V>D#aixvCwCcO08>Ov5Ldd zC(nqL7!9Qa9{ba?pC`RK=&jkXR!wD%&`qw#%*`@|5o47s+ ztP+g(IW|viKYNp&X2FO-2dN*@F-+n@`)X?b>d34q5YE0@sjukUsDPzG6(*z94_?zF zesW44=@&JJEDg#3GrV<)h-O)1qF~G)T zi$!+86##o0XCALdR^ncWqR)^3YFNT@u!+3;DYpE_ua2c+&3_cJhF_v_laIPo?Sd=e zA6_CU^C6X?(i3xe5X#;G^SBp`I_~-zW~TsK0q@HUh4sJ6?~6}QQ-iK^xl8Xj-aZ$- zzUd}fgXt!(wLjw4h6UPE(aA0wPdrKv-KLj@r}JA9T}b=!`gz6__m>CI+dXdT)d$aE zR9Rwb!0G66?;RtjsQx)7)76U^y0*B zio3@UH{0dj&s8ArliAsKI0O2_7v0m_2>3>U=Ud|GZEVr16pD&EJpUseDimmhNi$pf zGAN8vwXp5}C;&f|4)`S?05HldSkh`xsj1;W8}P$wT}QoN3haU2uYJ6~r2K6diWR1E zXyL8KUx^=P?FfMd;Y{v$1$V%u{;{?x1814)S#*f0H1f=?O9g=n>%JC7sG!R^aNaYz}Pl&{945ISU+>IWGf5b+Roee7=})Sxk{6prAUeRjXg1I$7r{7Ixx4{krATSd-sAH&Jh>=N|7K8oD~t zpBwrbKbOEykr6(z5r1Y|wI_O`HC-g6uN@D^mCqVPDN;dIc@T0Z7DH(zVh*jBz$^_E z)AhVu_T1!X8%Sz@F%c&hQC;+snvb1#^`Hd)Cj=vV7`rsWq@ha)d6}%i-3l5)fDS&- z{fY~|JCszolcYT!^H&SVTni{mriyvgs)ZouI1Lj+w!yq_4aqvX<0qk-BM#^IZF}yl z0fuAnRI2jL>GrQvyzm(DZvDClg3i9^WIN1guzlDW`Kpt;TqF{kb|t0dm%Hyb#EsXH zJZ=vcsA`GoZpT0uU+-o9eW-Cw6Z#eW6Bk6_T*{lBV6pirEv@2Q);}-|Q==41Cpx~` zhCjaf|2aXHHJ@$$`6odN#o)|MDE<%Cb;TaILHnh=w@K^StY4Tr!fU2IVo8rngda8z zy*1F+j62}V)3zRBj{gpWrTg18$Uf6l_tsZ4X{(U7#4e%w^0A{{heFSx9P6$6hNXWG zS#1N|y${a!vDJ<@grWDGC2o$KRkqg1CA)Z{vS#&g<``P(*DIv2GE@K$heEy4N+2Zp z)O)dI0b#Ps8_fVY2xVmeCE0{v2ONQHfsmGYlz9<~`!)@`o55H}9<|Okomc{A-yT*Q zZ@Ru=D62FpN7!iK0(==9KcG9ypT9dsS&1}Pn2`2wzW>;lqJe?^&sBj)^9D1pAt`M3C8NBC~#;2#Ru{486X509&-3Qo{-R)adytS2{ z4j$Zbk6N)~3=j^cL}qI8c)k8aL~}LGV7880kEQYK`)~M;MiBWI8BY*1;)GKNeOYex z!%mp$&%|ZaM_Ho9{P_!)s5HkmGK5i#nSTb|>pJJ>7ye^o{KBR$i1OwAU{n6v(Q+3O zFXa)4w)#l}WFi`2m=Fe~Fm`iSsed?8{B?|cefWTpIZH z>n^WZsRwY0H+b?klAw{=W9JQKuh`M&EF1 z-x-AzB&qr~H)C@9U|s*8UJOv&yv>%soVQ$ECEF3HD$#%Y;+;jR6=+K|BKS{wRIsbB zFS_oxaxbpdX}FDLj2aa@_(SaOW8j`!X<5IRs;WV0yDjv-reBjGCk_)1;zALE$!?>1 zB~d<#h(CfksKZ<3v)MP3Lm#&G=<1fL4m191Tp}PJK=Uu?U(J`fM!WzLt?jU{+a|WW zuC{NhFkV?{dPlvTiKZ^lx$c!jQr@c4nIz=T+0&LhhqVP3(Rc)JSrI)ILT!taGC*{T-{k^L2z-WNsgnB z=g^B%KKMbB z1d&HWW?~x6acKGL8*OjYJ|JL+bFrRVm)(e0i2pHtibBMx2o4D|6r&xD*|75c5H&%k z8;FkQ)2d$q;~)sMS%zs*TT&R~CcOGV%Kb@;2U#KxNoIFd4mSo`@tHtWn4tK%6mB8l z@05aEI(`Az9~46b8^Zd8yJVUGE2}jZaK~`Mj+_T>BFCkBF=FU09#IvXl@J2s8_2I3 zcdYFtGj!p!w2hdtX~Epz`NviR!`mbdz0~b>=sjnmc}tNg6r!k*5OOd0+lS7=Yr{Gg z4{X&!ruTnik@wbq()qi%%S7neYSB7X2A7*U(n&{$0BNVO?_H|VYcJ6!Jhv-C{De=( z-`b@PdVhZ);_tGdFC&C*&t{|q-%_JKj+VTFYwyFiIYl^6r1V9Df$Z0N-PHpQ(*_2~ zF3qEI9E7>6gM(Ux#%tha_D!OaQj>=pvG(;re~y?KCeN;mioeE8%p#;N+%^Q}#ZV}$ zX+lybCaQsH0At|~dAp_Fv+~?L43DP>HgG_;++|5!d;>m5=2e1-f72QIA6g`#&Ze!; z2~`6yy|JiezADM=Y)8N8aQpVgZ#14fdXhpAC8{F_v33W7IjTxM*+&4XDsmtc^n;e` zus2eV6Y&GlL2bwpg`w8xxe)Y3^HF-;NP|;NE&f8l3TBc_pO6eU*GKotlz>d9wzv}R z*>&gQvP>1C`lxqCtxRp9Qo;Xwtv*Akk3LB$gl^6I-H=EDn-{8Ns)KT`%l5M&nZ;eW zfx9Z*=QE`R(dN}MA#_Ja$Nw;cI$e2#q1LVvIWA+OJOe%kPz0@KPnqHfVbE9s=(W_E zT<5Tim+@q~OKfAlm+(A~{B96w4T(d2^j$_Vp6q8DCE_OEGOF2OkE}G_s*tq2Q6*GO zs!_1jAku1KNnJUGQsyI*L6<+PMQeo6ed$*?`PRAgC`Ii^v`M3l`5!%gJoLwy>C$Y7 zd3pO44zLh;-;1;y%Gqx98P#8%zpd^+4ym^(CG}HJHJ_NV*CLErnX0$ z`pB8vi~~K;U?q8d|5FUzCTm9GM268vS|ZXDXpsdOZfM50zKC=(Puy0S-zFUV3zjhv zm-Np@>4wv|q$4b{-r*vTR4-NL)<2B<+`#bOkrVH9 zJ`S$O3&xV{f5^8=N0!=#DO2b!I_3y-KKDVP*z|L2$M^2nVj^BLO68!@r$erddulsYf=p&Py(V0J%OQqRP|K(f)sa8u_4 zDvTr;PNvgp3zCr6xALCOH%C=Ok~^;Vxp)NMOMc@)FZp3j%GBrF)0--qZcbbC7yj^z zac-!MC)Q%AWRX@qGkKI;hE7z9I>6vqD1#4XE-FOTaShVMCNal;X8V#AmJjA%U>u(}zeB zjYyo};P(erR;>10TUR$$O0}<>sU+S&14&~X2iEs)ySd6%Hnx-NM=W$-pYrQDhiQHd zo)}0%MhDBq^?g<3-n=egk3l!;L6sZvO=b3|9DJ@(S>6$#be{twC4r zkh;`)*yV2pX=zLrA`AKvEd+EhXdie+aCox~8qW~v!u%TJy3>CJlha8HWjvSI^Jl8T zD8|{SG)v9hJ^jr!c63Cy{3b0~0t>!37oh*033|S{;V};HUP5=MPDx--H&wB@4YxgV z&aAvN=tT7+OC(=DeJep-*TBfg|J>`GOCH2OI?T{Ma(Cx~m=8D%3>k4|z*kWV@XqZK z9CUO}ncFKQ6KMcCjJt^+U|9p|aBctx+xHQp^AUas9CE+~+uIdkw#G(BPvI99tob#b zJ6#@ic-wf#kC_ciZ*LV~i98QTflSXx=ZioFPd{6}TS8jI(?ml?=5S%FKy>e-)Hyc% z6_}xiCq3K+y!c?DkZc7cjARmZvIk^x{clhR_~-o-QT|l95i2_n)!?@l!3)46+-S@Jb?TImI`czHEK zAodBmCxabS9=Q_Cf&GdI9URJt$)?OtL~uiQxTX~U-77;RoJtBD^YBiKiJ#s|LF&77 z^sbn%wxpJrxT}rd<0Jj*8E>hYP~t8uIIti)XL|pKNjw2}tSViIN5{m$0pJ$dc)jfH zV;&#fn^x)FGp2vm4qUhR!R>HqCK`knF7HT9x)KzNZHVH1Cx$#QLU{$EHCXW;!&f&K zMYQRFZX-|w|7z7;btx?`hl!31`VRC9fLXbx>1tJp!2LyPXcb*t-6*{2alimNNfezw z-StJd!%nP+4O3sYsx_EbjTUa73eQ|fnm;WRCQ{Jb${0w`l0NKeo~esUOx6(d&!%2`ei2r(pr{DiOB6-qmo-m1(pV#&J_^W)Z*gsn2r_UX zI`;?7`dYsS!MQt>a*s8p7*pM9E0O$H3vf{cs~KiFFC!ykBp5U3l`9z0s&*WHb2fNWy-7pIcGG|H7HZ0-7QUH4?k%!}~JAJX%HpLWy@sNBjWV)k? zVp33JIT*}H{Zo}J5eY^DNEU4lb9=`TWypH+cS~>cnm2>YFuap^qQFZh=+f}QRlJ}q zO=&l6T5<*l%>d2tT0DkbwdwK`^`~yMwzqu+gNOSxO`h(L{s-WV>T#ZbgffNpkBgPX z%91_~xvZD2sx#xahxd)^+_mi6!&4uA+O*+sEB2CGNSX}}!K!5$M-@nl-;GYS;T{SS zc=^YBJEQ!P|9%4l#eXGsVwv~e+~QIQk*FDdF>5nv8~@W`dR`2P*zM%?z6=9J-K>qU==)DB=|-XGFT0%JQSkn-6L6$-nctbW0d=5a zhWj3F+vBKhWd&pZ)30)(=^2?Wm;x-1Tif$r^UWW+!SQ_l+rqC7$+0ZaSH2{GV$Vwq!#B_RTn9kIWtj;GPd}Udumt z1yj4<8lc0&!`~ju=d(bk4luVjEFU@@Nz^az0<#+4he#N34b3yVb1&Q7Ns0B3wHEC+ zrKb&x#IC;yqjTQ9ct;Hj{9+(yYZ+Vq?U>ccwkBF1R(asXZ=+m6lLA&pVNqMWRYAV4 zbFhLT5^CjV&Zp`pZ&_{yQ0Vo)> z`yW-;(=;e=_9)f_cm1J{qmS8Jta78K%46b+N$xveMxkxpfm8IcYwp{-c>Ui~_R#p@ zsvW>m0wnytAb=i6%sL{${BaQ{O+|~hvF9rJQ@Vc=(|$|qZmNQ&hx`426=a8N6C|;$ z6Zg7oX(4`cqE6MTr}Sq;gcLI$KHKat4Ti*+>)$P#Rw>uV(Z2od)@S&GA%CcBM&p2^ zHhrw}jcolB`{l1j+iklLiedB_2$aD5d}rZ8Ye)_-SNp&1x7+7irS&UY{wyB33gmRm z3{Nx?{4({mr1a^Y~Z^mp7Tnx7i+Mwdts;O!b^AB9!%7S4p~M=QI78n5f{8#hOk z5iYY|Q?5zysCE9pE*`{L9isQq?$G9h3#}h~`&&-!D-|HZ&nBoLAOCi<7qjb@=6svclzt z2r{5{QdNx!l5KEZai`)S;^_lUw+m})WWx?cLqXQqVnSRvGp|jOp@EX_pQR^Qkl?H! z*FElnT0G}9&l)yO8FH*>7?xb118%qCg#QdMVO}8y=heE9+O03-#l??$Iv_NmB=p2Z z2TM)v=QOy|4H!cFjeff)>BM>Nq@;|p=E%DA&I}C$Hy~ITW&tk?E?2(j5~^ph##e7m zvW&V0sg)gFp|%)QmUEPW2N+Mm|EXPtLkL-Rm=mGAnkY99J61iI(*Fg`0`p7cUv4kG z2UGD8b(Q>|6WW~E1((zk?TMor!N85RAF;K|!Sb7%DCt-uquoFHB`o)FcdUKF9mOCY zM~ugsaaOWeqWyxf|x<3W5NX4i0-s8%J#x2O340cn<55Q(i@<}jT zfRk~OL9g^m9JRy`@+0Uj8pgc`8!ywik*x;JXJ`jtnoqJi(=W!LG7)tJ>c65uagnxs zl@ZBTu4rod4nv;*reJhOBmwj!6w>i~+In!5&8F0(vuaHlaVi=c2LTIpgpd*t97n;P zrHW&8B)Hx1t+0w4MF&noHKM_7Q~|x`>wq9mS{$r}7ex%?Gk-q#^C3YA?%5(?+v-g% znmb`YN@SLy;7>&iDU`O{RU60W(|VwX4wrKk`@VL^4hZ`JAOz6r0WLn~ynyiLPqzW# z1Rnv?q?S=>ZV_!!k)egXAGt*2#G%u`bsG76xx>lA2kxQk=!jO84LCA`8_@!9pp^tL z?&62K?VAYq*^@)~pIRur3{c5wJDp1={p{B=)ctLFd2!34>2hx$j}XQqJwXoM1!lJ!j!sIVM75$Q9`e zRACmiS|z2Wmsi6Kj)2AHV{J=jF$0vE>YP4ryuz?RL({)A6KR1sLL8VJ0uxmwX+VJo z)OWNK0^v*u(Bwl?Ga_y@t>v;bQZ0O_6DVAznt4Z-hO#(U7>gRIW)UC|z9o~!SUT5u zBg;OQ`;{@Gnt81j9X&lW2S@)_7Uo9^=Iy-RIA9V3 z{Upsq=Clru{}=PpWA-&JbrCuxSjk@?B^2S6$hoFJemzxq=X$@+U)evYQM{%)H<$V3 z-1}&yCO~|%g2+tSbHxxQ$?1^;b0piKAoBQeUTA<7cPqGaYoEIjf8#cNoSqRD9~(my z;m1mLL8hyoJA;HG`J{^+gwRc{>xeo?jXuvvh_4eIAx;i>rnAsru2Hwvf7bT-GFP@~ z8(C7X20o(qnf2iT38NCyKU&nJl`O8Gu**(&A*1d2odjWSyx;uc&(h%9Bpoa8f2nd; zn0ogm>u{l~MIZJke1UXR`y>#J5RrNL7K0%5M@${MRa4P8vGg27S*~y6h#yJhm+-0F zsFHM)4hwffj2n6TLDoG}bV(F8N~Yvle0Bq!$^czBm{GxA`Pm$|Z=Pr%@g~p$R073L zP3IClv&E@&w&vT|@NP_Kzr@S+$z;~(H>~qS!oB}&^y>iv9ByeXqCR0DdST0a zIcCEoti(cFwImffz&sa4jwWZ2XXKd--g z1HIINYXoKYbuiY>tW2ssE<`8cV0*7EB!MM>*nBdlt7plM2)4QJu$Dh@N`Kh_i3~)O zc=~?CuAY1D?|jk$t={^mzdJW#yszax!637TBrhJjJP~-NPP%fur4v83?w)a6FBnCA zd@IQ@Q%vD}+t$k*S44q;5sau4pd~$BjvB5AvV3`9=*Kb6UhfL%f%pkJHsbWKN$(Dd zy!hy30iVS4(r3%-$JAzn>v(Zot^J-zv@FN5+QabD#cxZFj5b6yt zzrunqG%r&R!({}{I8V&g_AzM%iZJ)SDOl)7pAD$pj^|7}LjLzUA?+crVR3N&GjSXT zHl=IW16za%-bRn%Lt9|dq>L_P)D}Q8J5%wOq=BGZI%QwAsrM$}_x$T}#**W_zYJi* ztkc}433uG#wI5f4n4yBjP)lpJvw!sG=+A`nz)|*+2)CCFg-caI$fL6l6}*LgZdaM0 zqo5BS?kKOPF%V%?ii`!viKgG9n4dE^f~r3h9vfMFSW1=!cpwmIWTRdOKjP5bd0EuD z=3Fz=#t{s2?~*A?$K!uGV?x=Kp)&CJC&@nqwtpCH(>U#a`&`?;A%fmt_5qPd@hA7B zVN<8;WSuaqAL@bpl@Cq?gVSMS5pKUOpDmSIxx!_80Rkfmr>m^9*kw69HG zqhs;1H@%X7^z?wV@3~!*jKLGM{{FhY z@9Mqp>UQ>+)PkiZS2s%rOVYtkdglC|91dCDX+N;mhz7+oXr}x5;AgBB#>Nlil~m&W z&7ifeZris0u*110BE~Gj0mi=L9e&Gtmx$Q>#$cH1hl7x(4HuP-%X_1C_3EbUlv&03 ziplBt;?f-s@>AuVnx&PBmLb~fG{aQqScJnaGlF4}x+@*mq!EKZO=RN^vKE7Oy!S7T zEmuQdTOP~M>0I_Wy-&nH*d;!{BEo-%LqsH}ELPjV|6Y)i4zY6q;?o^?`KpV(*Z8q^ zlsPcx^n*m&t`f>G0Dio~@oBx$ACZzdww{AG0O`>Fl2p!EG^7QFCz$$5cC%!3-ko zvngXUXi}gMY>IBqXal?k(zxdO?nbM(xM6Y6GI|pDRhy3B);C)!UuPzxj1+V1yP+J{ zLct(m_UE(!QEKqrW6xK<44=;d70PEmpVte{6{u6ma5V<(2+8fp(6pErJH%-rMG(oi z1!3Fc3M;~$ZtlZJ%Utv#`PIJ-P+R~-}A z097HLd@PN-dw^TKn{>IAfBAU1B>jAvfrAEjO3Z+fO@$1C*ibqa=R78IGnDZf+f58^ zv)ZY|EY6#C?HeJHMb)sAEOqRApWyZHOTn8#{-p|KNBS;vZOZLq48u*x#ZT}AmhiceaNmiM_$bqhi~k>0=NMeq1HJ3mw$-?4%*IY*n~fUV zwrw>|W7}%fsIk%5HqPDo-TR+=@67p>PnkKHowe6`-si0Vr_DPy9PF~j;6^`)uDfVi z_z>9wggnEEz&;=}Jcu%Qr7(Cs+sr45Iez-KjvLauls+$zqp^!lA5{if#?*d+2x%c$ zlaNo!vaNOcQn|Zvqr|}y5&6F1?vp%nOg48&C_UxoX=Y1G)q_IvCPK|DhP*Mvs7Es8W%R*#{ zbb0T!Ik*Y%tGzpdPf3kB#Gxz7Jff-a+FFEBhCk>Vn|9lT(sL-537Wl-#|Ml(uy zd!R#Yd-|pJzh>(k-r@ayGvq&jzi${%v}4_@qa^^&@D$E7+)4tNP=5dZ%@VHw?8|5) zpIZ-jiB0xh{i(m_0P|7P;a6z&!HbkjevM9;tDDEp+FIrX+oB$a$@#p9Z+JqTsAZ(y z+IhjrCE zoH@Iy;>8nSv_sAcfB0c#73JFlup2u-tJ}xJ0vO-^0!1CbxW?3VivgTmfdnLEp|DlZ zf^8TiRX=qy27LS{B)8-|g0n6Xng;vMmG6N#F6<1;D=XJdrMTEnZ!uZc&&^S{UF*{ganvNyuy$Vd_IuA_? zwVirV|DWhL4w!hUZ9=+aV@G0h$4Lg$S>Ix?tZ&nj$kg9_lbR(h49_S#kG{XC9uR%J zVgUUO0L1e`XGDwXAUK4F`ha>+FtK;jU{`Hdzkc#JBMa5P2BXsJ?J>;kxC6L^As@~T zhZWEsyhSkvpqe-Yet9bz2(1gbg;!^T`eLJ1M!EXSv(o0(-?DJ{`X0=-8{C!~0#VPN zz&d1bCK11i0?|se+;;N|JQjs7^_%%*8_QDga|?6DWz&29qUkvUqV_zt^~7)rFW9QxzQ^k?FeU$8X5n4p}4yHy*WhdLNz0{>ZOA~ zAfJ!P=H-+A6HjK)F@eVS8SYno^^*^R>j;$;GUMQ^7I^)&K5T}EK@+$&bjpp3scOGS zl#X3j25J-8i%Nj|`;tZ;Gd52Uo5Bt=Q9f&3K+#d5l~Z4RbCK&)W`2K0r`JrtI6!wCk;x^dk^(K}2krbAy<+Y_jZ0R!%hL zBHq8seO=|d9{D7N&vK6QOQwf2`LQzF3GP4yV&v#-sc9osF9XI|aBr=`gzd`@Wiyv_ zzmU7cRthSjRz7h546u{?9$xQ5I4~OdwLZZo8qh~cL$JZVMqpp>S!c}ozn7Me1LKDy z?QaT%e33auF&MsYM0Zf!Hv-|DowD4{xZa3#5V!wK#1iqyOLTjI-f0 zTNGiKoS4dJAu-81b6Zq=!~lD3#M5OKTvmGYm6sgD1jf8&6YySRTpQ8W#v}09hk6a% zvIxP~+-EUJpQpnf>quY77KuB+!Hn6ZpSD~N*x{lYP!60mljk=^ZD^p?&P8fon$+b> zx^si&ih82@WSTUUrNuCqb#VC#9Tq$ztCD?%dC-gGoFc=~esdj}Wb+W$psY?LaCrCy z8-x%lz-p+@?|PZ!Em4m;h-;Dc$Z*YSBHfUSJM%gQd+%v2(9)oQi_^e$`cHthdR2!&U-^x8@ zStq4ryO@+mOXO03PI9IpaD2K|hc9$>_N#k>ZSx7m&SzNE8TOMck8k#gI_lN<(ZLA1 zvkoz*2BuRNJGklpbFlJL6LL@11rNp~B-n7*laGUgwY_B)88qpHVV>;jO}#VR!6KlNYaiUVWakZOw;6vLOhi zAaC3*dfm=>*VUi(=)YF?Wcl+AE+$P!V7a5kT{vnXWJ$H~pK+JGxvgBKTLF@5k6fBR zBAxfV{+O7cIK>F}TvMzbSo=u$RU%8g9}F;E@DzxBP{e3C(F@rHO*8k?;j$jJYApcA z<*~nwuC@O{toHbDw$_7---v|;-N?#xs3A~T0y6mg$|#nmUTBZ9tyvWsLxL2hn34?4 zim;HLtNg%_P6){1Y^_;|km?p#@oZIMrJG-&u zjs20RW0~MpmK=Q1g|{txB$aJUtd(`0vMq#)3B$O6e_A(_Zrw?7K%fDLH_n{7j^1>l z6m)05X943A*|lgG%GILZ+v4lJ-{X4DJl*3X7;s~ht64-8n0E-!Qd8SaVEYw`88M;2F+nyIhNb=#zEj|RDo4caHg1q_ z<-2Gwr%*)tx5b$GH|bE2Y$GBaUq6)#S5q!5nyN{>B65VRmt|Ee=u6-?)k>#65XBaWdk~kBef%L{V9a`?=3c9 zg@txCNJW+y>%uR0{tn#R^&b!)h;OyeK&7ZS5pFgHvB2@c^hvr0AoraX{w)pVK$7J5 z^Go~+F$Wg0v>^v6;ZLP9x9Qb)Ydb5&kJGEaY4^zunJoGMYn7~6)kn50-U~xLK|c;I zmC$LZxI1$CeX!XB17jLYi~uY_>fE%2jmvdyMb%jN^{Ta4k^59ru{$|Yv?9#SlLG?j z7lRBAE-qmCHUvD%+xFoLnSfkmxxt*r&o{`<_eQ5OXLGkWP5&Rz#0+Gq8@jqC?(aEG zEskgBSMu-No%2{w@?TX88HWJ@z>Vo1n1@nDuA#s9;&L+0fq`y+ed z4SLx;$hq(~_lcn%cC#Q(4flNa+v+x4c@J=^$u>V*Bano!@7LCVl`xo1ZRlC^u6gnc zMOEGWJkZsZUg5hH;kDznu`b*g=XZlK395h8SWj68jc>G;%zj1l)|-Tu6oy(Gw{J%te2DgWuM+%Xpmz(M_6CKURVpU;q2reOOM7XBsd^I4?D#Eri$klNw;Tk z+92RYZslql_s${e1`IBe2pc3P& zjIP*4RGI}y)%GD_$eGD2!y{c!GU+*tOt6;;kw9Yn&U}eLwr=DTctsmqZcj|X>)Jvr zoVT^y8}CcI`@kAjM^zIxPdwO-*cfSLyOEPc&me&eRa(j+t;#zAVyd^9^A^ytRx}In zHvr7Qtvj(D$8Fw9jeTmyQO0%rw@&d$nBk~b4TBPAdwG`Q`q#@1W$9rh@Dc$xY0r{bh1dwJeC32d5g>S;+*aA;WY z-NCl&&b8b!Sa}21IGWt5$(~b$qwu_YW!^xbi$6>6q3d&ed(r(4hMPQOmY2&)nnuT4 z$Ei(II=AfsSu}ZYdiPIWBILuyjy305xz|5_PfSndpwnE3>s^bYwTzl$k(ZXylN(?` za9z>!T=Dvk>HQzJg~*T86AG74!!leQMy-Sam_e7}HInSgQw&#NMSlX|$cvn8Ve#2_!~svL7s1POH$jN>(CWy(5NHvLoG`h-Fu7U2e6s*3Q$K$WAC}h4%Z~ zh)HQ4P*v7VVZxa2K@*KcoB2%Vr=eNoNhDI~urIEvQ<-Y9Xr5e69*9%^4+{XS0Mxnx z0_F1bhRGD&A6@y|o8iPrw0bO~>~Tw?uJ zyde5sNSf4kB4D{Lzvf1>`TQ&+z{d98jYw|ElE&RTH^MCwnkRTlZjVRAl! zj05H57R(=ArgHUU0D@E~zx!Li--e3hJGD+Y2b2UYkTNqSDp>-dxpX|$IqyD>M5`uN zcLCl^-H#LoZ^s%>y|4nk`JW_*0@dS)c!%Cl1x9kc?-aP5&XKgOQ0scL1VSwm9#&DT^Okpre!!*2p@Mf%3~xcU02 zT@*ru-o4YlVnKqMh;e=7Gm+2QWw#*iA;#YIYa?!-$O15D{b3vtMvS;d2J}}ur!Q#0 zaXU~nN{IgG+lN+6xbhBbGCH>1Y?OkfjkvZcaFU@%-|eA#*NUu_xF~9i>5w4?=uXC0 zMRyVlp*gip#qw<4gKQ3vg+!$NWYPJQ8X*ovg!4tH`Jh=JatR5KQ*Vd=g)%qlk63?6 z#~33=dOq~ct*Wx&1C(kv_!)5`~CU(+INN_KkECFw-Id@oN{{f!~{eR=RI z-TqYg{VZr@0G)?uD5)&*Q4QN4pY!Mj8bu~_0AX`Meu!u863L1#2bwU5Yk2h?crmf{ zoBgupv3Qn0(L#&u8&w95-GKwrgNUJljQ*6@+l~Ouz~I^jy!`usIj0(xTb}kXLK$}7 z&d6}s7o_0s@J*fvJlKN0S&^?r#iCy{9<7TcytlK60a)LcDn z8OJH@exc_Q!-g=ff|WH9XyrlJY+xARW=lA89AlOkYBu%OPlvfP_*N0rV6g?)?HjJm z&9}aJ64yl#+u6zuHRm*bS z34J}^E6YF?yN?&d7F(UrztHyT|PV$yv z4vi88H(Ve$-}q~rjf!o5f1ghX))HXN5jbG(6g%CoDGw&AZ$3_Z08R#w<~+cz2mtTC z+t|c79ZWg^Km3UD8Zws}QJQLfN5b+rUo}{F?&Rde5i)gIAAh>}JK;~kNn0m8v(;#% zN+7W+3O3p0ZB|*9TorBGGVuBeaps!!X_5GDD`L+S*dKjR@W7Q4IOYMril)9kiB1p0 zN1KCHc!*Oh!=Iroye;7rZL7$FC2+Cu2Z?`ZlcJTG0#-!!*hZ~&)p1oG2;1OSm_8=n z7pr#s0*vXjG95ABC>V<8E$8D?o?DA6w?FeN$KD$eFc*N&aUFcG0`AfmOKyD4k6(S{ zg_*7Z{cd^rQ1!*$ec{J#^IsIx!VU)=m1HcDk%L1WxR-2pg@_?aX$}w=DE_*2TGsG! zx$dy#3sptH?4_hvImKqU3}vPhI>m0R+q}a~yLKcE$Y zTm;C}-A4i`dS?R-*hJ2c9hMob9O=kLdBT!*1ZdAXL9Q5hO~!=qNc17Ja*&K?`+m*R zl*R~~xLS0tk2CFMwe+7~-7E`oozd-yUf9f!7b!GK`6N|QRN%*?MQwec640dZ{VRqZ z6hv0RG%IO{jK@zO@vH4OxMee8vG ze?I#4^m>rndx*HXC<}6Hv)dAvf(m5bf)1(=@$qpm&4F9+|L>60b>aLJ(P8 zo#Fw7vaAY`dYOc-a8?tgVoi}`1x*4%;xKh!iH>vTz8i=tO(cM3&uhl+|i6)QVajdfu8%8O+9p$=xB z-WWhzZwOCZGQRxvKJWtCzmC!XxefEM9q(iW*Jhuz)z37EgSt;~NIzUwk(yA$*3rSZ z$zzp`=5k2FmUrI9t25hPs(ax@w$^HiuBz;OqRexBQbi?W6;r4@D%3#dA1A?pu#G-I zmKWiWDqj(#8msTeor)k7ysKmU(t=U!Em%-xipXthus=S8v&*w9ykF{=E5~CcTCG$d za^UV3Fa$fKbJF0=Bf|dc+C}=w->S!H^)^h|oyGl#fSkGj9sZAEZV2?3pfShqFy?wU z>E3p~Te%y1nKXVm%w}H6mT4W@i_bhsvvfDwh;HT)H;Rw^#Cr}<79r`sMm(_UWM{^D zzsdJ+zA0N}qOqrd)+)-yet~L~=MA-j=T03YHXV6l)zik) z&UOuN4o($obgajQMRSHp$v{F^lfYuL^kiOWN zUWt>FhMdQV4n=}l1>m`cuBP9H+$LVeQ5&vtHwTjquAVV5X`D+8T!(+nu_7PBC33bC zm83aYyyBXqDMh2d>})CdF(uf&U}aU+)eF80!eHrh!V8l?#*L}- z5(4lu3^$Mx%3@!P~H^?p@MHi( zfLBvz!I=Klj%)hDA|x*zq8!;-Og)x4luj-B18Utw>yH7XMePt-B`Ukd%;Qmp6F0#R z@P6{50ZroL+NC;uHhRg%NSu{qZkqUvo`G^0xmK`rX5+I^G!#13`f-l)I82fG2ZgdD zfh*eb)GOGIH5C;#fhB#<%Th#8MUA<>JE_o$yhN`2ih6ia493_Z}r;g%C_(nMyruPtVo^M&3-wqjs8^t!MiScDGJRxhNINDWGsHl{vN79kt`PP+h>LvbK!=Bl?*pf?wj zyrIT!Q5?c&c`EJDRm-jM8$J^P>SC#|99%Y9qngC$KPRr_?@Tb9gFcdQgS%IQn}Y(Z zsTy=nMbV0gXcVF+N@$*h*-?8-MmE@EzTec;NUFDqD0IW%Hdfr^98t}6p{xO7Z8C>f z1Coz*{@-Q($%h3G_+&{eB`ZG`HYE*icQ+49J=2 zD`HcXLsYO8A^J{BvqSEA=CQYNdF=64Mmjv&aqe-;u}(eU3RKEf2vs5O4G;B21ov}Z z=v@PSjIfsj2-`H!g>;j+SSI-a?LWw_iWwqV_1fI?hZDoRSk8EqLAMo`d<~1aZSdw| z9NTbGxh{_zp?`h$UtiQ4ax4`SW#BW)4;CD{)4&Uo-vx`s=p#t*n*Z1=oIT)M+d4gN za1G4x5h;@pSq?nM!Mztsi;X4K{9WMK@x#Z3P>m^-@J}iL*B*M0?&=G$ZRzF)mzNbG zzh~=_C#NREnf00ZYOO=1_SLKsXYx6}oZZ(#7LOIvHW}`rSa15=IsV28E<@B*NGE!} zn`lGg6pNqmGuQO8uz6R9xI&jJE=WcLNtC`#6jC z+&@|1z8K?fwSTztD>~y35YLx}7cc4+^@1_;nGoda?|M#Lb&`uqXzQm9=r``0J3LN< zE)EDcA7K3*62!iP0}NI+s+ z@pCiJb_F&!uD_)w7U3xPVM@+sR=KD#{jy2+b5PyS)rf;Pm$dWxR;fj*|OTWYV$P* zWu5HMbINODVBo@=27ZZl_->{~xRz89Cv@LEPmS?NnhNZD|F8O5e>G{Hw ze;qBK@@%%iERN9{V;TiQ39(A9cn+q+!46sT1HrHUu#RWrQZ`h|C}g$7FO%QE)wfNY zFM}FlJ7)vNj3hp(DuKySw{)@%@2_~^XsDz0`gvc2_BDL(79aZ%HwzsTK{p`x!1I2D z-1p_&Z6LSV6QzpZP88p?>MuTmJ{dSGYLY6fFT^2|Mx~_$RpzHlEu-pJFuJy+i-^gp z20hxtwvpkQ2xm)v;7IZvkvapxR`1efbjxR88=s@}dvh(5ZgZ=I$f(Ln@dV0Nyg9VB+ zYBZ|1#U76>H&Wo`m37#{6H?x2gcov5M80bIBsJT{{tzxNTW`1P;=_D{rR?9-b8fT7 zk>eYwDT6#k3KK!KNLjkj@_-xsem{7%Lo96)J<`wtEY5hKq@OU#%s| z%3OHdzQ~H@SWK<&W&EnyQQ@SRfDy}9Tlzox$h67jAb9I2FlAaXN8y^w$Ntj>`*eh^ ze@(5~In{`f*g4VUIag!lNF#FLKQOl`5d3;>y0i74d-a2?g9U^3+gto?)=6jHh<#?Cq!8Pi#NPFo4 zE!8-)jBqAN&CSs^be7T z^@kRIHJ{<2ZP0@EuNRtGQTKY{Wa2VWb{Wl^RqulV&&0lcmUxC&{#|LX66yYdBJKDO zq2^9F!c|~?4$ys)SPve<2>HqCZ=^fUjvM>!8(wrL874NxmJ{i;QLtSFt`0L^ui}e` zXvf~FAi5Cl%;TsYR?P@r=K+Bl)nl}~v=C#a>(_y(S(%+xL%ROvkPF0ed-;^mgm07L z&u6>&Up_Z(c02iciTf)_5ylQbN|(mic{RJR*^M?h;EAlGh8(=5PJ{gJH`vGO3k5D; z#Rv5^617saGMdt)smdtxp|vD_fCnML2pi)B4G$R-4v}WW$fXpE#oH;#Tt3&x#U}?5m+8Z!v{LM%uEBX!Crvs5=JpJkX(=5(gqM>Ol=6EEA|0DC zaKP61k?j-AZ_mi;>ME0h72m7S!DP>CcNIaoS1Ti4gzk7`VnuQbqgSL7x{*<4tjTK0 z6gRU>^&*MIS@vyw9>#vE8XqQa#)rkGUe>%oRjk&Lv|1(=O{jzlI7=jgbvUi&?-c~9 z2CIX0yRe&n1bRYPbk}QD>xo4nL}eu{dIjw^NPAzUgvdUHaD*Bu0Syo0N`N-)+nOud zvdHY_lJjURj;#KpiQzXt<0R6zOS;J%j{qqtpa|#4wWC_PlXFm-14D19YW_H7;>4=| zvNUiIc?heUpiL$(b;fhr0$b=1qasGf;EBY1LJH%{b*>It+9km?03R&3L&;R{3e-=sjfJCp_wDl3wq`TDY+ zGsWjc2`KGakD(+c*gtf+-E4y5K#+DGFP~mVLGLuLmthJlOALw_iA!oSn5`D=RZtSE ztW0ZjrqV>l!Fltx=oL`LdOe?O4~>SNnI%hu114V^xA%ftJS1l#o?K-T%rpDB9V)@8 zpkDUPp9Vlje)}KbP3yt@gMSKAgIul{DGT1c;y2+;N;sP?Z6oG){lJ*9~w#6lDzbmD(j z96Je&Y3uVZG!V+jB0g1eEO~2=y=%f1Ir4NYn4t)OPfD=1FLA=0VNMd-<6C|E#C0Mj zU9V?Y(L3-dx|kVXnzB2u>vuYN3EIdAIQ!bgydeYCh z>W>Em#t0XXvnE=bPZq%q5YeoX&#CP%}CBM%QCz2Q|XF}W?9&xtXqh5O_}Yj>Mn`T4nhJgeT=MP zAy4+>r6iWdYkAfTeJo<49P2tsl(5i;S%7tSm)FBbg5~|~B_k(?>c}-+&^5j6$O2`Y z*yMeSsKM(#q0tx%-J&9@5y6!8nGh1@jfA?TbZ}kA2r0;D^DS0+gj>XNG0Zt%#yt|OpuaNjS}OLDu~9alU1T8j}(JsC+GJb8l@BkL|>zXS`f6! z7=sSclL(s^P_Y?%u>%1`7}sk@2>BP<75FG@&p`W|5o$E`q9{TVdGeyMtbQ3}L9;~p z=uc(T%dcro*sN68)_V0^EsLW?@XwaHFhMj|H;)9 znzOWKw_jOFQ}EsD*%M4ov&Mia-r@M4N2;e4(djtZD)A|^Bw>{N3SI){5z;d5$l3rp z0vW3N`b!yXfpfiYqnoe>!&UUF3z zvDV(W;I*X2c4A=1Eop=-dFrl~;r~tFj9s!+Svr4lNS|w2rY>*{idhYf_`+OVZPJlr zye*ySonVvSLG|_G{$*!_OHeoq6y@+5!@_3y?&a1YI3wygb<=|kN^TcZxdRx?RVwkOq=8GiBf)fPC zsat{89J^RwIp3IhM)y~YB36R zH|cC0Fx)o$7wfS{(kA;&W95cn#BOhmF0K#62RwDa3EKv<%Wfz)>i(-tZPai`lFiFd{^F_F1^8RrQ^(W;%giPyc2ejcj zY5QO7;U%p3F^%t~R`M_-by9^R!7eQHsrBIl3$#IJ9UANE^uL?#3@nCUJ-c4cXK))l zUjy*&Y_t*1-V7J6UyqzVssqHw7%x1gyjpkES^}AOgIxYKLXRomaz<#=iAdMaQzfcL z)f)!nI#U?wW`}|J*QFvkS9QPfmF71?&v6X3Set|37i~0N;xA7)`_!zn>R4By;G)BE z_rUYY8-dp>QtbYx*G4S3d~|j4WU8}jSC0Q-0Wea;1y5{d&YYj-AKoz7*w|j5?Ot)R z2-{kaU+|PjB~waRf`kP)P4bTYbc{13@+Wws44Nt?04J*p?^@H4!kMf0&W7F3&8EYi zdsZUvw5vO-NDzJX)$`l!E^S;-YWW;~70bk(5a{@!*v8p;7IBaYRn=T2KgP0euloo=pKUeuPXmf5mphJ}pp7`T3Pl{#E6-2AwQ z0=`zwIXy$sCoGQgkK9={JA7x8SGnK+tQf?|hVU*4X5U?{3{5dk=jrX`%24~;G;<#A zxQ;htK^zl2-^TSsPtHH8qD{IId)O=UgG32`nd>C*mNsLPIl66>2XO?tRs=2Z%+9iT zA9DF+vFH2)Ivr@uCmCB$*23eYESYh;cKBD7OGoSkAKIp_KGGDg+obQ?GUSoRb7h8T z$mEa$`W=GzPuU_^#Bqj(imjFzbm)5&QG1|uKGJ*S*1bL5Y`2&X8>;K zvB(Pw0cv&L9zYB=?PoY<<|W`~^tiMK(2Wb@nf(p=d~ z5)qv@B@7HLW_$fT!)uCMN*g%BW3QIa7ot*c?)r1~*Uz1X+&2c$gWo$AfHM1Va_OE= zB~?s)8noDA;_0Xz)Y*K!;d`8Z6B_&-a*!_QKCOlni8>`BX9-Z4S?Tlc&+_l%7K%_niNyW%IfmjiXl_-^vbd;QR~O@a5_%@y8E1z z#bR}ca3}#|z`o!Fx$WwaeB-X#?dl!0?=w!!2j&@muSOHq2a`Zlmc3$sxgx&c-e+sAG^pbM<=;>klH+WigXa2Iw*Oo$X+fslI)q z;ye?*`s-)3Z{kL`pYOGC3dS_BS5@)LH9D#X+A)Zz&H$h|%>5Ggd}lJLrH)40&=|75 zUkz=_`>^RMVkCs-f-o1WlPZ7VobL>}OZ3SGE?h~2Wl@Y9SK33E(Tx}X*CzzY22qb{ zs1Sp<@O~<4*h5LU$9|e8`imcn3*fZRS$PZ|`jFFuh#$i=@ zTC1ZK?JbmC}1Qy7=W0V}LuTuqr~ z0%7^?P7H2EiG6@sx^<vRPOMT4a=>iy#dm}TI*hXOho4ayFrj|%kc+V*frJP&<; zy8nZJe)Hv_4lIRpTzH=M!8YH9?0F4V+X^ILsw5B&-6%+z%|ku$MiMS)y+-|BUrLRMjsmAO5Vi^plj`6Y+<%)Shm^%9I zVWwSxLiD#7WLIaqBqZ`5XwC<4VUW z$?Q344@5Q@cm%0nxDlOsjHy#po9@{TvoA;&unA_-H>kJU>Vzl2^io|FsD6k@npuXWz zPy!7bYoN8hQVHoTNsOB zliHd|BImq3qM^Ii?ptE0xOc2Y5FT*elZ2@ws_4wyp22+c*=JERc*Y-?1h9_=5aoQ4 zKo<8$5jH88+b4II()ym@F+cJIK1wh&G)ftkBNzykte)QFwF=Pv99_l zK+xEPSv2jlk%|TlD_B|nGmO&Aic0%{WJd9^iB(P6%qKTr`YC+PmME)<1f_1E>GmWP zjLl_qvl+dJ4swpdvOOS08IO%2#VswJSVH-H>Wf*UlmeK@+~*FiGp+hlxz#@E<2N&1 zFufgb*F(X=zD1pFZ24uBh;A|^X~)$HTce9ptPgo5XgK$s4nS)*XHM=$8ma$$PS{|w zKC-8^tp7Z`ELx)Tr4sfV9(o=mj%svdo`%T}ER2AZ1j4?Rb|qUV*1(v6S$;F~j>>A= z??`-)K;`{JFzyGS`q`FRShyM3dT6# zD3x|SOhq~uqhYJt;q`;yJ&jqrxYFbsJT(51!RiDc=`V^L{$mDu|5;{nFDu8@-Qr>X zao~!Ji9t?X(9qJ=-CZ_U_%E0b06Gm*0)J+w_=act182J&^+uPZ)ZimXDvj!q2)%M9 z@JPoivc^;f$o6izj{epx;9Y0dC@p##>BZ`6YHlram&{uxl+e*f#(UkzH|mT}j@SBu zd{IaR#y>7OSy_dvXRQ4EaxJSsEBe1yaWl5)fB=Wf0)X7qH?QI-DfRy?O~;B#Sw93I z((ppGMi}2Ze;dp!EgUGIdcpM+^T!W_#xg;>piqMA@Ncn`yebl`*Z?8gM zUJ3MfgwP{E+0o^cM)PIX7IiI{!5$*i=a$+`Q!cyKVPDH>JrbPn!>_Z849x#oM{X!6 z&OAp~jbit}j9cCOF7=X#%JHecmi}D4@Kt)rMOWjo?G+*O??}N_@sj+?=V_M42~E63 z(4Z8Ecs&m9=w`)@q+@=nkiE3OpplGzjkU0+c1YrdK}EVR!6QBQJ|6PKI?3YLx{Lx0 z*#uHb4FBg|-<>*H^bL08O8J3y-)qM*#IaS&*?#ihsrfq=y5cOiVj=CLKCE+ZqOI|# zOyXq4{9y6Or73)0iDT#VpFhnk8sg4PmnZ}K!TZP3OZx}5i9LcS<=0UyPHb`nIs_uR zW~XBvI>XTse%Y+poV;UhD^OO0yGr&cC*6<5)9maH&mS_B>|YR@3yxVORn(grxV|w} ziZ|X6O3~*QqbORQILAueEWDf_T>jKbtno?l+hvg1XeOYkwIFiiWxf}!{l)O5Iq&aY zEnMdM{9(%8C4NLj(&Al=nf1U2CV1MSnTj8QSzU_!PQ6vJfd5y{_#V2T2V5WA60tT}2aO_7RoUs@~>$v+>kZ z${Z1gl1E(gXC!SJTNp3Twc51L@WXK*`Et^IfHIEjaKI1;s=M;IZlMXWDU_BJX^#*N zT7dkk;C2Oo)yhC;mp+cniG! z_Ze!NkB_foMN?I6#IsWfr*YuTZ+r9evb^l=<_Pe~+BU zK8#Pq7w)j2RnT(}*oTcA2IAC*#s=8DJJgyVgv7@%!@7aJSd+l z8zaXR-_Wv>q|c=%@j7*Qf9nA`k$Am^nIdI2F^{jMk^0=8eB?JT1h0r0^*jabJZH0j z*%fbna}YspPMSZzjf(9%%_*7 zN+K=S?CIz$?8JZN|ALZfvDx^$(mKx9{&X+%e-P$V-urAH5t{9%gQ-HqA1)M;`4#-f z^v!C*V<y@)2B5r$sAVp+wQ|;Cj)fN;6Hj%ga zi(?N=Ca6iSfW11<3^4E}-{jJko9rb#P*?dX&2jTvt@fy4Y4k0);Nv!bQyy)Tb$UO= ze+OPg0u+3XRbFS)dbD9+gCJ$+Aa93(A^Z>f3~Me*-ZL3iNqd?wC7;LAVTqq!4-&P;Di%TiXJ zQ*R!g<%`C;54_mdu~>5jh9cyE_{NAE>n;nuYTlXaeZ ze1mRPHPX#Z>BcZStF*nh(VY=xk| zmZDbKV`DTA${uBVh@Ml zl?c$`#j!pYCDIz0YI=^4BnUmSFck;0i{J!`s5+5k2+0I-2s|-ISM+}`x?@K9RbjC$ zQ0TyrPL#_KA%RO^^ChD$U3*XA%a^u!BrY}>tXqT@JpvTX&e{=??orlBlhh}tNxu62 z$3f$hi%=|x7=^*w{z68H_O?)f1-^Q{nPL+ZRLCsZYp+Bh!qcmXsa`+6uYJA&tHN84 zTWFU(U7Jibt}+DxJ|KP+_EAsTanaqOTR7w(tAs@vLEyzl{=@ATLdbSz9CdrBiLzCd z3{H)Y071Z4yd1R`xQI(~k5y3`|1Vqc#z+z;tYvd}L1k1kX(y?)<`<5l>&1@(&|wpCSIue_z8gYbcOrtv z4n}H!TbPwH7QRw)p6YnQr(s}Xkod>FA4(W|1Bh2*KRkTzUY}<3ai3l+L)~+b=m^0x%2T`eM+}UWzvo=Wqoy%k)ReI+Av4EC7=_*B;7C)irZ)#IH9Rh;j`^k03d#ORLlAB?o@>mDF0ntmzF9a7T%Paw&Ms&#FudRHwgDVy-5HfObY9Jwu{*qCs=V|3i2c96 zdcbBs{%!ccg`9A4Ke~y`C$mkj{)q#P2)kOCb0x^?sKn6}k(OvmP1s_;T;PkCab_BI z`cVQIRl=x3PRygp|F8mDRwt*~zIZ5m?c}~U=db^Zsk02KGF-zo-O?o@-Q6IaN(s{4 z-QC?GozmUi-QC^IA|<7p^Rf5YXU@!G9RC0+e(QOk_r9;|G$Tb1NHTgo-!b#C51gLT z!J-iC0Yy4#S=o3pcwmQa-2~9Ca+gln50Fc&R+jP;fT1y}=+ZZoxwW_XTk|*Lp($`Z zWIBOEJ&aMCIW{A6^U~A0+nQgacsrh5dYLG%ErAO2of?E)>L=)L3cZZxuPeBKixaTq z#eB^>#M%Bb*vE=@vJO+BX4yfJOxy>#O*+N`2&sZ zKTo>OuZyc#=*=U421}89~EPDrG)2 zu_5#xR*hnf7({*uSzf< zbqGKwD+=k5Np&%kM=Y1&sai|mPEL>Nx4$6*@1U9IjRt(6l!in9`RLsL)k|f;MUvFw zopR`W-nh6@@wrtoRLgSd0#&TL51q+if8vxgL(C`P49=e`F;w{~PX-0CPaNG?F5CsW zMY1E;NB>cskuftN*LfMKR8Td88*t^^itdY9^nnD~dR}@DKa>%e0@xs4wY;=q&T+-) zZ1(#@Onx%btFjwlj-ayoNNiQmJZ-x=4{QA8vF3-&dmN6#CZ z<1^aS6CRF%@1XrVYx`I8q!kj($5O$Qyl3oNzEHa!{DayhXr8}CDqbCXhNqeb>9hEh zgU2of?^7$06_b8}Ktb?otm|bg-TfTtqdhee0xhye7w2A3Su*o@<_Al#ZS!_u<9gw- z^(?QM+S*Xs-?S@?Exb8PpvfibdSkaZGOp1N(L;(?BmH^nzM#PwBIkdrO%>@hFv|Z9 zf)r;3mf&n?;(qkm0gy7Mkj8#)_>THjK79RAAyggiyic zO^=KH&ZTx3;_QvMcEBEUn7nzhn&)W2`oj2J*~c}b8cV~3=HlUxG?eV zgGs+K%)r0GEZ|V?f3C+_1-7Mhp3r3lULCi=btBeH@TGRS3bzOWX$JY*-JH)5K%G+s zj=Np27v6{q=fbf$AtHwYnVTo+LyxGjWZMC^GS0lMY3IlkKR-<~0Ez*BLn!cz5H!tBL;CfA8IItGfL_ zT8iX~;uj&23;Y$eZED078j7gwGewcRotF>)h$h(IxOfu-2vOc4$0ZDZBFd$$?Xn~c zblQ5^^e_@Z8p%E(ibWN**F|gKol4%(D4|;%zr5K1G&HY-M9LY@@N^1LGl^yN{wL*m z3ZS27syquyn&H);@0a2R{#F37|CUJ}xna`ELxShs%U;Nx2F70(ac}Hs{@B?2{G)8P zxvYIwuy@zjRX$&Yh?IZ}Cg8 zE6eWhJSzjd-n5CkJ7d$9HxDcdzTwpIVM~2W7&!^{F-gg?u$fMgl?zjAo7Y*^j zZ!YKfIuE@#t^mA9ayt+eDD`}EKE*}he<1R?Gx2c_!iEfJgfP;oZ3I{b(AwK=I%@NL{@`V` zeqn*aQtTtp-UPbxN#6cSUU~Msw3^?11)`nWg8WinL4Up4&&jG83K?ul&l9I4!AJFjivbf-KB6ElTTG4~25q_M;MoxwjTbB%z6+&CLOUfyVvRrD#%ohu1%qWK`}&Q>O`k*q&ZzJS;5k z+HEsHTohBEIyPY>spH6q2@lp?-e1>UcPXsf&Nx0$3s*p+rxtLwtX@%|7qL)*f@^Q) ze7YOOyN}uXv~KUA{g{ABrr)6>L3>}idz-F61Z-Id*8eGB)fE6XPkGsT}p!a z_e-=Jo$;Bgw4nbwlo`QIHE%$=8B=nr6&wwj59!zaB@WyuV)Iyx?4@sfHhDEZT*HKjfLs4qC`taP3v zWC=Y_PE3+uaEQb)q+Uu=elax~pf8Yp#AQGts4~dZN?onalN(=-R9vH&}jT7CUL3L%&*;3R? ze;vd>A)!qQM1f!;^3`{Pw%9&pkodCnl18l9Wv2iUQ!SZ!@W~zZc_A4MFifY=ewnK$ zgngga<||&tDat5=RfzM>XKO$iFp07Cg#8G2Sq$&kTB=OWDl=c4bM&CV7kfg~ zSWkDaFw-r5S1ecfq`-5z%vRR;ERr8kISNM*XM@ajkCtbDYLuINK4H|<&s)mFH5|u* zvF1f^n2SLX{0;}QjU%BFL)QsYR=g|DzCc9jK!YGoyMt&GyXdNI7;Ij0zCvU>@e8e4 zd-7CS!U?*p9mmVBCf)Wb?eC+y0?Wj0wQ6PcV0IJg{3e>%4S#Y&YJjgRObvUL`0WjH zvru`=wMwOP<=h)_C%ezRKLcmGZ`qhQ;mLt|rNOjv{pZ`6ysenFMen94e`o$g)C1^y z4u%t#QVhI|n)BVMUkSjzKXea8Z1mkX3fI z*sa)ukbFq{x;m|n5{0^?sH3T_ebYR;aYo2<|DF?F0pEyBO%BLrKTP5#nQq~VpW{UB zK=hO~${!c{t6$^J>tTIF&-p`j{SbV9Gv|I!uqe%1zoF1R=o=E@`5tfI_ky-)rcRpM ztoJ1|E9)@!N7VJZ=efhj0_*lx&%o>RuA++~P5X#VmuA<0`~2a!dcX z0GbijzJDOjs~i-s(5Ci%`pHJoMJN&|uc_68EdwOnL@UsK28wk76|uBR17My0<1YWd zEI{IxlW&l(@lUz-8KGni3ztPXmn_0u3x6W`e!~~7Li|;GMssH;92Od>quG~r{3?%) z6W7CdSv%ke=Y2EJs#+0i1{;64zT>qc##q>}|5Jri)sGcgYKcSZU=jSmutdoD^Fp_xv^L^I#AdGImrSG>x zXa(adF9kP`tb}$`t4Hjw>lw!CRn(CPM%B{jdbXBBZ}4KmiAutIOPs*H&uHF%qq8@} z3<$3g8yxtZ`~Zx`QvA0rS$Z*_6YTj}X?6bubo)|CdhEIj9A>?pEPY1eXmLD-=z5R! z5%Vxd&|_I#R9>mGK_(fowF;WwdM_lVn4i7LM*ZS{^Rh*C;gM-*p)D}6h@?i0Iuk7< z{L2YdMU31y&^9bHs7xw6A#@m;>6alxHitb-GcW_*Z@uGLxBtUsWu1Fz^SSrAdH@NS z-n_F#N~L;brhN_QptPE;3`zRr@kx#@P}jV4A^?CLv~9gw8@DQad@Aw`hClcl7mvEO z$26VUO;G+z`+2um2L2999RkD;oMOvdLo%;k-_WbEXhfpO&WeA1+6?iAqHO_IIN$`9d=9(N<>dSllg(lV zsq@oa)H`_u_q+Z;f7hL)nY<)$DDM!T^*poC0i|udP`GTm6;**26l1z*@`XnK6IFLe#7H*6# zPBywS4!!g=|2Vu@>KmkMTZ*nu>|c9%5`@~X#ec69gMfmDhkLK#QGv+B0I>4lhe*t? zh@cqm5yg282bXDxG$mkLe$_r%lF@PnUFjl#UN>@T^^7ervYeQp47}JC@bO8@dN{rR z@;tybkIn01?A(qwKSP~!Q)(ZJla)VtR6qpw!afF5^ZdJ~zxlj#@z||oW@4J1r)zWi zGy`~c?+U9a{cinE2ulLzDJjUAPt8PVgSecM8o8XS!>Ih}LbOqWy^?%x@DH3tBXE6QmrZ}DlQ(8Ub*?V zv1U}|pq!Fd5~cGOJT#11H;tb>b3Yn36^TlhOi{RYPD^vm=udv zIVA!&s*@RfKfAVymQGsCOZfdr1u5zmfjLx{iE2v4LJNX&GD|=Jn+r`H*nQp$*IGA6 zfg`Y_nr0MIXGGQMl?~fJTe; z@%hryVecRmF6?JquIY;+%WLo$lu1jI3kPuoG)$kg5Z!24xA=XKbJ}06qA#}tP-g$u zf4=j`KjR?jrjRcJ#}ZTa|CL|AWGP~~EY{Sr#8}|1h6&wTOtfJwUCPq4rT&|}RBpey zMX_@5hc5*cO7)`JrnGZiD?I-)MNcaOVebX>wrI?!Te2(sT?FAy-{2TY(6fqNJg z>?bED07fBkO)8n8rm=C*Hv7wS6eypU;hvk^RRm6`GDNlP3sJ-qAF{oyq?$iv?`^ES zz3n^k-TB5CFsT7?HejwzhJ;171-SnQhlk(nK#}6_E7QjXE`bXem>Cm1_YOto>&Y|h z`UaVBVc5%7zUcOJp(O1#(lz8GKAbH&7b3>v%cX=4Uf!s}F=P@T-1>#LCPe$R5#UENXlnv;%^;k~^qtd{Ip92#0~K6eUS4gh=QnZt zNpbIqDL{`t2Oq^$7XK?d!kz!{SE<4ctXnXb!0h1g8@~sc7`2`Al3xgkWDB>of_g_* zmCTx3d$TRj+!-<}0w4MUU^Hz$+4KOklOKORnIe(6!N_NYJ-2Vzc~mrd3KhzTSYnmY z5oE$J#iCxBto&}yj&w<3*^3!ji>W=j-MUOfQ`azX?fl4+e6R|WGfrGmM+#25Vp(5S zS*lvv))9wt;zLR)oiFOTiDK9cn!49X{LiZ!_Lhh!zdcu;AQ1K!b)0O4UNxontkBsjpxRe*EQba*Gauca=Y$6^uq?;qc+D*q#M;`=Q}bX9zc`Lj#AniP9& zn1@;4w@vd)5pGHr8OEPUTFEoMj$lm{yyE-tRYa61{2s%TiMwk z5OsW!o%JwJVG!6xvbD~qJ(x|YArir_tLG1XOP;gjKRPun7R zaA5Het-G)4alqG>I3vx%%!rKOWL`WS@o_`doUt%1@tts9afwv!G*H#cC}Ul7b9a%z ztC>5WNGd|OuuiP2Q{(d(?4t}2DU`$hzpWg)xR6oCh&gHBXBro!W?&q>TZqsRCImfC7JlKHSQtDZntE8rXwz(w1?4CVoR2Y7(Fcn0cX z8+4!S#VQwRye8}dNQJ-^?c*qLpRH@Cv@aEv2<=dmT|UH&kdC|CY!031@hj>NKQLGQ zcX6pL_y1)zaeSN_u{h*>Ds73vDs`%%r~C1lP{tuVUY_Y~W{UeLwArLitgFMwBmg3- zBXic?0+wfl?^471pg6RT= z2z}xf76cA=2Y$btcfD9ycit-Bol2EO(V*+Fb0)AfkqTXD(9+F=Lo6W%J*j`iV00ns zbq+3P`NglOh1h@fxA!rd!SA1hk-S*c3!|-uMa|+Zy#WG3#W%-GCc>9(Sc$km;8vOS zC7IDDF){I$g_#tJEBNph!5xUQE~z+pv4-ce40{2?XPVEBp7(L`=D-PodyJ+Dnb{ah zBSe}>voKSoxj}BJo$7>>QWhtvQO)4UY?i&2`IiP0GC_+FNx_2kGJy!E$!4m;rp6J@ z&NnUqoar-x)Aaz&vDi>{D#>aq;xUwg-s!J10ncyUiN>P{YOAbj`PwqdZ%nuMq<(RP ziLS3eOkC)z;k&f%O=;8q%%JVCRu<|J^z4r&svL8O$9F{P5Kxc&Ahc7Ox3=C#Ax!(- z`gFM2k<%dg(E#1m!;90P3`;)GzW^>UD>Z&y1#g0NsYrg{WgXm_$BuN1`*qKtr<_r~yYTr;8ZFiO=x%>8U$|o}(Kt@eedC@=LT^u&1S?`QxP|p`g9hD0f zmvWm;7mXgyDygC_k|QTRdC{*p%xZ7alR*WS*5WW~@6G%m+y|H?q#u#CY$-1nclXq+ z$CRv{6q8In2Ln*8PabM(IT1lOe_6K}k^t8$-LvtXeKY$R`U@+H=daptTN1}{T$jGV z;w{Vt=0vczK1H)CCYK8x5T`=n72AHO_}WK*`N+$@x&7iI654|dkE{?x{fDcD+PLFp z-T02B(?y#v5c?l@@a#3oS`yvpxLCR`~e@d)9ikYT_Gzys}oXV~etB z(B=SRRb>rCR%--8A*eLnTtiFBN>7VNLx@gOX*K&{FxPG4WHhK;%uswMTX^-prTYDN z7`jgO$9c!ZI63O6gsv>?Ds??(y}=R=I!cmh(R5VyoZS#RZtp5LT~(c%x8Grwm)`&- zqg^Jna`P}Wi?W>@dabc7qR}^DUi(*KTfwkeRfeCu%AvExUoM4<9pI$GUr3?V`|DGP zfgPQ&{)&rb5?7+Agufz$5f)8ieO>~W+@Bm`8B%UL#6=FO+IF=GY!LlvvBO2e2b!n5#8(qS(rGgT9HpYRRm@>X6>4Bmh>_w&sgM; z_4WaXlVxc`#AAvrn*SdpOc42xy!Oh>=jUvH)5}EYijC4KDR@BR-O$hwtnI@NPXdZl z7T)!A4TRbRrbq_O=4vYv<7MO!kq=wW@m$f^V=+Lc+D1@0c%s8lI(!F!arV7IXt~R}&nSl#!Kx^j6O)U%u6W|A#Ti>d2TDPW* z--Y0@E7LQ#M*c0bS8{L#v3JX9E$D=>^wdCzr*Tm~+@DIqb;9c&fb`gXr2c^7(&H>n z=kV&2Z?7P_&}vv%I79`#8QF*ftkvg8in(UuuSw>!Cta&}j+shx(f%G6UhMzDFnu(@ z!@fkf?d|1KfiuR+V!BAoA>*SCN?wvHF75tx`b%g+vJyS!jX$WEiDe}06GvvWv(fr) zsQHfcE1juxRMgQvf3cX%>IS+!0ZFR17<-Q}Zd3|4$cF%ZJC6!nIz^QLeF5^ps2&Bj zS{nC4NCueNE`eBr!@>CH4?QUGrYR*gcJq9GHyF#vbh0qXw0Oe8Lq|EGnvsDXr44RG z!@k0|uBnK`zEQ#eEQ*0GDE<&o1q%TtP$rBHjbEke#{rXyj{5k(^*`Ml4#DjB1$t0JWm2q~BFq0A5Y2@k?;`N0LzpVWBF5{>`x zPDxFN{v(^G3jdRunj7yJ(+s!pmOZ5#qksvGgELjv?imXlW$a~I9gjb_{Ki0n7l36X zB`1Geqafm7FRN+=?10%vBmACafv+uw#4QbaZ^p2c!S$s_2*<-QNTw&iYEUr$hW_N{k%eFUBQLQot`tp)1p>c+>%0lk)KLCJ|quhN}WgZjrv%65|z zv#!>52fj_@30B{Ltq|e_eJPdn?OC*9wwXQH50(6=;50;AInV*|nK^gWM2#)`?n{PD zQ34}4l3WO9;Ke++iW8X3@)p&pUiu3r=#+wIWNR$uQ0x;4FM=`iAQL6>fM=1r!>iP{P?RU``SvA(Zl^e+#TkaVk?4B;{ZDBR!v00YOo1VPY2~D12>*!$ZbhFi?i~_cl0eU}_b@iUplH)dRr z>mP;|%zB5`p)BTLFqPf%A0^pRxj1rOrvfk z>56YyS7U|0z?9+AYNFMcL8OtQO)g`A!RuNbwg*^|?!65JNBYcfGMd-Y(BZ!RWc2Tn zYrPM&?T+8pA-eYlQxWtVx4+NH8*gVfdb@_t0`VB7915Y*HoO^<{-$47si-#kN2s^% zF6;MWUwe?vs*1kmPOL8FRR3K(E|6{v&w0A~duVPbd3 z`lD_6gU~DCFjJ%XuLD7ljAq4z^=xGpN0{I8Ere3=2#n!e$GVw>@!i>u*M$cmFxfnR z12+6e{`nhDHP`IRqL5T_Taq0WZ;x@vjAhNr(5LGA0jT;X5QWHHsQwky1i9<2c=$oj zlg;%1qAn2s?f#7sI0M;~ztcywRKuV_Si+EPYUVRj{6PDU0t$F?T;C`Zxjy|UGVQ03 zY_WJ5wEp)9hQfD)3UD-hdH|j0PVz4LLLauUsb~bE+R?T!#ocZ;#t!r4T27NF%(iHT zgiht(Ak!KPHwXNq=E< zjc0o^Jrw76InmU@dUbmB3TzL*4Erk);7o2-@KYH zYql>PC)09mg=8eD?cdj{PJcjzd2^%B1Qm-RxJfoSw7W_+#o*G%Y!(+#hsGFofPXC8 z9`=d^`l4m{F3!G;F5!i+Nqj~MW@w_4tSKd$`dusTQMfby=oJXRFP5_-C4ZsxpmK+zPj3qPv{6Ic z;FlW*1(*1ezvA^(M_7jw&rSp4$U1DLiVUREWDc0{U}F5w2UAUhnieU0bq&qkFFHQy zAK<^2*Y{_)MGh9IX-O>O;wC4T$N&jV3#|OC;!V9&QoXirQ=xs<*qn!u=;O%pIS74x z`m@YMHk8gMU{W1AYyUeer%p47%{OeQ#x8G81@oE2L8(kk56zg2TKFQHBM>Pzox(Er z4_Bp*o}|=S=2~g3uH3`nD752YQv8o-`vei*5jTBJrMt|TWTTtkp4N3tjXjNU62Elb z7Y$x6f5=`Z6&NX^I~;1c*aM5vOrITmuXr>J6`@k!Fgjs>w28e1i=T?=^(Sp&op|)! z$z3l-9|tw-&c}n`^NnLiSAh8Pc)-~;(nR=Pd4bb*LI~$KB=BoK+~dyo$NTZx_|&O^ z_Y_i1EISdT5_|J-QHRF957RGrqlKNIDj2*FqFtst^Q?c{*})OkZrdVMduVau^>)$3 z$Z*qO{2<=N zp$rQB9;E6XtM&JVz>-V?FGn%3e%h=++~OC@cQMp>R58>6YI*gWX=GqW|Xz%AgZ4Q!Es@e^o?7y`+-K(0Nvs0Oh_-@iJD61~LLZBz)g zba_iBH2`H~aPWJ|(OWMfV>R%bt1A{@0b%5S0cf7m($e-_o*BMxNLcG0)CNt^$Hd= z4n+sT4$eIHb!Q3-$XCUwD)wMQaHj%anNs8CA!|l_Yn`goC z@U(?|vEd#3@Vx^iIT`Pr2^)QD>&o`n#kKDdus8|bGBZ&1nik!Le1E(hrL|Gq-N85m ze~7Qj&LPWTF8IIZUGe_)Qjk;|4ZCcLhpkLC9g9e3l}jOtLj8ls!{=G3y-zzvvmKJK za6wxz%DgvNV8+|~inN_FF)<+@42T6j?5BVgfXn3^>7%Fz+)Dt1J%Ah-u8j~9p!|Yt z*1&@V>-7{+4iy`Cl63fORz;j+(EXv&!?Ys}iDjP`2$hbku2O)Ohdu5azX7EdmvuYX zkB^U=4j>|FXlxt|5X#rzKFsS9aS0AT$`*Rn$8?#p_pL%BZ*$&Ze;w_XJ~^7vmu-}B z-!#H^Z~Ub!KG1Q-#{h3^#4W_G7Do0jETt7f1rs{R@j8?}c(%kCX~1^)Nw@oH6oG1>PWBaSHlYK!v7ef9 zaC{f~xUv7lx!w)zf*pV;C=bur=}l&EmJ)Rkyl+Hmg&ignMmBHWHVufUJ1>NumqO=l7yKWg!KCeS!XLRE6%|+oW>3uNN>zQ*6NB=M~(a~#p3?pwT4k5?6-K#I4|m={|l=vGPnK+jz#5BdwfhZc&P zFYL^NFR&=IJ|iMf@(6?2uepoF04e)eSqdKSaW6R{RSmauIVi*n5Df&1IrX#(+htAb z$GSA#t-)mGmsoqExbU&zwnqs0hjdUBIY5k`HowfI=ZcR@q%jQylZ@{0_%-aYzwM=ijxq6)~x&X!;F`S ztrvQeDF&8N@AcL19^TcXmO;X@z}{3pZF<{^wb0lF2+zg;NwaPR29?Lim%%D8Uyt*S zC6p9!RD*DcZxnAat)E8vC`yG@WqKMH?KhC>xVLv$K;U0aF30KGT9TwhNJ_e2PvoHlPKbsVeVFHRY*z$J0j=M;45#k!)I-UU1^R_Ryd zHr?Jx^mVT6uhsz?!Lt}Sd?4xp$!9vc{-3IB8^v~@p0Vi-BtDCYn`I04hQr9MWy0>N z_7`YgR_nF74La=Lo@KVk9B6UhW;jwuMx_!(#SAH>3=iY;bsmxfG11cwR@uzb*-sK; z-zzi|DIH7>Hfumv{TNg4_qe%iy?bsy4do;AjHMB3JN&yS_XozaNXZSEXtN*(-E$HS zeh9o!f5eL)7dZ(H9oAs^!T3h#(X_Mq7!= z@F2HeN3AsjRdoBc9Ma+S-oHko+|aLI!@rsYh#P37tDgHW1lEN18nNQ6YLotHy(?^u z8Zn6TI*U~JyAm?GM1rH22`1#Cvm+SMK zO*uLd25}i{_mt0@1A*Hf8vpCDEMx*n84y1U34Y{3~M0XsyE1QqW<(30BJ4YAvW=lU~amij}5!Wo`F>Ff>=%FjcD44mKW&v(*>X>#oF zhLV~KwY5z7tH6rQ*DZ+E`s>dR`CW$k6~4cXa|?yX#YhsmT9(#i+w#M}^nO)&aFDo6 z8GT_+O1&KDg6-ReQz{D?S6otrrKGa+s)l!ploRioyazI!qugIAzjaeQ!MO8_X-Fx5 zHt%yXf-yF9+H#`zFe20981Pf^#wLEwzqML2`MEy6-kt?diF?GBo!A^&_I=M6hh+T= zVt}8ArL|DgSW3}U-OU3_(Knz)e=I+MvII$Kftys@LYwX-G69dnj}awN;vf1ol%!B7 zAb|o%9K%z`!BE3fOYr10bdAh=rq!?53bv7v$mqwBF+k@sEEfox#}E`21d@c4>hJe3 zWB-xS`igANg#KG>xql*(+u6h_sBS~pm_KVo#cb#AO34t=B3KN2S>Pl|7>Q}IxNim1 zfTM#kLlWlR77Ybwtr5gR(2@mH6t^UcfnFAG_BCTf;*ccD#~{^b6Xwpdr|NqWB+c)p zaq*TTu7*UM)y*%kaG2$#?5pKFLX%}To06HsMngO^lmCL27Y4uM*f=iWSdm!-W@Shn zN`M4I9!OLUJ19gkIPvaLak$IHFp!id9Dljmu*eHUl0LFvKM33cS60*jIkH>k+{OLM zx@O+Toa~^s?9m}#U(rywbrEm$SwllZv&B9LSk@`4sHkaZ0Ojb}i~Eu5^d7-vDJo)` ztqE{V(CcRRu{e6NC2iGl5y+I2DYsKmffU|f7+sMVdUj3To($w!419gS3Goef zYI3sHW{V#gpR0QWW9XaX5h|tZR|8-t2oz+#`8jSfUPxhzsq$9Z zM^gX@X?J#yj)tG$tgYR+L&mA*Mt=7Ht;*vm>*V$(lx}_G$ld-7{D%g-fR`R!_a5n7 zZs^rWPhOPbNpZPUp`c|-;;QqqO9Td6a13A1ebk>A)|^D=RB{CMF?g69hawJf;-@c+uF)Al|!6$DhL4*%`QB7Y(Bc zIt5~}Mrz;Qg0_%|qI-0ILGbw#b+&2!Ix?3oZ5sh^Y;@;++%wDcykY|`6;*)B_|DNx z9=Yr8!w3eD9Q~-a$B_X`7~mg%QQf_RAVUVWV4fix_%8L%s#Ug7Zh5Tn?X1WMo;*=i zf}Q1Xn4+FP8H_JqAWuENzAgV_s7Hf+w7usPgoo%Bl$6+v`W1V7$v; zxo?C`Z3JKX8Cpf0`uP4CUz4}{V|hM5uLytYPF*u2RIU`%q;diSX~;oIOQ)_H7&FY} zXUWug0sB)+(E|#nL^l1KH30=r5T%mJkm`>La1Rli3hHcchyy{Uf1bW1LWz`eb zmRw>LU4&n;IKRrwC#>l);g@sKaR==h(BKKY&B}swQB&X;#lP++m96&L&5Ko-FHw_; z-0XE=6QH#bkL79xN#k3^+e7lmm1JW?+^|xYf=e&XSH7u!rVQN#i#HlB33SGc#huoG z4ko}!$`bvA^mQfhwT?i%lqgtSys0w***Fi}NR+)H^q;|@)a_0*Bm~T}`OWKSR4Yfl z?S>{mUQ2W4X%fmL)!4uNWVx6n&2lH6T%?}JZrER*kZPYZrygiPEcTC zNXyn@>2y1TZ|%}n6cO!LotrSyKW|iZmZWzhDE13Z871u!{}p+sU+_Spbi$u0KfMMP zU-F;!o@E*G#1u_i3Ul~YfDg&wAGmDUV?Iv@9Fa>+VpTp+^NauV7)<%rVxlL3l2Hun z8GgdFMWP`@xoHYWt=cp_0-c1wWKAo=64riu9pw-Lr@KJ5%aQkEof<~TjJ^_ULbZL` za)K({L_1F69C z>n*sVBAqK(h@)gjA|>JEpMt7Jvo$$U6sh_|f{xF9+rzjCf8W}sGml%9)Ov&vocmfD zTT$Vt&B9hkN%^XU=%`&cnY+K;w(Ldi+41D_Mn#r=cM@~}|z z{ezFZc5vFLa1J}mze}r%4xI&}R|55}u7Ne{u7KwYm+3IdEZ1P`DN3bCa`(&K91PIt zhsO(WQ%x)(aLL_^kE9+llTBNJ9Hsbz{V*UkZ?rEZ@tl8P{3ODNXQBRh+4m&?wRm|7 zqmP$%$HKDpvgm6IM5?zPM-b%CaZsGdk{*WDAdn$o*ZK9815NTPM=Tk9{172PLLl^HJ4F>a;$wyG zOc*y6mn^VLRJ7YR;2qsgR`*T@uZ120E_lQ@saP%6S zG%`WIvwNn&?A_%IXE`F#(+dST)&{yHeHASo+P1Ccd+4h3*S19$E!u4#&F%wj@I%mO z^Qo=}bW=18ohIS7Nc6++-fF{;U@VdIt5UTS2(;cc$Sv<6FuqHE#VoX9T;Di2a`+M{ z^@@ZTe=;R%ssW#uXn{9VW zc;DFq6Lj|-C$w{hn0X0L=guEA|EvSoT4ADL%8@2Bovq6>4J-_7Ki-czx0=)PXS$JC z@*R8osKPWwCLNeyf(CV`AGa;}Sa^C;gXW~n-a$|6QZ`xk zFZZfy#-j?7If}cGpuT_T3AwnYxoprDGXeMoP@>E$&d~+?QZEDV*FOK|viJvE5R=or za-mvqzEi~JtKf#mGE;R^kb$80y2kl$^$%2v$!~C(- zJ(?s)Dl#FZQGJIV%S*E~cOklc`Ja$$`cPlX-UjI)vu-bH~);J><}>Qfh2{zJ8y0 zL>&n*0;pA%SK00D!2=`AH_wM^3{0Z98A|jxHVLY7oM@UbYI}8wF?df&+;qWk znt0O`Kjn7SHfwqB70`+HMaXznPiBlfz#lrT1AJnW_W23x?kB*5z|Q~p82RKxV-kjg zC~*uS;}BXNAtCN29D*7VRwRt97w>7c`OgnsEG{HohjR!U?l*`E49=P9Z?#~vaF)9e zGJ*cyJ9Pzcl(USU^(rDQLn`oMc7T|)y)gh)M;64sk9R%T+@ zUdFun;rz0~{FAP(1D!Dx$Tr*{Z|v_)2V=0T(`Ds3+4muFDpnGZ-LuOvQm9V+MI$eT zQNRgEl%gDJV2RjXAo4G&EF={T5Ff5tuxyDnSrxaTtSUbxG%LHc2!@L)qr&mo+a&1d zMn>J1E*3twK6%`D9g~i?L0dk7j1!*EMU|Ea55UNCO4hyTBGQUTeY|2FZ37Dl$Le}F zbjWo{1N{7`kCS3~yvNV`r=|5;!OeCn8#1~b=Qf6TUEXSZ}wT}fk5VN@d$R+o!r78rDgnZk`Qqs zrHF7$VRiemoN84RxKIqr@OpXqy&yt!l6*|uokh_cWOWI|vQNqy<@4t*;r>E1q+M$QP76a9TQfKoSe&=YUE2Q;?<76^cMxD+wxV0zTraQxOy4Wi4bgqluFp9 zd1!czjg3G;%hJXszR-+1Vu2ry8V(zhmt_2tQ0V7_M>#?nR1QiBdE+}o|B0A0#uvuG zG*aQU5=chx7ZBk!rOy@RhmsLUnSG>E2Y%zUIF3w+2z7skir?XJ@6dLW5&HA>H11ME zUNR2q{o51@cH3=vjzsIXiP;MjIQT`8b%W`iRJ4cw7@m3M1MP=%vYZ2oL~!%n9T8;pjG+%5C&>e)eGhu3avID>P{E z^0N5+@+@80Ko9iQzJ?dsoi=~4w$pd*hqC!wBX#_S&wX2xC0hRK7Eb#f^@}D{jwD57 z68LPaF8tv^1FxRvK94Tz&wls+5p*saME@ISow}S?kOkhzzhiz=;0?d@<>15=BcS79 zWgQqC$7B>5x&*vag!biBKO?TQeWekPAg5mCP2m{NOMw|v;S(PR+wXXBc z2!Eb4Z7eo>!hUuytR)QJXM3w#Ij}xc9{98JSPrSnpQuByTOp7#idiL)B!UUAd=Vl- zrkfY{ALpN~i)(=PkrqPe{YSh&`sYu8feYyP#!uI#{2*buoc>~lpb!?$9RpbC31f@` z{RI275tX8}V=|8XTW_j5c6|q`I~kg}4WC0faR09T))0Us{z)+nrwMkJQb_)_PK>-}EO3 zlgOApar&ka+#dry1A~Cb+fSM9R}#BqJqRCcffdWxLbDbh>~082YQSIsTvk|XhLZpY zlMl<`H@jV^4<^Kz9b*(oD`oocnJhIU3DRo;rdO!^4WSrXZ1~84Zw3%6k-^+VwD@dM zaS~m4&{V!)(J}d>&OYRhGEi67={O4!q?LInzQ39mFenPQLnPC9it*+H#UrL2r6Nfa zaeu+CQE{~{b>t_1s-tQ6zMK2pA?cVyS+U`fgBh5Z6s0>P#?+_Lvt53;xp~f;0|1Q~ zkEooe_UUT}x?F3$V~z~*V|9#Wz2JV||E=2vXJ zE?mMaPx`ys@7G4d2-I4SGYuyKVj0N z>qnJgq_;m)HEnqFNW$SwV9rKKecn829p4MW;T(f&bdTAewr*{hSKb<+7#=<|Ksfe{ z{4T=ikd-F6t`$!5tI*%*ps|)Z5WkaGY0X$k&x)^hFxlBNA@s9B9UL=K9`4TM-LC5JcJ=&aM>~t=NuF>RDA?gq-E9aNuPzTRNMQQtKV2PJtLbqgWC zarnUWx$3{Wyl4LZ0VWv`E`m;AmEsq z9^XtC#YejS-Ufeh#f7s<&i_*}i{hblTR(+iDbYW_X{mPt(Z(g0ctX^Nn9bKcw62t9Rxf9%?I=p7+@aeB)K>>IF{ zbVH2AhmP1Zh`&9E|C|dI;KDAxVOx5YyK#%oBJA3)e*5KcFUV2z`?YHkJnG)-v@rHe z6=Xq%F5jMr^H?vL*qyoUt-406+AkLw>#(GYErVqDQ$SI%H_;S#kpSO{UPOD2h<$1i z&7HaQbFND3<}o1!blFcPvSLTEoEQ&=2^q)GKxUuR9@c=2%zF>dgi{87>Ez#)lW z^}{tNyVqy}?D-qavx+BI2rfZOofRqIPgoa}MQE*Qf(w&ILIyJ2tP7j>jb0}Le+>)> zlRYmxLC@GTK8YBd^)B4+jL*dDc3s}4y(dNOPlHdU9|px<2A9m~t8``>TIOuM&ebE4 zxM!~u0~{*-x8RA?ePQ5>F7I_$GbOL`(tyqK{mVP=|F@t8WYYxELLstKhoSXF3jkJ4 zUXH!Q=!%_nyCZ(1SF8pm0JyQW|^5#g@-usB~wb*(A*yXSHI?7S-irh+| zvsfYKfD>NU-{=qZ+C`Ynv&(sZ*zE^mc4%Os!Hlg-vv#$}vLWn1G#)!xdz(%U*9;C8 zK%V@29){VjLdjmD_VyO8yclT4t(&@e5OK}09#%W=SifSH;N{_5W5I_zD7w!#!smTl13s zka>=N@O)3PAOx9)f8f=QN@!P22b>@AWsOlc1+Gf!wa}x z(Ch1lp5`ON#pm@6+8&K8A++v)3KIS)jY=P7>kPXM&F$x&rrmztif0P?Mbb7ck6!A+aIdea5%e8BEn`jsjg#ard9Im>Z8nw& z!LNC7f_8M;g+&PrM=$h+tSw^)Ppe!FQBW1um)Ec*Y_flI8Z%LTcYH=~T&QB3&pxb8 zzWKOk8-~9~CQXr+lNat;xs7XJ|FF{d zMTuW9+1e?ZNWbJ4WskVT8Fd&gq-gE73lkad?j^j8KV4v_Zxi)wF2W@4d2T;@A+naK zT}8f?^+t|7HFw%UQ>LI@Y=wVn(K6P6b!;B#C>7}dn#LG|lcuIx#-GRqwqcFX=o!@M zG;q|& z5g0d+=veQsjG|@EY#`>u^IIY&i6IWiImKRl)&NJ7r=bw;L2FYg{ZWJY&<9JQ-GUYe zF>b#BP!g0|J{W5JQv`!RspYT4z?a>klP%wV>~IXA1TH_|$p&!u8CmY1-TM6VZb3%E zWYt5E|5FNMW$j=$dW!boK5)UlsRMubb7${G0PRf^N8nF2_^Iu>f~~nUtb*adNfa2a zfa#G$)GrI5ZUL{&7-0X(%F8QTu}6C>4TaEB)al9pZgZ<03TCM8e@x(N_%tHc-~a=T4VM_r6lW(6@dE)bW{Qn6BYzQeX7HyuB@i&Cqwfxa*h z#lywM#=aw)2l>7Ukz`=BHN6O+NP^+;>-Ty_V4zP^$$WhDM*AQ*RH0t}9>5BZMq=#f zm=GQg3+2>}mXYL2V2&+=sW`mhsqRgZ_7lEGP&|Ryh$>BOFH4}wQ;jG^0~&eIj#U8e zuuMr+QYeL*VfYks93YklS67Ju`sl>o9jN8oJ}NKRkEYAtTCpmy0Ggwj8>RY4K!l%@ zU1_Jtmu5f|I437J3^7bnyL#U`o@Y<@siO;5z8ZUaCaT|^u8jf#UhkF-z$MHGiSxdf z0D?akmsI6~WX$o?6(t$gwcO9~8hnQ6;WV`eensn6!mGUWB>Xqw7|O3Tk*n5OOtL1} zCZ9-dvvCKcSScfx2E$o`m21FofVS(OD8#E&LNO-k|29S-g(I^kaC)YN+1TiyTkRpR z1ohW-f(6j@XV32e`#ILy+S>azYe5KDCf_@y%ku-i0a%Um(1y25me?4eB>t{ zMSC)&iSQMP{`)3aYoW;c;rE6nHaU%~VjPCOd#5lTL7nS1rPb6WI!W9Au>iU6nL^do zEP$G`zOnj6+P6sg_?ggsCP^MEMS5XhJ5))%n7(+yHr?an2TR;SZWC4(PJM->KYbXc?k}sv>ECYjrRyH|J-K5vZW|oeq@XO3JT3*%{^>u1{Wfq5?Ep_ zW@dWbL|b|PTcPs`wx~(t8ivF3QZzEX6H0767fPH1d;nv@a-T`}$NB+l*feLS6P&KY z)d3q8AI%RuUhF9TOXM!JF`L$nb4Q_vqB~g^bt%?$BF3MDll=r0Of#{`0fzI(fzv&m zqrZXHXvfOjO*1vxJ*|2i6edMbz-WilPlN!a-n4t%-9K5jJ5;DQ!~jH$=#C z%p7!2u|xmOd6-AaJ57{ZSqi$6B-tXqQcO=*ntfDdI$e^=%??qNvrK>R}FV=sgD zwN^I!*Hv44o~2n)$F|?A#4k^Vm8K``afBpZux}k##`ZJ@87@alP{qz$jCyUnMBiG2 z`927I`uiy=Zac?{%mnw~SlM}8_{#&t^j1eaj*ChCNJd>W@$7+1w}*e{y17+3JRYmj zhN;;u9l+1kOHJKFB=MRSFE$asH1qX^n7PV3lPqAFF|wjU{d{j4fj!*2brPxF&JmLocCs#>p{3Q?$O#+ z*N+%?vwf0Rpw4sBk&jMke%08X!$b&@P*#w}V$BXmfIu>tdCh;zB7jO>%5|MujNcuv z#^#-`k~XcQ^ecZ>D#IBUq)ulY*oiE9TkqD~Fw!~M_}n%Q%&Cu$T66(oR`d#HZPUS> z@HsIPWjNqZ%dl$~&!?myQ7+C5nY?5&~FPvh@jUAkzg zfx3VvbSuS=dbDo{i2&#goD1HK zdlS>$kH4MvQwv_G0lcM~buIn33M1`AtAcY5H}A}m1I^F}S6zhPGqj}_${b9NVJ#ef zHl1J(wWyfCMA8i*lx*^*dwKd(v%sl=42VZ~!aJBYlKiRSK!L%Eq5SHEU~r8cgnJvm zu4q)sb8@r&ycrk=Wb!!gjq`eM9MrUK?!TI_V2HMPyo=VE&WG5CEdOuXoyHj*WeOSnGX#13GB0E#M|Gy0qby;;>9=%UMTZ#SPD& zQ?Evtm(K9D&Y2WBnr3x=Mvk_UNAQ0zJKo{>Bi%C^}jCva8yYKW$_zo-b{`(2o_D<;>VgMjK2}1=U~Y1 zhB#Ic9o3W!_I&U*(SUJ?;doV0f*a-Y;ZV+%q$I~rTGd6eNA^e6bTRiJb5ideX#kfO zwLCW*;B8GJA9&r+CAz-7-v7xjIC#&|&DiAwezk!+GQN(fo7%Cw-w^0vn5qbws4K;2 z_eL7TLR1dkpO45!4^W;Pk7z(DQ82b5gXl#t`bBf#1AM;szCgi|mzO;k>j%bqjjTGf zi~bf(@ofPVsAagRy76gJvESedG&#o}SYF{9B?Wls86?cd->wV>8RE%8;(dLBUZMTH zHC>#WwWIMy#xc4c0=9R(cSpKXE&NBJvGMSl%Rgwl>e7QGp9|x(pEmF9w2H?2P$?l_ zQ7Zj1Bq;vgGai{ihG9n!8U7{R1uJ)p8xf(?C*j_ZUn3ha7+C1q);_z?>RZw}`t{3= zsg%nxq-{JL*)GXOd|yoN#SSDRPWDYxhE=!NW#LBQzWHE1&cKbjvd5Al8^b>zd=!Dq zxio^9q|4A`D*q~lI0jeOr1&-|lMxUQ{ZZc}{G-VVk44dYA7&cqR;A zE%+2@*au9@WPEnD?BG3;=S-=`=phuDxnZosQ;=}wmX{$ntLo9jDb^q5T%^-zdwPlD zX3-AGX~q!3M{EsZK3jxUj>-#Mes>+ExPTmvppTBGRIo(aLC}~hl&6Ny6C&o({M7ud zYfp)<9(*I1gTw6%fn{sh;?k`Lw-r`Tt@=sxUm1P-taX}Mz}O6F5S)ZC;bICf4`W2L z^UYJhd7r@yWU?7qy1AtS@eMA3e9CIjF+`OpJn+7yqgh~hx(!|wQ$NTxEtWaA=q@qJ z-X^(&5yWfxmYea=+>)Bn@OHuqC}ul8Tpd0BJ9p%7#{EN`kdB>!##ubpFAYkhR!~s{ zdIbPQ98d|LzFApW2{>;-00SOS$Q#z)F7Q4(0va&@WE3TTcdVxHyL+^y^tiU@?s>VE zXDC(M6H!wuEG6kEkboez=b{tDEi)EHa0~4dAW^@cj)#sjsD?4Idw5k9x=e3U`ny?z zDv7E$;VzGA+$5|0kxC)k_H%zg+tELzT;YHaquy)Q08mfj#p`)s0om)JT-U__a#fW+ z!y}JkyU8J7H$pFX{(IoH6%3!X**eX35VPHp(sPcivqq+3>}3-$%~u#`_BD_FDIiF? z?G7(}SAih*7$V5IAhwvkAE)RPN%eMgWkn!`dOP3u%mkQIM}dMKz>HW`E7jULq6}9T zf>EwIel)gvnidL=UJon@0|QX+R-Z*Zr#-;5Nh0i37p5}gqQ6lKaa_NcV$tn-f=uZF zU;Ja}q{yf(z;e6?Vce+T4gy&x{;*jP8*P z4OsQRiU(O0_-6ng_3s?_;v(KVjXqZf81AZOKpqTDva3jKSUb^wxT6l&FXll%oiv&&LfH%H1R1=xiQAnAT`thz6 z>pOM2C4pO0bm1hWa8@YDB}y<&;^@itoGI4>Rz^Hpt740tmsYJ?qlg*2^WFZil)rR+ z|M)QQ^dtyq*Sml$&dg$94*Zmn*>bHO=NRoWYwKLS)0;nP&FJOuJdX?ZvhxIgD=1N1 z4#QaRs&rS-8TarQYiVik>KF%BC&|@duGLSoD+DsaRXZ_*~@RGo|`*XmX zH38MVP0E@MvM-2Jsxa!Jvj|nA@cVWgs3;y+M|7SPYMHX>Lo1kN{G1q2B{t~rq^?D3 z`$!0kP|O zFInIU)FBc0Sm(<@J_kU;2Xagltw59TcNK((d+(PE{`EPbM&?4r;3zJTR4w!s8AH~f zat*Ku)ia7&#-4);dt@W zugujNe-vOyy=veqlwGa;U{mlY|GYruUqR3^JkCZy*MVO9s12K~qjt_&Cj{-W*lAx~ z^+&&R;IA@zdpDV54kKGOE%3}u3KW^O%3V)@92(_40ibPA@I5PYu_6$?L zvX9S?Yj_+vG9b?3Ot>;=gTv!S>C8Mo#;y}_eOf;`}|cYMYHo8YLf*0p1sg{WYtUm)MuW5AMs@zK5kyQY4;o*J%-Ct820_%1u$>#;y>rl~jx$K(*UXD%A{%ZQ2X^O!2GrGj zMgWTh3u(uh*3D_j2Cd`2hu7KHvMWQvavS>leZ)%&(tT#`dYJU@%*<1l?Qf5p7emtp zTXSWBl<0a(Q~?9srC-jqTT!7IR0szxa1RH!Tc}Pb7jl_30UE850LODHb(lZtz43#{ZR&K zS2do|2Z{Q$D&|eFi-3Q?b8#kGvr-0##ayrjB0zfcjCw%^)Er%pEahH+k8&bs(+}BL zpAw_hOiC3+p0atOsBuleRjM_<=&f?8TY<7Td7qQyf;gm01v9z%1(@S5jeu-n@KO1j zbee{^Qzw&;Aw`&rM5ihGXvAk{LWU@{;1sAl!i-GMhjFc*fvYQ6@K)g4yK3WPc{f8b zL-gmIDn}`bxn6)X!7UF1UNywcEkhQ~bf}aLBO0zg^;} zq*wJ#S?Y{aV*%=1ALGj@>EiU}zSQXolDg}^Yf3qW;k@&X*!NtZe`7A-E4H^3E~}}A z`i*N-SRwAe0$W2L#onF>8kgQDa#k()mP63tCQ36fNT9$GQEY7$0cU8Vz=+MK>PL7a&S zN)o3m2vY2MW!G;T*=URS?NyJ)o>D=4eA%k4k|^5G{pF&WB*ezSq`ZbPb=~1aCnzDGLJ;i!BHe2j_Ll+`y%IUs80{` z6v1bB!cL8-ZSM4{ag=ly;4!<7Se&-!fAd{0w)UhC0-bA2TAKCNY0>nydA|@M8owe% zjMS1pWT)|Y5dQWcBDVpA9pS4nDg+9^@n9j8q;>_EF|#)x;y1T|au!<#Nvr6gY=`OrEc3`wYsw;b;N zw%!onzkb;YBUlWIt~C+P<_PYZvwGn9a<};uhRwN3sFz1US%)88{U2y zbWIxGx0iH;@pDVp!KBgIXfA2y3L;fSY}Lv?z6@O+f6y%gtFG(x%*<%8ufT}8u!uaP zbo9FkZTJe_C!TdsjZ{0xx-1FZ*bbZ5gFwG+0QvJvNV!+Wbrn}1&u+l)P)a)`7Qzas zkFZ(tK{hxXsJcxyvy?Pt5{idDaQVR4IPr)DH4 zMPs=Ls*iSvufrY9l8>IRh6t)3n1q`ozcGHI;$o%eZT(W(aN(~@v^na4yKID0qb3>H z2o~90qSFaZf}()cRYhQ>l$)e7P(nQ9R`D~RXKbvb?^i9dW ze0Xke!rm~TCaes$$rw^Pyq`X}egqlngYoFEFJD&5;X)w+YMfd@O_IErUeeBBAPf!~ zUw_S>_hYhU7IFhK)7!@KGCfyiEs#Oh(J>AH3;^jyGA(?K0=%UF(Xg?lMInW{b1~li zZJ0idYZ=EEmV3c$uW~v_%{9}D=S3Ey5-tbm<^t>~@v@@!ANbXkDt_CH5J7zEJiW#-|Ladcz@fDgbtM{T3nyF?XjX0Gv={z)~>{X-4U zd@M>2Q|}$xD30MgX+q{eG~8g6NjnVokkEk{Rw=V(@m=(1X@Wo}=5kL^k8~yQ2agFZ}25?>ZAH;Jy=mdz`+$tqsik z{aaMw9JWzu6BHij+)z_%y@>((-Bt zZ))ub-(6vUnMp-*E=jv`D8qV#)^7CFLp<%=h#chol3_7@5IbbXQ?ys5}0IkDYus3-pT4nbjcV{<)8;=LIqx7XgRBlTCJ6hai*9?%C&qXNEn%)oqZ3P2tJ z*#X2|0=4L0pABLpxd{H@$o%HnN?+q;^i(aMqti2A6i zItMliS0KCP?tIe-YI{)o8@1z!@(xZcG$V|&a@&TFP-UoCX_|5_Kj(dz*|7s(TtUf2 zkf||~mxMzVuc*pj+dZSyGXMRN4>~Q=&Vf)_rJ|q1@9!ByC6r5M#Sv6P2#&AaRdFl| z=5+s9bMw2Lu$L!%puMiknE+{Nx3^7(@5M43Y45ZjOkcdXS?TmN4UEqrf%J&&og9<* zpzRHfWB;NCe7^u?*>+R!cp-o>TXky!@3`tb4mTc<-0T`wg|VL8ek?&qrKqJ?5CUe5 zfZp?cuGGxFY@meWS1O(NQs;(D`5zMi^ZET-=}MSxg7Zqa_vaYh-_ECQpHrWo!I+iv8W_|5EW`H@_L*7Bnee@(5+P`G(;~` znK~qGJ;Q<8SF3~eWO>#V?;jLjLiKW;uLB#BDwB}9QSFXab;$q<6f zfT6p8UF`h@(kb>Lc4FK$tiJop4>|W+W*5%0(i3g*x%T z;C2YmN=c}FI76x@LyzGVecx@4L*pQl7mUj#a`lO|q+pRaP#9_w&1{Fz=uL2VAg-+Q zPAsTSEY!R5V+bxQ5+vzp_m1~;J(37%R8)c|?NKKwKkdb$NGfBWa3FKmiqiRaqQ26# zlH{+A%85Di$rXrAw)Q+yAx-_MUE$4cHHmxs@gv*a@*m2kyz0l2dQCQ7FxvxP7)Fz> za@QJAynE4q4!Gp`o8BNK5%AE-hW3dJaHJKE9jkfeaoZnqi(K3Y1Wg=N^QLP*-Q8(@ zPjjb<@Mj)qRde8GB<-1Y>bS+ZUw@+j?lKQfZ>ODmycUhwNfznTywlf+e5XF3KsCp) zl<$~2nn@NJ9zy$fts4Wqk4pvHJ<&RH=uKGYjMalQEA1y+V@ zq#o4|Bb6(EOi`lT`JCe`d(nT;6Gac!veXu@a}buj(!jLP+a6HV@n~1LX)YJ-Rt&=^ zFkq^xvCP}`eJM&?LKriMeJEmLPY+a`KdVQW;RWr|+qTpgdr}V8M?WZfCHWs+K09r> zd>T4po9_JK9Ll{hf9qoKclvzb!BH(al8vAB$0v@&Cc{0faIO zr17h!%n)?@L9mR=Luq2P-(#}zU$Cw1EnHBXl{u5HA35(r{^Gd0TKRx%k1)h7N?YTMmPV~w$n&u> z^YP5HSE`fYaR~Y?H*q77EWTZUjuZo`3Yk-#laVh$#>N(w&Wgh?o{#^-ZCQpL;_Rpd zw&B;;=&i3L7XKoH_AyS*&f|ZS;nlA~`i46bS4Leq*%1h~9&;I&Qct@Q#p5x?teiPu z@|oSSF<)g*`$d$AmkRR|KIuZSP>#{=U z63u7@R3E{60|hPr4}%v4P0 zfl4ojkECHohC`L{#OQI;L`Des8oWG%6@zjDV*$#I<9M~7pnm+-Yr@Z6bD%pkl1o$X$uXW)ipYf?9Y^_vePnFJ{SqJR=_8v-Fpky$Oq zR%!%KC$Ai1Y7k3-F9HEleZat~7Y`?dOgPTHFwDs2b4C~;tU5>O&yMLLl&0rS_OtdD zTpj}K)K^@e*iG9IXOb$dwneg z$|+SniWh@>3z&X${+cr}LM0T@4zT-@O1!%b5eE;COyi0&h=?g0Ud@v4>!q4~ z`|Nal!1+WodM#Yj?FK?GxX}VeTLd|42Cf*Pf>KvWX7=3ddO*vX{LlZf0Jok-Xr#hJ za$;i zK&=M-E@)Sg<|Bqvw-QXfH$#-ApSVNaN4J7sEK2H`u+vdoUf^Lz61UpEBrc^n#v5eQ>2*V%`}4e-~8g3#|gJy@CX zh9!{Y&t%_>3su#&BQ%FS9l#pp(0y*#@D(SIN&jdE7*vbtftS+KNhs7E3}1pHT~F=M zEZ}{uL?Y;t+qG$C<{Mdk%fs8^$?v%@kfEv7-qba@x=*_fa3QQlmZw)1Ev>Cb4(IHL z7AQU3l7~(kDHG|33Yw5*pd7JR~W6Nz0uHr z+&;DHGB=qv+0J1gCF>pD&gx|^>5XFW_1^?9S3ibC>B1CRwDphlDNP`O_hP(50BmpdA!zfg=Kk|9FRFZhZrw|o2YIjGZP^e*C^ao1(fkJ zlweI;V4`aW$9MTW6YPD$0S||nym!RcLlogfp6GF7=fT1)rC)te^I2PlS3GeE}?r|9u*zg=?V2a z_f4#87bv7>PNI@N>F?)QMWMYFW9Xfe!H4~mmsVXJ2S^^^thWS9@Y8W#fDHA@|#Fg?MZ)6OA^Jr+PeK5vC7+6wnU#s`{`t5~*S? zd$AK5OKy#2M>tRYaA?|#Gn^qorr5Ua65&5a8OM;e_H(^9{D==))e3hoJ%dKz3aEnF5A}}2O@}vi(nJ=KwaMxSHy*@O%z)iEv$WmSH*!VA|Wuh>;ZHeT9dErJ3iScUvEQR2wfBy=CYDVqAJP`=UDz7ztpKJ(t=qkgP`Te)M5)d+)Pc z4&*dMm}Kq`ZGHP6I?eYr8>spFAG(t6k@mx+R^n0Kd5xHZbww5)J|}CqpLV|@2wN%8 zPh7X>cn$8ISJ|-Vg;ZRY9#h6I#6I=t^z(ZdB-^hMI)~X>jt>3nf4>ft*EmTc$N;UH zj8I5%4AwllhZ3!>t~#9)m$ytaqFsDu|9JF*X>-+oUr$#5eB=qkhDI1(9D#eUgaZtr zd~L3KNG{Ar9*vdiXEOgdmkmpX>M8I0_hq&lrgchIR*!*R6TkS4DOxpMQP)j>?t=sW zEu{q8maeh1@$D~e8yXOy#~nt@A8wl+X_o@?ccD9L`J^@sAs0#rSqzUF@T2+{^D;E1 zex=+Hfh})3lum_^H1r=+0TnD0um>vLv7PL`gEv5{-$AU=3+3Bw?|alw{s$z*5BP;o zrZsy$HBM?9%X_vVNS?j5VDB=LnNi*G!ow0dbO28YNckMN?+F+SEC*Twa1f)2(CD{A zck08>@kQmk;WS(a!4pEg>x5q;_>2tCPakv-JWo+XTr=xNMa%`n(q22j7nI_dJcRa6 z@6dG;oBz?r|2#==8qs($<&-CQ(@ryW$(wkjf`^=jo@z5C<6;loiXnB75~1t|EWBCS zC+AV-r24u6MgP8g_mm`0FQ}QN712uMa2zK~n2HHS67i(31GSD)oDK#LG>PY5-F}N3 zm5~SYx2NmM2f?08lw2)hGDP$`DS5_TVo9QI)n)Rx+-K*f7e=ihp4V}HFp=UM=+5iq zsQlq~=jKOsJD{p%+@ZB6yU}WDZd044oE#5PkpYfWIxOYO;xW-mPribiY2;r5P-h1@ zU7BO-gwgAQkqgiY4NM)PH%|a0`hG?k1tP;`o?icY@~Fe9@DmTD?KWR>EQY(5xKW5J z4kj!%Id`@b_hkdB7zdx6aNYneUm%v=4Cx|eb)qv4s~`u$unfkJNQj6ooTSD~Le}s| z#W+=VIaczpzvmw(d1cKHuIKg9!EHddf*B{YxQ#BM>E5 zmP70y+}bk#gY$u{+Sfp2zR;9{{!Vo$edfE$(S((yXt3o&b$9#)ol|8_LY}pz?+I@D zZ3_ioXAeJj7fArf|8crA|K+~v889V~?VY(=S^2Z_J{|%gh#X=L20s}`iXs+=WzNiQ zz=UH!L%u|1h<<xb26LF&9PH@=)(0! zXVElRo43RfU>>Y#X-CS3K65H_GbZ(MZU@gtquv%D_h9;e44T=yvxO^$oZ<-nVZpLE z4~8sI<$5uS9_Q{ETrg)+x78^2>sAOKOeN3dwT3Ka##A)Pz0g{V;Zn8%wa{K8(o z+0z$4LC5s`vCSep!eHBNjye$dbMUO^Tbb-jcL(m=D=&d zz(HiTuJ@3{c9&h?^A5fYhtFxFbaT3O54E(SN`5DwAM~?(zyq8_d&GgoyL;QbcB(jE zyuz%w0LoZojbfoS&!$#Ve^2`hc;SDSjf3GyjsF|j0tDIVJ%*Qm|DKhV^+Wz7PuU9D zdu`3eBUY;Rh&U%N=bA0@8KWp5)!EU>4IB6FqZ$Ca{19hO5G~#}{F$v}z}x2~xEQM@ z(M1`=9!~u0=b1pVD>YRHMlqI2LUv5k;?47G%)h_F_l83hqxXU5%~{(msj=8*7LQc^37k6O7vW4107)MUM_c-; zw`QLWS!Lxx>mELOZ@=JA-~8EXOoU12NXVLd8$_pw!m$TS3~unZiA}0 zAZeqHOIhYxc2Wz#C=(MCen%gTcHqUp3~W6Qlwv@UVu*3bEu~2RkWDLUwWeZax=O~k z^z@MQ^hVTza|T_O;mJu9fSZ4h0tCwYfDOUry^riY`xF?nfg3ull6pgxfj_T;G%lK( z#MY_+{*%5cA_jM=c{~ssz_oC_uTQv{s53fpF#q$dxkKBI$pq${OQRIXl#iiS0z~vr z%F0jeuwI8nk!{}Bv_P;5IjmN#;T}MbyeIeo%+n=+*ttF3*wh$yj|0rPjB4SnHD}jy z52_nf8TrJqcPG8EMcL@MVj{36z!xD&w62*rI_3i#2KdhDjR~O10r|ZN>qT2z+t|h? z8ld5gA~|hrnsv4+z9j8siFF{3YL*(`~`;O|?iegsFLHs3DWQ5-?%_1eP4Ji zzD~DCC=f3H6bjkF%n-7y@zFbY&6IygJ62IWEREkPSwS+xf(jJZ+@cH8hvlsemmDW= zC`}nc)*_G!bcmnGWOKVc{_@^!lT0P&Jf)gJ0|XWa^oq?*hhr4lny_pF4Y~PR=cBw1 zEnnQuK85{UWl{QL>yWT%L!|S;OmFDc9htqez2!{$>yyC#20xp0f3$Y5i}0ubZ%n*H zCLxxm)mxpEY5hFbuaXdKDD5TC%@cH>QZ&iYdGUC@KR(UgAo6C-&>c03tM)Q<_U=GC zm+*b-^fg|N_VMJVQccH5jx^r6TF*)yFPAJ=h|m_bb1-q2-x-|mboWT|E1h=MH*;1{ z1HaHPctz%J`pjf=fU>a>`$t91Jw=+tdij`ea6L`eI{qt?5|pz=bOhL%*uN>emqV0H z$Np?U6yJl1Z7hD}TnH8VzJ^b{Q@ID-EqUkcMd%(_dA3W4u=6kmQadd~&<+Qf#!7L(t=e-|H?yh4GO+ovzzoA7bJ77UoT%fnxC{|GI zo`Y*U;kk~cH>dAppKiWFL3uQ}V7EVZK&4a9APAXMrfp!V7+*rp6uBW+iqoW5*CZ~d zH)$;2!`p|7Oshe>Fpj`z+MKG4K=w5rs@bDz=O-_&-m?Qv7SZ`q{hOXF><@hm_Ye1W z8;QGXyt#Zzv(e}u{myz4oH{xZ_Oi(SL?nPDNhq*nxDJLRQZZDPSfiA!0~5YV00EC@ zUFh1-#8TfIS>Lvb1dXer58GfO?2!k z{rP@Gpf5JG3vB5DSn`wr8kuk(ofyyVu8wl>FPmmsVNv*{K04ldW2ITddJ8AAKsS78 zXME9-4?{`V+1we*=XMYiKpZW)$Q8ufNx>`EyHSTVw--~IZZhiJzZHDG-ut|fu(>V> z7H{o^ySKi;4?Nh4i=8`DdoheKx)F{M)-4Y)l<3s6Fej2r ze<0Wu+_BtIuBbl2OsAzIf0glH_}TDXkt=zma;-Em`ms7bNM${n^<%0KwmUNe-} z{h2`~vnFPAcsV~Ug?WMiEt29cgJRCU$^(b;mj}TEtzfh#Nt5Id46N&oaD8ad-iNw5 zvFRuO-sy^g__J<qU5sIvE}D=>>hJs06@&VVe_^LB#X?&rR6;Kgn^anDpH zYuKCl_*zk(zw`O+=JR`|^J6f|TEqlr2=rWCILn}iM})3(ab%vk7Of{4&p%I)lut6&8}vLT9KG4{XoP+R%FafkkzQ}~BY&KP_9ej0 z$?BuqCBV<|+U$~0s*lzl8K&)6cf17@4#2|wUIbD8)?W_cbGQP;Kv&(c8h>BvWno z06AI0Q><(V6}RZY*%lXsGkrRRE-7+d4)|Taf zn?&I*E)$=+nrM0enO0$ILO&=+jnuD#{!4?Hfm8JQX!^aGU}pd_-~Ud>(0k7v@P2*P zksVv>%{)9Q>{K)AKlPXqoX_9)nU|GfF{GEoez13|ho!a0$( z-XdBtC59dwlH>M#QG83t(1;|{lVjBW{%y0in22#l^am#vPE>GkLn%94@OJw_z<9yi zW5IRaxnEADmS27o_oY{gCex*IAhE($G`x^gD&xP*Zg7q%wu=$o5eahN?4qIQ+hyd# zyUl;`!`eRv@i|@`SJpQ4^h~|{#=SdP8Ke_? zR50|pwQ#)Uqn`+#PGF^xJ&>pP)qsN^y<$&8qsSm9uhO|E$_;|L^b*o5q(=e+(abUL zY>V+5`1MPM=K;xkan)+=E79ibnJ174cBrrAZ{p`*%1qZU_&J4l{s?+Q&^IIT zgV0cav`w!QM-AL%!g6e|%2|j5V@~#I7=AuGs%mhaq7X#vgzSf*bIK%c`4?T2Ja}ij zU9N~=x=X3N+a_FTX0>qnwCR*g^NkI9=t6baU?{u6zgq*OzkLRJ(eBOT#5QAyE=bPB z(3gl2Uz8+b5O{x|hw=;r8iKF%`&Uf*X8-tM{8clp(wIl{8<8f zKCQ-5p_q}b(u&XrOJTET`phPI?8^{h?G58K!0^J&{PGiWz;m{PzF$P0$`6dZ*59Gl zItq8fTk~S4Ztk!n<JY=KVd}G6d}z4^N@2bp4mLQmg!G#oO!hh}uH7rxFHX^j$S( zz*j^kx^4qL zkC|FuLH=S=)r*h)~Kmnheq11Pk(ymG4ZcXx&HADhn7T74NBHm zJ|0mpuBYS5_wp2=ds`Fc zOM$>TI{}Kep5E^Jw_dI$UQRc`EI@+-y7%*GW4iCzV)g9^5PtJb10;tDW3)@8lEH(> zSwpyHF=7*=F3nkOi$Oz2D?G+B!3lU{016;F8WH%9%{NZq5BA?bYM?6+*Tn}Ivj8T! zuB&SjP+u9}&OK;C4$jOI`S3nW>megV;d-bD9V7c9Fn-%-QHQ z!)+`A)tYLX20?Z#Ny3mgG^M8|##JS_#D9HZ2Y1m&%mc_z=O-y{wsdt(VYW-P*vh3_ zNk}d9yg5Bnky}GX>EaWea|znQlZdO=SrF7pPQ!po{%*{|`j@WA39(E*jzV?3wo@&I zUPcGUzN$JEJwgJf{XBX!n7a_VXiaVI*gW2@3LdOnJkM&0agYgr*rrYveTwsI>bL08 zb5>Q z*9C9F@9WC{MBM+9=4&w?zXlCmg31gBwTtS_$LHnVU@lK^{v!MOWIyzk9k`&wmSw zt?Pow25Dj<769Xu_Vz3QFQ?XPAkec3i2Lum!31XmbLG$;b~-0>EX(aqCXne+(a>Pg zioF&siLUtg6b;fQ9P%&MBec+g+or;o#v`#fdiKw8#Q01Pl_cc2_bNL~gigfQA+FeM z0sizylg1EZ80H%#JT^A=1{ldfJ8&xY2Lg<&HryVD$VD-}i&BDvsDRM$-<>Y}w3L{x zF+#M+<$)Qjl#M4its4DppxI5o)2khe3J3z-c&}uKXxctrsO$nifq*wdJh!v@3H{vy z{SAhZ+oEacmJE)oI6@rhm-%k5OUh}nxAz16mri1{_eZZ_-cMG)90qd&S5*~LeiBX~ ze-SM*%|Zb)EOO^fMk;DdccPH~Cs;MZf`%6pB)IX>4_FQI55DBQQUYg^HRRYKk?c*m zCos;vEaP&{+Av4!^iW011KsJeqwa3fDUc=;*@hDLdjlh5G+v>YSr8 zi`RHR`OUVQjLA)IvTaOmvL@T+q{&UjWZSlFPquM)=iIaIU90}7R;{;Pd;gy2i;o^G zgZe*qo%ZJLv~**JWUk{*T3w7U`#5!-m0SEtu!+<$iFGtP{??qNZQdftjedKp`O58O zeiWNb5d@j*BbT`_8oKF5=d%RxtTi&VJheghK?`Z8B;jTO-;MA^c=jxw2ZG=o1#73E z1Y~Nt(jeO;l8EKM>n=^Y^Xlkzh!&*-$CR_*IRj4>EwYgu++I1LQqZ+HnkT|=RA}#V zug@=7emttK+E@3_A?xxaY@p9(RB9Gk7(5swY!E+kKe#a6%Dd`3}e zqv~3P;a|@Xp>iH+`+XQ9i+>$sA62>+87_}u;G@JXaK0$ks%75sRxiqzoj-20t#ff; zgV0sNO&M34oSCv07Gp6y&HQ|4qPve#VL**nGv@q6GiGnuUk`ujhF(v?PrkOhw)vi3 zhtWg{UvH#|0KPsO@=Hzq8CZ317g(#+Pg$1{8!-JJ z1tT2~*zf)VPq_ky1~$;8f_b6rDqqlYj>sDLmxPX!S#+~o!6;Lw{cLehLaTxheHjY_wTz#|^ zF%Y03pkJ4%py4bDO}1Vg747(+x_}!#aGy`~VSL(5-M)p7a4^)ZTz3?#V?geY-- zpS_(%i7N+BosTvo##zy@y4U*bx6mkiIg&|kN9iB-)!bRA#TiWR@}WPv)Z} z>k@!RWE8%S`0O0b;U`}BC>w9DJ>7i7=DnXAe9}5z0D^dDFn!&!g|ed|II?)SKl;JF(+02{#_K1 zr0|h0oGJGGF?ES5N|h6DWN7FQEJV8kV3@l;`COqB@3{EfyKuSRfZW={;`~)84h`eU zQ6&;5S2Xeyt+TR6HMyj!onW2V4%_IMmn3#GT7AS-CHbQXgdrtJ?5e?p(DY*y>)MS1 z;Qd&GKkBcyBN*+j_fuoCIg^vkW{#2ZsnUj<$b)*txZ^+~S=JRO!99YQEm24mG*D%7 z5%jn}UnyUHzh4QLuj!a@5?svz_;3iA!b;IIzw&HCFEJ>;uBc}tTJ}qB6C0KC_O;8l zpApFl2j>HdXD@FpcJ8k^(x+yYWZ!hyy;ZFA4(yby{#Bq7oaor?!bMfXYGII&vw#YX zmGq6n?J1gPLBB2zKgV253L{?v5XPjAhlq~Nm5n#c@pLY90`HyI?X~p{n@1DImFO%& z%B5sBjuBvumO0_I&-yY0v`D(WR1HjuBGr>9@{dGtaN!aS{zW^#7)Z*6gr#CmkRVrE z^k{4++()iji?hqR-O2LMRRR4IQ^3%!xni4b5nZ&@2$_fej-%_ohxvBA@$&WU*(Gal zd5%cQJsKc~vO9K?SK@00(oT!lpaa76!Hy{ZiWVodVi%r!iurS)kPpZ{x?bzbtR;$b$@Z9!F>@ z)Nhj*n$iyOOu zTfMZr!v1)k0aW)~_CGHG(0lLp@C!yWUGGm?x=}8Hs}d8qCE~oMQt>1ykN;2YAN9X% z7}m;-hhH`NYfk%($RXDn?IQq1o(0F%(6YABKKg^!1xRLUYHEw4U+HwL9Nenrl2)H| zjS#7~;&tIrB!NCw4o>uSeuosg7~4wQ@^2=%yP|EO)Skg|=En;5(G%t|tg)yu|~S@_oF7XclqeU#7X0gFANFI@ww5K;Y9v@HF;h2kyrGW@_H2m%SS^dK@THVS8N<~?Sk?tn~!kjJjgnj z-;gK!M*W^4%2?XwM{k1Hjn1J{0qd`S`E{D9-&pC{QYRUkcB_y?v;&oY` zzgY+z1b^aNGdXF1-PUoLWOw+ZlHqq#K@#%n-#zY9NrH5ON8o!1#WJLl65HtnVX(AD z`-ianKestqH@cOJ^$4Ift zrR#Yq3Z#s2Ka3_(q0+`F*nSt^*d*d&*ZA(QB~qoPRg{vj4lIBni>^yc@fTYk;U|5M z`?Ed3rv+FD6p|=_X9PX{=#)hr5Ci?_u>j6`00nWW#uOQNP62&Ll$4afc@Ic8J{u5M zGm6?J)Fo}%X}mg*LSnvuMeGWF&}ySpf|VNl)*pRcSvLrd(cn&1u5ej+rIolV~JElkBSu_tSO*9`f@)C4A`vGUvTr16a-fyfi_ElF+;hWLH0`Xg*31$9c}}0N&@vymNG9A-a7} z{thOpsF2i*2H@y0C7yqX9Mecz@YPobULRCAyuI8im;&E!ER)aU<63@9KAT+ufRl@f znOU(69XM{tOpL4JK4_JxQT&|7_*ZNs_S1NLrh6;>+yhN@?k~3R#j&Kz&t^3Iixlj( zP{qt=cdG`99u}&9@WJ7zU|1LFebhQA3sD81f|(1nT5^)Vot!f}*kH(qGAoqTRoF62 zYG_f44ntbD5tGTjR?$0DmqwvPvsnYi8ap}tGD=AnZgY53LRLTsVW7VNFvFq;P(53| zyo{60yTgwWRyH=%E33PS>beFdUQto&l>Ly|q2$F!0_An~QISr%V?*PL!B2np2OE>> zwKU59m6czuI!vfCuLH2G5;XCXTX(>66`ph9^;NRcU_9!U2M2+6OJsxplq6X-5Fv(3 zR58%4KVkxoR3h+CEtWEdE@)B95l4Bs@YBss!9_P2PJkm4s~nmavD67&nc82e1d{w4 zW^EEgV?UdQ<9oVs(tybYIR|&yPdDHK-ri1K2g{tlwd{m;f>5t`2XKVdY1v3huXHu& zgd@N9D>Q_WirCscei1H0nlx(nU3t8%*LIi2Odp>DTO)ZAd;V#N7MwbbaA?_sSBbic z_LUY;pTfyeH3)=47HXEs$#iX)*1FQJ>GCJ`xBSO60#oq=kD7X&bagxAp057NKn!qo zQe}Ath7h|Y^f<7NN{IfgB~>EUD)k?Px9u@ghgUe1&_Za(_-D~AUOPjdYd$j2^2@3} zAZ`kYRd-^VT_632X_jU2nbhnHAES9L`f#wG;7*@l!^7pk^NP*r-MRQA2ivV23ds`5 zvZY10>q{xdAc}N#)MXq6k)`m6fkObDY!ID-M6-Ffo&LXrhs zS3L;`3}`D1u}@YQ1MtUj1T!&Vjl?d7hm!J8em z6m_f+o-c!l;Xg%3FlwL5(-PELU1axDs6TQfAPO|1)GZ4aLZ#ua+b*5?p7__(pMBr{ zdOzxL(iJgSxW#R2SGJ}2`%_9@q4lW=cCMCc?qx62nUM~4FLT4O6tPPB$@;5icxj^I zE|-?_lI128OU6uI*!FC(!^^Y4J62J`(2yk2%VCePCSIVz@sG>fxJ|qaquKNAgU8c~ z>$R;3?{@a8Ces%D)?JU7tkpPoPb%Vq&~`Clm3}ojfK7wA6(vHMFt3m4Sc4^wOte4Q z-UD#T)OJLr)F~=iTfi>Yu0|^BFiFz8VP`nkq2tzkx5md^9>*Acf;OJS^-RpqPQmzIHsu@J^L5&*IxRzEfBS7=N<*4x)HmAV4I)g1%l&7G9nfp9ST;Px z0&ftklhck^fX8Bl!*wkc6{qvzr?r1HcZ{bdkDFjfrz;aL(_{|HGkF;tz!#Wp^<9=> zPz!k`Zqkv#xd-z#IOOJ7SLKH7XD;tt2SH$~yuWapi}M_Kv`f0$UR(=wfJte*3%~q@ z#dFRn|4draFskn>gDw&WoQeto+bjbD9dKRKKDKTdZx^15u`%zV8+PSCd#` zxR+nTOke!3T(NewuAwbd#B9k-1T4X=^=WZ*ueX@-iIlfq=}YC~^u9TI0fG9bj+x7& zB2+U>K?y+3w`tJ!vjRYPS+6Iik8^sjWFXh=upQ4!b^gB0r7w-?YLtAJJr)THU^1yQ zHYV($Yi{2XgtpS}+7YokEq;Np(h=6Pjb9W~t<%BpXB84VI#J^?p!L(>zr`Niws1Db zUK<|^yODW=yu~+?{)YCDeOts-3mi3eom5M8^6%+JzmH-DWQ;)Z*%#vXC%tP^pF2~X zR?nuNYPHKbSZQ{FPbFTTe}#Ugqif%?vmh`bs~mrXOhuzlRihG>@`Lrg2&0K&wL7|5 z@qDhx6oc>k?ej|f^QCKtgp~Nk+(}E~PeZ$ui#wWN|DOgS?K;6h5+)&vdgeFJmCq!5 zE%<0igc5LP2i#BGh?;T@TyU_zCduuzpNa@kHHgQSzm^v?e_#6IvD@}(S=8Z}2kmc+ z+(B8#G0@|Z1Iw=+aD8Ts9ZCh9Utsz~?FPBF6x8&MDVh=F$n2>}NfL1ogxlok{#~R@ z@D6nuNfUTnFuk8`yz*o|zeVJkhktp!l@LjEk^(8B_INFo7zdXMTS9pg1Y!q8QbM4Gxh@JlR zYcsM~C5D-Q5#_+=SSrE63}d(%dU0^AKyG&NLFM-H3;3$b(Z?I;0BVVH4AL(T^PHnGderF!|!N|vs zPE@xx`eIjelT4gX6#2;&$PDO@8>V<8KBJ$#Sy1=kQFC^tW z65`^6CaFGF3Wdsq39A73XCU~mQ}nigc*_DEICE#$Ye-6JvVlWe3>pBdryfB|tfjsp zElxlX{-g~S#!3Wf1@1QcSo{Uqp$^KMqj7MgaAWK90I>mwsyA2|d8itA83M<1LYnaO z(w8rcs8Yd^xj@f7CMUvN?7kNAy#Kc;m6iB2 zX^5a;wUKzVgqsL8TxfkdKl(1M02zu}ZKg!Qf0cWm(k#>MK&G7hf~Ej-sZn z;d6;rXw%+j^2H8f44R#4KtbIPaYrACvlkqmzH(9XPg_IJ%{oo*Duyw`#_!t8nA@?+ zXi-6kV;}9_NGI-6W?B$q@`RSlW@ovWcc+L3+XiPD5Ma1 zRkxgNY7ci4(|;IH`$IxsbA8EYJuy}!5*s3vwt__1*o7FzAtcR0cxSWgw(wLI1NXrQ zh$s;;eR=2O5hc;hVBRmFF;7)nTIaKCp=@3-wv6CdM#i^{<;;sK z>V5uF#%yM7r)Wot$5B2_*2x`$K<3MWB3U|5w5h&yUyl_Df?O^bJ4%NnmCP#%glMhI zB?7a`H&+T%7U`zz?A;{?MX+7~eQ2#uR}+m@KkJ4yyl)N_fdDTti>wLGPS}Lz{12~J zJOPhW^7s9XH*L90&v+nFcA2L42=`%~O-|G9wvf$P)>Y`yuq|L?Qw)sE>9877;qBVTYc&eSL$!5z?9^hLk(kW-mkxS4Y^)Wg;9@$ zIWf2_WtLOlH@f(mMrh5K{T+hcQmjotXk$Iu;oL{$M{U`z#D?9tL4N1*^nHcIIx6PHD94kyzf#_Qa01me*tWH5lZ0zQmv}hg%JQ|ePFSnc_h* zsS=AX%$#u|s*trJCUXxMN`F+QFUHcCcIc|}f@RbV zD2}e{7Sy`uwJb1wcLT8Hh4Sx4)(nO8vY6<@EX0h={fbEje^a5#Q!iKI$iXNukK1JD z-SJzU&Ja%3BG{yVDY0-d_g%G{+?}nB0OF|hwKOn}+XET!k4~+VlTvKz)C?2%pCwma zmRt2A0vI%5GJ_7pGg8Wo=_*NBG|E4IP|_ecYT;&JC72BT83Y^IHBMubr3nX%FA(NZ zjD@+3N*0{dlGb}h2ryYBrpZT9+79gH9(d|6E7`!VFA7XRVVV_w`ua52d=Q!I=>4{! zW%M&3k%>SGgN7wY#CToo^Q{qG!ykI?2|>*~>2I2W>^FU}A~egAT4gmRnorGx+_hBA z1m|*_=|GtikR7R67>vlNXZ8<`;|LbA=eG%?s>>e-6L|7!D*M*%ck2c}MiibBPQZuZ`sa1s=Q$m0Dg za>mjP#FPSx35&iFlv zkbTHQ2wXSnI2X{1>H2)y;C3@5jwjK4fo@HhCo&FGNe=|tGGXAq@@ru6|ZTu(Dg>K%g|t4r`EUu z6O9>G$}oF`FKH${u+}D`N0f-SHY(Nujg{usaB#j^b~@W%mk5c^KO=@ukhN|w>U)Q; z-^zZ``<`p;PsH~H#zC`D3p8%V7_Q34XpvU=kNb`?`J0p=nN?j0(2=x~OTYc7uWb|P z+yt$&O~%-67gUVxJ&Y0U^YBpkFzDCDYxjcVv40?0D|YV?r;`ivPiFXI>iNBnRfA67 zdJ~FO8HNz^1;rqssI0>Ucd%s4J04Pdxa8ZYoCUGPObi~?Yww&tF*7yF3Zu1^OWyK2 zHX+^E)Zwq&w=TW-<{BT)xUO7cV{h;~nVy^42CoHo-DGY?FTOf7+mS>!6!EY;Z&vPL zt6>;g?y3wQPk7R$D58OZu9nM=j*TpzhPPLq*EggbUW}EOw|eTee%`+#e4Enh$h&}T z4DIx|ihyHSYA|mhUeynUlC+Q66!SY`TMb>Q?m25ijzNvDc(khk&h))1R32=%V8`e$ za=~<#Tkr;MIVQLSp~J2D&KuYIE&Z0keq#dJq#{iEbnHZY0Yjm5E|lY!W0KrW(asW( zKS*6e9MM}&ouzLJDkSRGAwCw1f>q!b9?8GSGpY1?glFMe`jpsW>@-HH^Xs$>-&_xK zC$!OF1{>?rop7)btw6V-l@oH4i`!tQ*7(OdsTDhfK$GlN9P46XYFE`|^pT*>xCq;DhGu{&mXpY^rZ!L3wQicprXADKkeDF(tSwuH`Hp-WtS zNebl&YBYpwpEPP?yZ}>{War#biM64 zCH?#E;8qVPzj8ds2?e@W3E^p7?aVl##~^g%Ng@DPS6mvNzc8~nBB)P{=RTyGMOf)6 zPq&UdoSt6%a`DUZyuX~v>wgck{)XDE>g|BqFKL|#n^#k70&f5%VsKb8Ar(0Exbfcb zo*2V_fdaV9Zf!Z;uIRxl3ofcL&C`CufHYdxesG>xv-;F9yqWW?<~b1Cpb{V4d^cQk z9+7*STlwO1&e~2!sqY|I*~UN541T~XCReYu$Xk(=RLbz!jm~g8{61J&2R6OhDgfg~k*SikT%wLGGpfCv)1v8QjS@J*QD^n1K*h zGW1ORZ`}t+kWNN9i`2IDaAEe)A>TMdlq4BkEmiG2pkDmVPF^FscA-;nM3zxTVkC<% z?C)iqTyN{t-S!^UIe{>b-1~{FuJ@~~&01r$1e$wL|E68PyI!Gv!u-Q3Ru_VcBD~Bj zcS3!33YO(!BB{6-+d>3hc*UixyUF6ga1=ikR}4B6`>!p?+Bl5Fdd#_L~3R2n+ELir4(tc%n7>4H)cs`!7U8N&%)Holy@St*uS=ow%rli-NU zeU6HOctrXu?2%&KKR3@;i1-o$y!a)zHVp1w9Y^*My1(mlZ^DuIiH4q@sZ|UeaQB6@ zi=SLCojTMbH4R>J@}@^O;_FG2r=9VwqFJG0_^wd-Z^Oi0AA=5F)GGIk7@?S^{!QcW zhE@vvEMmUyS)F@*9m;xveLvEBrF+}!c==5X@+{%93?!`W^XR4Yw{(C$cRmJty}*HV zF%`^sr?D7WuDV;p%=q6@;paxe_pY%2?HkV5hw(7e%(P12Cgw&iG=hipUB?vRl$9=MRa%-0>jzsMEllyZZ77|z$O#Ok0(N?G4^w-;40NV5_WFy@_et%LpqECRkds! zb$E`klT*-Kovg0ct?I|~|H+Fue`EVI;Yc`LkL8YdJ(tv8;-|bDV;y7(c?;i`x;%4u z8VXUxiy3TPvV{-N^%5T|kT!iT{f31S9rlk#>U)k8a$JjrW-qDmE-hs)O81}G zB61UjyQ=x0`sXYgFZ%+f=H|%nmk%xvK5wrLl8F<%`E@@uZmKxZNQYFUvPagS%o|p1 z%F00k{FZ4jabl!6MnH$oUPRV2!p8~qVbKWr^Gs}&!eZ(PQD^zoJ=d9C%&`_OiX3-Q z$X^dMNu?Enb0a-VhqtKR=y2Y+Rb~8n++gF3e&+T}a)XR2qCc9uKtb}vW!Br1`P=dP z^M>0&_a1aP9hkw?*_&h*Q#sB0sK)eaR%ix4l^81#`^JO>#9)qb=x5lpc?4p1R{~dy zeK7vlPH_#b^#g&r^=q>v`deS72$*o(ozGVD(0104UA{Fdp%rH8H8sv!0R#;bYOHau zvQb1XBVLDL_|mtri?Og3f)|O1bKa(;#P0QDyW}3|BT5Y;B6A&r@qc=F@pgWrip-2A z>f=PYHi>=34BGD>OXGbGIKLhO3hRgZ+5iCAN0D(?ip#j&PKK;|vp6LssXcX?LO9x< z3e>QoO?vESPa!%|>IPEyv!v&aJoDlEj(0DBEOLIi$LP~!vGX%Io*ecATifV#hG45jX{Qr19Vh#8h0~I#ToYoGf{K!MJ6|l>usIn)A3d}ieN2BfGLbZul}BkG_zi-#!e08_g&G}*P|_*tm`i46~`j3N%H5vS*p~xZvFK1(R zY(jqd{Y!r@y#R;%Y0n+$@!gc=#PQc!tXeNv4_Mzm)2`|;?_ncC=%@}1Y6MfsGjz+* zOotS?BSc*J!uqzUre8iLW@FkhUmg$Yq$ zsc~#BBXVps4=s%xxP~~Sf2Kkn5yne;Nxm|~(;zoMj*wv;qpzX&G|n8K#u$~EwRpCBnfA-GgVc7eL-@d<;0`WgDfbg|XzDnH> zHYkuG4FsMG;Bm~)r}#+p0lL`Xt-Fk@+f`$1J(+9-GhLSktKkGk%s5v#3upn3QHHMU z{@j%rmf5B#YCR1FGtA?qzaBlKXx)~i0xeNLG8>`SFrxg#6;p&2#h-<^+WuHg6}yb2 zz;mbH1Yo!g>Am0TUFQ8Gxl@0JzI}e{RScgy>cbAbURu1K_rvd}%tJ z=30P3Y~<~o`GIpG;B*9)5~4=p_%yCOJf2~lc(zPzd~q-MI_re*NiTjhOp(OC5K*QGlrOeMYs_kK*zWpQiA`4$^h7h5KZ6B4dg&H;SNAxb^6HMeAwUReV&x%viN)c z&8XXdX@pHDm4=eyiuCK6jDbF0-HSc#hAEZBA%yADbyy6`F731T%SIi46Ft7>hHgg3-`_5Aor zZoo2SX>n2C$tm&rVB&f|&GzTpiyPq3=^0D=+63fukB>!7>ZD-T$_P?7WnUzk}CSr3c(Tb`SNcdOrpJBjaD!F&H&1w!;i&#d@bD5L1imCEY$WoYS zXFG*YdE2mBHnc8gq2>xP%-ntlx`p! zu2?oP#$i+MM8^8F`1n5Idg;1U5F4C=!0lH}b^Y*dVp=Jp`#M$9kM;iP_6^)J8fp1P z+PZQPz=`TUMv#&W1&XN5krOWTWclO^{8r)*)}dcNlIB$Wm$1O9W&(JLKzW|7ouNa# zj^#YZ0`LngI%1MU10;!l9O8Ifq`!6jI6Di+)xAlM<2zM4{0sq%MuB8>8xuZuL(FeR2aE_j=wYV5FGI4PY0n>bpQ?QpN#%f~*<4Cw7 zcD`}KXF_dy4Uq207e=6yVRV@M(=;Zg!!jF7Xn(@|GW*G-ep-U7X;)j42Vx;b6n^|z zT6h?i3d$cV6kFAu@py!4j)wVpE~jgP^GPFy4!`A3P(?7!|kv>!C>!-v?7Wkq#)7(csA+7SIl*}73T?ISvHPe zusDI}pCM|{(#+uAN_ZYt27G$lf1aF%JLPg%&|StXNophqIInDY#JT%)=^rKz3i+d@ zU*+jUG{_>7I5qBl7kJzFo8ywI-8)~_yuAMcVhH~Pv4+E4;;jerV?iqG+^5ixPNJ!1 z%iSY)UYizh^HWPP^7xxKaNpJCHF?@?2NLxgRH7^>ppN+F?~H~!V0qJq>m~1h&>bcg z=l@4wlH^4cHEe%sOJVEr;nMkTx1PgD<^i2P;&ptW{8-xo+N%L{1wc~~HR?uax z)y*v@49Dm8JsbK%KJ>Ik>pwpV*%fSeHp0D~n3GVu=LX=?^p7Hs!@$xWoaCirp_w~+ zb7RPprzt7O1RP<4h-oiP)4EY}#AfCigDdI6b70{D>forxyyjMOuj89`-uOmZ zL7Vut>D%vbHMUy{{|TG>!9;%+g&)L4a3@+>G!Npd!^NbF;&>T6FIny&_ImAJpFg;J z;|!ghaPee3$!+O-Ww-i)Y9)WLJHN-+k9{%x$YNRL^UhD?{_vTAvog!UbV7|3pC;F* z#iqi{l>0yo4fM+URu7!N*WYu*thbMFcD^JPKe}VHC_8kpAHhms!dSN{12jal7-&4EpMmq!rEY5F(4+p&HpL5Xlo~D0S0wHJ0N1(55$oBot_IfJDn~n3JK{1FJ%({ti zu&IId;hfRbZYG7}Ok)KpmNRbbOHnzu5jDK<^d%9ZQLs*%dt%}He#d1G@k{a;;(5@0 zpt<OIo}fZCm3z-1J8E$rBS z#MZkYhSwafW9PTV5B~6_&kDSzYnejGBpmeZQSe^&qQ7(zzkqezYIp4UF^@lx1b?x- z7~%*d04<^TZ%#L&RJd07(sigHvRH(xU;7p5;id^52g!0&%ZQU%i%jG1aCx=KeuN|1 zfi&2Ksm~j+h93JndNkuhOjbO>3_j;u6wx0q(%gbiG+p(PbV^-otEy;euC1@yl zs@#tzvZlKqGZ5)$kt=t{bF1J^+e;|W7z=U=nY<-KZ%N<}ZYi1>YCxm<#dfhG8&%}; znzv>>UzZ|+LzJvDn(u@`O~<2%(8aAoJaC$)(?MkG6i@M~&qFI4I)dS;l!(=MmOxfx zEd}~l-yopTwSJPF59<1)wRIbYz>WLUYx8{T8&6;l;SIwmS60;oEhD!e$*DYepQ}YA zVdg~8LE2c*i5I;+A%hGG2=tytVm67Ddt82Qd~2!s$qPHX!UPd4=wZ1aSlc975UP63 z{}H1ZmR=@sv>}@>u>=ankcJHb4hO5UUGO~rZ~8KCkLb8PRMurKvGXTUyYMk^R?wZj zFW+d5r)SE)o@*v9*s@XE^_fXjsnZUR*q%S7f>A;b&1OG1A}z&h_=kUBbyqe-c4L~e zq@qqWJrP{om6B_L2FG3I@$E^NVplfUrs6VAdG)qvCO@OR@)?8Yl9n2*Rtr#I;EG?7)d*HX~2KM7nfM@iN zy1q@B{bjf4QyURn7|1Q7|9+GkR1?;3qXHWyb6o0+OQu(?6gij={Wv&-CzcN)$i@!N!pn4<5e7?KE3x=;<8*zUtLh``qTt-@5Jr z9f0x(G$-$5y^o*k2W*POSFVziYS&Zcb*Otsm1&YT!RYac&17U)-3LMUyI-dWv3OH}@u{b`~wd>|$#bYfh@LZ{UpFy1)a&14)LL$xC zV0YyMr(Rr^NWOCw;K{sgnCeG8JnsXmK5Bb>gxWvA{^&GdF4zT9N1kujSqH04@IcZi zt<~WS&2&87z}h-$>(9hfKV@5H|FU}o*sYQ!LTTCFH@T#)DE#Bq)~4|l+qR(CxDVHr z*Nq~P#|iVtzyZV)xPU4Pfcgi-e}T+J8ND#A=&yr0Phc8L-1eFA#Bv00l zxs`MI3^aK-BL3DENlxA27^yCiXAhDvY_YU*Dpv|;yY?F96!2EwI~W6sh=Fps*V`zX zVQnMo2yjaoOl{`=bITcWT-2QK^OaBj&VrRpHX_Dx`gQ#Y6u%k2Zv&ABj*9jtTE>nS z7C?M7IA3oA9MCF4)aETwLe-|u>+oE4S~y0B_s0bRaP5mXaiH!)JK9zbR)mWX@e-p!T zM=vEleH9TR(`a&wVAV0mz{9csYE9g;cJ^+1E}KQqGtSzfx377o%aZOg zXKVY~i?EH5W-kx}zqUaB4JUVhXO7*2)+W$oPUw8hHvr|ppRPW734vafRU$-F zB)yls?F$f*t^AE9?$mIPr=hsrq-n;HjN)Gqm+TN>mL03hHXHE?|3s+v=o8LAkgeP* zCM%nz*T(U2ijP;TvhGNKSoN6Qt9Zw$R7VnohPk8WKUTw<#gn4ejdAy-Ow}p94c)oL zl5?JAn7Z%0?JNT;PECHNHLK6k_oR1G${tVD0{;kh64K%ZsGEL!Zz$nUPA}HQ0D*^o zRMqdi(VGwhi}>NBEz#Rvm29$H02@@xG7ZJ@sUam9RJ?%id;1#53Qjpe(AAW{a=o-t zmVxkf367D3=jMrbNGtNfEXe2NvP+2Ts;MaQGxq(MvIxd?HnLaf#Ot^zQ~$+{yth!{ z-?ar*J+J3QiA*Y6Ze7mM27)lT$YBpwoF{@xu-wAK`gtjBtZ&FYZTD-yv9nA4!!1(0 zVE8S!CY_|3tc=51NwWg+WDRmTx((j|>9B_t-KM&D4krX>k@1%pSx{}*b71Mq{4#p{ zeW|Y{iXaL)^kQ2FTNNhp0&~eo&^0!f+Yv?ukxvk|o;xrUcx0ke$xoS6IJ(<3>1w?i z9;wm#$TM*UJd?cD0p4K~*KZ`J{KnI)I?avU`4Mz|)6C&QK#-Nw^MNUb_X^ZN+#a-I z)1IYk z>v4KVs1I@f9yxsLkzAwi>5qKVQrWRpcN_`G^#rJE1D+7At|#n(+kkxd8wSW-QwpP% zbxGnQ`}X!S@t!{6xzBn&a#67Ac2!-2$}uN36Essm-AB1>g_W+5NP0k5JL!okBw;iv z;cKWOX7cf7^T2|Zj+3Z}`|;L*k5hCOi_9NGJ@=ZbVIPJ|FK5u-M&y#!XQO)s2r3pS z$;s52Uv=)jGIA(ZEQIYO13vptNo|Y0gf6RH;`~=6lHl?2%Kzcic3jbQ_$!5zlztkD z>PjYH{xrS}hq6);T*^QAn*HAN&&MZuQshxnVtFJKAJuQ9d++rW;FnwgcK1uYw-KMM z*<$5SvliL#Y+4GkI7s1~OgE2n;Y!O}k0yE^nv*);YS!sH4FEtwSQur-86I#Oh6CI} zm1&$;dUnr*4Wxl2>U{nrf0nEaC(|G?U#cn+GtOVlI_~p)RGxf%C`ZR`*)+tp=k{7O z%L~2gSE+B(Sb}mDRw=P3`!oIgSUuL~u1Jh?;?(Q;1 z9=3ZXCF@=4C!zML;t|mDh#wS{;%VOd>k@AjT2)K z`AUrO1^QgC;QKlq_#4W;mep$*T`Wtu??c^ZHGM7yIYaG_X^nNxvFdR~R-eG|tgqQV zuN!0ESSC=T49Zlk9$oYY!PhP<;NoX}bnIsExUgVGO^qw%B>)anF(#}?gP-iPFeP!I zlH*RrM=pH+=t)PQ8VYDCe+#YfI<@Re#}Y+-zCSkwcCLM?9MP7d&g=9G3o;jf>crp# zZRls2AhDJJu>k(970nimKW%Xy`WgB}?r%vTv0)rq>N zY5|J?hE*BsXwU?8TF>``pvxFSZ9co~q;7y~)v$E1*BG%p4+YjtN*c1b3C>I%5~uca zpi0*X*InxMz1yfeOUMKk$fWJbvMyTT-SSKnss(*0L=M( zX>9cK*A))idF$u=;c~(1)i0Yol5XDlC$|OB7x9*6BCr0a0l|8l-7@8;I%E*yIbH2~ z@J~UsCEW;03Ef%&4mkwL_#u4AA}Pfj35m^&Sb0oXT3awXA`FrBwrX`iCiLtS$+&lAE5da zRD_?;>; zs*VJA*#2}PrY@IP5!MiDSl)5?)}yCt|p6Nut*|pY+~YGRLAzyw@0-;f^y6>{76(?ThGmmPrB-ojm|PR zMk9JYuTCGb&Gt4KuwDngwY#K;*$K+}Dz_`nX8rlH&Bd*OQ>!%^@%*|xwd9HF7Is

>o!a~@$%wtdvJ#8Z4VrB1A~TE#EadRX-evDCi*~4PkcJnAL*s-<#QG%D=xl( zNiG|swA{w-s*d%;BKJWOw0mR$D$hQOf2*qGl1xhJ8EdMhXv@b|CYfsQGjo`r-NU+Z zL|fVbKU<9JWgm9&0-)g7`F=3bUCwo#&sK*%GFU)@0Vq3=k&#h|Fv{VibOh&I4-OLi z)~4%{Cu|KiAgB?IscXXgzBw=~Vayyjc-8LxN zrh5P+xjy2zNUxknOGSHmM3 zpUW4Ht!6FibH3l%mSKctIfR_hATE28LJCPCOosyw&YwAJyVxR%%t=m}4%>6;9|V~? zttbF1?0mYc8rmQ;rj`9sM+b-$@<4?-kUqCwsYeYaZPSebV(0)w5#R~|sXbuE0}KV^ zl7q{H?rpkL?W%rAJhp{F40L@$D$Gc($lDc)7}<3{0PYI5uB#t9m7E>GB|;gnUqa5K zzw3LoZT&N%`lCPluZ-$rufTnK3z$|JlI1b}u7g9UerNp+D$$Zs)?+XY)Y8HuOka=Q zU*9M!+t${>;J*+R%3H0Ivb+Z0i+NU)JoZ=RE5FE~z-^Os=9Mt+f3<3}Z8H&^Eo|0z zacggBlBSbBEPB}^n&TiBRtE`F^;1Rp&MA97U$^qrjKXZ;wE2yATng>enTXG~K#s3n_Ayq`T zrjMHJkxqchxG%>?t}ZXyg~HwdMIEXhpM|VSLor(11V6Zxzd8ULoo-hA3L#6j*usDB zX!rN2yzm&O9b0MQ3v~!ozUH%r!QxfsPD@Jk%y%7>s|NB-uPK!%gR>j?;?;seh|zB;w+1 zc4paU9T(KA0#2aiGj}o|!vz!olAc`ME6v_A$EcJ0H>%U1;_Azzt2Qi(v|-OzC%Y7nhYs!0!89DQRFp0zi(5 zpaqf%kCt8_Uh{*ZCG;G8FRW#{CHD?mI^Q2YOY{_(-fm+#btxfyVA0Nt=oO^;D}KEFn&(YMXF;uO;iY9u>d?lEU3J#8S# zD&Y@+lxJ)?+pgnQ9ws&(-24F;X|j%kkT^vYF!R$!mBz+uK&??8Hj3W=_ykGrhF3f@ zxXmc8FH`dA?$(B3S#>_r`^WciY%iBd|u;xgQuu@!S`TIlu(n(L&Sk zGF8sIfqtE{(sHvx_{WWw#(cbBt7DqK{PzwZxtGl(vZn+PtGhsAW- zRC}q}_Wh{pr|z5%4FG;TVXfiXcVh2|j}zM5C99~x==UQ%GhEvsZfITTAES(!7|h~B z4>dI^$#)k@{<?V5#a{ znzxTJrUqiKCY6;>9-w4}PBRVXVupXBYy+@nAL!xwcK0yAwB^zI8rLzbwqj0Hxlk2s z4UKmZO?&rB7!C2pkzvvWM3+!l&#=EWCyhq3r~QS3SVCf z9mV{<9x##Zu?~3ANDOu|4c=YmbqMAP(h~w1XAeJfK8B*PEUP|+F%#qB4}lv|4%c^X z>iIp68SDd}1CH288Pyqz3%s0$Q0>n!Qg0lP*FT-eWpvDXFpaU8&$uuknLP6y&xWiQ zEpVcdi73{x=*Hv|to6C=B5S+sGd1FKw`+P{?cO#V{Gt~W^cc53q4b_YTT@brjIYEQ z8Dnz2_$nhiKE(3tG09S489hVPoW4nuMP_-bLBXk#N%$dRzBD|8b}2m82Ig)!8hxgZ zgtw=4M75I)k`~3qM=>}rmQ-WiBj-aUAXLcA_H$w?pMLoIM?LUpBF2sKY4R`WSj?N_ zf-j5A#5OP0<9}J9;lfA&=c6uJY6ys1u9(M*4qAoRd#p<`FtI|jj7GoDP>N0IR}yC) z)6~~Dzq}$h*+~W-mvw&6?$m>WS_WN6vSf*tJ(oh1KAx!waNQFVDbCW_Jxo zE=;l2nQ+B&hqFj#Vl|38`YZwP}ENBJ!5c#KSU)JoiG;S^*a?p6F~#>l=VlzfyKAz|#y0YOlRbI(ehVN%bl} zr`BZts^s#%@Om#Gyrriv*Dq*twCT0`Wk9yNA`}9DCfL{pgPOue0kvKa)IMI7kBw8- zHq{iA6UrTGEG_+pVH7>w`%4bnIEZ$&`?3N}* z6PDv++IE(FRykfyubYId1Rg=z9>9dhn5YAi+hSvE5C3G(O0G9A@q=}^Adq1jt?d|= zz$ZyeC8gX@@9gi_;&idZOU}iw_R;AN1Q%qz$9v2;#S!S{GxO9F3M)=Qjkpg)u>IxIm2{fBcSai%Je02@~9bu zm*|i3uQ7T(riMX`s)@0$4pIUZvMD9g%vr@Oexev&IcleT3d7&*qI$e$ZvKrLBGm}R zS-fVI3vCCrgxJ96y79|kfc?l{#qjz*kTiN-5qxL`BQ6}vDxGB++Pt|%|F{(Wa9d?j zbc&gMh?%fx?4MFHZc0yBHlG|=IE)}`ngOdp4?zdNdY>}N<8n^;A=&~+GKeW+fxa>3 zp7EI(?3f^qiRoo$!^UvRptiOIfY!gW>I3?y0-3h-G%oAI6+sifzVtdflH9ayR~< zlmYg=K!&8Qwze0Tqh;xUNADnTtMLNXC5wxizt+yDPpqz16ZS^U959P7kP|HMXK>z z3bW{zU2mRckW({@Op@RV7kAnW2T}XI5;o(-!Nr*}kxv_wogH0s;q#yemIUCSWEBwj zpf|L>zdc*Etk4!~YU_OP*0KPw#>X1r@yhIDg+OpHr=V`+@fZcYKqYlQ)GHbzPt+BS{RTaUc#Gm*t|BDmoLpw7+ETvWfV=l1LE&tbJ9 zX8u)o@4CgAzIVrehSFLv=Hi3#^T*s_^Hdn7RZ%InxtT&GVpsv36*0|J_EZu2@>&mw zOW|8zd>g&i-+PM4S_~(nKsX4X3>1n+H7%dt>o58vfem=(BQR~y0 zY`STO#9!1rs$D)RNPr5mbJ&p{4>N;*+!U@aj52I=6;wYIf5b;W&=(q_o1AqsxTixS zNaZbm<4S#E)0_zHT_n!+GGbeJk9OzO;R=yxBfu&FL-59f+45B*fw;gECBN4ypSnCv zboomB=ySgA0~;^oE97%(%rs9T{M*N9729+0G%)EV9icrEYMy6h{ z@4{1xHYsV!bFqp(_WJDeECLu{n{!Pe9k-jP&k=a1(=|JoQ5QkmE=#o%)^gTd&``b>4*KB+-01Z zSngyLP#iI_0|j>DOGAoXn}$gcJkP%l9uB_~7d*~JSl}pLu@MwgtGPW@R|cg_r)4=H ziNc0W_ruCmo60@AR+*Pk1_2j!ptQJ2`-2QqGP|_7AL5gdlVfOX9L3)fT;G%@sfj48 zRd+1Uirs;(-WCo7*=9?m3yZXQY2)zsZAv+(bm()SC)$?;1IlTbV6 zh500y!V~7T(`<^3ZzaA}g0kFLg&ExiD~E<`RZj2Y(Y`1)#|zR4r-ddUAX3N`n0SBb zd4cVIYO1+9>3JjYeFSLt=RP1|`sgFL!cwdWjQoM%^e9D=VYWqvRl(XJ=csz2?SA>w zFT)j!dp6@g2I{T}NMyiV3r(0-#$Eg{N_pRGpO*L1dB{WB!3aHFJN+@(^9S^gGAY>0VFCFqba*N$MV&L++wA33M$y z{t9@a`MCcWBLPx9WC{(OQRFNqLy8faVkcg$f7J;H7DwZEu@PGG9$r)X6p;FbVx2I@ zv|~#u8jHjn($eqhYqn$mkd?GeVkor$3~1&E{p>)=B4ioJ5JaW4D}#Jydpf zt^weH1psvqh=4-}3rq=(oL{;TgM1!WF5Ex!o@+V%DUi?KNHf8Ho4e#+bM4^kv-?G) zqW^#PD1dZCpsG-f0l|u5$vMA}k)HXd70EM`SoMJGHf?C7X^5F*_01~yWZ4r$BdZEU zLkRv&mA&wB)sgs?SaLU;SV+J*#Q_lUeNS{Ywr?_^Jq(}K)FM@U>fjxiDHnJGdSI{r zl$eZhwJ_piWtN&-H^Wm^26v+W{6~ z)8=Bt8Iw%`Tw!`!9XvIi*Oov315u^$y~&^E;~;Gttm&~Y==kti0xoGE1#X-3D~oL| zG#|BYzQ$R;Zs1kQ__r`t1;h0*XsoKfHSxmgS^@FBEJ6mwvJbj|@lNP%=zX~7{r)}2 z2h{dM|CbnUIRC>Y(BHJ5`FNxlpHKonYH5s)F@Rn!Yd_DDzO2aYT%#0)Bo{XvbgjFa zVG&>V{FnFH!h$poEnnOMfeKQ5Gn6cpq6pFI;Fz2ttG3yPG5D*YvZAhgA+?O$x8NCj z-~Ds$b6!YU@L*E+kSH-B|N9~R)sHJA!^tNnHiziQgzUz7e1sSRxvZ8f zBXT-Oq?qan7Q$PQz2FD{9&t&!4-4zQzV-%zx`^(Bt>3zO;h!Gvn_BA5U%f5&R4SSU z)u_Nc#+yt&*DuMrKu6m+I;ZZA@*cDeW2?80LyRrneCn&>p$>#RwMerY-{4Vfb>JIU z=rf%Sn)y=Mbo#y;nX|hLvC@E~3~M|$*gZ)f8cbVDj+@=+>#(Sc4PD$Ts!2BVo%mV! z9aJG-Ju&Ym47c*VeNk}lguOCC%@Q)!a=2(`z9k=1ZDx>ItYZh}{H-q!ix6G4zTA@y z^V1}{VbCiX(@Bm{c%!j=d6LrKXa!u8&ocI-xO$slocWAHSG%5G^2)-x4MP{(>})P> zr~L)W&|20zqFSi)E7NC&yzo5uskrTH#9iv&8AqhO^{zOmtSlOt8?B1%v>Oi-6B80m z4yTPnLK`n$tKhGP(}=0+C6Ftj!>fV5R=rzqqGIJMU9~@+`T;>KjSsjr;9E|PZ%x>R zt?Qa&wG1OQWAD9g78_HX`ib)T)L}hlPU4 zU;3mOx69Ug&RQM(XE83mb=bA$(2ZADOWPQjlX72XRS1DUKwx8S#iZ9c>}`{(K9=Z5 z1cI*g`ZntRXDZ+g(f2aiz!ZpUSLc|r)-3td1?~g;L~Wa6p!u2a*FV|ld?&y-|IrVU zw()khQKDXP>y?=Kve>f4tZ(<3`&3gSTB?WO5>n;JM17Hz!PVhq&kFg&^Znr=1z74p zXUTG1zB8A;_y(?LgYZ=atgQWM(@m}aHpl=@1Q*8dP3)GPOq}c?7~QV`S~>i@qnsSg z==H2Vpj`B@!NI`1R~y}KqK9!%YW z3l~m!$RGzy;spi)+8#hs_<*bdl1&!C8E^&?>Q`R)s)kzyRC9N3&&TSM(3U}z<5k@MKY6+Sm>#LWqu-gd};*Z=wRQ$lR@$t!F z4GtjHFKh2z?TrCRmk(Y&uyf)5Z(aKKM~w^Mbm5xp`3>C0yk)da17az(PT7HsH!1B8 zSTB16IV-;e#xbpq`rpe}Fux3h#0bCeJdGosE;nTY;`o0-(&j+c1d@xy^k6dk>-Z$v zkh@~pUrRIzbR{h8dmNY>cwt<#6OJhtzVFZlHS4}>vUpe2y#3h~%MkZK|0~wXX6S04wiRQ_hudu~rmHNbz!U5wIP&zX(xlwjo6`GRH zPXd>bD)|pCNWHw)&wujPr5&dZuCv!Zb?)#DXIn|(rmtGd*@tMb_n2O;w~gHb&YJaB zI~!=8`N$mrh0Y&~Phe{b{5P5%HYOJrae<2q@Jl0&&F|{|4G8=IliJA4EDSKuRjE^q zu>lG8D4stn!6M*M9s=TL$1<`bK=}?Zm-W1z^e{ag0SS<3cYQs*&rqf>Iejacd~!;V zilpO#ZfnMFe%Vk1i`4n~Mwx_tPfp#4-*x#Ko_#Q1YZowhH$=HNXdI0(jo{c#vI6WA z7ra8U*s#epFe=Xf*f z-}M-5LR;1lo*n9;C=PaH(evcv`V5P*RYEa|h`vTC8Rx+`BADA4c#Uz-{u4AuV_*v; zxO}f5hsEwN7F9Zqkpw4?gC9ESw<5x#w35{eg`>08E5aL|27cFllROFE7NXW?c&VKP zzo*Q@JYfw7)m;MWrsyHQhC%UK4TGR{b&h$PwG^xb$tlE<-M{xQVLmWn$}m$xvNz9f zY2~f`d58Um*TX^GDR>MqXFFYNfus#S$d)TyK0M>&i`*xv$lI5!=RGIH)PH#QNjSVt zkXTPTMd*C7+mF^f3m6q#3o!ns3|tfVIJ{bqq*de3J5kBciq_TuHI&bGT4_!|lk?ky z&?}90HuLpI4Ys7o3=z8<=V$t`+}OGa+Zb$KrVEVUYBe=C1QVHr4?^)`X0>OG@LK6_ zxXB5xw)PCVSs3B0Eo<%s1`mBWfF|L4YxDkVNAQQ>Pn^iP1-jve)am})Z5pY)5Iy_S zJEGt)c3Cor={6((DU`Rfp4XO-7Aj+N>z^EF7}8?6X>~%W?(l^Xq;X{Otllm!Wy}hc z>l;s>1-X!7U4C3TX!$dV)A=59t#o!(pVL_3B#g6rGcW+~xQ|L|f56*+{c=6!vNdWp z+36INsvhi&hf<^x%c%Qx4?`C>>#z{}7*%u{Qt*<6aEebYKnH%_8(6=Ty5v*{rt3-6 ztW~4-vFZDI86g7&PR!TuF9W$B->)Iy-Cyu(Yv`l4auk?1EjjS#GI#6^7N7M;qjaM3 zu>MdsBGakvxwQ?ViNhiNtjuDFWekdR@D^?3w7Xs#Y$1R-cpL3h!rm`!E>xZmNMVW~ zhXSeqXg+dcTpKT_oi{V^DeLsY_wx%jByShrACEP9Mm4&xQtt=a)e0nu`Sa8E0hP+4G z;Eksnhs%w3)ORAl$qJ67O=o?}3+6S`0RBuyYAkR6TupaSadmy1#koAp7%M*T%K1Cc zkHB$at&<{(aaP}J<@1jiM#xv~AOz3544j9jg`P>S?zaFJvn7n`zFy}QQTV~Sp%>~H zW$RKqPloG*SoO|D@yGVBn3ORS&(yJ`eP~9>Q(S>Wy;Zgch4Je{%xgY44VWsQSbi4o z{iNbbuyOs#_ZwbL8ZCpW^d|y%!=lb-3|-GewEG~M@78LMImfWF2AK|A^gjXF%p?G$&CwLb0y9!`NSS#>Y&9;G7F-teDEy49x#Q+#TB)3FHo?l3;u z4oIGHNPe;Mj7)HCjK96Ya=V{X;^BQ+qJ$%zP-)TMur+~UFYZol+A3Xrpc<<;UjGOn z0*Q34$3rQh(JqfQJ+QqG2itk;4hsMyL&_K(b8DhIGyGQ~M=`3KMc$GQM)eJMnQ6FI zVQ|bs!Fl6_e>Rp^<(9WVsRfTEbqvxv6dH?Qh1s!Vg-%Kyq>dj#F&Gwi zk)zQ|S|F;4gVH%o81fSeooBnPw)cXi-Y~Ha-;_u4;1Db!ieFC4K(AoM&gr=Sq;chh zk-5_8Xk6k`vP7C@zC}&kaO@roOMrDS>b3>~5jCCvdd^5X8|uQ(~A3Z439GCYhjrPJs)x&U*UPj4XFg zh11pfVhc5)j;}lghTkRYRrwr?yc+9*v7jxNW4nZxH^LR*$X#z4LnkCppHt@D6_8g) zl~sqq1y5q9N*Q!v3X9I9#q|TJ>uQoiDMv=M1(s#vT`3APe^qvM%i6Tb&B#g*kBltk ziAlz1K?RZjl7krd6YtkU|Lt4C0RJO{W3y2(@0a7bY2oO*FJLc&YCZ3u$a%BQLgRG^ zxq2d~0O+8JuYLkxUr-ay@7c$gaKot{-M@u4{>)!PRIs(R<*sj`oWks5Sru2l>sK&A znlNtwT_1b*<1!2%NVL3o3H)76o`^ni!lq!jl(&oV(<36V{iIYipE{3Uh1KR$WF-rv z6l6Y7PQMg$_brC>x5t+nUM{{1?EOeRToqxqF@j01;Re|I>M;v=Tk za?8}!8`+t^lL;Eh`TcL%Qza8FG$HPRd3ff{{f9EQPm$i51@>iBt+VD46hl^Cd4f9; z9aTOY>u8A1wP1li_QP?|yE`FOSZy%PLI`El_FHjOJ>(2RHrHQX3xJ%~ao#?}^t;{e zBlJD1C^R9*+|}PO)!CcMpwZgt7yWeW68a zf^HdUdC}<38+UOTH1Noa%{1G1<5Ujrb9S=$KA1~^BnE{Mf}Jltlk;rffAheRyps$K zFO#pip=n`a5)u{$J(m~=m?9Q9kq2CXa7H$nra6Qf+J{^F~` z$S&h{ra)j4blA#qbm>Q{Fbwgyy>LT;8xaB;84zuTg>~TR|1dbY&oT`T4P|6!n*js* z$k9g#3Xg>3mwE;37gh;0C~+lIXev=FiBL!#p|VkgI(P#db*ut|+TN9W(ppihoL=SZ zdzgbgQn;tynULnSmZ7{u@!O8ku3stjp&7!T7Pg+_m81UsQ>$kDoLF3@mrS=O{v(TN z(=e-daUi@jyr3x-WW*t9gLD^=v;4*Qu%7O@o3dE^;PK+{J7)fL`?zPR_whUa=>NO` z@Mre%cgOSxin-L)3xE)8yV0Hfv2O)73cv>FL)GE)I5!1ubw`mhKPRXG5FFs9!nuCv z1CE-h+ylU46^49t>+N@)n1WHfLC}|la{$)r`^dKOG~a?tK(Mpmf40#2eBPl2?1F(C zHg_Cg2+mt**s0*%&|C0_D(<(})M_zLZ8}3ZVQgBEo=GVoBsCU?VAFas;=0)l@6tzK zB>sd;Fyz4sP4H8J`+g82+ESVENw3*RnB8OZm+SNX=!rAL{-c;AG1n&H zp5p^hwwH!pXIB;lSO?G7e3m+F_}DR%=LYeoC-Q%tZcZW>F`<-Y6_)zOus6niP3v&N zRqdvcWpg|9n+H#is^x^Lu}Sy36lT6bTRcd-zGS=IZ>ed#<`Srzf1XXGxZ34$ZR(Pu zVhp0X#@qOgJZOl;O_&-a5Ew+pNFU_OEScSb+F0hh;bKT{T!d6Pmc?xmAq+KhZbKJ) zL?4`E_%pBs?Iz8~)^$CvWyZMsU-6Q5$k~cvr#W;DWP)V-=?nsygq4$N4>vZXQK8^p zc!Apddz1%U9V&LZPwv6~F-ffMr3hQKxJ(yH(UDEm>BEtx(hhzhs(Ztg-(}eP#z{|* zaYj!w{QH)LInRoCCQS)2wIznPN~>soPrF*I>zEUw<47x8if&G>Q2RY@ZzVizHZ zl5S6*y89mm`J}gVk2TOJU^vHx$$E^hmBk_&tf-uba%_dng;ZPRRx4RI;d|vImy}@- zRYfTHKCf(u!ThYNWBq7~RjyeWaj|pzSwTMG$NExwCE8(wuzFjTB)wu$*)qKPhN$`U zVj8nn$YE5R(>3ugy)!x?m?a`8#=Bv#FkYY!D3`=x(%)SwlmfI5O8H*g*pzMgNN&_Y zNhx?D$vwYxVNMXbx-9J$Ao6d^89eC;zCTW}2h8%f$(9YE%igkhSud2z<~Q|OMxv2{ z2d_@R1>xjev_9WUJ8mzBFyltJ!M-{MN_I$@n-EW>HJ1Uu@ruIB)GkJLx zdI_YEin|zPsBt`BJ#pp5ClZxfshTY{x}{V7Rj-5#g|_Hf%*L5#8zWAKqly{MlAw{D zxnAZMEpoZcW)H8O3GvQcF4K~y$g(g*a^3mjkBeYxIE~MwufNqdVDWGnpSuN|{4a-P z0oyrzAjA7}y^r1#wONxmH9ccU&g!L^Xatd7)h^O1A&qFGwQ(zZ8K-0Td)ENHx|djH-kV z2qv%kn6y^G-e-E~spZpiZjGrMV@{YS18@7_AOKb%IRJ9kV1)dw*&9z)8{0q_Y%n4J zt0eAX7UM)6ZXrG1df2&&?%IqOPI-Lo^R@aDiVVI{1bF=cV&|2r5ORaHgxurx61V^6ZUG+?SqzxOlz+t;Zd0 zMj)55XS(x011aKG@mG{&g<@F$;LSpDN+L{S=6OsoJgoNbCByrrbzwZFDi0_&a^5Xde+{^0lw1>(} zIO;?@|mFH(MPO$-7S_kcb3$>L=u`<^r< z$Q`u+*IM4PDgWP~Wh@#7oh>J2vMHyJs(qxH+J3fUpl7ey$ayB(sGH&Ma{_Ws;9Xb7 zb%q^}qp$fgUHWGR21+1e@N@pBk;yh5;#LsLhSxfR!tki)#mG{$*a|Wg;Fnr)4e z|BB1qdwIfJrYu?{vg#qwyQOpC`hFW|#>t&TWOAHg!teaTAMdxTZ@*rbtk=-MA_&9V z1QpHUdSr?nL!dc%7A!)iInSbmZkiq^$5IQM0#ktH2-okp(e3%l6mPJ{R*0f+PzTW( zw=q<0*GLEAyCa9WLFC@lk6$pXw1+0whSxn#&|5N0Rr}OB4n5hhyG#v3ZOJl5$Ua`n zuq^Rv0=pIGSG!z)=4d|xq1y*{oDaRtR3$wq2lgMF^I`79F?gW=7dFrDH11&a{eI(6JLZ$q#in#+wE0nqf_Vi;@<4N22?kz0 z*j{H+%g>B(20AlPeJNUz6}`GUrOt9E60Zb>(#a|IEmAGXe^msM?7zDMYVQDNRWw24 z;a}qr!qVAv#?*(BZZjDPO^n4Y^$|wJ zn=HE61KUksg2BjSMXhsAqV`kiplFL4dk-!zoq#^2jGsRX{#xc$Cz7$p?Z}IpDZ+gj zoIcYIHV3E)|EvM3Xw+22P_?-g>YwRE`zDHJUW{zM=KH2_GdB`OHKk}$xCl{1xSOG? znzICq*Qq-HpgVCx#gfv&KlDygLhg<8rc7gAzh?hqZvlKYAJ!kB>ICSi#g6N`fk6DR zU`I56%8`69eTE-Q+ThK|`t|EvM()NRfQ>u((c$_L=LLpOnWRu)88SX{_mUP0f~EoH zHWKd_qqvuwUx2=!rYmB~=m`jR6nX+k@yMO*-MeZg)(hx}ojFtA1rP#sM^D-ns@%ws zl+XBpv=mT^9%jIy`Q+l)PG5>r3q(t#A>bgzH^TZ?DJ|bv&rWp{6 zE1~`~656KWH^%69t$jf%E*{;rXzXyoVCXOdZGNAW0(6;m^Hb>WNXwgt;>j4AKVgP9 zZQuWUg&9Vi3CQ_HTU`3jde!f~Yt?N*4`|`JT)tG{e+5z!e!Fo04JI=g=o@a$P-#~& z-Qp{7i|MS#MZZH4_s~-^Fq{BisRZ;y)9&oB{-1N-%-%lE2h{art;56RdV;ILW`XJW z*1Jwfz2aYlt^g9oTa_Pn*z28J?txd`{(?4+D7?O5Ui%bzXddt=xIH>)QLn(hLF_?h2a|Zz%tVn%0hOuVdw5X{Mq!$(< zGUf3xO*k^;OMY2=Tz=f239q@<`T^Phqpe2%YunT>z@K4mYaGKJ_j}PN_PE)fMI;v_ zE&=z8SHBWXg^n92mq9>JJjP8?ZhwjoN8nW3=vdZ_BXG)!%IJ5+cgJM zT9+4hyV-$PMf{p_U%X1=e)kKfFH@w+8Tij3JAg2 zt~AF2crsC23U@zW;OeDbA(3+smOa9I=CSssprG){SP%FrAQs~IbYu0ltN0drkmD1l z=y$9FCDL1GGNh@c1zc)HhYvo3ekdUnKl1-736y#Wl z$MRxMI8_KOo+Nts&@L&`&ZTY|Bv}kN8<0kIfrm6#JJJq^)wKuWWBl6EaOtz=opq(E z?7;nW;$$1{|pn$S~!p6rbfg7TLSwi4O<87IDAdcO{7?$C; z@?G;%M5|2GK|`RO75C=7hASK`1p*5@==j9OKmY58qYB;$2< zn-q(dC(0vkR3{=xDN4b%Z8(j|TnU~fG@LeyRZ?q9njWk7G4rmI!xx<`0O|QgGqE%)RpV z&aR4Rd~j`#U&imdx-PUGy$!5*aS5D5J8{ zOpul}p`|`24fyxSY{7mv(j+@r*6h81-;xRy$>yH|Dllo%GgnY(RhOIL!TIy?XrN55 zDs&BcX%PoAiFgNpo>XlYO4tfWm1SvHeWXs&`&f1ZUQpjLW%mH&oUzGWNtQ(6aMY6i z{g;?fYRSEDHt)NQYQ2@m*Nu0L4-9DC9pjl&^a*V?8WcLc{AVkHYE0Of^9=5-NtU!! z!MESFaynF+N0{$){dB>ix=plJvNl~4fRAztxU#(bx$hqG=)OkH67VUTrdC;e&C?c} zk>kjy`KhTXq(b)$XZ&mzG(d-I6+kQ8kM5O(a{GOQK?g_(L~FLUnCP2|(y4WVc4q(a z%xynlEAtUnjcay=Qc|xhR_lumpVE@w;C3_d0*gl)slNl2KC2uvnsybf=!Jv|Nv~ zPdVPjI;hl0-FV|=_H(UEdhI4kJ!JMg5&%$_k^8ZNN3ugQ5C4kpqrOa)6rinz6H!6+ zTIx`?|67MYQ!Fb5c+~${j@rn^q#gek9A1|VERubOqkk8;<0-+)Oz)5S`Y=SPzBXk7 zLbNkm7n7DQ{7V|QBkI^^o?Z@!D!^LAFBtQF&4WboWd`%>SMisQfO`;-n0TRVXlQUv z=4{eNjwC&Ci?qf#dFBC2*+^l`+p;AeTiFbQ1<^G!!FLcldKbckf7i=}&58uS-G?CD z57bxkgXlv`HMOjYuy#Y72m2P~UNbc1f5-lI4tk3NGEP`8u<`e|VBEP~)3AI+DWGA$ z$I7rfXI1c=8&m%s8= z>$e5W%{KQ;-HwU%&k{&4vs`*J7qB{|5$(k9aybcw#YiZL#sf3-rL> zd+t5RXc(liTiT(Rim~lN7i0;+HYjv22?kVw^eeopW#I6+6)rbcxK;3A!yY`fGBG3s zBH$BfQxl9z+XhNCgr4`>ym9~)wbkTaK7!+S9h{-vA12XIss)4)=-(ZTo1&Ttnu&xm z8cg#Bh9z*B0fN~8lk%Q(rRES;kRr$VP~Hfz z5?eGxkH95islvsw9{ado-|3X;;b0Ct(h6{le>0j-cbV8{XfHatLX&zGfPb@ECP!r}m z7TVAuSPVS+OhP)65oz_mggWf1Ug_y5UC~9`Mb^Uz={f6Z!WLujmFAF1z4AChZ@qc- zdG7Zo2#tAlucKlOEnU66?QJu4O)`mmmI0fDX92vnAkMqr3GcZ+58(86gQoObSfEpFZO&;WE_Q#yDi!6NOpu$XEqbVfgOs**ki zvi}=~@f89a7m6%+N`G;Sl7c1qg8RgF58o%Xz;6XuegJq@;qzZol+z|Rb{cwgVfJ7- zJc%$cj@o0|*2(3VJTkdnpPZ#`?67aqtLd)ycD@~OnPlp_-=fEq@@of0Z4h&;=j;S5 z+WesM&9)GY7M!Y@?f#fgM0pnBQLZI1qQj9kOf^AU9=Q)LKf#<-eahDF8)25jA4UT%g;il`nVb?})UN}Y=v}4+h8m^>#}xgqFad_D@XSd9CA`&7 z%#N+Zk~?&XX8DxhY(5$u*F$sv#~-4I)>n1RH1_I^g?(R{0 zdtW~4?mv7{!1*dw^W$$R*RYx-uDGR16KY!uVEq^%J0aTODY2{MJ@ zlp2%K$gF;Tix(>(Ez!4usO|0^-QDHz%E1_71k+w;j5EzJ&Rkc{wBju~-80gn%=v)rw zYT$XjdU)KCm7|s8J`Sr9LT?X0KnH+q+4*z~pTZVO#xZDH>6oOcR-m6sD**R0Rv&|i z!{m50LlwjNv0Y=_z5R%WTn-Ynoi(qt?xpDfQ-gGi!Sy{297O1BOHA^DzB`POG~o~= z+Rv-5k^0I&my~=V;!o&M;Id`laH1V+Os1xfps}F~o4}r-_5JicIwjn~wH`L*zf%YL z>teD;FTCJ7&9+7WG5HzPvr#S8mGxnH1-Mfm2^jzZ`(fUD7)fqS^MT8)z!Xu1ukt-> z>(7QOx@Vx1$e~o%h&?4Hms6Q3&H{27066m0Z4f=yI~#~B;>W`LEA0b}SREc9bHGw) zyV{uuSiG8T*MASj5|oAILxb&lgN<&!X01lnlf&p}(T0sFmKD}7 zoXh*PONup^-q)R<0+1Ba03FI?0*TsJXTU_1Ub3boR%OAJLEMIX(c=;6FQ4 zK;Rv4dgZ=)zT0XteDD;7fwQ|bADs|ZLm-BOx`{z1WKnoOgZQP8eXx2;#d)?0!%H)b zV1ocaFLsOYbXWCz-GNoTq$q∓lQCJsEP@|ehoH)JHw~F!ES$(ycwokI) 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