From 859c39fe0ca3a23279ec8b91b351d7bf420b2085 Mon Sep 17 00:00:00 2001 From: legojeon Date: Sat, 2 May 2026 16:24:42 +0900 Subject: [PATCH] refactoring --- automation/__init__.py | 5 + automation/batter_input.py | 322 ++++++++++ automation/defense_popup.py | 118 ++++ automation/game_end_input.py | 141 +++++ automation/lineup_input.py | 299 ++++++++++ automation/page_helpers.py | 338 +++++++++++ automation/pitch_input.py | 96 +++ automation/review_input.py | 233 ++++++++ automation/runner_input.py | 271 +++++++++ cli.py | 149 +++++ commands/base.py | 52 ++ commands/record.py | 556 ++++++++++++++++++ config/crawler_constants.yaml | 29 + config/field_coordinates.yaml | 39 ++ config/mappings.yaml | 83 +++ config/pitch_rules.yaml | 76 +++ config/review_rules.yaml | 32 + config/site_selectors.yaml | 29 + core/__init__.py | 6 + core/change_parser.py | 85 +++ core/config_loader.py | 195 ++++++ core/field_calculator.py | 255 ++++++++ core/normalizer.py | 150 +++++ core/pitch_classifier.py | 273 +++++++++ core/review_parser.py | 131 +++++ core/runner_classifier.py | 133 +++++ crawler/__init__.py | 6 + crawler/lineup_builder.py | 116 ++++ crawler/naver_api.py | 197 +++++++ crawler/relay_parser.py | 535 +++++++++++++++++ crawler/report_builder.py | 270 +++++++++ .../BrowserMetrics-69F5A518-63E9.pma | Bin 0 -> 4194304 bytes my_profile/ChromeFeatureState | 1 + my_profile/Default/Account Web Data | Bin 0 -> 77824 bytes my_profile/Default/Account Web Data-journal | 0 my_profile/Default/Affiliation Database | Bin 0 -> 53248 bytes .../Default/Affiliation Database-journal | 0 .../Default/BookmarkMergedSurfaceOrdering | 2 + .../Cache/Cache_Data/13d9afa0c3ccf0e2_0 | Bin 0 -> 24854 bytes .../Cache/Cache_Data/20f8a7ac591e3cfb_0 | Bin 0 -> 11499 bytes .../Cache/Cache_Data/36999aedce6b9850_0 | Bin 0 -> 660 bytes .../Cache/Cache_Data/3fdc6fba64f26c1c_0 | Bin 0 -> 3187 bytes .../Cache/Cache_Data/63f351f1930af849_0 | Bin 0 -> 79122 bytes .../Cache/Cache_Data/66d04e225683fe99_0 | Bin 0 -> 1387 bytes .../Cache/Cache_Data/7f62be85fe6088aa_0 | Bin 0 -> 1489 bytes .../Cache/Cache_Data/a58e561b6854b4f4_0 | Bin 0 -> 874 bytes .../Cache/Cache_Data/b4b76c79593d683b_0 | Bin 0 -> 754 bytes .../Cache/Cache_Data/b56cc14f6e606ea0_0 | Bin 0 -> 7825 bytes .../Cache/Cache_Data/cd46246e2a12c82d_0 | Bin 0 -> 899 bytes .../Cache/Cache_Data/f81e693f9ae23dc3_0 | Bin 0 -> 6233 bytes my_profile/Default/Cache/Cache_Data/index | Bin 0 -> 24 bytes .../Cache/Cache_Data/index-dir/the-real-index | Bin 0 -> 336 bytes .../Default/Cache/No_Vary_Search/journal.baj | 1 + .../Default/Cache/No_Vary_Search/snapshot.baf | Bin 0 -> 20 bytes my_profile/Default/ClientCertificates/LOCK | 0 my_profile/Default/ClientCertificates/LOG | 0 .../Default/Code Cache/js/16508a754b416371_0 | Bin 0 -> 629 bytes .../Default/Code Cache/js/749d48cfaad904d2_0 | Bin 0 -> 222 bytes my_profile/Default/Code Cache/js/index | Bin 0 -> 24 bytes .../Code Cache/js/index-dir/the-real-index | Bin 0 -> 96 bytes my_profile/Default/Code Cache/wasm/index | Bin 0 -> 24 bytes .../Code Cache/wasm/index-dir/the-real-index | Bin 0 -> 48 bytes my_profile/Default/Cookies | Bin 0 -> 20480 bytes my_profile/Default/Cookies-journal | 0 my_profile/Default/DawnGraphiteCache/data_0 | Bin 0 -> 8192 bytes my_profile/Default/DawnGraphiteCache/data_1 | Bin 0 -> 270336 bytes my_profile/Default/DawnGraphiteCache/data_2 | Bin 0 -> 8192 bytes my_profile/Default/DawnGraphiteCache/data_3 | Bin 0 -> 8192 bytes my_profile/Default/DawnGraphiteCache/index | Bin 0 -> 262512 bytes my_profile/Default/DawnWebGPUCache/data_0 | Bin 0 -> 8192 bytes my_profile/Default/DawnWebGPUCache/data_1 | Bin 0 -> 270336 bytes my_profile/Default/DawnWebGPUCache/data_2 | Bin 0 -> 8192 bytes my_profile/Default/DawnWebGPUCache/data_3 | Bin 0 -> 8192 bytes my_profile/Default/DawnWebGPUCache/index | Bin 0 -> 262512 bytes my_profile/Default/Extension Rules/CURRENT | 1 + my_profile/Default/Extension Rules/LOCK | 0 my_profile/Default/Extension Rules/LOG | 2 + .../Default/Extension Rules/MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/Extension Scripts/CURRENT | 1 + my_profile/Default/Extension Scripts/LOCK | 0 my_profile/Default/Extension Scripts/LOG | 2 + .../Default/Extension Scripts/MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/Extension State/CURRENT | 1 + my_profile/Default/Extension State/LOCK | 0 my_profile/Default/Extension State/LOG | 2 + .../Default/Extension State/MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/Favicons | Bin 0 -> 20480 bytes my_profile/Default/Favicons-journal | 0 my_profile/Default/GPUCache/data_0 | Bin 0 -> 8192 bytes my_profile/Default/GPUCache/data_1 | Bin 0 -> 270336 bytes my_profile/Default/GPUCache/data_2 | Bin 0 -> 8192 bytes my_profile/Default/GPUCache/data_3 | Bin 0 -> 8192 bytes my_profile/Default/GPUCache/index | Bin 0 -> 262512 bytes my_profile/Default/History | Bin 0 -> 163840 bytes my_profile/Default/History-journal | 0 my_profile/Default/LOCK | 0 my_profile/Default/LOG | 0 .../Default/Local Storage/leveldb/CURRENT | 1 + my_profile/Default/Local Storage/leveldb/LOCK | 0 my_profile/Default/Local Storage/leveldb/LOG | 2 + .../Local Storage/leveldb/MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/Login Data | Bin 0 -> 40960 bytes my_profile/Default/Login Data For Account | Bin 0 -> 40960 bytes .../Default/Login Data For Account-journal | 0 my_profile/Default/Login Data-journal | 0 my_profile/Default/Network Persistent State | 1 + .../Default/PersistentOriginTrials/LOCK | 0 my_profile/Default/PersistentOriginTrials/LOG | 0 my_profile/Default/Preferences | 1 + my_profile/Default/README | 1 + my_profile/Default/Reporting and NEL | Bin 0 -> 36864 bytes my_profile/Default/Reporting and NEL-journal | 0 my_profile/Default/Safe Browsing Cookies | Bin 0 -> 20480 bytes .../Default/Safe Browsing Cookies-journal | 0 my_profile/Default/Secure Preferences | 1 + .../Segmentation Platform/SegmentInfoDB/LOCK | 0 .../Segmentation Platform/SegmentInfoDB/LOG | 0 .../Segmentation Platform/SignalDB/LOCK | 0 .../Segmentation Platform/SignalDB/LOG | 0 .../SignalStorageConfigDB/LOCK | 0 .../SignalStorageConfigDB/LOG | 0 my_profile/Default/ServerCertificate | Bin 0 -> 20480 bytes my_profile/Default/ServerCertificate-journal | 0 my_profile/Default/Session Storage/CURRENT | 1 + my_profile/Default/Session Storage/LOCK | 0 my_profile/Default/Session Storage/LOG | 2 + .../Default/Session Storage/MANIFEST-000001 | Bin 0 -> 41 bytes .../Sessions/Session_13422179865101812 | Bin 0 -> 3739 bytes .../Default/Sessions/Tabs_13422179865124776 | Bin 0 -> 1707 bytes .../Default/Shared Dictionary/cache/index | Bin 0 -> 24 bytes .../cache/index-dir/the-real-index | Bin 0 -> 48 bytes my_profile/Default/Shared Dictionary/db | Bin 0 -> 45056 bytes .../Default/Shared Dictionary/db-journal | 0 my_profile/Default/SharedStorage | Bin 0 -> 4096 bytes .../Site Characteristics Database/CURRENT | 1 + .../Site Characteristics Database/LOCK | 0 .../Default/Site Characteristics Database/LOG | 2 + .../MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/Sync Data/LevelDB/CURRENT | 1 + my_profile/Default/Sync Data/LevelDB/LOCK | 0 my_profile/Default/Sync Data/LevelDB/LOG | 2 + .../Default/Sync Data/LevelDB/MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/Top Sites | Bin 0 -> 20480 bytes my_profile/Default/Top Sites-journal | 0 my_profile/Default/TransportSecurity | 1 + my_profile/Default/Trust Tokens | Bin 0 -> 36864 bytes my_profile/Default/Trust Tokens-journal | 0 my_profile/Default/Web Data | Bin 0 -> 157696 bytes my_profile/Default/Web Data-journal | 0 my_profile/Default/WebStorage/QuotaManager | Bin 0 -> 40960 bytes .../Default/WebStorage/QuotaManager-journal | 0 my_profile/Default/chrome_cart_db/LOCK | 0 my_profile/Default/chrome_cart_db/LOG | 0 .../Default/commerce_subscription_db/LOCK | 0 .../Default/commerce_subscription_db/LOG | 0 my_profile/Default/discount_infos_db/LOCK | 0 my_profile/Default/discount_infos_db/LOG | 0 my_profile/Default/discounts_db/LOCK | 0 my_profile/Default/discounts_db/LOG | 0 my_profile/Default/engine_allowlist.bf | Bin 0 -> 360 bytes my_profile/Default/parcel_tracking_db/LOCK | 0 my_profile/Default/parcel_tracking_db/LOG | 0 my_profile/Default/shared_proto_db/CURRENT | 1 + my_profile/Default/shared_proto_db/LOCK | 0 my_profile/Default/shared_proto_db/LOG | 2 + .../Default/shared_proto_db/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/shared_proto_db/metadata/CURRENT | 1 + .../Default/shared_proto_db/metadata/LOCK | 0 .../Default/shared_proto_db/metadata/LOG | 2 + .../shared_proto_db/metadata/MANIFEST-000001 | Bin 0 -> 41 bytes my_profile/Default/trusted_vault.pb | 2 + my_profile/GrShaderCache/data_0 | Bin 0 -> 8192 bytes my_profile/GrShaderCache/data_1 | Bin 0 -> 270336 bytes my_profile/GrShaderCache/data_2 | Bin 0 -> 8192 bytes my_profile/GrShaderCache/data_3 | Bin 0 -> 8192 bytes my_profile/GrShaderCache/index | Bin 0 -> 262512 bytes my_profile/GraphiteDawnCache/data_0 | Bin 0 -> 45056 bytes my_profile/GraphiteDawnCache/data_1 | Bin 0 -> 270336 bytes my_profile/GraphiteDawnCache/data_2 | Bin 0 -> 1056768 bytes my_profile/GraphiteDawnCache/data_3 | Bin 0 -> 4202496 bytes my_profile/GraphiteDawnCache/index | Bin 0 -> 262512 bytes my_profile/Last Version | 1 + my_profile/Local State | 1 + my_profile/ShaderCache/data_0 | Bin 0 -> 8192 bytes my_profile/ShaderCache/data_1 | Bin 0 -> 270336 bytes my_profile/ShaderCache/data_2 | Bin 0 -> 8192 bytes my_profile/ShaderCache/data_3 | Bin 0 -> 8192 bytes my_profile/ShaderCache/index | Bin 0 -> 262512 bytes my_profile/Variations | 1 + my_profile/first_party_sets.db | Bin 0 -> 49152 bytes my_profile/first_party_sets.db-journal | 0 my_profile/segmentation_platform/ukm_db | Bin 0 -> 49152 bytes my_profile/segmentation_platform/ukm_db-wal | 0 site.txt | 6 + 194 files changed, 5267 insertions(+) create mode 100644 automation/__init__.py create mode 100644 automation/batter_input.py create mode 100644 automation/defense_popup.py create mode 100644 automation/game_end_input.py create mode 100644 automation/lineup_input.py create mode 100644 automation/page_helpers.py create mode 100644 automation/pitch_input.py create mode 100644 automation/review_input.py create mode 100644 automation/runner_input.py create mode 100644 cli.py create mode 100644 commands/base.py create mode 100644 commands/record.py create mode 100644 config/crawler_constants.yaml create mode 100644 config/field_coordinates.yaml create mode 100644 config/mappings.yaml create mode 100644 config/pitch_rules.yaml create mode 100644 config/review_rules.yaml create mode 100644 config/site_selectors.yaml create mode 100644 core/__init__.py create mode 100644 core/change_parser.py create mode 100644 core/config_loader.py create mode 100644 core/field_calculator.py create mode 100644 core/normalizer.py create mode 100644 core/pitch_classifier.py create mode 100644 core/review_parser.py create mode 100644 core/runner_classifier.py create mode 100644 crawler/__init__.py create mode 100644 crawler/lineup_builder.py create mode 100644 crawler/naver_api.py create mode 100644 crawler/relay_parser.py create mode 100644 crawler/report_builder.py create mode 100644 my_profile/BrowserMetrics/BrowserMetrics-69F5A518-63E9.pma create mode 100644 my_profile/ChromeFeatureState create mode 100644 my_profile/Default/Account Web Data create mode 100644 my_profile/Default/Account Web Data-journal create mode 100644 my_profile/Default/Affiliation Database create mode 100644 my_profile/Default/Affiliation Database-journal create mode 100644 my_profile/Default/BookmarkMergedSurfaceOrdering create mode 100644 my_profile/Default/Cache/Cache_Data/13d9afa0c3ccf0e2_0 create mode 100644 my_profile/Default/Cache/Cache_Data/20f8a7ac591e3cfb_0 create mode 100644 my_profile/Default/Cache/Cache_Data/36999aedce6b9850_0 create mode 100644 my_profile/Default/Cache/Cache_Data/3fdc6fba64f26c1c_0 create mode 100644 my_profile/Default/Cache/Cache_Data/63f351f1930af849_0 create mode 100644 my_profile/Default/Cache/Cache_Data/66d04e225683fe99_0 create mode 100644 my_profile/Default/Cache/Cache_Data/7f62be85fe6088aa_0 create mode 100644 my_profile/Default/Cache/Cache_Data/a58e561b6854b4f4_0 create mode 100644 my_profile/Default/Cache/Cache_Data/b4b76c79593d683b_0 create mode 100644 my_profile/Default/Cache/Cache_Data/b56cc14f6e606ea0_0 create mode 100644 my_profile/Default/Cache/Cache_Data/cd46246e2a12c82d_0 create mode 100644 my_profile/Default/Cache/Cache_Data/f81e693f9ae23dc3_0 create mode 100644 my_profile/Default/Cache/Cache_Data/index create mode 100644 my_profile/Default/Cache/Cache_Data/index-dir/the-real-index create mode 100644 my_profile/Default/Cache/No_Vary_Search/journal.baj create mode 100644 my_profile/Default/Cache/No_Vary_Search/snapshot.baf create mode 100644 my_profile/Default/ClientCertificates/LOCK create mode 100644 my_profile/Default/ClientCertificates/LOG create mode 100644 my_profile/Default/Code Cache/js/16508a754b416371_0 create mode 100644 my_profile/Default/Code Cache/js/749d48cfaad904d2_0 create mode 100644 my_profile/Default/Code Cache/js/index create mode 100644 my_profile/Default/Code Cache/js/index-dir/the-real-index create mode 100644 my_profile/Default/Code Cache/wasm/index create mode 100644 my_profile/Default/Code Cache/wasm/index-dir/the-real-index create mode 100644 my_profile/Default/Cookies create mode 100644 my_profile/Default/Cookies-journal create mode 100644 my_profile/Default/DawnGraphiteCache/data_0 create mode 100644 my_profile/Default/DawnGraphiteCache/data_1 create mode 100644 my_profile/Default/DawnGraphiteCache/data_2 create mode 100644 my_profile/Default/DawnGraphiteCache/data_3 create mode 100644 my_profile/Default/DawnGraphiteCache/index create mode 100644 my_profile/Default/DawnWebGPUCache/data_0 create mode 100644 my_profile/Default/DawnWebGPUCache/data_1 create mode 100644 my_profile/Default/DawnWebGPUCache/data_2 create mode 100644 my_profile/Default/DawnWebGPUCache/data_3 create mode 100644 my_profile/Default/DawnWebGPUCache/index create mode 100644 my_profile/Default/Extension Rules/CURRENT create mode 100644 my_profile/Default/Extension Rules/LOCK create mode 100644 my_profile/Default/Extension Rules/LOG create mode 100644 my_profile/Default/Extension Rules/MANIFEST-000001 create mode 100644 my_profile/Default/Extension Scripts/CURRENT create mode 100644 my_profile/Default/Extension Scripts/LOCK create mode 100644 my_profile/Default/Extension Scripts/LOG create mode 100644 my_profile/Default/Extension Scripts/MANIFEST-000001 create mode 100644 my_profile/Default/Extension State/CURRENT create mode 100644 my_profile/Default/Extension State/LOCK create mode 100644 my_profile/Default/Extension State/LOG create mode 100644 my_profile/Default/Extension State/MANIFEST-000001 create mode 100644 my_profile/Default/Favicons create mode 100644 my_profile/Default/Favicons-journal create mode 100644 my_profile/Default/GPUCache/data_0 create mode 100644 my_profile/Default/GPUCache/data_1 create mode 100644 my_profile/Default/GPUCache/data_2 create mode 100644 my_profile/Default/GPUCache/data_3 create mode 100644 my_profile/Default/GPUCache/index create mode 100644 my_profile/Default/History create mode 100644 my_profile/Default/History-journal create mode 100644 my_profile/Default/LOCK create mode 100644 my_profile/Default/LOG create mode 100644 my_profile/Default/Local Storage/leveldb/CURRENT create mode 100644 my_profile/Default/Local Storage/leveldb/LOCK create mode 100644 my_profile/Default/Local Storage/leveldb/LOG create mode 100644 my_profile/Default/Local Storage/leveldb/MANIFEST-000001 create mode 100644 my_profile/Default/Login Data create mode 100644 my_profile/Default/Login Data For Account create mode 100644 my_profile/Default/Login Data For Account-journal create mode 100644 my_profile/Default/Login Data-journal create mode 100644 my_profile/Default/Network Persistent State create mode 100644 my_profile/Default/PersistentOriginTrials/LOCK create mode 100644 my_profile/Default/PersistentOriginTrials/LOG create mode 100644 my_profile/Default/Preferences create mode 100644 my_profile/Default/README create mode 100644 my_profile/Default/Reporting and NEL create mode 100644 my_profile/Default/Reporting and NEL-journal create mode 100644 my_profile/Default/Safe Browsing Cookies create mode 100644 my_profile/Default/Safe Browsing Cookies-journal create mode 100644 my_profile/Default/Secure Preferences create mode 100644 my_profile/Default/Segmentation Platform/SegmentInfoDB/LOCK create mode 100644 my_profile/Default/Segmentation Platform/SegmentInfoDB/LOG create mode 100644 my_profile/Default/Segmentation Platform/SignalDB/LOCK create mode 100644 my_profile/Default/Segmentation Platform/SignalDB/LOG create mode 100644 my_profile/Default/Segmentation Platform/SignalStorageConfigDB/LOCK create mode 100644 my_profile/Default/Segmentation Platform/SignalStorageConfigDB/LOG create mode 100644 my_profile/Default/ServerCertificate create mode 100644 my_profile/Default/ServerCertificate-journal create mode 100644 my_profile/Default/Session Storage/CURRENT create mode 100644 my_profile/Default/Session Storage/LOCK create mode 100644 my_profile/Default/Session Storage/LOG create mode 100644 my_profile/Default/Session Storage/MANIFEST-000001 create mode 100644 my_profile/Default/Sessions/Session_13422179865101812 create mode 100644 my_profile/Default/Sessions/Tabs_13422179865124776 create mode 100644 my_profile/Default/Shared Dictionary/cache/index create mode 100644 my_profile/Default/Shared Dictionary/cache/index-dir/the-real-index create mode 100644 my_profile/Default/Shared Dictionary/db create mode 100644 my_profile/Default/Shared Dictionary/db-journal create mode 100644 my_profile/Default/SharedStorage create mode 100644 my_profile/Default/Site Characteristics Database/CURRENT create mode 100644 my_profile/Default/Site Characteristics Database/LOCK create mode 100644 my_profile/Default/Site Characteristics Database/LOG create mode 100644 my_profile/Default/Site Characteristics Database/MANIFEST-000001 create mode 100644 my_profile/Default/Sync Data/LevelDB/CURRENT create mode 100644 my_profile/Default/Sync Data/LevelDB/LOCK create mode 100644 my_profile/Default/Sync Data/LevelDB/LOG create mode 100644 my_profile/Default/Sync Data/LevelDB/MANIFEST-000001 create mode 100644 my_profile/Default/Top Sites create mode 100644 my_profile/Default/Top Sites-journal create mode 100644 my_profile/Default/TransportSecurity create mode 100644 my_profile/Default/Trust Tokens create mode 100644 my_profile/Default/Trust Tokens-journal create mode 100644 my_profile/Default/Web Data create mode 100644 my_profile/Default/Web Data-journal create mode 100644 my_profile/Default/WebStorage/QuotaManager create mode 100644 my_profile/Default/WebStorage/QuotaManager-journal create mode 100644 my_profile/Default/chrome_cart_db/LOCK create mode 100644 my_profile/Default/chrome_cart_db/LOG create mode 100644 my_profile/Default/commerce_subscription_db/LOCK create mode 100644 my_profile/Default/commerce_subscription_db/LOG create mode 100644 my_profile/Default/discount_infos_db/LOCK create mode 100644 my_profile/Default/discount_infos_db/LOG create mode 100644 my_profile/Default/discounts_db/LOCK create mode 100644 my_profile/Default/discounts_db/LOG create mode 100644 my_profile/Default/engine_allowlist.bf create mode 100644 my_profile/Default/parcel_tracking_db/LOCK create mode 100644 my_profile/Default/parcel_tracking_db/LOG create mode 100644 my_profile/Default/shared_proto_db/CURRENT create mode 100644 my_profile/Default/shared_proto_db/LOCK create mode 100644 my_profile/Default/shared_proto_db/LOG create mode 100644 my_profile/Default/shared_proto_db/MANIFEST-000001 create mode 100644 my_profile/Default/shared_proto_db/metadata/CURRENT create mode 100644 my_profile/Default/shared_proto_db/metadata/LOCK create mode 100644 my_profile/Default/shared_proto_db/metadata/LOG create mode 100644 my_profile/Default/shared_proto_db/metadata/MANIFEST-000001 create mode 100644 my_profile/Default/trusted_vault.pb create mode 100644 my_profile/GrShaderCache/data_0 create mode 100644 my_profile/GrShaderCache/data_1 create mode 100644 my_profile/GrShaderCache/data_2 create mode 100644 my_profile/GrShaderCache/data_3 create mode 100644 my_profile/GrShaderCache/index create mode 100644 my_profile/GraphiteDawnCache/data_0 create mode 100644 my_profile/GraphiteDawnCache/data_1 create mode 100644 my_profile/GraphiteDawnCache/data_2 create mode 100644 my_profile/GraphiteDawnCache/data_3 create mode 100644 my_profile/GraphiteDawnCache/index create mode 100644 my_profile/Last Version create mode 100644 my_profile/Local State create mode 100644 my_profile/ShaderCache/data_0 create mode 100644 my_profile/ShaderCache/data_1 create mode 100644 my_profile/ShaderCache/data_2 create mode 100644 my_profile/ShaderCache/data_3 create mode 100644 my_profile/ShaderCache/index create mode 100644 my_profile/Variations create mode 100644 my_profile/first_party_sets.db create mode 100644 my_profile/first_party_sets.db-journal create mode 100644 my_profile/segmentation_platform/ukm_db create mode 100644 my_profile/segmentation_platform/ukm_db-wal create mode 100644 site.txt diff --git a/automation/__init__.py b/automation/__init__.py new file mode 100644 index 0000000..c0bfe84 --- /dev/null +++ b/automation/__init__.py @@ -0,0 +1,5 @@ +""" +automation/ — Playwright 기반 관리자 사이트 자동 입력 패키지 + +config/와 core/에 의존하며, 관리자 사이트의 UI 조작을 담당합니다. +""" diff --git a/automation/batter_input.py b/automation/batter_input.py new file mode 100644 index 0000000..a7ed4ba --- /dev/null +++ b/automation/batter_input.py @@ -0,0 +1,322 @@ +""" +automation/batter_input.py — 타석 결과 입력 + +타석의 결과(타구 좌표, 타격 결과, 타자 진루)를 입력합니다. +""" +from __future__ import annotations + +import math +import hashlib +from typing import Any + +from playwright.sync_api import Page + +from core.pitch_classifier import infer_batter_result_label, is_ball_in_play_event +from core.field_calculator import ( + infer_hit_ball_type, + infer_field_zone, + get_hit_ball_type_code, + get_zone_coordinates, + get_foul_fly_coordinates, + extract_direction_offsets, + is_infield_zone, +) +from automation.page_helpers import ( + click_radio_by_label, + get_checked_event_name, + get_last_visible_enabled_locator, +) +from automation.defense_popup import ( + fill_error_defense_popup, + click_defense_sequence_in_popup, + fill_runner_out_defense, +) + + +def _deterministic_offset(seed_text: str, radius: int) -> tuple[int, int]: + """텍스트 기반 결정적 난수 오프셋 생성""" + digest = hashlib.md5(seed_text.encode("utf-8")).digest() + x_offset = (digest[0] % (radius * 2 + 1)) - radius + y_offset = (digest[1] % (radius * 2 + 1)) - radius + return x_offset, y_offset + + +def _apply_hit_ball_variation( + result_text: str, result_type: str, zone: str, x: int, y: int, +) -> tuple[int, int]: + """타구 텍스트에 따른 좌표 변화율(오프셋) 적용""" + dir_x, dir_y = extract_direction_offsets(result_text) + + if "파울플라이" in result_text or "파울희생플라이" in result_text or "파울 희생플라이" in result_text: + is_left = any(token in result_text for token in ("좌", "3루", "유격")) + foul_x, foul_y = get_foul_fly_coordinates("left" if is_left else "right") + x_offset, y_offset = _deterministic_offset(result_text, 2) + return ( + max(0, min(100, foul_x + x_offset)), + max(50, min(100, foul_y + y_offset)), + ) + + if result_type == "home_run": + x_offset, y_offset = _deterministic_offset(result_text, 2) + return ( + max(15, min(85, x + x_offset)), + max(12, min(22, y + y_offset)), + ) + + if is_infield_zone(zone): + base_shift = 3 + random_radius = 2 if result_type == "out" else 3 + else: + base_shift = 12 + random_radius = 5 if result_type == "out" else 7 + + x_offset, y_offset = _deterministic_offset(result_text, random_radius) + return ( + max(10, min(90, x + dir_x * base_shift + x_offset)), + max(18, min(96, y + dir_y * base_shift + y_offset)), + ) + + +def build_hit_ball_payload(page: Page, result_text: str) -> dict[str, str]: + """타구 좌표 및 거리 페이로드 생성""" + zone = infer_field_zone(result_text) + x, y = get_zone_coordinates(zone) + meter_per_px_text = page.locator("#dat_meterPerPx").input_value() or "0" + try: + meter_per_px = float(meter_per_px_text) + except ValueError: + meter_per_px = 0.0 + + result_type = "home_run" if "홈런" in result_text else ("out" if "아웃" in result_text or "희생" in result_text else "safe") + hit_ball_type_label = infer_hit_ball_type(result_text) + x, y = _apply_hit_ball_variation(result_text, result_type, zone, x, y) + + px_x = math.floor(650 * x / 100) + px_y = math.floor(621 * y / 100) + + distance = 0 + if meter_per_px: + distance = math.floor(math.sqrt((50 - x) ** 2 + (95 - y) ** 2) * math.hypot(6.5, 6.21) * meter_per_px / 100) + + return { + "type": get_hit_ball_type_code(hit_ball_type_label), + "label": hit_ball_type_label, + "x": str(px_x), + "y": str(px_y), + "xy": f"{x},{y}", + "distance": str(distance), + } + + +def set_hit_ball_and_defense(page: Page, event: dict[str, Any]) -> bool: + """구장 팝업이 열렸을 때 타구 좌표 지정 및 수비 결과 입력""" + if not is_ball_in_play_event(event): + return False + + result_text = ((event.get("result") or {}).get("text") or "").strip() + if not result_text: + return False + + # 팝업 가시성 대기 + try: + page.wait_for_selector("#div_stadium_image", state="visible", timeout=2000) + except Exception: + return False + + # 타구 좌표 계산 및 입력 + payload = build_hit_ball_payload(page, result_text) + page.evaluate( + """(payload) => { + const mapImg = document.getElementById('mapImg'); + if (!mapImg) return; + + document.getElementById('dat_evt_hit_type').value = payload.type; + const dropDown = document.querySelector("#div_hit_type button.dropdown-toggle"); + if (dropDown) { + dropDown.innerHTML = payload.label + ' '; + } + + document.getElementById('dat_hit_x').value = payload.x; + document.getElementById('dat_hit_y').value = payload.y; + document.getElementById('dat_hit_xy').value = payload.xy; + document.getElementById('dat_hit_distance').value = payload.distance; + document.getElementById('distance').value = payload.distance; + + const mark = document.getElementById('map_mark'); + if (mark) { + mark.style.display = 'block'; + mark.style.left = payload.x + 'px'; + mark.style.top = payload.y + 'px'; + } + }""", + payload, + ) + + page.wait_for_timeout(300) + + # 타구 결과에 따른 수비 팝업/입력 처리 + result_type = (event.get("result") or {}).get("type") or "" + + if result_type in {"single_error_advance", "double_error_advance", "triple_error_advance"}: + fill_error_defense_popup(page, result_text) + elif result_type in {"reach_on_error"}: + fill_error_defense_popup(page, result_text) + elif result_type in {"single_runner_out", "double_runner_out", "triple_runner_out"}: + fill_runner_out_defense(page, result_text) + elif "병살" in result_text: + from core.field_calculator import build_double_play_first_sequence + seq = build_double_play_first_sequence(event) + if seq: + click_defense_sequence_in_popup(page, seq) + btn = get_last_visible_locator(page, "#btnNext") + if btn: + btn.click() + page.wait_for_timeout(100) + elif "실책" in result_text: + fill_error_defense_popup(page, result_text) + elif result_type in {"out", "double_play"} and "삼진" not in result_text: + from core.field_calculator import extract_defense_sequence + seq = extract_defense_sequence(result_text) + if seq: + click_defense_sequence_in_popup(page, seq, complete_button_selector="#btnAdd") + + # 홈런일 경우 입력 완료 버튼 직접 클릭 + if result_type == "home_run": + try: + page.locator("#btnInputComplete").click(timeout=1000) + except Exception: + pass + + return True + + +def set_batter_result_type(page: Page, result: dict[str, Any] | None, event: dict[str, Any] | None = None) -> None: + """타격 결과 종류(1루타, 수비실책 등)만 세팅""" + if not result: + return + label = infer_batter_result_label(result, event) + if not label: + return + + # 강제 세팅 (병살 등) + if label == "병살-아웃": + forced = page.evaluate( + """(eventName) => { + const nodes = [...document.querySelectorAll("input[type=radio][name='evt_batter']")]; + for (const node of nodes) { + const name = (node.getAttribute('eventName') || '').trim(); + if (name === eventName) { + node.disabled = false; + node.checked = true; + node.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + return true; + } + } + return false; + }""", + label, + ) + if forced: + page.wait_for_timeout(120) + if get_checked_event_name(page, "evt_batter") == label: + return + + # JS 강제 이벤트 발생 + marker = page.evaluate( + """(eventName) => { + const nodes = [...document.querySelectorAll("input[type=radio][name='evt_batter']")]; + for (let i = nodes.length - 1; i >= 0; i -= 1) { + const node = nodes[i]; + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + if (!rect.width || !rect.height || style.display === 'none' || style.visibility === 'hidden' || node.disabled) { + continue; + } + if ((node.getAttribute('eventName') || '') === eventName) { + const marker = `codex-batter-${Math.random().toString(36).slice(2)}`; + node.setAttribute('data-codex-marker', marker); + return marker; + } + } + return null; + }""", + label, + ) + if marker: + candidate = page.locator(f"[data-codex-marker='{marker}']") + for _ in range(3): + try: + candidate.click(force=True) + except Exception: + candidate.evaluate( + """(node) => { + node.disabled = false; + node.checked = true; + node.dispatchEvent(new Event('click', { bubbles: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + }""" + ) + if get_checked_event_name(page, "evt_batter") == label: + return + page.wait_for_timeout(100) + + # 폴백 + for _ in range(3): + click_radio_by_label(page, "evt_batter", label) + if get_checked_event_name(page, "evt_batter") == label: + break + page.wait_for_timeout(100) + + +def set_batter_advancement(page: Page, result: dict[str, Any] | None) -> None: + """타자의 최종 루(1루, 2루 등)와 주루가산 세팅""" + if not result: + return + + to_base = result.get("toBase") + + # 기본 진루 + if to_base is None: + r_type = result.get("type") + if r_type in {"single", "bunt_hit", "reach_on_error", "reach_on_fielder_choice", "reach_on_grounder", "hit_by_pitch", "walk", "intentional_walk"}: + to_base = 1 + elif r_type == "double": + to_base = 2 + elif r_type == "triple": + to_base = 3 + elif r_type == "home_run": + to_base = 4 + + if to_base is not None: + try: + selector = f"input[name='dat_evt_batter_advance'][value='{to_base}']" + locator = get_last_visible_enabled_locator(page, selector) + if locator is not None: + locator.check(force=True) + else: + fallback = page.locator(selector) + if fallback.count() > 0: + fallback.first.check(force=True) + except Exception: + pass + + # 주루가산 (Extra Advance) + try: + extra_advance = result.get("extra_advance") + if extra_advance is not None and extra_advance > 0: + locator = get_last_visible_enabled_locator(page, "#batterRunningAdd") + if locator is not None: + locator.select_option(value=str(extra_advance)) + else: + fallback = page.locator("#batterRunningAdd") + if fallback.count() > 0: + fallback.first.select_option(value=str(extra_advance)) + except Exception: + pass + + +def set_batter_result(page: Page, result: dict[str, Any] | None, event: dict[str, Any] | None = None) -> None: + """타격 결과와 진루/가산 세팅""" + set_batter_result_type(page, result, event) + set_batter_advancement(page, result) diff --git a/automation/defense_popup.py b/automation/defense_popup.py new file mode 100644 index 0000000..9b2a4e1 --- /dev/null +++ b/automation/defense_popup.py @@ -0,0 +1,118 @@ +""" +automation/defense_popup.py — 수비 팝업 조작 + +수비 버튼 클릭, 수비 시퀀스 입력, 실책 수비 팝업 처리. +""" +from __future__ import annotations + +from typing import Any + +from playwright.sync_api import Page + +from core.config_loader import defense_button_id_map, position_number_map +from core.field_calculator import ( + extract_defense_sequence, + extract_error_position, + infer_error_position_fallback, + is_throwing_error, +) +from automation.page_helpers import get_last_visible_locator + + +def click_defense_button_robustly(page: Page, position: str, click_count: int = 1) -> bool: + """수비 포지션 버튼을 안정적으로 클릭 + + ID 기반 → value 기반 → label 기반 순서로 시도 + """ + btn_map = defense_button_id_map() + pos_num = position_number_map() + + # 1) ID 기반 + button_selector = btn_map.get(position) + if button_selector: + loc = page.locator(button_selector) + if loc.count() > 0: + for _ in range(click_count): + loc.click(force=True) + page.wait_for_timeout(60) + return True + + # 2) value 기반 + value = pos_num.get(position) + if value: + loc = page.locator(f"input[name='defenseNumberBtn'][value='{value}']") + if loc.count() > 0: + for _ in range(click_count): + loc.click(force=True) + page.wait_for_timeout(60) + return True + + # 3) label 기반 + all_buttons = page.locator("input[name='defenseNumberBtn']").all() + for btn in all_buttons: + label = (btn.get_attribute("id") or "").lower() + if position in label or label in position: + for _ in range(click_count): + btn.click(force=True) + page.wait_for_timeout(60) + return True + + return False + + +def clear_defense_selections(page: Page) -> None: + """수비 선택 초기화""" + page.evaluate( + """() => { + document.querySelectorAll("input[name='defenseNumberBtn']").forEach(btn => { + btn.checked = false; + }); + }""" + ) + + +def click_defense_sequence_in_popup( + page: Page, + sequence: list[str], + complete_button_selector: str | None = None, +) -> None: + """수비 시퀀스 순서대로 클릭 후 완료 버튼 클릭""" + for position in sequence: + click_defense_button_robustly(page, position) + page.wait_for_timeout(80) + + if complete_button_selector: + btn = get_last_visible_locator(page, complete_button_selector) + if btn: + btn.click() + page.wait_for_timeout(120) + + +def fill_runner_out_defense( + page: Page, text: str, sequence_override: list[str] | None = None, +) -> None: + """주루 아웃 수비 팝업 처리""" + page.wait_for_timeout(300) + sequence = sequence_override or extract_defense_sequence(text) + if sequence: + click_defense_sequence_in_popup(page, sequence) + + +def fill_error_defense_popup(page: Page, text: str) -> None: + """실책 수비 팝업 처리""" + defense_sequence = extract_defense_sequence(text) + if len(defense_sequence) >= 2: + click_defense_sequence_in_popup(page, defense_sequence) + else: + error_position = extract_error_position(text) + if not error_position: + error_position = infer_error_position_fallback(text) + click_count = 2 if is_throwing_error(text) else 1 + click_defense_button_robustly(page, error_position, click_count) + + complete_button = get_last_visible_locator(page, "#btnNext") + if complete_button is None: + complete_button = get_last_visible_locator(page, "#btnAdd") + if complete_button: + complete_button.click() + page.wait_for_timeout(120) diff --git a/automation/game_end_input.py b/automation/game_end_input.py new file mode 100644 index 0000000..360818b --- /dev/null +++ b/automation/game_end_input.py @@ -0,0 +1,141 @@ +""" +automation/game_end_input.py — 경기 종료 처리 + +투수들의 승패/홀드/세이브 기록 등을 경기 종료 팝업에 입력하고 저장합니다. +""" +from __future__ import annotations + +from typing import Any + +from playwright.sync_api import Page + +from automation.page_helpers import show_debug_overlay +from automation.lineup_input import normalize_lineup_text + + +def _open_game_end_popup(page: Page) -> None: + """경기 종료 팝업 열기""" + page.evaluate("""() => { window.confirm = () => true; window.alert = () => {}; }""") + page.locator("#gameEndBtn").click(force=True) + page.wait_for_selector("#btnGameEnd", timeout=5000) + page.wait_for_selector("input[name^='homeTeamPitcher_'], input[name^='awayTeamPitcher_']", timeout=5000) + + +def _get_game_end_pitcher_rows(page: Page) -> dict[str, list[dict[str, Any]]]: + """팝업 내 홈/원정 투수 리스트 추출""" + return page.evaluate( + """() => { + const rowsFor = (nameAttr) => { + return [...document.querySelectorAll(`input[name='${nameAttr}']`)].map((input, idx) => { + const tr = input.closest('tr'); + const firstTd = tr ? tr.querySelector('td') : null; + return { + idx, + name: firstTd ? firstTd.textContent.trim() : '', + }; + }); + }; + return { + home: rowsFor('home_player_id'), + away: rowsFor('away_player_id'), + }; + }""" + ) + + +def _select_game_end_role(page: Page, side: str, idx: int, role_value: str) -> None: + """특정 투수의 역할(승/패/홀/세 등) 라디오 버튼 선택""" + selector = f"input[name='{side}TeamPitcher_{idx}'][value='{role_value}']" + ok = page.evaluate( + """(selector) => { + const node = document.querySelector(selector); + if (!node) return false; + node.disabled = false; + node.checked = true; + node.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + return node.checked === true; + }""", + selector, + ) + if not ok: + page.locator(selector).click(force=True) + + +def _check_game_end_blown_save(page: Page, side: str, idx: int) -> None: + """블론세이브 체크박스 선택""" + selector = f"input[name='{side}BlownSave_{idx}']" + ok = page.evaluate( + """(selector) => { + const node = document.querySelector(selector); + if (!node) return false; + node.disabled = false; + node.checked = true; + node.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + return node.checked === true; + }""", + selector, + ) + if not ok: + page.locator(selector).check(force=True) + + +def fill_game_end_pitching(page: Page, report: dict[str, Any]) -> None: + """리포트의 투수 요약을 바탕으로 경기 종료 팝업 폼 채우기""" + _open_game_end_popup(page) + rows = _get_game_end_pitcher_rows(page) + + summary = report.get("pitching_summary") or {} + lineups = report.get("lineups") or {} + + home_starter = normalize_lineup_text(((lineups.get("home_team") or {}).get("starter_pitcher") or {}).get("name") or "") + away_starter = normalize_lineup_text(((lineups.get("away_team") or {}).get("starter_pitcher") or {}).get("name") or "") + + winners = {normalize_lineup_text(name) for name in (summary.get("승리투수") or [])} + losers = {normalize_lineup_text(name) for name in (summary.get("패전투수") or [])} + holds = {normalize_lineup_text(name) for name in (summary.get("홀드") or [])} + saves = {normalize_lineup_text(name) for name in (summary.get("세이브") or [])} + blown_saves = {normalize_lineup_text(name) for name in (summary.get("블론세이브") or [])} + fixed_roles = winners | losers | holds | saves + + for side, side_rows in rows.items(): + starter_name = home_starter if side == "home" else away_starter + for row in side_rows: + name = normalize_lineup_text(row.get("name") or "") + idx = int(row["idx"]) + + if name in winners: + _select_game_end_role(page, side, idx, "wins") + elif name in losers: + _select_game_end_role(page, side, idx, "loses") + elif name in saves: + _select_game_end_role(page, side, idx, "save") + elif name in holds: + _select_game_end_role(page, side, idx, "holds") + elif name and name != starter_name and name not in fixed_roles: + _select_game_end_role(page, side, idx, "re") + + if name in blown_saves: + _check_game_end_blown_save(page, side, idx) + + page.wait_for_timeout(300) + + show_debug_overlay( + page, + [ + "게임종료 팝업 입력 준비 완료", + f"승리: {', '.join(summary.get('승리투수') or []) or '-'}", + f"패전: {', '.join(summary.get('패전투수') or []) or '-'}", + f"홀드: {', '.join(summary.get('홀드') or []) or '-'}", + f"세이브: {', '.join(summary.get('세이브') or []) or '-'}", + f"블론세이브: {', '.join(summary.get('블론세이브') or []) or '-'}", + ], + ) + + +def submit_game_end(page: Page) -> None: + """경기 종료 최종 완료(저장) 버튼 클릭""" + page.evaluate("""() => { window.confirm = () => true; window.alert = () => {}; }""") + page.locator("#btnGameEnd").click(force=True) + page.wait_for_timeout(1500) diff --git a/automation/lineup_input.py b/automation/lineup_input.py new file mode 100644 index 0000000..3f5471a --- /dev/null +++ b/automation/lineup_input.py @@ -0,0 +1,299 @@ +""" +automation/lineup_input.py — 라인업 및 선수 교체 입력 + +관리자 사이트의 홈/원정 라인업 조작, 선수명 및 포지션 선택, +교체 이벤트 처리를 담당합니다. +""" +from __future__ import annotations + +import re +from typing import Any + +from playwright.sync_api import Page + +from core.config_loader import position_to_defense_no +from core.change_parser import normalize_change_event + + +def normalize_lineup_text(text: str) -> str: + """라인업 선수명 정규화 (괄호, 번호 등 제거하고 이름만 추출)""" + text = (text or "").strip() + text = text.replace("*", "") + text = re.sub(r"\[\d+(?:번)?\]", "", text) + text = re.sub(r"\s*\(.*?\)\s*", "", text) + text = "".join(re.findall(r"[가-힣A-Za-z]+", text)) + return text.strip() + + +def get_lineup_state(page: Page) -> dict[str, Any]: + """현재 사이트에 입력된 라인업 상태(홈/원정 0~9번 행) 추출""" + return page.evaluate( + """() => { + const buildSide = (side) => { + const rows = []; + for (let idx = 0; idx <= 9; idx += 1) { + const player = document.querySelector(`#${side}_player_id_${idx}`); + const defense = document.querySelector(`#${side}_defense_no_${idx}`); + const orgPlayer = document.querySelector(`#org_${side}_player_id_${idx}`); + const orgDefense = document.querySelector(`#org_${side}_defense_no_${idx}`); + if (!player && !defense) continue; + rows.push({ + idx, + playerText: player ? player.options[player.selectedIndex]?.text || '' : '', + playerValue: player ? player.value : '', + defenseValue: defense ? defense.value : '', + orgPlayerValue: orgPlayer ? orgPlayer.value : '', + orgDefenseValue: orgDefense ? orgDefense.value : '', + }); + } + return rows; + }; + return { home: buildSide('home'), away: buildSide('away') }; + }""" + ) + + +def detect_change_side( + half_inning: dict[str, Any], change_event: dict[str, Any], lineup_state: dict[str, Any], +) -> str: + """교체가 일어난 팀(home/away) 추론""" + actor_name = normalize_lineup_text( + change_event.get("actor_name") or change_event.get("player_name") or "" + ) + offense_side = "away" if half_inning.get("half") == "top" else "home" + defense_side = "home" if offense_side == "away" else "away" + + matched_sides: list[str] = [] + for side in ("home", "away"): + for row in lineup_state.get(side, []): + if normalize_lineup_text(row.get("playerText") or "") == actor_name: + matched_sides.append(side) + break + + if len(matched_sides) == 1: + return matched_sides[0] + + actor_role = change_event.get("actor_role") + if actor_role in {"batter", "대타", "대주자", "1루주자", "2루주자", "3루주자", "주자"}: + return offense_side + + return defense_side + + +def find_change_row(side_rows: list[dict[str, Any]], change_event: dict[str, Any]) -> int | None: + """교체 대상 선수가 속한 라인업 행 인덱스 검색""" + if change_event.get("bat_order") is not None: + return int(change_event["bat_order"]) + + actor_name_raw = ( + change_event.get("actor_name") + or change_event.get("player_name") + or change_event.get("out_player") + or "" + ) + actor_name = normalize_lineup_text(actor_name_raw) + + # 1단계: 완전 일치 + for row in side_rows: + if normalize_lineup_text(row.get("playerText") or "") == actor_name: + return int(row["idx"]) + + # 2단계: 부분 일치 + for row in side_rows: + player_text = normalize_lineup_text(row.get("playerText") or "") + if actor_name and (actor_name in player_text or player_text in actor_name): + return int(row["idx"]) + + # 3단계: 역할(defenseValue) 일치 + actor_role = change_event.get("actor_role") + pos_def_map = position_to_defense_no() + if actor_role in pos_def_map: + defense_no = pos_def_map[actor_role] + for row in side_rows: + if str(row.get("defenseValue") or "") == defense_no: + return int(row["idx"]) + + # 4단계: 이름 혼재 경우 (예: "1루주자 문보경") + if " " in actor_name_raw: + potential_name = normalize_lineup_text(actor_name_raw.split()[-1]) + for row in side_rows: + if normalize_lineup_text(row.get("playerText") or "") == potential_name: + return int(row["idx"]) + + return None + + +def find_pitcher_row(side_rows: list[dict[str, Any]]) -> int | None: + """투수가 위치한 행(일반적으로 0번) 찾기""" + pos_def_map = position_to_defense_no() + pitcher_no = pos_def_map.get("투수") + for row in side_rows: + if str(row.get("defenseValue") or "") == pitcher_no: + return int(row["idx"]) + return None + + +def select_lineup_player(page: Page, side: str, row_idx: int, player_name: str) -> None: + """라인업 select 상자에서 선수명으로 선택""" + select_id = f"#{side}_player_id_{row_idx}" + options = page.locator(f"{select_id} option").evaluate_all( + """(nodes) => nodes.map((node) => ({ value: node.value, text: node.textContent.trim() }))""" + ) + target_value = None + normalized_target = normalize_lineup_text(player_name) + for option in options: + if normalize_lineup_text(option["text"]) == normalized_target: + target_value = option["value"] + break + + if not target_value: + raise ValueError(f"{side} {row_idx}번 행에서 선수 '{player_name}' 옵션을 찾지 못했습니다.") + page.locator(select_id).select_option(value=target_value) + + +def set_lineup_defense(page: Page, side: str, row_idx: int, position: str | None) -> None: + """라인업 수비 포지션 세팅""" + if not position: + return + defense_no = position_to_defense_no().get(position) + if not defense_no: + return + page.locator(f"#{side}_defense_no_{row_idx}").select_option(value=defense_no) + + +def get_current_lineup_selection(page: Page, side: str, row_idx: int) -> tuple[str, str]: + """해당 행의 현재 선택된 선수와 수비 번호 값 반환""" + player_value = page.locator(f"#{side}_player_id_{row_idx}").input_value() + defense_value = page.locator(f"#{side}_defense_no_{row_idx}").input_value() + return player_value, defense_value + + +def get_target_player_value(page: Page, side: str, row_idx: int, player_name: str | None) -> str | None: + if not player_name: + return None + select_id = f"#{side}_player_id_{row_idx}" + options = page.locator(f"{select_id} option").evaluate_all( + """(nodes) => nodes.map((node) => ({ value: node.value, text: node.textContent.trim() }))""" + ) + normalized_target = normalize_lineup_text(player_name) + for option in options: + if normalize_lineup_text(option["text"]) == normalized_target: + return option["value"] + return None + + +def get_target_defense_value(position: str | None) -> str | None: + if not position: + return None + return position_to_defense_no().get(position) + + +def apply_change_event( + page: Page, + half_inning: dict[str, Any], + change_event: dict[str, Any], + change_cache: dict[str, tuple[str, int]], +) -> None: + """선수 교체 이벤트를 라인업에 반영하고 저장""" + change_event = normalize_change_event(change_event) + actor_name_raw = change_event.get("actor_name") or change_event.get("player_name") or change_event.get("out_player") or "" + cache_key = normalize_lineup_text(actor_name_raw) + actor_name = normalize_lineup_text(actor_name_raw) + + lineup_state = get_lineup_state(page) + cached = change_cache.get(cache_key) + side = cached[0] if cached else detect_change_side(half_inning, change_event, lineup_state) + side_rows = lineup_state.get(side, []) + row_idx = find_change_row(side_rows, change_event) + + if row_idx is None and cached and cached[0] == side: + row_idx = cached[1] + + if row_idx is None: + all_players = [normalize_lineup_text(r.get("playerText", "")) for r in side_rows] + raise ValueError( + f"{side} 교체 행을 찾지 못했습니다 " + f"(Target: {actor_name}, Candidates: {all_players}): {change_event.get('text')}" + ) + + # 확인창 무시 + page.evaluate("""() => { window.alert = () => {}; window.confirm = () => true; }""") + + def trigger_lineup_save(idx: int): + home_away_gb = 2 if side == "home" else 1 + page.evaluate( + """({ batterNo, homeAwayGb }) => { + if (typeof window.f_lineup === 'function') { + window.f_lineup(batterNo, homeAwayGb); + } + }""", + {"batterNo": idx, "homeAwayGb": home_away_gb}, + ) + page.wait_for_timeout(200) + + page.evaluate( + """({ side, idx }) => { + const row = document.querySelector(`#${side}_player_id_${idx}`)?.parentElement?.parentElement; + if (row) { + const saveBtn = [...row.querySelectorAll("input[type=button], button, a")].find(el => + el.value === 'V' || el.innerText.includes('V') || el.innerText.includes('저장') || el.id.includes('save') + ); + if (saveBtn) { + saveBtn.click(); + return true; + } + } + return false; + }""", + {"side": side, "idx": idx} + ) + page.wait_for_timeout(200) + + # 병합 교체 (예: 포수→지명타자 전환 + 새 투수 등판) + if change_event.get("change_type") == "merged_pitcher_substitution": + actor_player_name = change_event.get("player_name") or change_event.get("actor_name") + pitcher_in_player = change_event.get("pitcher_in_player") or change_event.get("in_player") + pitcher_row_idx = find_pitcher_row(side_rows) + if pitcher_row_idx is None or not pitcher_in_player: + raise ValueError(f"투수 교체 행을 찾지 못했습니다: {change_event.get('text')}") + + set_lineup_defense(page, side, row_idx, "지명타자") + trigger_lineup_save(row_idx) + trigger_lineup_save(row_idx + 1) + + select_lineup_player(page, side, pitcher_row_idx, pitcher_in_player) + set_lineup_defense(page, side, pitcher_row_idx, "투수") + trigger_lineup_save(pitcher_row_idx) + trigger_lineup_save(pitcher_row_idx + 1) + + if actor_player_name: + change_cache[normalize_lineup_text(actor_player_name)] = (side, int(row_idx)) + change_cache[normalize_lineup_text(pitcher_in_player)] = (side, int(pitcher_row_idx)) + return + + # 단순 선수 교체 + if change_event.get("change_type") == "substitution": + in_player = change_event.get("in_player") + if not in_player: + return + select_lineup_player(page, side, row_idx, in_player) + set_lineup_defense(page, side, row_idx, change_event.get("to_position")) + trigger_lineup_save(row_idx) + trigger_lineup_save(row_idx + 1) + + out_player = change_event.get("out_player") + if out_player: + change_cache[normalize_lineup_text(out_player)] = (side, int(row_idx)) + change_cache[normalize_lineup_text(in_player)] = (side, int(row_idx)) + return + + # 단순 수비 위치 변경 + if change_event.get("change_type") == "position_change": + set_lineup_defense(page, side, row_idx, change_event.get("to_position")) + trigger_lineup_save(row_idx) + trigger_lineup_save(row_idx + 1) + + player_name = change_event.get("player_name") + if player_name: + change_cache[normalize_lineup_text(player_name)] = (side, int(row_idx)) + return diff --git a/automation/page_helpers.py b/automation/page_helpers.py new file mode 100644 index 0000000..269861b --- /dev/null +++ b/automation/page_helpers.py @@ -0,0 +1,338 @@ +""" +automation/page_helpers.py — 공통 Playwright 유틸리티 + +라디오 버튼, select 박스, 가시성 판별 등 사이트 조작의 기초 함수. +모든 automation 모듈이 이 모듈에 의존합니다. +""" +from __future__ import annotations + +from time import sleep +from typing import Any + +from playwright.sync_api import Page + + +# ────────────────────────────────────────────── +# 라디오 버튼 조작 +# ────────────────────────────────────────────── + +def get_radio_map(page: Page, name: str) -> dict[str, str]: + """라디오 그룹의 eventName → value 맵 반환""" + return page.evaluate( + """(name) => { + const nodes = [...document.querySelectorAll(`input[type=radio][name='${name}']`)]; + const map = {}; + for (const node of nodes) { + const eventName = (node.getAttribute('eventName') || '').trim(); + if (eventName) { + map[eventName] = node.value; + } + } + return map; + }""", + name, + ) + + +def get_checked_event_name(page: Page, radio_name: str) -> str: + """현재 체크된 라디오의 eventName 반환""" + return page.evaluate( + """(radioName) => { + const nodes = [...document.querySelectorAll(`input[type=radio][name='${radioName}']:checked`)]; + for (const node of nodes) { + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + if (rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden' && !node.disabled) { + return node.getAttribute('eventName') || ''; + } + } + return nodes.length > 0 ? (nodes[0].getAttribute('eventName') || '') : ''; + }""", + radio_name, + ) + + +def set_radio_by_label(page: Page, radio_name: str, label: str) -> None: + """eventName이 label과 일치하는 라디오 클릭""" + radios = page.locator(f"input[type=radio][name='{radio_name}']").all() + target_radio = None + + # 정확히 일치하는 라벨 우선 + for rb in radios: + if rb.get_attribute("eventname") == label: + target_radio = rb + break + + # 포함 관계로 탐색 + if not target_radio: + for rb in radios: + if label in (rb.get_attribute("eventname") or ""): + target_radio = rb + break + + if target_radio: + target_radio.click(force=True) + + +def click_radio_by_label(page: Page, radio_name: str, label: str) -> None: + """라디오 버튼을 JS로 강제 클릭 (disabled 상태도 처리)""" + page.evaluate( + """({ radioName, label }) => { + const nodes = [...document.querySelectorAll(`input[type=radio][name='${radioName}']`)]; + for (const node of nodes) { + const eventName = (node.getAttribute('eventName') || '').trim(); + if (eventName === label) { + node.disabled = false; + node.checked = true; + node.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + return; + } + } + }""", + {"radioName": radio_name, "label": label}, + ) + + +def find_visible_radio_by_label(page: Page, radio_name: str, label: str): + """가시적이고 활성화된 라디오를 찾아서 Locator 반환""" + marker = page.evaluate( + """({ radioName, expectedLabel }) => { + const nodes = [...document.querySelectorAll(`input[type=radio][name='${radioName}']`)]; + for (let i = nodes.length - 1; i >= 0; i -= 1) { + const node = nodes[i]; + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + if (!rect.width || !rect.height || style.display === 'none' || style.visibility === 'hidden' || node.disabled) { + continue; + } + const name = (node.getAttribute('eventName') || '').trim(); + if (name === expectedLabel) { + const marker = `codex-radio-${Math.random().toString(36).slice(2)}`; + node.setAttribute('data-codex-marker', marker); + return marker; + } + } + return null; + }""", + {"radioName": radio_name, "expectedLabel": label}, + ) + if marker: + return page.locator(f"[data-codex-marker='{marker}']") + return None + + +# ────────────────────────────────────────────── +# 가시성 유틸 +# ────────────────────────────────────────────── + +def get_last_visible_locator(page: Page, selector: str): + """selector 중 마지막으로 보이는 요소의 Locator 반환""" + marker = page.evaluate( + """(selector) => { + const nodes = [...document.querySelectorAll(selector)]; + for (let i = nodes.length - 1; i >= 0; i -= 1) { + const node = nodes[i]; + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + if (rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden') { + const marker = `codex-visible-${Math.random().toString(36).slice(2)}`; + node.setAttribute('data-codex-marker', marker); + return marker; + } + } + return null; + }""", + selector, + ) + if marker: + return page.locator(f"[data-codex-marker='{marker}']") + return None + + +def get_last_visible_enabled_locator(page: Page, selector: str): + """selector 중 마지막으로 보이고 활성화된 요소의 Locator 반환""" + marker = page.evaluate( + """(selector) => { + const nodes = [...document.querySelectorAll(selector)]; + for (let i = nodes.length - 1; i >= 0; i -= 1) { + const node = nodes[i]; + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + if (rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden' && !node.disabled) { + const marker = `codex-enabled-${Math.random().toString(36).slice(2)}`; + node.setAttribute('data-codex-marker', marker); + return marker; + } + } + return null; + }""", + selector, + ) + if marker: + return page.locator(f"[data-codex-marker='{marker}']") + return None + + +# ────────────────────────────────────────────── +# select 박스 조작 +# ────────────────────────────────────────────── + +def set_select_by_partial_text(page: Page, selector: str, partial_text: str) -> None: + """텍스트 부분 일치로 select option 선택""" + if not partial_text: + return + page.wait_for_selector(selector, timeout=3000) + options = page.locator(f"{selector} option").all_text_contents() + + target = partial_text.strip() + for opt in options: + if opt.strip() == target: + page.select_option(selector, label=opt) + return + + target_clean = target.replace(" ", "").replace("/", ",").replace("-", ",") + for opt in options: + opt_clean = opt.strip().replace(" ", "").replace("/", ",").replace("-", ",") + if target_clean in opt_clean or opt_clean in target_clean: + page.select_option(selector, label=opt) + return + + print(f"DEBUG: '{selector}'에서 '{partial_text}'와 일치하는 옵션을 찾지 못함.") + + +def set_select_by_text_or_value(page: Page, selector: str, desired: str) -> None: + """label 또는 value로 select option 선택""" + locator = page.locator(selector) + try: + locator.select_option(label=desired) + return + except Exception: + pass + try: + locator.select_option(value=desired) + return + except Exception: + pass + locator.select_option(index=0) + + +# ────────────────────────────────────────────── +# 디버그 오버레이 & 제어 +# ────────────────────────────────────────────── + +def show_debug_overlay(page: Page, lines: list[str]) -> None: + """페이지에 디버그 오버레이 표시""" + page.evaluate( + """(lines) => { + let box = document.querySelector('#codex-debug-overlay'); + if (!box) { + window.codexControl = { paused: false, proceed: 0 }; + box = document.createElement('div'); + box.id = 'codex-debug-overlay'; + box.style.cssText = 'position:fixed;top:12px;right:12px;z-index:999999;background:rgba(0,0,0,0.82);color:#fff;padding:10px 12px;border-radius:8px;font-size:14px;line-height:1.5;max-width:360px;white-space:pre-wrap;box-shadow:0 4px 16px rgba(0,0,0,0.35)'; + + const controls = document.createElement('div'); + controls.style.cssText = 'margin-bottom:8px;display:flex;gap:8px'; + + const pauseBtn = document.createElement('button'); + pauseBtn.id = 'codex-pause-btn'; + pauseBtn.textContent = '일시정지'; + pauseBtn.onclick = () => { + window.codexControl.paused = !window.codexControl.paused; + pauseBtn.textContent = window.codexControl.paused ? '재개' : '일시정지'; + }; + + const nextBtn = document.createElement('button'); + nextBtn.id = 'codex-next-btn'; + nextBtn.textContent = '다음'; + nextBtn.onclick = () => { window.codexControl.proceed += 1; }; + + controls.appendChild(pauseBtn); + controls.appendChild(nextBtn); + + const body = document.createElement('div'); + body.id = 'codex-debug-body'; + + box.appendChild(controls); + box.appendChild(body); + document.body.appendChild(box); + } + const body = document.querySelector('#codex-debug-body'); + if (body) { body.textContent = lines.join('\\n'); } + }""", + lines, + ) + + +def wait_for_operator_control(page: Page) -> None: + """일시정지/다음 버튼 대기""" + state = page.evaluate("() => window.codexControl || { paused: false, proceed: 0 }") + last_proceed = state.get("proceed", 0) + while True: + state = page.evaluate("() => window.codexControl || { paused: false, proceed: 0 }") + if not state.get("paused"): + return + if state.get("proceed", 0) > last_proceed: + page.evaluate( + "(prev) => { if (window.codexControl && window.codexControl.proceed > prev) { window.codexControl.proceed = prev; } }", + last_proceed, + ) + return + sleep(0.1) + + +# ────────────────────────────────────────────── +# 카운트 관리 +# ────────────────────────────────────────────── + +def advance_count(balls: int, strikes: int, pitch_result: str) -> tuple[int, int]: + """투구 결과에 따른 카운트 갱신""" + if pitch_result in ("B",): + return balls + 1, strikes + if pitch_result in ("T", "S", "BS"): + return balls, strikes + 1 + if pitch_result in ("F", "BF"): + if strikes < 2: + return balls, strikes + 1 + return balls, strikes + + +def get_checked_batter_defense_type(page: Page) -> str: + """현재 선택된 타격 결과의 수비 유형 반환""" + return page.evaluate( + """() => { + const checked = document.querySelector("input[type=radio][name='evt_batter']:checked"); + if (!checked) return ''; + return checked.getAttribute('defenseType') || ''; + }""" + ) + + +def get_last_history_text(page: Page) -> str: + """사이트 내역(historyView)의 마지막 항목 텍스트 추출""" + try: + return ( + page.evaluate( + """() => { + const nodes = document.querySelectorAll("div[name='historyView']"); + const lastNode = nodes[nodes.length - 1]; + return lastNode ? lastNode.textContent.trim() : ''; + }""" + ) + or "" + ).strip() + except Exception: + return "" + + +def get_history_count(page: Page) -> int: + """기록 영역에 추가된 이벤트(historyView)의 총 개수 반환""" + try: + return int( + page.evaluate( + """() => document.querySelectorAll("div[name='historyView']").length""" + ) + ) + except Exception: + return 0 diff --git a/automation/pitch_input.py b/automation/pitch_input.py new file mode 100644 index 0000000..8bf5157 --- /dev/null +++ b/automation/pitch_input.py @@ -0,0 +1,96 @@ +""" +automation/pitch_input.py — 투구 입력 + +개별 투구의 구종, 구속, 투구결과를 사이트에 입력합니다. +""" +from __future__ import annotations + +from typing import Any + +from playwright.sync_api import Page + +from core.config_loader import pitch_type_map, pitch_result_map +from automation.page_helpers import set_radio_by_label + + +def get_pitch_runner_events( + pitch: dict[str, Any], event: dict[str, Any] | None = None, +) -> list[dict[str, Any]]: + """투구에 연결된 주루 이벤트 반환""" + pitch_runner_events = list(pitch.get("runnerEvents") or []) + if pitch_runner_events: + return pitch_runner_events + if event and event.get("runnerEvents"): + return list(event.get("runnerEvents") or []) + return [] + + +def set_pitch(page: Page, pitch: dict[str, Any], event: dict[str, Any] | None = None) -> None: + """투구 하나를 사이트에 입력 (구종 + 결과 + 구속)""" + pt_map = pitch_type_map() + pr_map = pitch_result_map() + + pitch_type = pt_map.get(pitch.get("pitchType") or "") + pitch_result_text = (pitch.get("pitchResultText") or "").strip() + normalized_text = pitch_result_text.replace(" ", "") + + # 피치클락 투수위반 → 볼 + if "피치클락" in pitch_result_text and "투수위반" in pitch_result_text: + pitch_result_text = "볼" + + # 폭투/포일 체크 + runner_events = get_pitch_runner_events(pitch, event) + is_wild_pitch = any( + re_.get("type") == "wild_pitch_advance" or "폭투" in (re_.get("text") or "") + for re_ in runner_events + ) + is_passed_ball = any( + re_.get("type") == "passed_ball_advance" or "포일" in (re_.get("text") or "") + for re_ in runner_events + ) + + if is_wild_pitch: + pitch_result = "폭투-볼" + elif is_passed_ball: + pitch_result = "포일-볼" + else: + if "번트" in normalized_text and "헛스윙" in normalized_text: + pitch_result = "번트시도-스트라이크" + elif "번트" in normalized_text and "파울" in normalized_text: + pitch_result = "번트-파울" + else: + pitch_result = pr_map.get(pitch_result_text) + if not pitch_result and pitch.get("pitchResult") in {"BS", "V"}: + pitch_result = "번트시도-스트라이크" + if not pitch_result and pitch.get("pitchResult") == "BF": + pitch_result = "번트-파울" + if not pitch_result and "고의사구" in pitch_result_text: + pitch_result = "고의사구" + if not pitch_result and "파울플라이" in pitch_result_text and "실책" in pitch_result_text: + pitch_result = "파울플라이-실책" + + # 구종 입력 + if pitch_type: + set_radio_by_label(page, "evt_ballType", pitch_type) + + # 투구 결과 입력 + if pitch_result: + set_radio_by_label(page, "evt_batter", pitch_result) + + # 구속 입력 + speed_input = page.locator("#ballspeed") + speed_input.fill(str(pitch.get("speedKmh") or 0)) + speed_input.evaluate("node => node.dispatchEvent(new Event('change', {bubbles:true}))") + page.wait_for_timeout(50) + + +def set_pitch_meta_only(page: Page, pitch: dict[str, Any]) -> None: + """구종/구속만 세팅 (인플레이 마지막 구에서 사용) + + evt_batter를 건드리지 않아 팝업이 미리 열리는 것을 방지. + """ + pt_map = pitch_type_map() + pitch_type = pt_map.get(pitch.get("pitchType") or "") + if pitch_type: + set_radio_by_label(page, "evt_ballType", pitch_type) + page.locator("#ballspeed").fill(str(pitch.get("speedKmh") or 0)) diff --git a/automation/review_input.py b/automation/review_input.py new file mode 100644 index 0000000..11ce68b --- /dev/null +++ b/automation/review_input.py @@ -0,0 +1,233 @@ +""" +automation/review_input.py — 비디오 판독/합의 판정 입력 + +비디오 판독 이벤트를 관리자 사이트 팝업에 입력합니다. +""" +from __future__ import annotations + +import re +from typing import Any + +from playwright.sync_api import Page + +from core.review_parser import parse_review_event_text +from automation.page_helpers import ( + set_select_by_partial_text, + set_select_by_text_or_value, +) + + +def _normalize_review_event(review_event: dict[str, Any]) -> dict[str, Any]: + """텍스트 기반 이벤트 파싱 및 정규화""" + has_results = review_event.get("beforeResult") is not None and review_event.get("finalResult") is not None + if review_event.get("requestInningLabel") and review_event.get("reviewItem") and has_results: + return review_event + + text = review_event.get("text") or "" + parsed = parse_review_event_text(text) + parsed.update({k: v for k, v in review_event.items() if k not in parsed}) + return parsed + + +def _open_challenge_popup(page: Page) -> Page: + """비디오 판독 팝업 열기""" + with page.expect_popup(timeout=5000) as popup_info: + page.locator("#challengeBtn").click() + popup = popup_info.value + popup.wait_for_load_state("domcontentloaded") + popup.wait_for_selector("#requestInning_0", timeout=5000) + return popup + + +def _select_review_final_result( + popup: Page, row_index: int, review_item: str, final_result: str | None, +) -> None: + """판독 결과 선택""" + from core.config_loader import review_result_groups + groups = review_result_groups() + + # 설정에 매핑된 그룹/기본값 찾기 + group_info = groups.get(review_item) + if group_info: + group_key = group_info["type"] + default_a = group_info["options"][0] + else: + group_key = "type3" + default_a = "인정" + + result_value = final_result or default_a + + # 셀렉터 찾기 시도 + select_selector = f"#finalResult_{group_key}_{row_index}" + if not popup.locator(select_selector).count(): + select_selector = f"#finalResult_{group_key[-1]}_{row_index}" + if not popup.locator(select_selector).count(): + select_selector = f"#finalResult_type{group_key[-1]}_{row_index}" + + set_select_by_text_or_value(popup, select_selector, result_value) + + # JS 강제 이벤트 발생 + try: + popup.locator(f"#finalResult_{row_index}").evaluate( + """(node, value) => { + node.value = value; + node.dispatchEvent(new Event('change', { bubbles: true })); + }""", + result_value, + ) + except Exception: + pass + + +def _fill_review_row(popup: Page, row_index: int, review_event: dict[str, Any]) -> None: + """팝업의 한 행에 판독 이벤트 입력""" + request_inning = review_event.get("requestInningLabel") or "1초" + request_team = review_event.get("requestTeam") or popup.locator(f"#requestTeamId_{row_index} option").first.text_content() or "" + review_item = review_event.get("reviewItem") or "기타" + final_result = review_event.get("finalResult") + is_success_val = "Y" if (review_event.get("isSuccess") == "성공") else "N" + + popup.wait_for_selector(f"#requestInning_{row_index}", timeout=3000) + set_select_by_text_or_value(popup, f"#requestInning_{row_index}", request_inning) + + try: + set_select_by_partial_text(popup, f"#requestTeamId_{row_index}", request_team) + except Exception: + pass + + if popup.is_closed(): return + try: + set_select_by_partial_text(popup, f"#forWhat_{row_index}", review_item) + except Exception: + set_select_by_text_or_value(popup, f"#forWhat_{row_index}", "기타") + + popup.wait_for_timeout(100) + + if popup.is_closed(): return + _select_review_final_result(popup, row_index, review_item, final_result) + + if popup.is_closed(): return + set_select_by_text_or_value(popup, f"#isSuccess_{row_index}", is_success_val) + + +def _append_review_row(popup: Page) -> int: + """신규 판독 행 추가""" + before_count = popup.locator("select[id^='requestInning_']").count() + popup.get_by_role("button", name="신규추가").click() + popup.wait_for_function( + """(expectedCount) => { + return document.querySelectorAll("select[id^='requestInning_']").length > expectedCount; + }""", + arg=before_count, + timeout=3000, + ) + row_index = popup.evaluate( + """() => { + const ids = [...document.querySelectorAll("select[id^='requestInning_']")] + .map((el) => el.id) + .map((id) => Number(id.split("_").pop())) + .filter((num) => Number.isFinite(num)); + return ids.length ? Math.max(...ids) : 0; + }""" + ) + popup.wait_for_selector(f"#requestInning_{row_index}", timeout=5000) + return int(row_index) + + +def _can_reuse_initial_review_row(popup: Page) -> bool: + """초기화된 0번 행 재사용 가능 여부""" + try: + row_count = popup.locator("select[id^='requestInning_']").count() + if row_count != 1: + return False + + hidden_id = (popup.locator("#id_0").input_value() or "").strip() + if hidden_id: + return False + + request_inning = popup.locator("#requestInning_0").input_value() + request_team = popup.locator("#requestTeamId_0").input_value() + review_item = popup.locator("#forWhat_0").input_value() + final_result = (popup.locator("#finalResult_0").input_value() or "").strip() + is_success = popup.locator("#isSuccess_0").input_value() + + return ( + request_inning == "1" + and review_item == "홈런타구 페어 파울" + and final_result == "페어" + and is_success == "Y" + and bool(request_team) + ) + except Exception: + return False + + +def _save_review_popup(popup: Page) -> None: + """팝업 저장 및 닫기""" + if popup.is_closed(): + return + + popup.evaluate("""() => { + window.confirm = () => true; + window.alert = () => {}; + }""") + + try: + with popup.expect_response( + re.compile(r"/manager/game/status/challenge/ajax"), + timeout=3000, + ) as _: + save_btn = popup.locator("#saveLog") + if save_btn.count() > 0: + save_btn.click(force=True) + else: + popup.evaluate("""() => { + const btn = document.querySelector('#btnAdd') + || document.querySelector('#btnSave') + || [...document.querySelectorAll('button, a')].find( + el => el.innerText.includes('입력완료') || el.innerText.includes('저장') + ); + if (btn) btn.click(); + }""") + except Exception: + try: + popup.evaluate("""() => { + const btn = document.querySelector('#saveLog') + || document.querySelector('#btnAdd'); + if (btn) btn.click(); + }""") + popup.wait_for_timeout(1000) + except Exception: + pass + + try: + if not popup.is_closed(): + popup.close() + except Exception: + pass + + +def record_review_events(page: Page, review_events: list[dict[str, Any]]) -> None: + """비디오 판독 이벤트 전체 처리 파이프라인""" + normalized_events = [_normalize_review_event(event) for event in (review_events or [])] + if not normalized_events: + return + + popup = _open_challenge_popup(page) + reuse_initial_row = _can_reuse_initial_review_row(popup) + + for index, review_event in enumerate(normalized_events): + if index == 0 and reuse_initial_row: + row_index = 0 + else: + row_index = _append_review_row(popup) + + _fill_review_row(popup, row_index, review_event) + + _save_review_popup(popup) + page.wait_for_timeout(300) + + try: + page.bring_to_front() + except Exception: + pass diff --git a/automation/runner_input.py b/automation/runner_input.py new file mode 100644 index 0000000..f0bd0e2 --- /dev/null +++ b/automation/runner_input.py @@ -0,0 +1,271 @@ +""" +automation/runner_input.py — 주루 입력 + +주루 이벤트(진루, 도루, 견제, 실책 진루 등)를 관리자 사이트에 입력합니다. +""" +from __future__ import annotations + +import re +from time import time, sleep +from typing import Any + +from playwright.sync_api import Page + +from core.field_calculator import is_double_play_result, extract_error_position +from core.runner_classifier import infer_runner_action_label +from automation.page_helpers import ( + get_last_visible_enabled_locator, + set_radio_by_label, + get_checked_event_name, +) +from automation.defense_popup import ( + fill_error_defense_popup, + fill_runner_out_defense, +) + + +def _split_complex_runner_event( + runner_event: dict[str, Any], +) -> tuple[dict[str, Any], dict[str, Any] | None]: + """복합 주루 이벤트(예: 1루주자 2루까지 진루 / 홈까지 들어오다 아웃) 분할""" + text = runner_event.get("text") or "" + + if "/" not in text or ("실책" not in text and "아웃" not in text): + return runner_event, None + + parts = [p.strip() for p in text.split("/") if p.strip()] + if len(parts) < 2: + return runner_event, None + + def extract_base(t: str) -> int | None: + m = re.search(r"([123])루", t) + return int(m.group(1)) if m else None + + # 1차 이벤트 + primary = dict(runner_event) + primary["text"] = parts[0] + intermediate_to = extract_base(parts[0]) + if intermediate_to: + primary["toBase"] = intermediate_to + + # 2차 이벤트 + secondary = dict(runner_event) + secondary["fromBase"] = primary.get("toBase") + secondary["text"] = parts[1] + + if "실책" in parts[1]: + secondary["type"] = "error_advance" + elif "태그" in parts[1]: + secondary["type"] = "tag_out" + elif "포스" in parts[1]: + secondary["type"] = "force_out" + else: + secondary["type"] = "out" + + return primary, secondary + + +def _open_runner_area(page: Page, from_base: int, area_type: int) -> None: + """주루 영역(1: 진루, 2: 액션) 열기""" + function_name = f"changRunnerArea{from_base}" + page.evaluate( + """({ functionName, areaType }) => { + const fn = window[functionName]; + if (typeof fn === 'function') { + fn(areaType); + } + }""", + {"functionName": function_name, "areaType": area_type}, + ) + + deadline = time() + 2 + radio_name = f"evt_runner_{from_base}" + advance_name = f"dat_evt_runner_{from_base}_advance" + + while time() < deadline: + ready = page.evaluate( + """({ radioName, advanceName }) => { + const hasEnabledVisibleRadio = [...document.querySelectorAll(`input[type=radio][name='${radioName}']`)].some((node) => { + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + return !!(rect.width && rect.height && style.display !== 'none' && style.visibility !== 'hidden' && !node.disabled); + }); + const hasEnabledVisibleAdvance = [...document.querySelectorAll(`input[type=radio][name='${advanceName}']`)].some((node) => { + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + return !!(rect.width && rect.height && style.display !== 'none' && style.visibility !== 'hidden' && !node.disabled); + }); + return hasEnabledVisibleRadio || hasEnabledVisibleAdvance; + }""", + {"radioName": radio_name, "advanceName": advance_name}, + ) + if ready: + return + sleep(0.1) + + +def _set_runner_action(page: Page, from_base: int, label: str) -> None: + """주자 액션(일반진루, 도루성공 등) 라디오 버튼 세팅""" + radio_name = f"evt_runner_{from_base}" + locator = page.evaluate( + r"""({ radioName, eventName }) => { + const nodes = [...document.querySelectorAll(`input[type=radio][name='${radioName}']`)]; + // 1단계: eventName 속성으로 매칭 + for (const node of nodes) { + const rect = node.getBoundingClientRect(); + const style = window.getComputedStyle(node); + if (!rect.width || !rect.height || style.display === 'none' || style.visibility === 'hidden' || node.disabled) { + continue; + } + if ((node.getAttribute('eventName') || '') === eventName) { + const marker = `codex-runner-${Math.random().toString(36).slice(2)}`; + node.setAttribute('data-codex-marker', marker); + return marker; + } + } + // 2단계: 텍스트로 부분 매칭 + for (const node of nodes) { + let text = ''; + let p = node.parentElement; + if (p) text = p.textContent.trim(); + if (!text && node.nextSibling) text = node.nextSibling.textContent || ''; + + if (eventName && text.replace(/\s/g, '').includes(eventName.replace(/\s/g, ''))) { + const marker = `codex-runner-${Math.random().toString(36).slice(2)}`; + node.setAttribute('data-codex-marker', marker); + return marker; + } + } + return null; + }""", + {"radioName": radio_name, "eventName": label}, + ) + + if locator: + candidate = page.locator(f"[data-codex-marker='{locator}']") + for _ in range(5): + try: + candidate.click(force=True, timeout=500) + except Exception: + pass + + try: + candidate.evaluate( + """(node) => { + node.disabled = false; + node.checked = true; + node.dispatchEvent(new Event('click', { bubbles: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + }""" + ) + except Exception: + pass + + page.wait_for_timeout(100) + if get_checked_event_name(page, radio_name) == label: + return + else: + for _ in range(5): + set_radio_by_label(page, radio_name, label) + page.wait_for_timeout(50) + if get_checked_event_name(page, radio_name) == label: + return + + +def _set_runner_advance(page: Page, from_base: int, to_base: int | None) -> None: + """주자 최종 목적지 루 세팅""" + if to_base is None: + return + selector = f"input[name='dat_evt_runner_{from_base}_advance'][value='{to_base}']" + deadline = time() + 3 + locator = None + + while time() < deadline: + locator = get_last_visible_enabled_locator(page, selector) + if locator is not None: + break + sleep(0.1) + + if locator is None: + fallback = page.locator(selector) + if fallback.count(): + locator = fallback.last + else: + return # timeout + + try: + locator.click(force=True) + except Exception: + locator.evaluate( + """(node) => { + node.disabled = false; + node.checked = true; + node.dispatchEvent(new Event('click', { bubbles: true })); + node.dispatchEvent(new Event('change', { bubbles: true })); + }""" + ) + + +def set_runner_events( + page: Page, event: dict[str, Any], runner_events: list[dict[str, Any]] | None = None, +) -> list[dict[str, Any]]: + """모든 주루 이벤트를 처리하고 지연 처리할 이벤트(late_events) 반환""" + if runner_events is None: + runner_events = (event.get("runnerEvents") or []).copy() + + late_events = [] + filtered_events = [] + for re_item in runner_events: + primary, secondary = _split_complex_runner_event(re_item) + filtered_events.append(primary) + if secondary: + late_events.append(secondary) + + for runner_event in filtered_events: + from_base = runner_event.get("fromBase") + if from_base not in {1, 2, 3}: + continue + + label = infer_runner_action_label(event, runner_event) + if not label: + continue + + if any(k in label for k in ["도루", "견제", "폭투", "포일", "아웃"]): + area_type = 2 + else: + area_type = 1 + + if any(k in label for k in ["일반 진루", "볼넷 진루", "수비 실책"]): + area_type = 1 + + _open_runner_area(page, from_base, area_type) + _set_runner_action(page, from_base, label) + + runner_text = runner_event.get("text") or "" + is_error_related_label = ( + (label and "실책" in label) + or label in {"견제 에러", "수비 실책", "도루성공&실책"} + or "실책" in runner_text + ) + if is_error_related_label: + if extract_error_position(runner_text): + fill_error_defense_popup(page, runner_text) + + if label in {"태그아웃", "도루시도 아웃", "포스아웃"}: + fill_runner_out_defense(page, runner_text) + + page.wait_for_timeout(150) + _set_runner_advance(page, from_base, runner_event.get("toBase")) + + try: + extra_advance = runner_event.get("extra_advance") + if extra_advance and extra_advance > 0: + locator = get_last_visible_enabled_locator(page, f"select[name='runner{from_base}_running_add']") + if locator is not None: + locator.select_option(value=str(extra_advance)) + except Exception: + pass + + page.wait_for_timeout(150) + + return late_events diff --git a/cli.py b/cli.py new file mode 100644 index 0000000..41443a7 --- /dev/null +++ b/cli.py @@ -0,0 +1,149 @@ +""" +cli.py — 시스템 전체 CLI 통합 진입점 + +크롤러, 라인업 관리, 게임 기록 입력 등 모든 기능을 +서브 커맨드(subcommand) 형태로 실행할 수 있습니다. +""" +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from playwright.sync_api import sync_playwright + +from commands.base import add_common_arguments, load_report +from commands.record import run as run_record + + +def _parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Baseball Automation CLI") + subparsers = parser.add_subparsers(dest="command", required=True) + + # 1. record 커맨드 (기존 record_game_playwright.py) + parser_record = subparsers.add_parser("record", help="크롤링된 리포트를 바탕으로 게임 기록을 자동 입력합니다.") + add_common_arguments(parser_record) + parser_record.add_argument("--review-only", action="store_true", help="경기기록 대신 합의판정만 일괄 등록") + + # 2. crawl 커맨드 (네이버 API 크롤링) + parser_crawl = subparsers.add_parser("crawl", help="네이버 야구 API에서 데이터를 크롤링하여 JSON 리포트로 저장합니다.") + parser_crawl.add_argument("--game-id", required=True, help="크롤링할 네이버 게임 ID (예: 20260501NCLG02026)") + parser_crawl.add_argument("--output-dir", default="output", help="리포트를 저장할 디렉토리 (기본값: output)") + parser_crawl.add_argument("--start-inning", help="시작 이닝 필터 (예: '2', '3초')") + parser_crawl.add_argument("--end-inning", help="종료 이닝 필터 (예: '5', '7말')") + parser_crawl.add_argument("--lineup-only", action="store_true", help="라인업 정보만 저장") + + return parser.parse_args() + + +def interactive_mode() -> int: + print("=== Baseball Automation CLI ===") + print("1. 네이버 데이터 크롤링 (crawl)") + print("2. 관리자 사이트 기록 자동 입력 (record)") + print("3. 크롤링 + 기록 입력 한 번에 실행 (crawl & record)") + + choice = input("\n실행할 작업을 선택하세요 (1/2/3) [3]: ").strip() or "3" + if choice not in {"1", "2", "3"}: + print("잘못된 선택입니다.") + return 1 + + game_id = input("경기 ID를 입력하세요 (예: 20260501NCLG02026): ").strip() + if not game_id: + print("경기 ID가 필요합니다.") + return 1 + game_id = "".join(game_id.split()) + + base_url = "" + user_data_dir = "" + if choice in {"2", "3"}: + base_url = input("기록 사이트 기본 URL을 입력하세요 (엔터 시 site.txt 자동 참조): ").strip() + if not base_url: + site_txt = Path("site.txt") + if site_txt.exists(): + lines = site_txt.read_text(encoding="utf-8").splitlines() + if lines and lines[0].startswith("http"): + from urllib.parse import urlparse + parsed = urlparse(lines[0]) + base_url = f"{parsed.scheme}://{parsed.netloc}" + print(f"👉 [자동 설정] 기록 사이트 URL: {base_url}") + + if not base_url: + base_url = input("URL을 찾을 수 없습니다. 직접 입력하세요: ").strip() + if not base_url: + print("URL이 필요합니다.") + return 1 + + user_data_dir = input("크롬 프로필 경로를 입력하세요 (엔터 시 임시 세션): ").strip() + manager_game_no = input("관리자 사이트 게임번호를 입력하세요 (예: 11211, 모르면 엔터): ").strip() + + args = argparse.Namespace( + game_id=game_id, + base_url=base_url, + report_path=None, + manager_game_no=manager_game_no or None, + user_data_dir=user_data_dir or None, + channel="chrome", + headless=False, + close=False, + write_events=True, + job_id=None, + lineup_only=False, + review_only=False, + start_inning=None, + end_inning=None, + output_dir="output", + ) + + if choice in {"1", "3"}: + from crawler.report_builder import build_report, filter_report, save_report + print(f"\n[{args.game_id}] 데이터 크롤링 시작...") + report = build_report(args.game_id) + filtered = filter_report(report) + out_path = save_report(filtered, Path(args.output_dir)) + print(f"✅ 크롤링 및 리포트 저장 완료: {out_path}") + + if choice in {"2", "3"}: + report_path = Path(args.output_dir) / f"{args.game_id}_report.json" + report = load_report(report_path) + print(f"\n[{args.game_id}] 관리자 사이트 자동 입력 시작...") + with sync_playwright() as playwright: + run_record(playwright, args, report) + + return 0 + + +def main() -> int: + if len(sys.argv) == 1: + return interactive_mode() + + args = _parse_args() + + if args.game_id: + args.game_id = "".join(args.game_id.split()) + + if args.command == "record": + report_path = Path(args.report_path) if args.report_path else Path("output") / f"{args.game_id}_report.json" + report = load_report(report_path) + with sync_playwright() as playwright: + run_record(playwright, args, report) + return 0 + + if args.command == "crawl": + from crawler.report_builder import build_report, filter_report, save_report + print(f"[{args.game_id}] 데이터 크롤링 시작...") + report = build_report(args.game_id, start_inning=args.start_inning, end_inning=args.end_inning) + filtered = filter_report( + report, + lineup_only=getattr(args, "lineup_only", False), + start_inning=args.start_inning, + end_inning=args.end_inning + ) + out_path = save_report(filtered, Path(args.output_dir)) + print(f"✅ 크롤링 및 리포트 저장 완료: {out_path}") + return 0 + + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/commands/base.py b/commands/base.py new file mode 100644 index 0000000..9b5d6c3 --- /dev/null +++ b/commands/base.py @@ -0,0 +1,52 @@ +""" +commands/base.py — 공통 CLI 명령어 유틸리티 + +브라우저 컨텍스트 초기화, 리포트 파일 로드 등 여러 명령어에서 공통으로 +사용하는 기능을 제공합니다. +""" +from __future__ import annotations + +import argparse +import json +from pathlib import Path +from typing import Any + +from playwright.sync_api import Playwright, BrowserContext + + +def launch_browser_context( + playwright: Playwright, user_data_dir: str | None, channel: str | None, headless: bool +) -> BrowserContext: + """공용 Playwright 브라우저 컨텍스트 생성""" + if user_data_dir: + return playwright.chromium.launch_persistent_context( + user_data_dir=user_data_dir, + channel=channel, + headless=headless, + args=["--disable-blink-features=AutomationControlled"], + viewport={"width": 1280, "height": 800}, + ) + browser = playwright.chromium.launch(channel=channel, headless=headless) + return browser.new_context(viewport={"width": 1280, "height": 800}) + + +def load_report(path: Path) -> dict[str, Any]: + """JSON 리포트 파일 로드""" + if not path.is_file(): + raise FileNotFoundError(f"리포트 파일을 찾을 수 없습니다: {path}") + with path.open(encoding="utf-8") as f: + return json.load(f) + + +def add_common_arguments(parser: argparse.ArgumentParser) -> None: + """명령행 인자에 브라우저/설정 관련 공통 옵션 추가""" + parser.add_argument("--base-url", required=True, help="기록 시스템 기본 URL") + parser.add_argument("--game-id", required=True, help="크롤링할 네이버 게임 ID (예: 20260501NCLG02026)") + parser.add_argument("--report-path", help="로컬 리포트 JSON 경로 (기본값: output/{game_id}_report.json)") + parser.add_argument("--manager-game-no", help="관리자 사이트의 게임번호 (생략 시 목록에서 검색)") + parser.add_argument("--user-data-dir", help="Chrome 사용자 프로필 경로 (로그인 유지용)") + parser.add_argument("--channel", default="chrome", help="브라우저 채널 (기본값: chrome)") + parser.add_argument("--headless", action="store_true", help="브라우저 숨김 모드 실행") + parser.add_argument("--close", action="store_true", help="작업 완료 후 브라우저 닫기") + parser.add_argument("--no-write", dest="write_events", action="store_false", help="실제 입력은 하지 않고 시뮬레이션만 수행") + parser.add_argument("--job-id", help="DB 로깅용 작업 ID (UUID)") diff --git a/commands/record.py b/commands/record.py new file mode 100644 index 0000000..fa2f035 --- /dev/null +++ b/commands/record.py @@ -0,0 +1,556 @@ +""" +commands/record.py — 게임 전체 기록 (Main Command) + +JSON 리포트를 읽고 관리자 사이트의 폼을 제어하여 +경기 전체를 순차적으로 입력합니다. +""" +from __future__ import annotations + +import argparse +import os +import re +from time import time, sleep +from typing import Any + +from playwright.sync_api import Playwright, Page + +from core.normalizer import ( + normalize_game_type, + normalize_stadium_name, + normalize_team_name, +) +from core.pitch_classifier import infer_batter_result_label, get_last_pitch_result_text +from core.field_calculator import extract_defense_sequence, extract_error_position, is_throwing_error, is_error_result +from automation.page_helpers import ( + get_last_visible_locator, + get_checked_event_name, + set_radio_by_label, + show_debug_overlay, + wait_for_operator_control, + get_checked_batter_defense_type, + get_history_count, +) +from automation.defense_popup import fill_error_defense_popup, click_defense_button_robustly +from automation.pitch_input import set_pitch, set_pitch_meta_only, get_pitch_runner_events +from automation.batter_input import set_batter_result_type, set_batter_advancement, set_hit_ball_and_defense +from automation.runner_input import set_runner_events +from automation.lineup_input import apply_change_event +from automation.review_input import record_review_events +from commands.base import launch_browser_context, load_report, add_common_arguments + +_DEFENSE_CLEAR_JS = """ +() => { + document.querySelectorAll("input[name='defenseNumberBtn']").forEach(el => { el.checked = false; }); + document.querySelectorAll("input[name='hitBallType']").forEach(el => { el.checked = false; }); + + const datIds = [ + "putout", "assist", "error", "upstruction", + "dat_putout_hitter", "dat_assist_hitter", "dat_error_hitter", "dat_upstruction_hitter", + "dat_putout_runner1", "dat_assist_runner1", "dat_error_runner1", "dat_upstruction_runner1", + "dat_putout_runner2", "dat_assist_runner2", "dat_error_runner2", "dat_upstruction_runner2", + "dat_putout_runner3", "dat_assist_runner3", "dat_error_runner3", "dat_upstruction_runner3", + "dat_error_type", "dat_error_type1", "dat_error_type2", "dat_error_type3", + "dat_multiplay_type", "multiplay_type", + "hitBallXY", "hitBallDistance", + "dat_hitball_speed", "dat_hitball_type", "dat_hitball_x", "dat_hitball_y", "dat_hitball_xy", "dat_hitball_distance", + "hitball_speed", "hitball_type", "hitball_xy", "hitball_distance" + ]; + datIds.forEach(id => { + const el = document.getElementById(id); + if (el) el.value = ""; + }); + + document.querySelectorAll("input[name='hitBallType'], [id^='hitBallSpeed'], [id^='hitBallType']").forEach(el => { + if (el.type === 'radio' || el.type === 'checkbox') { + el.checked = false; + } else { + el.value = ""; + } + }); +} +""" + + +def clear_defense_selections(page: Page) -> None: + page.evaluate(_DEFENSE_CLEAR_JS) + + +def is_simple_terminal_result_type(result_type: str) -> bool: + return result_type in {"strikeout", "strikeout_not_out", "walk", "intentional_walk", "hit_by_pitch"} + + +def advance_count(balls: int, strikes: int, pitch_result: str) -> tuple[int, int]: + if pitch_result == "B": + return min(balls + 1, 3), strikes + if pitch_result in {"T", "S"}: + return balls, min(strikes + 1, 2) + if pitch_result == "F": + return balls, strikes if strikes >= 2 else strikes + 1 + return balls, strikes + + +def find_status_href(page: Page, report: dict[str, Any], manager_game_no: str | None) -> str: + game_info = report["game_info"] + target_date = game_info["date"] + target_stadium = normalize_stadium_name(game_info["stadium"]) + target_home_team = normalize_team_name(game_info["home_team"]) + target_away_team = normalize_team_name(game_info["away_team"]) + target_game_type = normalize_game_type(game_info["game_type"]) + + rows: list[dict[str, Any]] = page.locator("table.gclist tr").evaluate_all( + """(rows) => rows.slice(1).map((row) => { + const cells = [...row.cells].map((cell) => cell.innerText.trim()); + const statusLink = [...row.querySelectorAll('a')].find((anchor) => anchor.textContent.trim() === '게임기록'); + return { + gameNo: cells[0] || '', + date: cells[1] || '', + gameType: cells[2] || '', + stadium: cells[3] || '', + homeTeam: cells[4] || '', + awayTeam: cells[5] || '', + href: statusLink ? statusLink.getAttribute('href') : '', + }; + })""" + ) + + if manager_game_no: + matched = next((row for row in rows if row["gameNo"] == str(manager_game_no)), None) + if not matched or not matched["href"] or matched["href"].startswith("javascript:"): + raise ValueError(f"관리자 게임번호 {manager_game_no} 행의 게임기록 링크를 찾지 못했습니다.") + return matched["href"] + + candidates = [ + row for row in rows if row["href"] and not row["href"].startswith("javascript:") + and row["date"] == target_date + and (not row["gameType"] or normalize_game_type(row["gameType"]) == target_game_type) + and normalize_stadium_name(row["stadium"]) == target_stadium + and normalize_team_name(row["homeTeam"]) == target_home_team + and normalize_team_name(row["awayTeam"]) == target_away_team + ] + if not candidates: + print("\n=== 게임 매칭 실패 디버그 정보 ===") + print(f"Target: Date='{target_date}', Type='{target_game_type}', Stadium='{target_stadium}', Home='{target_home_team}', Away='{target_away_team}'") + print("Rows parsed from table:") + for r in rows: + print(f" - Date='{r['date']}', Type='{r['gameType']}'(norm: '{normalize_game_type(r['gameType'])}'), Stadium='{r['stadium']}'(norm: '{normalize_stadium_name(r['stadium'])}'), Home='{r['homeTeam']}'(norm: '{normalize_team_name(r['homeTeam'])}'), Away='{r['awayTeam']}'(norm: '{normalize_team_name(r['awayTeam'])}')") + raise ValueError("목록에서 일치하는 게임기록 링크를 찾지 못했습니다.") + return candidates[0]["href"] + + +def open_game_status_page(page: Page, base_url: str, report: dict[str, Any], manager_game_no: str | None) -> None: + if manager_game_no: + page.goto(f"{base_url}/manager/game/status?game_no={manager_game_no}", wait_until="domcontentloaded") + page.wait_for_selector("#eventWriteBtn", timeout=10000) + return + page.goto(f"{base_url}/manager/game/list", wait_until="domcontentloaded") + page.wait_for_selector("table.gclist", timeout=10000) + status_href = find_status_href(page, report, manager_game_no) + with page.expect_navigation(wait_until="domcontentloaded"): + page.locator(f"a[href='{status_href}']").first.click() + page.wait_for_selector("#eventWriteBtn", timeout=10000) + + +def _try_log_pitch(log_info: dict[str, Any] | None, is_success: bool, error_code: str, error_detail: str, duration: float) -> None: + if log_info and log_info.get("job_id"): + try: + from db_logging import log_pitch + log_pitch( + log_info["job_id"], log_info.get("inning", ""), log_info.get("batter", ""), + log_info.get("pitch_no", 0), log_info.get("target_value", ""), log_info.get("selected_value", ""), + is_success, error_code, error_detail, duration + ) + except Exception: + pass + + +def _try_log_event(log_info: dict[str, Any] | None, is_success: bool, error_msg: str = "") -> None: + if log_info and log_info.get("job_id"): + try: + from db_logging import log_event + log_event( + log_info["job_id"], log_info.get("inning", ""), log_info.get("event_type", ""), + log_info.get("target_player", ""), log_info.get("actual_player", ""), + is_success, error_msg + ) + except Exception: + pass + + +def submit_input_complete(page: Page, debug_label: str = "", clear_defense: bool = False, log_info: dict[str, Any] | None = None) -> None: + t0 = time() + try: + page.evaluate("""() => { + window.confirm = () => true; + window.alert = () => {}; + const defenseDiv = document.querySelector('#defenseDiv'); + if (defenseDiv && defenseDiv.style.display !== 'none') { + const btnAdd = document.querySelector('#btnAdd'); + if (btnAdd) btnAdd.click(); + } + }""") + + if clear_defense: + clear_defense_selections(page) + + prev_history = get_history_count(page) + for i in range(40): + curr_history = get_history_count(page) + if curr_history > prev_history: + page.wait_for_timeout(30) + _try_log_pitch(log_info, True, "", "", time() - t0) + return + + if i % 8 == 0: + submit_btn = get_last_visible_locator(page, "#eventWriteBtn") + if not submit_btn: + submit_btn = page.get_by_role("button", name="입력완료").last + + if submit_btn: + try: + submit_btn.click(force=True, timeout=500) + except Exception: + page.evaluate("document.querySelector('#eventWriteBtn')?.click() || [...document.querySelectorAll('a, button')].find(el => el.innerText.includes('입력완료'))?.click()") + + page.wait_for_timeout(50) + page.evaluate("() => { window.confirm = () => true; window.alert = () => {}; }") + + raise TimeoutError(f"입력완료가 반영되지 않았습니다: {debug_label}") + except Exception as e: + _try_log_pitch(log_info, False, type(e).__name__, str(e), time() - t0) + raise e + + +def handle_late_runner_events(page: Page, event: dict[str, Any], late_events: list[dict[str, Any]], write_events: bool, job_id: str | None = None) -> None: + if not late_events or not write_events: + return + + page.wait_for_timeout(800) + + from automation.page_helpers import get_last_history_text + current_history = get_last_history_text(page) + all_matched = True + for le in late_events: + le_text = le.get("text", "") + if le_text and le_text not in current_history: + all_matched = False + break + if all_matched: + return + + new_late = set_runner_events(page, event, late_events) + + submit_input_complete( + page, + f"지연 주루 처리: {', '.join(e.get('text', '') for e in late_events)}", + clear_defense=True, + log_info={"job_id": job_id} if job_id else None + ) + + if new_late: + handle_late_runner_events(page, event, new_late, write_events, job_id) + + +def build_runner_event_lines(event: dict[str, Any]) -> list[str]: + from core.runner_classifier import infer_runner_action_label + lines: list[str] = [] + for runner_event in (event.get("runnerEvents") or []): + r_text = runner_event.get("text", "") + from_b = runner_event.get("fromBase", "?") + to_b = runner_event.get("toBase", "?") + label = infer_runner_action_label(event, runner_event) + line = f"🏃 {from_b}루주자 -> {to_b}루 : {r_text}" + if label: + line += f" | 라벨: {label}" + lines.append(line) + return lines + + +def process_only_reviews(page: Page, report: dict[str, Any], write_events: bool, job_id: str = None) -> None: + all_reviews = [] + from automation.review_input import _normalize_review_event + for half_inning in report.get("game_contents", []): + for event in half_inning.get("events", []): + if event.get("event_type") == "at_bat": + reviews = event.get("reviewEvents") or [] + for r in reviews: + all_reviews.append(_normalize_review_event(r)) + + if not all_reviews: + show_debug_overlay(page, ["입력할 합의판정 기록이 없습니다."]) + page.wait_for_timeout(2000) + return + + show_debug_overlay(page, [f"합의판정 {len(all_reviews)}건 일괄 등록 시작"]) + if write_events: + record_review_events(page, all_reviews) + show_debug_overlay(page, ["합의판정 일괄 등록 완료"]) + page.wait_for_timeout(1000) + + +def process_report(page: Page, report: dict[str, Any], write_events: bool, job_id: str = None) -> None: + from core.pitch_classifier import normalize_pitch_result_code + + outs = 0 + change_cache: dict[str, tuple[str, int]] = {} + applied_change_texts: set[str] = set() + + for half_inning in report.get("game_contents", []): + inning = half_inning.get("inning", "") + outs = 0 + for event in half_inning.get("events", []): + if event.get("event_type") == "change": + change_text = (event.get("text") or "").strip() + show_debug_overlay(page, [f"교체 입력: {change_text or '-'}"]) + wait_for_operator_control(page) + + if write_events: + if change_text and change_text in applied_change_texts: + show_debug_overlay(page, ["교체 중복 건너뜀", change_text]) + page.wait_for_timeout(250) + continue + + log_info_event = { + "job_id": job_id, "inning": inning, "event_type": event.get("change_type", "change"), + "target_player": event.get("in_player") or event.get("to_position", ""), + "actual_player": event.get("actor_name") or event.get("player_name", "") + } if job_id else None + + try: + apply_change_event(page, half_inning, event, change_cache) + _try_log_event(log_info_event, True) + except Exception as e: + _try_log_event(log_info_event, False, str(e)) + raise e + + if change_text: + applied_change_texts.add(change_text) + show_debug_overlay(page, ["교체 완료", f"{change_text or '-'}"]) + page.wait_for_timeout(120) + continue + + if event.get("event_type") != "at_bat": + continue + + clear_defense_selections(page) + balls = 0 + strikes = 0 + pitches = event.get("pitches") or [] + result = event.get("result") or {} + + for pitch_index, pitch in enumerate(pitches): + pitch_result_text = (pitch.get("pitchResultText") or "").strip() + normalized_pitch_result = normalize_pitch_result_code(pitch, event) + is_balk_strike = "보크" in pitch_result_text and ("스트라이크" in pitch_result_text or "헛스윙" in pitch_result_text) + + if "피치클락" in pitch_result_text and "투수위반" in pitch_result_text: + pitch_result_text = "피치클락 투수위반 볼" + + show_debug_overlay( + page, + [ + f"다음 카운트: {balls}볼 {strikes}스트 {outs}아웃", + f"다음 공: {pitch.get('pitchNo')}구 {pitch_result_text}", + f"구종/구속: {(pitch.get('pitchType') or '-')} / {(pitch.get('speedKmh') or '-')}", + f"타석: {event.get('batter') or '-'}", + ], + ) + wait_for_operator_control(page) + + is_last_pitch = pitch_index == len(pitches) - 1 + is_action_result = is_last_pitch and result.get("type") in { + "hit_by_pitch", "strikeout", "strikeout_not_out", "walk", "intentional_walk", "out", "single", "double", "triple", + "home_run", "sacrifice_fly", "sacrifice_bunt", "double_play", "reach_on_error", "reach_on_fielder_choice", "bunt_hit", + "single_runner_out", "double_runner_out", "triple_runner_out" + } + is_in_play = (pitch.get("pitchResult") == "H") or is_action_result + + if is_last_pitch and is_in_play: + continue + + if is_balk_strike: + if write_events: + current_late = [] + p_runner_events = pitch.get("runnerEvents") + if p_runner_events: + current_late.extend(set_runner_events(page, event, p_runner_events)) + + if is_last_pitch and event.get("runnerEvents"): + current_late.extend(set_runner_events(page, event)) + + submit_input_complete( + page, f"{event.get('batter') or '-'} / {pitch.get('pitchNo')}구 보크", clear_defense=True, + log_info={"job_id": job_id, "inning": inning, "batter": event.get("batter", ""), "pitch_no": pitch.get("pitchNo", 0), "target_value": "보크", "selected_value": "보크"} if job_id else None + ) + if current_late: + handle_late_runner_events(page, event, current_late, True, job_id) + + page.wait_for_timeout(80) + + set_pitch_meta_only(page, pitch) + if "헛스윙" in pitch_result_text: + set_radio_by_label(page, "evt_batter", "헛스윙(스트라이크)") + else: + set_radio_by_label(page, "evt_batter", "스트라이크(루킹)") + + if write_events: + submit_input_complete( + page, f"{event.get('batter') or '-'} / {pitch.get('pitchNo')}구 보크 후 {'헛스윙' if '헛스윙' in pitch_result_text else '스트라이크'}", clear_defense=True, + log_info={"job_id": job_id, "inning": inning, "batter": event.get("batter", ""), "pitch_no": pitch.get("pitchNo", 0), "target_value": pitch_result_text, "selected_value": pitch_result_text} if job_id else None + ) + else: + set_pitch(page, pitch, event) + if write_events: + current_late = [] + p_runner_events = get_pitch_runner_events(pitch, event) + is_wild_pitch = any(re.get("type") == "wild_pitch_advance" or "폭투" in (re.get("text") or "") for re in p_runner_events) + is_passed_ball = any(re.get("type") == "passed_ball_advance" or "포일" in (re.get("text") or "") for re in p_runner_events) + + extra_log = " (폭투)" if is_wild_pitch else " (포일)" if is_passed_ball else "" + + if p_runner_events: + current_late.extend(set_runner_events(page, event, p_runner_events)) + + if is_last_pitch and event.get("runnerEvents"): + current_late.extend(set_runner_events(page, event)) + + if "파울플라이" in pitch_result_text and "실책" in pitch_result_text: + fill_error_defense_popup(page, pitch_result_text) + + submit_input_complete( + page, f"{event.get('batter') or '-'} / {pitch.get('pitchNo')}구 {pitch_result_text or '-'}{extra_log}", clear_defense=True, + log_info={"job_id": job_id, "inning": inning, "batter": event.get("batter", ""), "pitch_no": pitch.get("pitchNo", 0), "target_value": f"{pitch_result_text}{extra_log}", "selected_value": "폭투-볼" if is_wild_pitch else "포일-볼" if is_passed_ball else pitch_result_text} if job_id else None + ) + if current_late: + handle_late_runner_events(page, event, current_late, True, job_id) + + balls, strikes = advance_count(balls, strikes, normalized_pitch_result) + + if result: + last_pitch = pitches[-1] if pitches else {} + action_result_types = { + "hit_by_pitch", "strikeout", "strikeout_not_out", "walk", "intentional_walk", "out", "single", "double", "triple", + "home_run", "sacrifice_fly", "sacrifice_bunt", "double_play", "reach_on_error", "reach_on_fielder_choice", "reach_on_grounder", "bunt_hit", + "single_runner_out", "double_runner_out", "triple_runner_out", "play" + } + + if last_pitch.get("pitchResult") == "H" or result.get("type") in action_result_types: + runner_lines = build_runner_event_lines(event) + result_text = result.get('text') or '' + def_seq = [] + + if is_error_result(result_text): + err_pos = extract_error_position(result_text) + if err_pos: + click_count = 2 if is_throwing_error(result_text) else 1 + def_seq = [err_pos] * click_count + elif result.get("type") in {"out", "double_play", "sacrifice_fly", "sacrifice_bunt", "strikeout", "reach_on_fielder_choice", "reach_on_grounder", "single_runner_out", "double_runner_out", "triple_runner_out", "play"}: + def_seq = extract_defense_sequence(result_text) + if "직선타" in result_text or "라인드라이브" in result_text or "플라이" in result_text: + if def_seq: + def_seq = [def_seq[0]] + + defense_lines = [f"⚾ 누를 수비수: {', '.join(def_seq)}"] if def_seq else [] + + show_debug_overlay( + page, + [ + f"📌 타격 결과: {result_text or '-'}", + f"🎯 현재 카운트: {balls}B {strikes}S {outs}O", + *defense_lines, + *runner_lines, + ], + ) + wait_for_operator_control(page) + set_pitch_meta_only(page, last_pitch) + + if write_events: + page.wait_for_timeout(120) + simple_terminal_result = is_simple_terminal_result_type(result.get("type") or "") + expected_batter_event = infer_batter_result_label(result, event) or "" + + if expected_batter_event: + for _ in range(5): + set_batter_result_type(page, result, event) + page.wait_for_timeout(50) + if get_checked_event_name(page, "evt_batter") == expected_batter_event: + break + else: + set_batter_result_type(page, result, event) + page.wait_for_timeout(50) + + popup_defense_used = False + if not simple_terminal_result: + if result.get("type") in {"reach_on_error", "double_play"} or get_checked_batter_defense_type(page): + set_hit_ball_and_defense(page, event) + popup_defense_used = True + set_batter_advancement(page, result) + + current_late = [] + all_runner_events = (event.get("runnerEvents") or []).copy() + if last_pitch.get("runnerEvents"): + all_runner_events.extend(last_pitch["runnerEvents"]) + + if all_runner_events: + current_late.extend(set_runner_events(page, event, all_runner_events)) + page.wait_for_timeout(30) + + submit_input_complete( + page, f"{event.get('batter') or '-'} / {result_text or '-'}", clear_defense=not popup_defense_used, + log_info={"job_id": job_id, "inning": inning, "batter": event.get("batter", ""), "pitch_no": (last_pitch.get("pitchNo", 0) if isinstance(last_pitch, dict) else 0), "target_value": result_text, "selected_value": expected_batter_event} if job_id else None + ) + + if current_late: + handle_late_runner_events(page, event, current_late, True, job_id) + + result_type = result.get("type") + result_text = (result.get("text") or "").strip() + if result_type == "double_play": + outs += 2 + if outs >= 3: + break + elif "낫아웃" in result_text and not any(token in result_text for token in ("폭투", "포일", "진루", "출루", "세이프")): + outs += 1 + if outs >= 3: + break + elif result_type in {"out", "strikeout", "sacrifice_fly", "sacrifice_bunt", "single_runner_out", "double_runner_out", "triple_runner_out"}: + outs += 1 + if outs >= 3: + break + + +def run(playwright: Playwright, args: argparse.Namespace, report: dict[str, Any]) -> None: + browser = launch_browser_context(playwright, args.user_data_dir, args.channel, args.headless) + page = browser.pages[0] if browser.pages else browser.new_page() + + job_id = getattr(args, "job_id", None) or os.environ.get("JOB_ID") + + if args.write_events and not job_id: + try: + import db_logging + import uuid + job_id = f"standalone-{uuid.uuid4().hex[:8]}" + db_logging.start_job(job_id, args.game_id, getattr(args, "start_inning", ""), getattr(args, "end_inning", "")) + except Exception: + job_id = None + + try: + open_game_status_page(page, args.base_url, report, args.manager_game_no) + if getattr(args, "review_only", False): + process_only_reviews(page, report, args.write_events, job_id=job_id) + else: + process_report(page, report, args.write_events, job_id=job_id) + + if not args.close: + page.wait_for_timeout(3600 * 1000) + finally: + if args.write_events and job_id: + try: + import db_logging + db_logging.finish_job(job_id) + except Exception: + pass + if args.close: + try: + browser.close() + except Exception: + pass diff --git a/config/crawler_constants.yaml b/config/crawler_constants.yaml new file mode 100644 index 0000000..43ba7ea --- /dev/null +++ b/config/crawler_constants.yaml @@ -0,0 +1,29 @@ +# ───────────────────────────────────────────────── +# crawler_constants.yaml +# 네이버 API 크롤러 상수 +# ───────────────────────────────────────────────── + +# HTTP 요청 헤더 +headers: + User-Agent: "Mozilla/5.0" + Accept: "application/json, text/plain, */*" + Accept-Language: "ko-KR,ko;q=0.9" + Origin: "https://m.sports.naver.com" + x-sports-backend: "kotlin" + +# 무시할 textOption type 코드 +skip_option_types: [0, 8, 98, 99] + +# 무시할 이벤트 텍스트 +hidden_event_texts: + - "투수 투수판 이탈" + - "코칭스태프 마운드 방문" + - "포수 마운드 방문" + +# 교체 키워드 (텍스트에 이것이 포함되면 교체 이벤트로 판단) +change_keywords: + - "(으)로 교체" + - "수비위치 변경" + +# 최대 이닝 수 +max_inning: 20 diff --git a/config/field_coordinates.yaml b/config/field_coordinates.yaml new file mode 100644 index 0000000..46347cb --- /dev/null +++ b/config/field_coordinates.yaml @@ -0,0 +1,39 @@ +# ───────────────────────────────────────────────── +# field_coordinates.yaml +# 타구 좌표, 타구종류, 파울 좌표 +# ───────────────────────────────────────────────── + +# 타구 좌표 (zone → x, y 퍼센트) +field_coordinates: + 투수: [50, 80] + 포수: [50, 93] + 1루수: [63, 77] + 2루수: [60, 65] + 3루수: [37, 77] + 유격수: [40, 65] + 좌익수: [22, 42] + 중견수: [50, 24] + 우익수: [78, 42] + 좌전: [30, 50] + 중전: [50, 35] + 우전: [70, 50] + 좌중간: [34, 34] + 우중간: [66, 34] + 좌월: [20, 30] + 중월: [50, 14] + 우월: [80, 30] + +# 타구 종류 매핑 (라벨 → value) +hit_ball_type: + 땅볼: "0" + 일반바운드: "1" + 플라이: "2" + 라인드라이브: "3" + 펜스타구: "4" + 홈런성타구: "5" + 번트타구: "6" + +# 파울 플라이 기준 좌표 +foul_fly: + left: [2, 70] + right: [98, 70] diff --git a/config/mappings.yaml b/config/mappings.yaml new file mode 100644 index 0000000..9695a34 --- /dev/null +++ b/config/mappings.yaml @@ -0,0 +1,83 @@ +# ───────────────────────────────────────────────── +# mappings.yaml +# 관리자 사이트 허용값(key) → 매핑되는 네이버/입력 표기(aliases) +# +# 구조: site_label: [alias_1, alias_2, ...] +# 매핑 방향: alias → site_label (역매핑으로 조회) +# ───────────────────────────────────────────────── + +# 팀명 (관리자 사이트에서 사용하는 팀 표기) +team_name: + Hero: [키움, 키움 히어로즈, Hero] + # 나머지 팀은 네이버 표기와 사이트 표기가 동일하여 별도 매핑 불필요 + +# 팀 코드 → 한글 팀명 (네이버 API gameId 파싱용) +team_code: + 한화: [HH] + KIA: [HT] + KT: [KT] + LG: [LG] + 롯데: [LT] + NC: [NC] + 두산: [OB] + SSG: [SK] + 삼성: [SS] + 키움: [WO] + +# 구장명 (관리자 사이트 select 옵션 라벨) +stadium_name: + 고척돔: [고척, 고척스카이돔] + 잠실: [잠실, 잠실야구장] + 대구라팍: [대구 삼성 라이온즈 파크, 대구라이온즈파크, 대구 라팍, 대구삼성라이온즈파크] + 수원: [수원 케이티 위즈 파크, 수원KT위즈파크, 수원kt위즈파크] + 창원: [창원NC파크, 창원 nc 파크, 창원 NC 파크] + 대전: [대전 한화생명 볼파크, 대전한화생명볼파크] + "한밭(~2024)": [대전 한화생명 이글스파크, 대전한화생명이글스파크] + 문학: [인천, 인천 SSG 랜더스필드, 인천SSG랜더스필드, 문학] + 광주: [광주-기아 챔피언스 필드, 광주 기아 챔피언스 필드, 광주KIA챔피언스필드, 광주 kia 챔피언스 필드] + 사직: [사직야구장, 사직] + 울산: [울산문수야구장, 울산 문수야구장, 울산] + 포항: [포항야구장, 포항] + 마산: [마산야구장, 마산] + 군산: [군산월명야구장, 군산] + 청주: [청주야구장, 청주] + 목동: [목동야구장, 목동] + 무등: [무등야구장, 무등] + 대구: [대구시민야구장, 대구] + +# 경기 유형 (관리자 사이트 select 옵션) +game_type: + 정규경기: [kbo_r] + 와일드카드: [wildcard, wc] + 와일드카드 결정전: [와일드카드] + 준플레이오프: [semi_playoff, semi_po] + 플레이오프: [playoff, po] + 한국시리즈: [korean_series, ks] + +# 포지션 번호 (관리자 사이트 defense_no) +position_number: + "1": [투수] + "2": [포수] + "3": [1루수] + "4": [2루수] + "5": [3루수] + "6": [유격수] + "7": [좌익수] + "8": [중견수] + "9": [우익수] + "10": [지명타자] + +# KBO 시즌 ID 후보 (경기 타입별) +kbo_sr_id_candidates: + 정규경기: ["0", "1", "2", "3", "4", "5", "7", "8", "9"] + 와일드카드: ["3", "0", "1", "2", "4", "5", "7", "8", "9"] + 준플레이오프: ["4", "0", "1", "2", "3", "5", "7", "8", "9"] + 플레이오프: ["5", "0", "1", "2", "3", "4", "7", "8", "9"] + 한국시리즈: ["7", "0", "1", "2", "3", "4", "5", "8", "9"] + +# 투수 결과 라벨 +result_labels: + 승리투수: [W] + 패전투수: [L] + 홀드: [H] + 세이브: [S] diff --git a/config/pitch_rules.yaml b/config/pitch_rules.yaml new file mode 100644 index 0000000..6f6ce32 --- /dev/null +++ b/config/pitch_rules.yaml @@ -0,0 +1,76 @@ +# ───────────────────────────────────────────────── +# pitch_rules.yaml +# 관리자 사이트 허용값(key) → 매핑되는 네이버 표기(aliases) +# +# 구조: site_label: [naver_alias_1, naver_alias_2, ...] +# 매핑 방향: 네이버 alias → site_label (역매핑으로 조회) +# ───────────────────────────────────────────────── + +# 구종 (관리자 사이트 evt_ballType 옵션) +pitch_type: + 패스트볼: [직구, 패스트볼] + 커브: [커브] + 체인지업: [체인지업] + 슬라이더: [슬라이더] + 커터: [커터] + 스플리터: [스플리터] + 너클: [너클] + 폭투: [폭투] + 투심: [투심] + 싱커: [싱커] + 포크볼: [포크, 포크볼] + 기타: [] # 매핑되지 않는 구종의 폴백 + +# 투구 결과 (관리자 사이트 evt_batter 투구결과 영역) +pitch_result: + 볼: [볼] + "스트라이크(루킹)": [스트라이크] + "헛스윙(스트라이크)": [헛스윙] + 번트시도-스트라이크: [헛스윙 번트, 번트 헛스윙, 번트헛스윙] + 파울: [파울] + 번트-파울: [번트파울] + 몸에 맞는 볼: [몸에 맞는 볼, 몸에 맞는 공, 사구] + 고의사구: [고의사구, 자동 고의사구] + 폭투-볼: [폭투-볼] + 포일-볼: [포일-볼] + 보크: [보크] + 보크-볼: [보크-볼] + 노카운트: [노카운트] + +# 타자 결과 (관리자 사이트 evt_batter 타자결과 영역) +batter_result: + # ── 세이프 ── + 1루타: [single] + 2루타: [double] + 3루타: [triple] + 홈런: [home_run] + 포볼: [walk] + 고의사구: [intentional_walk] + 몸에 맞는 볼: [hit_by_pitch] + 번트안타: [bunt_hit] + 수비실책: [reach_on_error] + 야수선택: [reach_on_fielder_choice] + "땅볼출루(무안타)": [reach_on_grounder] + "1루타 후 주루아웃": [single_runner_out] + "2루타 후 주루아웃": [double_runner_out] + "3루타 후 주루아웃": [triple_runner_out] + "1루타 후 수비실책진루": [single_error_advance] + "2루타 후 수비실책진루": [double_error_advance] + "3루타 후 수비실책진루": [triple_error_advance] + # ── 아웃 ── + "루킹스트라이크-아웃": [strikeout] + 번트-삼진: [bunt_strikeout] + 아웃: [out] + 희생 플라이: [sacrifice_fly] + 희생 번트: [sacrifice_bunt] + +# 주루 이벤트 (관리자 사이트 evt_runner_N) +runner_event: + 일반 진루: [advance, score] + 도루성공: [steal] + 도루시도 아웃: [steal_fail] + 포스아웃: [force_out] + 견제 아웃: [pickoff_out] + 수비 실책: [error_advance] + 폭투-진루성공: [wild_pitch_advance] + 포일-진루성공: [passed_ball_advance] diff --git a/config/review_rules.yaml b/config/review_rules.yaml new file mode 100644 index 0000000..8fd8d7d --- /dev/null +++ b/config/review_rules.yaml @@ -0,0 +1,32 @@ +# ───────────────────────────────────────────────── +# review_rules.yaml +# 합의판정 항목 → 결과 그룹 매핑 +# ───────────────────────────────────────────────── + +# 합의판정 항목별 결과 그룹 (game_report.py + record_game_playwright.py 통합) +# type1 = 페어/파울, type2 = 아웃/세이프, type3 = 인정/불인정 +review_result_groups: + 홈런타구 페어 파울: + type: type1 + options: [페어, 파울] + 외야타구 페어 파울: + type: type1 + options: [페어, 파울] + 포수/태그플레이 아웃/세이프: + type: type2 + options: [아웃, 세이프] + 야수의 포구: + type: type2 + options: [아웃, 세이프] + 몸에 맞는 공: + type: type3 + options: [인정, 불인정] + 파울: + type: type3 + options: [인정, 불인정] + 헛스윙: + type: type3 + options: [인정, 불인정] + 기타: + type: type3 + options: [인정, 불인정] diff --git a/config/site_selectors.yaml b/config/site_selectors.yaml new file mode 100644 index 0000000..cd6996c --- /dev/null +++ b/config/site_selectors.yaml @@ -0,0 +1,29 @@ +# ───────────────────────────────────────────────── +# site_selectors.yaml +# 관리자 사이트 CSS 셀렉터 및 수비 버튼 매핑 +# ───────────────────────────────────────────────── + +# 수비 버튼 CSS 셀렉터 (포지션 → selector) +defense_button_id: + 투수: "input[name='defenseNumberBtn']#picher" + 포수: "input[name='defenseNumberBtn']#catcher" + 1루수: "input[name='defenseNumberBtn']#runner_1" + 2루수: "input[name='defenseNumberBtn']#runner_2" + 3루수: "input[name='defenseNumberBtn']#runner_3" + 유격수: "input[name='defenseNumberBtn']#shortStop" + 중견수: "input[name='defenseNumberBtn']#centerFielder" + 우익수: "input[name='defenseNumberBtn']#rightFielder" + 좌익수: "input[name='defenseNumberBtn']#leftFielder" + +# 포지션 → 수비번호 (사이트 defense_no select 옵션 value) +position_to_defense_no: + 투수: "1" + 포수: "2" + 1루수: "3" + 2루수: "4" + 3루수: "5" + 유격수: "6" + 좌익수: "7" + 중견수: "8" + 우익수: "9" + 지명타자: "10" diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..609099f --- /dev/null +++ b/core/__init__.py @@ -0,0 +1,6 @@ +""" +core/ — 순수 비즈니스 로직 패키지 + +Playwright, httpx 등 외부 I/O 의존성 없이 동작합니다. +모든 설정은 config/ YAML에서 config_loader를 통해 로드합니다. +""" diff --git a/core/change_parser.py b/core/change_parser.py new file mode 100644 index 0000000..93c0da0 --- /dev/null +++ b/core/change_parser.py @@ -0,0 +1,85 @@ +""" +core/change_parser.py — 선수 교체 이벤트 파싱 + +교체 텍스트에서 선수명, 포지션, 교체 유형 등을 추출합니다. +""" +from __future__ import annotations + +import re +from typing import Any + +from core.config_loader import position_to_defense_no + + +def extract_change_actor(text: str) -> tuple[str | None, int | None, str]: + """교체 텍스트의 왼쪽(actor)에서 역할, 타순, 이름 추출 + + '5번타자 문보경' → ('batter', 5, '문보경') + '투수 임찬규' → ('투수', None, '임찬규') + """ + lhs = (text or "").split(" : ", 1)[0].strip() + + batter_match = re.search(r"(\d+)번타자\s+(.+)$", lhs) + if batter_match: + return "batter", int(batter_match.group(1)), batter_match.group(2).strip() + + roles = ( + "대타", "대주자", + "1루주자", "2루주자", "3루주자", "주자", + "투수", "포수", "1루수", "2루수", "3루수", + "유격수", "좌익수", "중견수", "우익수", + ) + for role in roles: + if lhs.startswith(role + " "): + return role, None, lhs[len(role):].strip() + + return None, None, lhs + + +def is_merged_pitcher_substitution(actor_role: str | None, in_role: str | None) -> bool: + """야수→투수 교체인지 확인 (투수가 DH로 전환되는 병합 교체)""" + field_roles = {"포수", "1루수", "2루수", "3루수", "유격수", "좌익수", "중견수", "우익수"} + return actor_role in field_roles and in_role == "투수" + + +def normalize_change_event(change_event: dict[str, Any]) -> dict[str, Any]: + """교체 이벤트를 정규화 + + 텍스트 파싱 → actor_name, out_player, in_player, change_type 등 추출 + """ + if change_event.get("actor_name") or change_event.get("player_name"): + return change_event + + text = change_event.get("text") or "" + normalized = dict(change_event) + normalized["change_type"] = "position_change" if "수비위치 변경" in text else "substitution" + actor_role, bat_order, actor_name = extract_change_actor(text) + normalized["actor_role"] = actor_role + normalized["actor_name"] = actor_name + if bat_order is not None: + normalized["bat_order"] = bat_order + + if normalized["change_type"] == "position_change": + rhs = text.split(" : ", 1)[1] if " : " in text else "" + normalized["player_name"] = actor_name + normalized["to_position"] = rhs.split("(으)로", 1)[0].strip() + return normalized + + rhs = text.split(" : ", 1)[1] if " : " in text else "" + rhs = rhs.split("(으)로 교체", 1)[0].strip() + in_role, _, in_name = extract_change_actor(rhs) + normalized["out_player"] = actor_name + normalized["in_player"] = in_name + normalized["in_role"] = in_role + + pos_defense = position_to_defense_no() + if is_merged_pitcher_substitution(actor_role, in_role): + normalized["change_type"] = "merged_pitcher_substitution" + normalized["player_name"] = actor_name + normalized["to_position"] = "지명타자" + normalized["pitcher_in_player"] = in_name + return normalized + + if in_role in pos_defense: + normalized["to_position"] = in_role + return normalized diff --git a/core/config_loader.py b/core/config_loader.py new file mode 100644 index 0000000..d297198 --- /dev/null +++ b/core/config_loader.py @@ -0,0 +1,195 @@ +""" +config_loader.py — YAML 설정 파일 로딩 + 캐싱 + +모든 설정 접근의 단일 진입점. +config/ 폴더의 YAML 파일을 로드하고 lru_cache로 캐싱합니다. + +YAML 구조: site_label(key) → [alias_1, alias_2, ...] (Closed Set 기반) +조회 시: alias → site_label (역매핑) +""" +from __future__ import annotations + +from functools import lru_cache +from pathlib import Path +from typing import Any + +import yaml + +CONFIG_DIR = Path(__file__).resolve().parent.parent / "config" + + +@lru_cache(maxsize=None) +def load_config(name: str) -> dict[str, Any]: + """YAML 파일을 로드하여 dict로 반환 (결과 캐싱)""" + path = CONFIG_DIR / f"{name}.yaml" + if not path.exists(): + raise FileNotFoundError(f"설정 파일을 찾을 수 없습니다: {path}") + with open(path, encoding="utf-8") as f: + data = yaml.safe_load(f) or {} + return data + + +def get_mapping(config_name: str, key: str) -> dict[str, Any]: + """특정 설정 파일의 특정 섹션을 반환 (원본 구조 그대로)""" + return load_config(config_name).get(key, {}) + + +def get_list(config_name: str, key: str) -> list: + """특정 설정 파일의 특정 리스트 섹션을 반환""" + return load_config(config_name).get(key, []) + + +def get_value(config_name: str, key: str, default: Any = None) -> Any: + """특정 설정 파일의 단일 값을 반환""" + return load_config(config_name).get(key, default) + + +# ────────────────────────────────────────────── +# Closed Set 역매핑 빌드 +# ────────────────────────────────────────────── + +@lru_cache(maxsize=None) +def _build_reverse_map(config_name: str, key: str) -> dict[str, str]: + """site_label: [aliases...] 구조를 {alias: site_label} 역매핑으로 변환 + + 예: { '패스트볼': ['직구', '패스트볼'] } + → { '직구': '패스트볼', '패스트볼': '패스트볼' } + """ + raw = get_mapping(config_name, key) + reverse: dict[str, str] = {} + for site_label, aliases in raw.items(): + if isinstance(aliases, list): + for alias in aliases: + reverse[str(alias)] = str(site_label) + else: + # aliases가 리스트가 아닌 경우 (단순 값이면 그대로) + reverse[str(aliases)] = str(site_label) + return reverse + + +def allowed_values(config_name: str, key: str) -> set[str]: + """해당 섹션의 관리자 사이트 허용값(Closed Set) 반환""" + raw = get_mapping(config_name, key) + return set(raw.keys()) + + +def lookup(config_name: str, key: str, alias: str) -> str | None: + """alias → site_label 조회. 없으면 None""" + return _build_reverse_map(config_name, key).get(alias) + + +def lookup_or_raise(config_name: str, key: str, alias: str) -> str: + """alias → site_label 조회. 없으면 오류""" + result = lookup(config_name, key, alias) + if result is None: + allowed = allowed_values(config_name, key) + raise ValueError( + f"매핑 오류: '{alias}'는 {key}의 허용값에 없습니다. " + f"허용값: {sorted(allowed)}" + ) + return result + + +# ────────────────────────────────────────────── +# 편의 함수: 역매핑 (alias → site_label) +# ────────────────────────────────────────────── + +def pitch_type_map() -> dict[str, str]: + """네이버 stuff → 사이트 구종 라벨""" + return _build_reverse_map("pitch_rules", "pitch_type") + +def pitch_result_map() -> dict[str, str]: + """네이버 pitchResultText → 사이트 투구결과 라벨""" + return _build_reverse_map("pitch_rules", "pitch_result") + +def batter_result_map() -> dict[str, str]: + """result.type → 사이트 타자결과 라벨""" + return _build_reverse_map("pitch_rules", "batter_result") + +def runner_event_map() -> dict[str, str]: + """runnerEvent.type → 사이트 주루 라벨""" + return _build_reverse_map("pitch_rules", "runner_event") + + +def team_name_map() -> dict[str, str]: + """네이버 팀명 → 사이트 팀명""" + return _build_reverse_map("mappings", "team_name") + +def team_code_map() -> dict[str, str]: + """네이버 팀코드 → 한글 팀명""" + return _build_reverse_map("mappings", "team_code") + +def stadium_name_map() -> dict[str, str]: + """네이버 구장명 → 사이트 구장명""" + return _build_reverse_map("mappings", "stadium_name") + +def game_type_map() -> dict[str, str]: + """네이버 경기유형 → 사이트 경기유형""" + return _build_reverse_map("mappings", "game_type") + +def position_number_map() -> dict[str, str]: + """포지션명 → 번호""" + return _build_reverse_map("mappings", "position_number") + +def result_labels() -> dict[str, str]: + """W/L/H/S → 승리투수/패전투수/홀드/세이브""" + return _build_reverse_map("mappings", "result_labels") + +def kbo_sr_id_candidates() -> dict[str, list]: + """역매핑 불필요 — 원본 그대로""" + return get_mapping("mappings", "kbo_sr_id_candidates") + + +# ────────────────────────────────────────────── +# 편의 함수: Closed Set 직접 조회 +# ────────────────────────────────────────────── + +def pitch_type_allowed() -> set[str]: + return allowed_values("pitch_rules", "pitch_type") + +def pitch_result_allowed() -> set[str]: + return allowed_values("pitch_rules", "pitch_result") + +def batter_result_allowed() -> set[str]: + return allowed_values("pitch_rules", "batter_result") + +def runner_event_allowed() -> set[str]: + return allowed_values("pitch_rules", "runner_event") + + +# ────────────────────────────────────────────── +# 편의 함수: 역매핑 불필요한 것들 (원본 구조 그대로) +# ────────────────────────────────────────────── + +def field_coordinates() -> dict[str, list]: + return get_mapping("field_coordinates", "field_coordinates") + +def hit_ball_type_map() -> dict[str, str]: + return get_mapping("field_coordinates", "hit_ball_type") + +def foul_fly_coords() -> dict[str, list]: + return get_mapping("field_coordinates", "foul_fly") + +def defense_button_id_map() -> dict[str, str]: + return get_mapping("site_selectors", "defense_button_id") + +def position_to_defense_no() -> dict[str, str]: + return get_mapping("site_selectors", "position_to_defense_no") + +def review_result_groups() -> dict[str, dict]: + return get_mapping("review_rules", "review_result_groups") + +def crawler_headers() -> dict[str, str]: + return get_mapping("crawler_constants", "headers") + +def skip_option_types() -> set[int]: + return set(get_list("crawler_constants", "skip_option_types")) + +def hidden_event_texts() -> set[str]: + return set(get_list("crawler_constants", "hidden_event_texts")) + +def change_keywords() -> tuple[str, ...]: + return tuple(get_list("crawler_constants", "change_keywords")) + +def max_inning() -> int: + return get_value("crawler_constants", "max_inning", 20) diff --git a/core/field_calculator.py b/core/field_calculator.py new file mode 100644 index 0000000..d309fd0 --- /dev/null +++ b/core/field_calculator.py @@ -0,0 +1,255 @@ +""" +core/field_calculator.py — 타구 좌표/거리/수비 시퀀스 계산 + +필드 좌표 기반의 타구 처리 로직. Playwright 의존성 없음. +""" +from __future__ import annotations + +import math +import re +from typing import Any + +from core.config_loader import ( + field_coordinates, + hit_ball_type_map, + foul_fly_coords, + position_number_map, +) + + +# ────────────────────────────────────────────── +# 타구 종류 추론 +# ────────────────────────────────────────────── + +def infer_hit_ball_type(result_text: str) -> str: + """결과 텍스트에서 타구 종류 추론 + + '2루수 땅볼 아웃' → '땅볼' + '좌익수 뒤 2루타' → '일반바운드' + """ + if "번트" in result_text: + return "번트타구" + if "몸에 맞는 타구" in result_text: + return "땅볼" + if "파울희생플라이" in result_text or "파울 희생플라이" in result_text: + return "플라이" + if "파울플라이" in result_text: + return "플라이" + if "라인드라이브" in result_text or "직선타" in result_text: + return "라인드라이브" + if "플라이" in result_text: + return "플라이" + if "땅볼" in result_text: + return "땅볼" + if "홈런" in result_text: + return "홈런성타구" + return "일반바운드" + + +def get_hit_ball_type_code(hit_ball_type: str) -> str: + """타구 종류 라벨 → 사이트 value 코드""" + return hit_ball_type_map().get(hit_ball_type, "1") + + +# ────────────────────────────────────────────── +# 필드 존 추론 +# ────────────────────────────────────────────── + +ORDERED_ZONES = ( + "좌중간", "우중간", + "좌전", "중전", "우전", + "좌월", "중월", "우월", + "좌익수", "중견수", "우익수", + "유격수", "3루수", "2루수", "1루수", + "투수", "포수", +) + + +def infer_field_zone(result_text: str) -> str: + """결과 텍스트에서 타구 방향(zone) 추론 + + '우익수 앞 1루타' → '우익수' + """ + if "몸에 맞는 타구" in result_text: + return "1루수" + for zone in ORDERED_ZONES: + if zone in result_text: + return zone + return "중견수" + + +def extract_direction_offsets(result_text: str) -> tuple[int, int]: + """결과 텍스트에서 방향 오프셋 추출 + + '좌익수 왼쪽 뒤' → (-1, -1) + """ + x_delta = 0 + y_delta = 0 + if "왼쪽" in result_text: + x_delta -= 1 + if "오른쪽" in result_text: + x_delta += 1 + if "앞" in result_text: + y_delta += 1 + if "뒤" in result_text: + y_delta -= 1 + return x_delta, y_delta + + +def is_infield_zone(zone: str) -> bool: + """내야 존인지 확인""" + return zone in {"투수", "포수", "1루수", "2루수", "3루수", "유격수"} + + +# ────────────────────────────────────────────── +# 좌표 계산 +# ────────────────────────────────────────────── + +def get_zone_coordinates(zone: str) -> tuple[int, int]: + """존 이름 → (x, y) 퍼센트 좌표""" + coords = field_coordinates() + coord = coords.get(zone, coords.get("중견수", [50, 24])) + return tuple(coord) + + +def get_foul_fly_coordinates(side: str) -> tuple[int, int]: + """파울 플라이 좌표 ('left' 또는 'right')""" + coords = foul_fly_coords() + return tuple(coords.get(side, [50, 70])) + + +def calculate_hit_ball_coordinates( + result_text: str, + zone: str | None = None, +) -> tuple[int, int]: + """결과 텍스트로부터 타구 좌표 계산 + + Returns: (x, y) 퍼센트 좌표 + """ + if zone is None: + zone = infer_field_zone(result_text) + + x, y = get_zone_coordinates(zone) + x_delta, y_delta = extract_direction_offsets(result_text) + + infield = is_infield_zone(zone) + step = 3 if infield else 5 + + x += x_delta * step + y += y_delta * step + + # 범위 제한 + x = max(0, min(100, x)) + y = max(0, min(100, y)) + + return x, y + + +def calculate_distance(x: int, y: int, meter_per_px: float) -> float: + """좌표에서 홈까지의 거리 계산 (미터)""" + home_x, home_y = 50, 93 + dx = (x - home_x) * meter_per_px + dy = (y - home_y) * meter_per_px + return math.sqrt(dx * dx + dy * dy) + + +# ────────────────────────────────────────────── +# 수비 시퀀스 추출 +# ────────────────────────────────────────────── + +def _position_label_map() -> dict[str, str]: + """번호 → 포지션명 역매핑""" + return {v: k for k, v in position_number_map().items()} + + +def extract_defense_sequence(result_text: str) -> list[str]: + """결과 텍스트에서 수비 시퀀스 추출 + + '2루수 땅볼 아웃 (2루수->1루수 송구아웃)' → ['2루수', '1루수'] + """ + pos_label = _position_label_map() + + # 1) '2-6', '2-5-3' 같은 숫자 패턴 + num_seq_match = re.search(r"(\d+(?:-\d+)+)", result_text) + if num_seq_match: + nums = num_seq_match.group(1).split("-") + pos_names = [pos_label[n] for n in nums if n in pos_label] + if pos_names: + return pos_names + + # 2) 괄호 안에서 포지션 추출 + parenthetical_match = re.search(r"\(([^)]*)\)", result_text) + if parenthetical_match: + sequence = re.findall( + r"(투수|포수|1루수|2루수|3루수|유격수|좌익수|중견수|우익수)", + parenthetical_match.group(1), + ) + if sequence: + return sequence + + # 3) 괄호 앞 본문에서 포지션 추출 + leading_text = result_text.split("(", 1)[0] + sequence = re.findall( + r"(투수|포수|1루수|2루수|3루수|유격수|좌익수|중견수|우익수)", + leading_text, + ) + if sequence: + return sequence + + # 4) 존에서 폴백 + zone = infer_field_zone(result_text) + pos_num = position_number_map() + if zone in pos_num: + return [zone] + + return [] + + +def extract_error_position(result_text: str) -> str | None: + """실책 관련 텍스트에서 실책 수비자 포지션 추출""" + parenthetical_match = re.search(r"\(([^)]*실책[^)]*)\)", result_text) + search_texts = [parenthetical_match.group(1)] if parenthetical_match else [] + search_texts.append(result_text) + for text in search_texts: + positions = re.findall( + r"(투수|포수|1루수|2루수|3루수|유격수|좌익수|중견수|우익수)", + text, + ) + if positions: + return positions[0] + return None + + +def infer_error_position_fallback(text: str) -> str: + """실책 포지션 추론 폴백""" + if "야수선택" in text: + return "야수선택" + if "도루" in text: + return "포수" + if "포구" in text: + return "포수" + if "송구" in text: + return "투수" + return "포수" + + +def is_error_result(result_text: str) -> bool: + """실책 결과인지 확인""" + return "실책" in result_text + + +def is_throwing_error(result_text: str) -> bool: + """송구 실책인지 확인""" + keywords = ("송구실책", "송구 실책", "악송구", "throwing error", "송구에러") + return any(keyword in result_text for keyword in keywords) + + +def is_double_play_result(result_text: str) -> bool: + """병살인지 확인""" + return "병살" in result_text + + +def build_double_play_first_sequence(event: dict[str, Any]) -> list[str]: + """병살 이벤트의 첫 번째 수비 시퀀스""" + result_text = ((event.get("result") or {}).get("text") or "").strip() + return extract_defense_sequence(result_text) diff --git a/core/normalizer.py b/core/normalizer.py new file mode 100644 index 0000000..eb6db3e --- /dev/null +++ b/core/normalizer.py @@ -0,0 +1,150 @@ +""" +core/normalizer.py — 모든 정규화 함수의 단일 진입점 + +팀명, 구장, 포지션, 선수명, 경기유형 등의 정규화를 담당합니다. +Playwright 의존성 없이 순수 파이썬 로직만 포함합니다. +""" +from __future__ import annotations + +import re +from typing import Any + +from core.config_loader import ( + team_name_map, + team_code_map, + stadium_name_map, + game_type_map, + position_number_map, + position_to_defense_no, +) + + +# ────────────────────────────────────────────── +# 팀/구장/경기유형 정규화 +# ────────────────────────────────────────────── + +def normalize_team_name(name: str) -> str: + """팀명 정규화 (네이버 표기 → 관리자 사이트 표기)""" + return team_name_map().get(name, name) + + +def normalize_team_code(code: str) -> str: + """팀 코드 → 한글 팀명""" + return team_code_map().get(code, code) + + +def normalize_game_type(name: str) -> str: + """경기 유형 정규화""" + return game_type_map().get(name, name) + + +def normalize_stadium_name(name: str) -> str: + """구장명 정규화 (네이버 표기 → 관리자 사이트 select 라벨)""" + return stadium_name_map().get(name, name) + + +def normalize_position_to_number(position: str) -> str: + """포지션명 → 번호 문자열 (투수→1, 포수→2, ...)""" + return position_number_map().get(position, "") + + +def normalize_position_to_defense_no(position: str) -> str: + """포지션명 → 수비번호 (라인업 select 옵션 value)""" + return position_to_defense_no().get(position, "") + + +def position_label_from_number(number: str) -> str: + """수비번호 → 포지션명 (역매핑)""" + pos_map = position_number_map() + reverse = {v: k for k, v in pos_map.items()} + return reverse.get(number, "") + + +# ────────────────────────────────────────────── +# 선수명/번호 정규화 +# ────────────────────────────────────────────── + +def normalize_player_name(name: str | None) -> str: + """선수명 정규화: *, 괄호 내용 제거""" + text = (name or "").replace("*", "").strip() + text = re.sub(r"\([^)]*\)\s*$", "", text).strip() + return text + + +def normalize_lineup_text(text: str) -> str: + """라인업 텍스트에서 순수 이름만 추출 + + '[10] 문보경' / '문보경 [10번]' 등 → '문보경' + """ + text = (text or "").strip() + text = text.replace("*", "") + text = re.sub(r"\[\d+(?:번)?\]", "", text) + text = re.sub(r"\s*\(.*?\)\s*", "", text) + text = "".join(re.findall(r"[가-힣A-Za-z]+", text)) + return text.strip() + + +def normalize_number_text(number: str | int | None) -> str: + """등번호 정규화: 숫자만 추출""" + text = str(number or "").strip() + digits = "".join(char for char in text if char.isdigit()) + if not digits: + return "" + return str(int(digits)) + + +def normalize_option_player_text(text: str) -> tuple[str, str]: + """select option 텍스트에서 선수명과 번호 분리 + + '문보경 [10번]' → ('문보경', '10') + """ + stripped = " ".join(text.split()) + matched = re.match(r"^(.*?)\s*\[(\d+)번\]$", stripped) + if matched: + return normalize_player_name(matched.group(1)), normalize_number_text(matched.group(2)) + return normalize_player_name(stripped), "" + + +# ────────────────────────────────────────────── +# 시간 유틸 +# ────────────────────────────────────────────── + +def split_time(iso_time: str | None) -> tuple[str, str]: + """ISO 시간 문자열에서 시/분 분리 + + '2026-04-14T18:30:00' → ('18', '30') + """ + if not iso_time: + return "00", "00" + from datetime import datetime + dt = datetime.fromisoformat(iso_time) + return f"{dt.hour:02d}", f"{dt.minute:02d}" + + +# ────────────────────────────────────────────── +# 텍스트 추론 유틸 +# ────────────────────────────────────────────── + +def infer_option_role_hint(text: str) -> str: + """select option 텍스트에서 역할 힌트 추출 + + '문보경 (투) [10번]' → 'pitcher' + '문보경 (타)' → 'batter' + """ + stripped = " ".join(text.split()) + matched = re.search(r"\(([^)]*)\)\s*(?:\[\d+번\])?$", stripped) + if not matched: + return "" + hint = matched.group(1).strip() + if hint == "투": + return "pitcher" + if hint == "타": + return "batter" + return "" + + +def infer_target_role_hint(position_name: str | None) -> str: + """포지션명에서 역할 힌트 추론""" + if position_name == "투수": + return "pitcher" + return "batter" diff --git a/core/pitch_classifier.py b/core/pitch_classifier.py new file mode 100644 index 0000000..c39a19a --- /dev/null +++ b/core/pitch_classifier.py @@ -0,0 +1,273 @@ +""" +core/pitch_classifier.py — 투구/타자 결과 분류 + +네이버 리포트 데이터를 기반으로 관리자 사이트에서 선택해야 할 +라디오 버튼의 라벨(eventName)을 결정합니다. +Playwright 의존성 없이 순수 파이썬 로직만 포함합니다. +""" +from __future__ import annotations + +import re +from typing import Any + +from core.config_loader import ( + pitch_type_map, + pitch_result_map, + batter_result_map, +) + + +# ────────────────────────────────────────────── +# 구종 분류 +# ────────────────────────────────────────────── + +def classify_pitch_type(pitch_type_text: str) -> str | None: + """네이버 구종 텍스트 → 사이트 구종 라벨 + + 예: '직구' → '패스트볼', '포크' → '포크볼' + """ + return pitch_type_map().get(pitch_type_text or "") + + +# ────────────────────────────────────────────── +# 투구 결과 분류 +# ────────────────────────────────────────────── + +def classify_pitch_result(pitch_result_text: str) -> str | None: + """네이버 투구결과 텍스트 → 사이트 투구결과 라벨 + + 예: '볼' → '볼', '스트라이크' → '스트라이크(루킹)' + """ + return pitch_result_map().get(pitch_result_text or "") + + +def normalize_pitch_result_code(pitch: dict[str, Any], event: dict[str, Any] | None = None) -> str: + """투구의 pitchResult 코드를 정규화 + + 피치클락, 번트헛스윙, 폭투/포일 등 특수 상황 처리 + """ + pitch_result = (pitch.get("pitchResult") or "").strip() + pitch_result_text = (pitch.get("pitchResultText") or "").strip() + normalized_text = pitch_result_text.replace(" ", "") + + # 피치클락 투수위반 → 볼 + if "피치클락" in pitch_result_text and "투수위반" in pitch_result_text: + return "B" + + # 번트 헛스윙 → BS + if "번트" in normalized_text and "헛스윙" in normalized_text: + return "BS" + + # 폭투/포일 진루 시 → 볼 + runner_events = _get_pitch_runner_events(pitch, event) + if any( + re_.get("type") == "wild_pitch_advance" or "폭투" in (re_.get("text") or "") + for re_ in runner_events + ): + return "B" + if any( + re_.get("type") == "passed_ball_advance" or "포일" in (re_.get("text") or "") + for re_ in runner_events + ): + return "B" + + return pitch_result + + +# ────────────────────────────────────────────── +# 타자 결과 분류 +# ────────────────────────────────────────────── + +def classify_batter_result(result_type: str) -> str | None: + """결과 타입 코드 → 사이트 타자결과 라벨 (기본 매핑) + + 더 복잡한 추론이 필요한 경우 infer_batter_result_label 사용. + """ + return batter_result_map().get(result_type or "") + + +def infer_batter_result_label( + result: dict[str, Any], + event: dict[str, Any] | None = None, +) -> str | None: + """타석 결과를 종합적으로 추론하여 사이트 라벨 반환 + + result.type, result.text, 주루이벤트, 마지막 투구 등을 모두 분석. + """ + result_type = result.get("type") or "" + result_text = (result.get("text") or "").strip() + runner_events = (event or {}).get("runnerEvents") or [] + last_pitch_result_text = get_last_pitch_result_text(event) + + # 낫아웃 + if result_type == "strikeout_not_out" or "낫아웃" in result_text: + if "폭투" in result_text: + return "폭투 낫아웃 진루" + if "포일" in result_text: + return "포일 낫아웃 진루" + if "아웃" in result_text: + return "스트라이크-낫아웃" + return "낫아웃-출루" + + # 삼진 + if result_type == "strikeout": + if "헛스윙" in last_pitch_result_text or "헛스윙" in result_text: + return "스윙 스트라이크-아웃" + return "루킹스트라이크-아웃" + + # 희생 번트 + if "희생 번트" in result_text or "희생번트" in result_text: + return "희생 번트" + + # 번트 아웃 + if "번트 아웃" in result_text or "번트아웃" in result_text: + return "번트-아웃" + + # 보크 + if any( + "보크" in (re_.get("text") or "") and "진루" in (re_.get("text") or "") + for re_ in runner_events + ): + if "볼" in last_pitch_result_text: + return "보크-볼" + return "보크" + + # 폭투-볼 + if any(re_.get("type") == "wild_pitch_advance" for re_ in runner_events): + return "폭투-볼" + + # 포볼 + if result_type == "walk": + if any( + re_.get("type") == "wild_pitch_advance" or "폭투" in (re_.get("text") or "") + for re_ in runner_events + ): + return "폭투-포볼" + if any( + re_.get("type") == "passed_ball_advance" or "포일" in (re_.get("text") or "") + for re_ in runner_events + ): + return "포일-포볼" + return "포볼" + + # 포일-볼/스트라이크 + if any( + (re_.get("type") or "") == "passed_ball_advance" + for re_ in runner_events + ): + if "볼" in last_pitch_result_text: + return "포일-볼" + return "포일-스트라이크" + + # 수비실책 + if result_type == "reach_on_error" or "실책" in result_text: + return "수비실책" + + # 야수선택 + if result_type == "reach_on_fielder_choice": + return "야수선택" + + # 땅볼출루 + if result_type == "reach_on_grounder": + return "땅볼출루(무안타)" + + # 병살 + if result_type == "double_play": + if "번트" in result_text: + return "번트-병살" + return "병살-아웃" + + # N루타 후 주루아웃 + if result_type == "single_runner_out": + return "1루타 후 주루아웃" + if result_type == "double_runner_out": + return "2루타 후 주루아웃" + if result_type == "triple_runner_out": + return "3루타 후 주루아웃" + + # N루타 후 수비실책진루 + if result_type == "single_error_advance": + return "1루타 후 수비실책진루" + if result_type == "double_error_advance": + return "2루타 후 수비실책진루" + if result_type == "triple_error_advance": + return "3루타 후 수비실책진루" + + # 파울희생플라이 + if "파울희생플라이" in result_text or "파울 희생플라이" in result_text: + return "희생 플라이" + + # 아웃 상세 + if result_type == "out": + if "병살" in result_text: + if "번트" in result_text: + return "번트-병살" + return "병살-아웃" + if "희생 플라이" in result_text or "희생플라이" in result_text: + return "희생 플라이" + if "인필드플라이" in result_text: + return "인필드플라이" + if "파울플라이" in result_text: + return "파울플라이-아웃" + return "아웃" + + # 번트안타 + if result_type == "bunt_hit": + return "번트안타" + + # 내야안타 + if result_type == "single": + if "번트안타" in result_text: + return "번트안타" + if "내야안타" in result_text: + return "내야안타" + + # 몸에 맞는 볼 + if result_type == "hit_by_pitch" or "헤드샷" in result_text: + return "몸에 맞는 볼" + + # 기본 매핑 폴백 + return classify_batter_result(result_type) + + +def is_simple_terminal_result_type(result_type: str) -> bool: + """팝업 없이 즉시 완료되는 결과 타입인지 확인""" + return result_type in {"strikeout", "strikeout_not_out", "walk", "intentional_walk", "hit_by_pitch"} + + +def is_ball_in_play_event(event: dict[str, Any]) -> bool: + """인플레이 이벤트인지 확인 (마지막 투구가 H)""" + pitches = event.get("pitches") or [] + result = event.get("result") or {} + if not pitches or not result: + return False + return pitches[-1].get("pitchResult") == "H" + + +# ────────────────────────────────────────────── +# 내부 헬퍼 +# ────────────────────────────────────────────── + +def _get_pitch_runner_events( + pitch: dict[str, Any], + event: dict[str, Any] | None, +) -> list[dict[str, Any]]: + """투구에 연결된 주루이벤트 반환""" + if pitch.get("runnerEvents"): + return pitch["runnerEvents"] + if event: + pitch_num = pitch.get("pitchNum") + for re_ in (event.get("runnerEvents") or []): + if re_.get("pitchNum") == pitch_num: + return [re_] + return [] + + +def get_last_pitch_result_text(event: dict[str, Any] | None) -> str: + """이벤트의 마지막 투구 결과 텍스트 반환""" + if not event: + return "" + pitches = event.get("pitches") or [] + if not pitches: + return "" + return (pitches[-1].get("pitchResultText") or "").strip() diff --git a/core/review_parser.py b/core/review_parser.py new file mode 100644 index 0000000..c081fe5 --- /dev/null +++ b/core/review_parser.py @@ -0,0 +1,131 @@ +""" +core/review_parser.py — 합의판정/비디오판독 파싱 + +판독 텍스트에서 항목, 원래 판정, 최종 판정 등을 추출합니다. +""" +from __future__ import annotations + +import re +from typing import Any + +from core.config_loader import review_result_groups + + +def infer_review_item(detail_text: str) -> str: + """판독 텍스트에서 사이트 표준 항목 추론 + + '홈런 파울 판정' → '홈런타구 페어 파울' + """ + dt = detail_text.replace(" ", "") + if "홈런" in dt: + return "홈런타구 페어 파울" + if "아웃" in dt or "세이프" in dt or "포스" in dt or "태그" in dt or "견제" in dt or "도루" in dt: + return "포수/태그플레이 아웃/세이프" + if "페어" in dt or "파울" in dt: + return "외야타구 페어 파울" + if "포구" in dt or "노바운드" in dt or "바운드" in dt: + return "야수의 포구" + if "몸에맞" in dt or "데드볼" in dt: + return "몸에 맞는 볼" + if "헛스윙" in dt or "스윙" in dt: + return "헛스윙" + return "기타" + + +def normalize_review_result_token(token: str, review_item: str) -> str | None: + """판독 결과 토큰을 정규화 + + '세이프' → '세이프', '노스윙' → '불인정' + """ + token = (token or "").strip() + if not token: + return None + + if review_item in {"홈런타구 페어 파울", "외야타구 페어 파울"}: + if "페어" in token: + return "페어" + if "파울" in token: + return "파울" + elif review_item in {"포수/태그플레이 아웃/세이프", "야수의 포구"}: + if "아웃" in token: + return "아웃" + if "세이프" in token: + return "세이프" + elif review_item == "헛스윙": + # '노스윙'에도 '스윙'이 포함되므로 먼저 체크 + if "불인정" in token or "노스윙" in token or "공포" in token or "노 스윙" in token: + return "불인정" + if "스윙" in token or "인정" in token: + return "인정" + else: + if "불인정" in token or "실패" in token: + return "불인정" + if "인정" in token: + return "인정" + return token # 모르는 키워드 → 원문 그대로 + + return None + + +def parse_review_event_text(text: str) -> dict[str, Any]: + """판독 텍스트를 파싱하여 구조화된 dict로 변환 + + 입력 예: '6회초 8번타순 1구 후 18:45 ~ 18:46 (1분간) LG요청 + 비디오 판독: 안중열 포스아웃 관련 세이프→세이프' + """ + inning_match = re.search(r"(\d+)회(초|말)", text) + request_team_match = re.search(r"([가-힣A-Za-z]+)요청\s*(?:비디오 판독|합의 판정)", text) + + # '→노 스윙' 같은 공백 정규화 + normalized = re.sub(r"→([가-힣]+)\s+([가-힣]+)", r"→\1\2", text) + detail_match = re.search( + r"(?:비디오 판독|합의 판정):\s*(.+?)\s*([가-힣]+)→([가-힣]+)\s*$", + normalized, + ) + + detail_text = detail_match.group(1).strip() if detail_match else text + review_item = infer_review_item(detail_text) + before_result = normalize_review_result_token(detail_match.group(2), review_item) if detail_match else None + after_result = normalize_review_result_token(detail_match.group(3), review_item) if detail_match else None + + return { + "type": "video_review", + "text": text, + "requestInningLabel": ( + f"{inning_match.group(1)}{'초' if inning_match.group(2) == '초' else '말'}" + if inning_match else None + ), + "requestTeam": request_team_match.group(1) if request_team_match else None, + "reviewItem": review_item, + "beforeResult": before_result, + "finalResult": after_result, + "isSuccess": ( + "성공" if before_result and after_result and before_result != after_result + else "실패" + ), + "timing": "before_pitch" if "초구 전" in text else "after_pitch", + } + + +def normalize_review_event(review_event: dict[str, Any]) -> dict[str, Any]: + """판독 이벤트를 정규화 + + beforeResult/finalResult가 누락된 경우 텍스트에서 재파싱 + """ + has_results = ( + review_event.get("beforeResult") is not None + and review_event.get("finalResult") is not None + ) + if review_event.get("requestInningLabel") and review_event.get("reviewItem") and has_results: + return review_event + + text = review_event.get("text") or "" + parsed = parse_review_event_text(text) + parsed.update({k: v for k, v in review_event.items() if k not in parsed}) + return parsed + + +def get_review_result_group(review_item: str) -> dict[str, Any] | None: + """사이트에서 판독항목에 대응하는 결과 그룹 정보 반환""" + groups = review_result_groups() + return groups.get(review_item) diff --git a/core/runner_classifier.py b/core/runner_classifier.py new file mode 100644 index 0000000..27bfcfd --- /dev/null +++ b/core/runner_classifier.py @@ -0,0 +1,133 @@ +""" +core/runner_classifier.py — 주루 이벤트 분류 + +네이버 리포트의 주루 이벤트를 분석하여 관리자 사이트에서 +선택해야 할 라디오 버튼 라벨을 결정합니다. +""" +from __future__ import annotations + +from typing import Any + +from core.config_loader import runner_event_map + + +def classify_runner_event(event_type: str) -> str | None: + """주루 이벤트 타입 → 사이트 라벨 (기본 매핑)""" + return runner_event_map().get(event_type or "") + + +def infer_runner_action_label( + event: dict[str, Any], + runner_event: dict[str, Any], +) -> str | None: + """주루 이벤트를 종합적으로 추론하여 사이트 라벨 반환 + + 리포트 action_label, event_type, event_text, result_type 등을 모두 분석. + """ + # 0. 리포트에 명시된 라벨이 있으면 최우선 + if "action_label" in runner_event: + return runner_event["action_label"] + + event_type = runner_event.get("type") or "" + event_text = runner_event.get("text") or "" + result_type = ((event.get("result") or {}).get("type") or "") + result_text = ((event.get("result") or {}).get("text") or "") + + # 이중도루 실패 + 진루 + if "이중도루 실패" in event_text and "진루" in event_text: + return "기타 진루" + if "도루" in event_text and "실패" in event_text and "진루" in event_text: + return "기타 진루" + + # 견제 아웃 + if event_type == "pickoff_out" or "견제사" in event_text: + return "견제 아웃" + + # 도루 실패 + if event_type == "steal_fail": + return "도루시도 아웃" + if "이중도루 실패" in event_text and "아웃" in event_text: + return "도루시도 아웃" + + # 도루 + 실책 진루 + if "도루" in event_text and "실책" in event_text and ("진루" in event_text or event_type == "error_advance"): + return "도루성공&실책" + + # 도루 + if "도루" in event_text: + if "실패" in event_text: + return "도루시도 아웃" + return "도루성공" + + # 낫아웃 + 폭투/포일 + if "낫아웃" in result_text and event_type == "wild_pitch_advance": + return "폭투 낫아웃 진루" + if "낫아웃" in result_text and event_type == "passed_ball_advance": + return "포일 낫아웃 진루" + + # 포일 진루 + if "포일" in event_text and ("진루" in event_text or event_type == "passed_ball_advance"): + return "포일-진루성공" + + # 실책으로 진루 + if "실책으로" in event_text: + return "수비 실책" + + # 안타/아웃 상황 → 일반 진루 + play_types = { + "single", "double", "triple", "home_run", "out", "strikeout", + "play", "sacrifice_fly", "sacrifice_bunt", "ground_out", "fly_out", + } + if result_type in play_types and event_type in {"advance", "score"}: + return "일반 진루" + + # 볼넷 상황 → 볼넷 진루 + walk_types = {"walk", "intentional_walk", "hit_by_pitch"} + if result_type in walk_types and event_type in {"advance", "score"}: + return "볼넷 진루" + + # 기본: 일반 진루 + if event_type in {"advance", "score"}: + return "일반 진루" + + # 최종 폴백: config 매핑 + return classify_runner_event(event_type) + + +def get_runner_area_type(event: dict[str, Any], runner_event: dict[str, Any]) -> int: + """주루 이벤트의 입력 영역 타입 결정 + + 1 = 진루 영역 (일반 진루, 볼넷 진루 등) + 2 = 액션 영역 (도루, 견제, 폭투, 포일 등) + """ + event_text = runner_event.get("text") or "" + action_keywords = ["도루", "견제", "폭투", "포일", "태그아웃", "포스아웃"] + if any(k in event_text for k in action_keywords): + return 2 + return 1 + + +def split_complex_runner_event( + runner_event: dict[str, Any], +) -> tuple[dict[str, Any], dict[str, Any] | None]: + """복합 주루 이벤트를 두 개로 분리 + + 예: '도루성공 후 수비실책 진루' → (도루, 실책진루) + """ + text = runner_event.get("text") or "" + + if "실책" not in text and "/" not in text: + return runner_event, None + + # '도루성공&실책' 같은 패턴 + if "도루" in text and "실책" in text and "진루" in text: + first = dict(runner_event) + first["type"] = "steal" + first["text"] = text + + second = dict(runner_event) + second["type"] = "error_advance" + second["text"] = text + return first, second + + return runner_event, None diff --git a/crawler/__init__.py b/crawler/__init__.py new file mode 100644 index 0000000..d941ac3 --- /dev/null +++ b/crawler/__init__.py @@ -0,0 +1,6 @@ +""" +crawler/ — 네이버 스포츠 API 크롤링 패키지 + +네이버 API에서 데이터를 수집하고, relay 데이터를 파싱하여 +정규화된 JSON 리포트를 생성합니다. +""" diff --git a/crawler/lineup_builder.py b/crawler/lineup_builder.py new file mode 100644 index 0000000..3e2a665 --- /dev/null +++ b/crawler/lineup_builder.py @@ -0,0 +1,116 @@ +""" +crawler/lineup_builder.py — 라인업 데이터 구성 + +relay 데이터와 preview 데이터에서 라인업 정보를 추출합니다. +""" +from __future__ import annotations + +from typing import Any + +from crawler.naver_api import get_team_names + + +def get_starting_pitcher(pitchers: list[dict[str, Any]]) -> dict[str, Any] | None: + """투수 리스트에서 선발투수 추출""" + if not pitchers: + return None + return min(pitchers, key=lambda p: p.get("seqno", 999)) + + +def get_starting_batters(batters: list[dict[str, Any]]) -> list[dict[str, Any]]: + """타자 리스트에서 선발 라인업 추출""" + starters_by_order: dict[int, dict[str, Any]] = {} + for batter in sorted(batters, key=lambda b: (b.get("batOrder", 999), b.get("seqno", 999))): + bat_order = batter.get("batOrder") + if bat_order is None or bat_order in starters_by_order: + continue + starters_by_order[bat_order] = batter + return [starters_by_order[order] for order in sorted(starters_by_order)] + + +def build_lineup_team(team_name: str, lineup: dict[str, Any]) -> dict[str, Any]: + """relay 데이터의 라인업 → 정규화된 팀 라인업 dict""" + starter_pitcher = get_starting_pitcher(lineup.get("pitcher", [])) + starting_batters = get_starting_batters(lineup.get("batter", [])) + return { + "team_name": team_name, + "starter_pitcher": { + "name": starter_pitcher.get("name"), + "position": "투수", + "number": starter_pitcher.get("backnum"), + } + if starter_pitcher + else None, + "players": [ + { + "bat_order": batter.get("batOrder"), + "name": batter.get("name"), + "position": batter.get("posName"), + "number": batter.get("backnum"), + } + for batter in starting_batters + ], + } + + +def build_preview_lineup_team( + team_name: str, preview_lineup: dict[str, Any] | None, +) -> dict[str, Any] | None: + """preview 데이터의 라인업 → 정규화된 팀 라인업 dict""" + if not preview_lineup: + return None + + full_lineup = preview_lineup.get("fullLineUp") or [] + starter_pitcher = next( + ( + player + for player in full_lineup + if player.get("positionName") == "선발투수" + or int(player.get("batorder", 0) or 0) == 0 + ), + None, + ) + batters = sorted( + (player for player in full_lineup if int(player.get("batorder", 0) or 0) > 0), + key=lambda p: int(p.get("batorder", 99) or 99), + ) + + return { + "team_name": team_name, + "starter_pitcher": { + "name": starter_pitcher.get("playerName"), + "position": "투수", + "number": starter_pitcher.get("backnum"), + } + if starter_pitcher + else None, + "players": [ + { + "bat_order": int(player.get("batorder")), + "name": player.get("playerName"), + "position": player.get("positionName"), + "number": player.get("backnum"), + } + for player in batters + ], + } + + +def build_lineup_summary( + game_id: str, + game_info: dict[str, Any], + relay_data: dict[str, Any], + preview_data: dict[str, Any] | None = None, +) -> dict[str, Any]: + """전체 라인업 요약 생성 (preview 우선, relay 폴백)""" + away_name, home_name = get_team_names(game_id, game_info) + away_preview = build_preview_lineup_team( + away_name, (preview_data or {}).get("awayTeamLineUp"), + ) + home_preview = build_preview_lineup_team( + home_name, (preview_data or {}).get("homeTeamLineUp"), + ) + return { + "away_team": away_preview or build_lineup_team(away_name, relay_data["awayLineup"]), + "home_team": home_preview or build_lineup_team(home_name, relay_data["homeLineup"]), + } diff --git a/crawler/naver_api.py b/crawler/naver_api.py new file mode 100644 index 0000000..8b256f7 --- /dev/null +++ b/crawler/naver_api.py @@ -0,0 +1,197 @@ +""" +crawler/naver_api.py — 네이버 스포츠 API HTTP 클라이언트 + +모든 네이버 API 호출을 캡슐화합니다. +""" +from __future__ import annotations + +import re +from datetime import datetime +from typing import Any + +import httpx + +from core.config_loader import ( + crawler_headers, + game_type_map, + kbo_sr_id_candidates, + result_labels, + team_code_map, +) + +BASE_URL = "https://api-gw.sports.naver.com/schedule/games" +KBO_URL = "https://www.koreabaseball.com/ws/Schedule.asmx/GetScoreBoardScroll" + + +class NaverApiClient: + """네이버 스포츠 API 클라이언트 + + httpx.Client를 래핑하여 게임 정보, relay, 라인업, 기록 등을 가져옵니다. + with 문으로 사용하세요: + + with NaverApiClient() as api: + relay = api.fetch_relay(game_id) + """ + + def __init__(self, timeout: float = 20.0): + self._client: httpx.Client | None = None + self._timeout = timeout + + def __enter__(self) -> "NaverApiClient": + self._client = httpx.Client(headers=crawler_headers(), timeout=self._timeout) + return self + + def __exit__(self, *args: Any) -> None: + if self._client: + self._client.close() + self._client = None + + @property + def client(self) -> httpx.Client: + if self._client is None: + raise RuntimeError("NaverApiClient는 with 문 안에서 사용하세요.") + return self._client + + def _get_json(self, url: str) -> dict[str, Any]: + resp = self.client.get(url) + resp.raise_for_status() + return resp.json() + + # ────────────────────────────────────────── + # 게임 정보 + # ────────────────────────────────────────── + + def fetch_game_info(self, game_id: str) -> dict[str, Any]: + """게임 기본 정보""" + payload = self._get_json(f"{BASE_URL}/{game_id}") + return payload["result"]["game"] + + def fetch_relay(self, game_id: str, inning: int | None = None) -> dict[str, Any]: + """relay 데이터 (전체 또는 특정 이닝)""" + url = f"{BASE_URL}/{game_id}/relay" + if inning is not None: + url += f"?inning={inning}" + payload = self._get_json(url) + return payload["result"]["textRelayData"] + + def fetch_record(self, game_id: str) -> dict[str, Any]: + """기록 데이터 (투수/타자 기록)""" + payload = self._get_json(f"{BASE_URL}/{game_id}/record?fields=all") + return payload["result"]["recordData"] + + def fetch_preview(self, game_id: str) -> dict[str, Any]: + """프리뷰 데이터 (예비 라인업 포함)""" + payload = self._get_json(f"{BASE_URL}/{game_id}/preview") + return payload["result"].get("previewData") or {} + + # ────────────────────────────────────────── + # KBO 공식 사이트 데이터 + # ────────────────────────────────────────── + + def fetch_kbo_review_meta( + self, game_id: str, game_info: dict[str, Any], + ) -> dict[str, Any]: + """KBO 공식 사이트에서 종료시간/관중수 등 메타 정보 조회""" + game_type = infer_game_type(game_info) + candidates = kbo_sr_id_candidates().get(game_type, kbo_sr_id_candidates()["정규경기"]) + kbo_game_id = to_kbo_game_id(game_id) + + for sr_id in candidates: + resp = self.client.post( + KBO_URL, + data={ + "leId": "1", + "srId": sr_id, + "seasonId": str(game_info.get("seasonYear") or ""), + "gameId": kbo_game_id, + }, + ) + resp.raise_for_status() + payload = resp.json() + if str(payload.get("code")) != "100": + continue + if not any(payload.get(key) for key in ("END_TM", "START_TM", "USE_TM", "CROWD_CN")): + continue + return payload + + return {} + + +# ────────────────────────────────────────────── +# 유틸리티 함수 (순수) +# ────────────────────────────────────────────── + +def clean_game_id(game_id: str) -> str: + """game_id에서 알파벳+숫자만 추출""" + return "".join(re.findall(r"[A-Za-z0-9]", game_id)) + + +def get_team_names( + game_id: str, game_info: dict[str, Any] | None = None, +) -> tuple[str, str]: + """game_id 또는 game_info에서 원정/홈 팀명 추출""" + if game_info: + return game_info["awayTeamName"], game_info["homeTeamName"] + code_map = team_code_map() + away_code = game_id[8:10] + home_code = game_id[10:12] + return code_map.get(away_code, away_code), code_map.get(home_code, home_code) + + +def infer_game_type(game_info: dict[str, Any]) -> str: + """게임 정보에서 경기유형 추론""" + round_code = str(game_info.get("roundCode") or "").lower() + round_name = str(game_info.get("roundName") or "").strip() + if round_name: + return round_name + gt_map = game_type_map() + for key, label in gt_map.items(): + if key in round_code: + return label + return "정규경기" + + +def to_kbo_game_id(game_id: str) -> str: + """네이버 game_id → KBO 공식 game_id""" + return f"{game_id[:12]}0" + + +def build_iso_datetime(game_date: str | None, hhmm: str | None) -> str | None: + """날짜 + 시:분 → ISO datetime 문자열""" + if not game_date or not hhmm: + return None + time_text = hhmm.strip() + if not time_text or ":" not in time_text: + return None + hour_text, minute_text = time_text.split(":", 1) + try: + dt = datetime.fromisoformat(f"{game_date}T{int(hour_text):02d}:{int(minute_text):02d}:00") + except ValueError: + return None + return dt.isoformat() + + +def derive_umpires(record_data: dict[str, Any]) -> dict[str, str | None]: + """기록 데이터에서 심판 정보 추출""" + umpire_record = next( + (item for item in record_data.get("etcRecords", []) if item.get("how") == "심판"), + None, + ) + names = umpire_record.get("result", "").split() if umpire_record else [] + return { + "chief": names[0] if len(names) > 0 else None, + "first_base": names[1] if len(names) > 1 else None, + "second_base": names[2] if len(names) > 2 else None, + "third_base": names[3] if len(names) > 3 else None, + } + + +def extract_pitching_summary(record_data: dict[str, Any]) -> dict[str, list[str]]: + """기록 데이터에서 투수 결과 요약 추출""" + label_map = result_labels() + summary: dict[str, list[str]] = {"승리투수": [], "패전투수": [], "홀드": [], "세이브": []} + for pitcher in record_data.get("pitchingResult", []): + label = label_map.get(pitcher.get("wls")) + if label and label in summary: + summary[label].append(pitcher["name"]) + return summary diff --git a/crawler/relay_parser.py b/crawler/relay_parser.py new file mode 100644 index 0000000..66b3dd6 --- /dev/null +++ b/crawler/relay_parser.py @@ -0,0 +1,535 @@ +""" +crawler/relay_parser.py — relay 데이터 파싱 + +네이버 textRelays를 분석하여 이닝별/타석별 구조화된 이벤트로 변환합니다. +""" +from __future__ import annotations + +import re +from collections import defaultdict +from typing import Any + +from core.config_loader import ( + skip_option_types, + hidden_event_texts, + change_keywords, + max_inning, +) +from core.review_parser import parse_review_event_text + + +# ────────────────────────────────────────────── +# 정렬 키 +# ────────────────────────────────────────────── + +def _option_seqno(option: dict[str, Any]) -> int: + return int(option.get("seqno", -1)) + + +def _relay_seqno(relay: dict[str, Any]) -> int: + seqnos = [ + _option_seqno(opt) + for opt in relay.get("textOptions", []) + if opt.get("seqno") is not None + ] + return min(seqnos) if seqnos else -1 + + +# ────────────────────────────────────────────── +# 제목 추출 +# ────────────────────────────────────────────── + +def get_half_inning_title( + relays: list[dict[str, Any]], inning: int, home_or_away: int, +) -> str: + """이닝 시작 릴레이에서 제목 추출""" + for relay in relays: + for opt in relay.get("textOptions", []): + if opt.get("type") == 0: + return opt.get("text", "").strip() + half_label = "초" if home_or_away == 0 else "말" + return f"{inning}회{half_label}" + + +def _get_batter_title(relay: dict[str, Any], options: list[dict[str, Any]]) -> str: + """릴레이 블록에서 타자 이름/제목 추출""" + batter_title = next( + (opt.get("text", "").strip() for opt in options if opt.get("type") == 8), + "", + ) + if batter_title: + return batter_title + title = (relay.get("title") or "").strip() + if title and "공격" not in title and not title.startswith("="): + return title + return "" + + +# ────────────────────────────────────────────── +# 투구/주루/교체 파싱 +# ────────────────────────────────────────────── + +def _format_pitch_text(option: dict[str, Any]) -> str: + """투구 옵션 → 포맷된 텍스트""" + text = option.get("text", "").strip() + speed = str(option.get("speed") or "").strip() + stuff = str(option.get("stuff") or "").strip() + details = [] + if speed: + details.append(f"{speed}km") + if stuff: + details.append(stuff) + return f"{text} ({', '.join(details)})" if details else text + + +def _classify_pitch_result(text: str, code: str | None) -> str: + """투구 결과 텍스트 + 코드 → 정규화된 결과 코드""" + normalized = text.replace(" ", "") + if any(key in normalized for key in ("번트헛스윙", "헛스윙번트", "번트시도스트라이크")): + return "BS" + if any(key in normalized for key in ("번트파울", "번트파울.")): + return "BF" + if code in {"BS", "BF", "B", "T", "S", "F", "H"}: + return code + if code and code != "V": + return code + mapping = { + "번트 헛스윙": "BS", + "번트헛스윙": "BS", + "번트 파울": "BF", + "번트파울": "BF", + "볼": "B", + "스트라이크": "T", + "헛스윙": "S", + "파울": "F", + "타격": "H", + } + for key, value in mapping.items(): + if key in text: + return value + return "" + + +def _classify_result_type(text: str) -> str: + """결과 텍스트 → result.type 코드""" + clean_text = text.replace(" ", "") + if "낫아웃" in clean_text: + return "strikeout_not_out" + if "고의사구" in text: + return "intentional_walk" + if "볼넷" in text: + return "walk" + if "삼진" in text: + return "strikeout" + if any(k in text for k in ["몸에 맞는 볼", "몸에 맞는 공", "사구", "헤드샷"]): + return "hit_by_pitch" + if "홈런" in text: + return "home_run" + if "3루타" in text: + return "triple" + if "2루타" in text: + return "double" + if "번트안타" in text: + return "bunt_hit" + if "1루타" in text or "내야안타" in text: + return "single" + if "실책" in text and "출루" in text: + return "reach_on_error" + if "야수선택" in text: + return "reach_on_fielder_choice" + if "땅볼로 출루" in text or "땅볼출루" in text: + return "reach_on_grounder" + if "희생번트" in text: + return "sacrifice_bunt" + if "희생플라이" in text: + return "sacrifice_fly" + if "병살타" in text: + return "double_play" + if any(k in text for k in [ + "플라이 아웃", "땅볼 아웃", "인필드플라이 아웃", + "라인드라이브 아웃", "직선타 아웃", "라인드라이브", "직선타", + ]): + return "out" + return "play" + + +def _parse_runner_event(text: str) -> dict[str, Any]: + """주루 이벤트 텍스트 → 구조화된 dict""" + event_type = "runner_event" + if "도루" in text: + event_type = "steal_fail" if "실패" in text else "steal" + elif "홈인" in text: + event_type = "score" + elif "포스아웃" in text: + event_type = "force_out" + elif "견제사" in text: + event_type = "pickoff_out" + elif "태그아웃" in text: + event_type = "tag_out" + elif "실책" in text: + event_type = "error_advance" + elif "폭투" in text: + event_type = "wild_pitch_advance" + elif "포일" in text: + event_type = "passed_ball_advance" + elif "진루" in text: + event_type = "advance" + + from_base = None + to_base = None + for label, base in (("1루주자", 1), ("2루주자", 2), ("3루주자", 3), ("1루", 1), ("2루", 2), ("3루", 3)): + if label in text and from_base is None: + from_base = base + for label, base in (("1루까지", 1), ("2루까지", 2), ("3루까지", 3)): + if label in text: + to_base = base + if "홈인" in text: + to_base = 4 + + runner_name = ( + text.split(" : ", 1)[0] + .replace("1루주자 ", "") + .replace("2루주자 ", "") + .replace("3루주자 ", "") + .replace("대주자 ", "") + .strip() + ) + + extra_advance = 0 + if "주자의 재치로" in text and from_base is not None and to_base is not None: + extra_advance = max(0, to_base - from_base) + + # action_label: 관리자 사이트 버튼 라벨 매핑 + clean_text = text.replace(" ", "") + if "실책으로" in clean_text: + action_label = "수비 실책" + elif "도루" in clean_text: + action_label = "도루성공" if "실패" not in clean_text else "도루시도 아웃" + elif "폭투" in clean_text: + action_label = "폭투-진루성공" + elif "포일" in clean_text: + action_label = "포일-진루성공" + elif "태그" in clean_text: + action_label = "태그아웃" + elif "포스" in clean_text: + action_label = "포스아웃" + elif "견제" in clean_text: + action_label = "견제 아웃" + elif any(k in clean_text for k in ["볼넷", "포볼", "고의사구", "몸에맞는", "사구"]): + action_label = "볼넷 진루" + else: + action_label = "일반 진루" + + return { + "type": event_type, + "runner": runner_name, + "fromBase": from_base, + "toBase": to_base, + "extra_advance": extra_advance, + "text": text, + "action_label": action_label, + } + + +def _parse_change_event(text: str) -> dict[str, Any]: + """교체 텍스트 → 구조화된 dict""" + event: dict[str, Any] = { + "event_type": "change", + "change_type": "position_change" if "수비위치 변경" in text else "substitution", + "text": text, + } + actor_role, batter_order, actor_name = _extract_change_actor(text) + event["actor_role"] = actor_role + event["actor_name"] = actor_name + if batter_order: + event["bat_order"] = int(batter_order) + + if "수비위치 변경" in text: + to_position = text.split(" : ", 1)[1].split("(으)로", 1)[0].strip() + event["player_name"] = actor_name + event["to_position"] = to_position + return event + + rhs = text.split(" : ", 1)[1].split("(으)로 교체", 1)[0].strip() + in_role, _, in_name = _extract_change_actor(rhs) + event["out_player"] = actor_name + event["in_player"] = in_name + event["in_role"] = in_role + + field_roles = {"투수", "포수", "1루수", "2루수", "3루수", "유격수", "좌익수", "중견수", "우익수"} + if actor_role in field_roles and in_role == "투수": + event["change_type"] = "merged_pitcher_substitution" + event["player_name"] = actor_name + event["to_position"] = "지명타자" + event["pitcher_in_player"] = in_name + return event + + extra_roles = field_roles | {"대타", "대주자"} + if in_role in extra_roles: + event["to_position"] = in_role if in_role not in {"대타", "대주자"} else None + return event + + +def _extract_change_actor(text: str) -> tuple[str | None, str | None, str]: + """교체 텍스트에서 역할/타순/이름 추출""" + lhs = text.split(" : ", 1)[0].strip() + if "번타자 " in lhs: + order_match = re.search(r"(\d+)번타자\s+(.+)$", lhs) + if order_match: + return "batter", order_match.group(1), order_match.group(2).strip() + for role in ( + "대타", "대주자", "1루주자", "2루주자", "3루주자", "주자", + "투수", "포수", "1루수", "2루수", "3루수", + "유격수", "좌익수", "중견수", "우익수", + ): + if lhs.startswith(role + " "): + return role, None, lhs[len(role):].strip() + return None, None, lhs + + +# ────────────────────────────────────────────── +# 주루 이벤트 병합 +# ────────────────────────────────────────────── + +def _merge_runner_events(runner_events: list[dict[str, Any]]) -> list[dict[str, Any]]: + """동일 주자의 이벤트를 병합""" + merged: dict[str, dict[str, Any]] = {} + for r in runner_events: + name = r.get("runner") + if not name: + continue + if name in merged: + merged[name]["type"] = r.get("type", merged[name]["type"]) + merged[name]["text"] += f" / {r.get('text', '')}" + if r.get("toBase"): + merged[name]["toBase"] = r["toBase"] + if r.get("extra_advance"): + merged[name]["extra_advance"] = r["extra_advance"] + if "태그아웃" in r.get("text", "") or r.get("type") == "tag_out": + merged[name]["type"] = "tag_out" + else: + merged[name] = dict(r) + return list(merged.values()) + + +# ────────────────────────────────────────────── +# 릴레이 → 이벤트 리스트 변환 +# ────────────────────────────────────────────── + +def build_relay_events(relay: dict[str, Any]) -> list[dict[str, Any]]: + """하나의 릴레이 블록 → 타석/교체 이벤트 리스트""" + skip_types = skip_option_types() + hidden_texts = hidden_event_texts() + chg_keywords = change_keywords() + + options = sorted(relay.get("textOptions", []), key=_option_seqno) + + # 1. 세그먼트 분리 (pitchNum 1이 새로 나오면 타자가 바뀐 것) + segments: list[list[dict[str, Any]]] = [] + current_segment: list[dict[str, Any]] = [] + + for opt in options: + opt_type = opt.get("type") + if opt_type == 1 and opt.get("pitchNum") == 1: + if any(o.get("type") == 1 for o in current_segment): + segments.append(current_segment) + current_segment = [] + current_segment.append(opt) + if current_segment: + segments.append(current_segment) + + # 2. 각 세그먼트별 이벤트 생성 + results: list[dict[str, Any]] = [] + relay_batter_title = _get_batter_title(relay, options) + + for i, seg_options in enumerate(segments): + seg_changes: list[dict[str, Any]] = [] + seg_event_texts: list[str] = [] + seg_pitches: list[dict[str, Any]] = [] + seg_runner_events: list[dict[str, Any]] = [] + seg_review_events: list[dict[str, Any]] = [] + seg_extra_events: list[dict[str, Any]] = [] + seg_result_text: str | None = None + + seg_batter_name: str | None = next( + (o.get("text", "").strip() for o in seg_options if o.get("type") == 8), + None, + ) + + for opt in seg_options: + ot = opt.get("type") + txt = opt.get("text", "").strip() + if not txt or ot in skip_types: + continue + if txt in hidden_texts: + continue + if any(k in txt for k in chg_keywords): + seg_changes.append(_parse_change_event(txt)) + continue + + if ot == 1: + seg_event_texts.append(_format_pitch_text(opt)) + seg_pitches.append({ + "pitchNo": opt.get("pitchNum"), + "pitchResult": _classify_pitch_result(txt, opt.get("pitchResult")), + "pitchResultText": txt.replace(f"{opt.get('pitchNum')}구 ", "", 1), + "speedKmh": int(opt["speed"]) if opt.get("speed") not in (None, "") else None, + "pitchType": opt.get("stuff"), + "runnerEvents": [], + }) + continue + + if ot == 14: + if seg_pitches: + seg_pitches[-1]["runnerEvents"].append(_parse_runner_event(txt)) + else: + seg_runner_events.append(_parse_runner_event(txt)) + continue + if ot == 24: + seg_runner_events.append(_parse_runner_event(txt)) + continue + + seg_event_texts.append(txt) + if "비디오 판독" in txt or "합의 판정" in txt: + seg_review_events.append(parse_review_event_text(txt)) + elif "체크스윙" in txt: + seg_extra_events.append({"type": "appeal_or_judgement", "text": txt}) + elif any(r in txt for r in ["1루주자", "2루주자", "3루주자", "대주자", "도루", "홈인", "포스아웃"]) or ("진루" in txt and "출루" not in txt): + seg_runner_events.append(_parse_runner_event(txt)) + else: + seg_result_text = txt + if " : " in txt and seg_batter_name is None: + name_part = txt.split(" : ", 1)[0].strip() + if name_part and len(name_part) < 10: + seg_batter_name = name_part + + if not seg_batter_name: + seg_batter_name = relay_batter_title if i == 0 else "" + + # 주루 이벤트 병합 + for p in seg_pitches: + p["runnerEvents"] = _merge_runner_events(p["runnerEvents"]) + seg_merged_runners = _merge_runner_events(seg_runner_events) + + # 타자 결과 객체 + res_obj = None + if seg_result_text: + base_type = _classify_result_type(seg_result_text) + res_obj = {"type": base_type, "text": seg_result_text} + + b_name = seg_batter_name.split()[-1] if seg_batter_name else "" + final_runners = [] + for r in seg_merged_runners: + if b_name and r.get("runner") == b_name: + if base_type in {"single", "double", "triple"}: + r_type = r.get("type", "") + if r_type in {"tag_out", "force_out", "steal_fail", "pickoff_out"}: + res_obj["type"] = f"{base_type}_runner_out" + elif r_type == "error_advance": + res_obj["type"] = f"{base_type}_error_advance" + if r.get("toBase"): + res_obj["toBase"] = r["toBase"] + if r.get("extra_advance"): + res_obj["extra_advance"] = r["extra_advance"] + else: + final_runners.append(r) + seg_merged_runners = final_runners + + if seg_changes: + results.extend(seg_changes) + + if seg_event_texts: + full_txt = ( + f"{seg_batter_name} : " + ", ".join(seg_event_texts) + if seg_batter_name + else ", ".join(seg_event_texts) + ) + results.append({ + "event_type": "at_bat", + "batter": seg_batter_name, + "rawText": full_txt, + "pitches": seg_pitches, + "result": res_obj, + "runnerEvents": seg_merged_runners, + "reviewEvents": seg_review_events, + "extraEvents": seg_extra_events, + "changes": [], + }) + + return results + + +# ────────────────────────────────────────────── +# 이닝 빌드 +# ────────────────────────────────────────────── + +def build_half_inning( + inning: int, home_or_away: int, relays: list[dict[str, Any]], +) -> dict[str, Any]: + """한 이닝의 한 쪽(초/말) 데이터를 구성""" + title = get_half_inning_title(relays, inning, home_or_away) + raw_events: list[dict[str, Any]] = [] + + for relay in sorted(relays, key=_relay_seqno): + raw_events.extend(build_relay_events(relay)) + + # 같은 타자의 연속 타석 병합 + merged_events: list[dict[str, Any]] = [] + for event in raw_events: + if not merged_events or event.get("event_type") != "at_bat": + merged_events.append(event) + continue + + prev = merged_events[-1] + if prev.get("event_type") != "at_bat": + merged_events.append(event) + continue + + current_pitches = event.get("pitches") or [] + first_pitch_no = current_pitches[0].get("pitchNo", 0) if current_pitches else 0 + is_same_batter = prev.get("batter") == event.get("batter") + + if first_pitch_no > 1 or is_same_batter: + prev["pitches"].extend(current_pitches) + if event.get("result"): + prev["result"] = event["result"] + if event.get("rawText"): + current_txt = event["rawText"] + if " : " in current_txt: + current_txt = current_txt.split(" : ", 1)[1] + prev["rawText"] += " / " + current_txt + prev["runnerEvents"].extend(event.get("runnerEvents") or []) + prev["reviewEvents"].extend(event.get("reviewEvents") or []) + prev["extraEvents"].extend(event.get("extraEvents") or []) + continue + + merged_events.append(event) + + return { + "inning": inning, + "half": "top" if home_or_away == 0 else "bottom", + "title": title, + "events": merged_events, + } + + +def parse_inning_value(val: Any, default: float) -> float: + """이닝 인수 파싱 ('1T' → 1.0, '3B' → 3.5)""" + if val is None: + return default + s = str(val).upper().strip() + if not s: + return default + m = re.match(r"^(\d+)([TB]?)$", s) + if not m: + try: + return float(s) + except ValueError: + return default + num = int(m.group(1)) + suffix = m.group(2) + if suffix == "T": + return float(num) + if suffix == "B": + return num + 0.5 + return float(num) diff --git a/crawler/report_builder.py b/crawler/report_builder.py new file mode 100644 index 0000000..4de369b --- /dev/null +++ b/crawler/report_builder.py @@ -0,0 +1,270 @@ +""" +crawler/report_builder.py — 최종 JSON 리포트 생성 + +네이버 API 데이터를 수집하고, relay 파싱 결과를 합쳐서 +정규화된 게임 리포트 JSON을 생성/저장합니다. +""" +from __future__ import annotations + +import json +from collections import defaultdict +from pathlib import Path +from typing import Any + +from core.config_loader import max_inning + +from crawler.naver_api import ( + NaverApiClient, + build_iso_datetime, + clean_game_id, + derive_umpires, + extract_pitching_summary, + get_team_names, + infer_game_type, +) +from crawler.relay_parser import build_half_inning, parse_inning_value +from crawler.lineup_builder import build_lineup_summary + + +# ────────────────────────────────────────────── +# 이닝 데이터 수집 +# ────────────────────────────────────────────── + +def collect_inning_data( + api: NaverApiClient, + game_id: str, + start_inning_val: str | None = None, + end_inning_val: str | None = None, +) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]: + """모든 이닝 relay 데이터를 수집하여 구조화""" + innings: list[dict[str, Any]] = [] + raw_relays: list[dict[str, Any]] = [] + + start_score = parse_inning_value(start_inning_val, 0.0) + end_score = parse_inning_value(end_inning_val, 99.0) + + for inning in range(1, max_inning() + 1): + try: + relay_data = api.fetch_relay(game_id, inning=inning) + except Exception: + break + + relays = relay_data.get("textRelays", []) + if not relays: + break + + grouped: dict[int, list[dict[str, Any]]] = defaultdict(list) + for relay in relays: + grouped[int(relay.get("homeOrAway", -1))].append(relay) + raw_relays.append(relay) + + for home_or_away in (0, 1): + half_relays = grouped.get(home_or_away, []) + if not half_relays: + continue + current_score = inning + (0.5 if home_or_away == 1 else 0.0) + if current_score < start_score or current_score > end_score: + continue + innings.append(build_half_inning(inning, home_or_away, half_relays)) + + return innings, raw_relays + + +# ────────────────────────────────────────────── +# 점수 타임라인 & 블론세이브 +# ────────────────────────────────────────────── + +def _collect_score_timeline(raw_relays: list[dict[str, Any]]) -> list[dict[str, Any]]: + timeline: list[dict[str, Any]] = [] + for relay in raw_relays: + for option in relay.get("textOptions", []): + state = option.get("currentGameState") or {} + if not state: + continue + timeline.append({ + "seqno": option.get("seqno"), + "home_score": int(state.get("homeScore", 0)), + "away_score": int(state.get("awayScore", 0)), + }) + timeline.sort(key=lambda item: item["seqno"]) + return timeline + + +def _collect_blown_saves( + raw_relays: list[dict[str, Any]], away_name: str, home_name: str, +) -> list[str]: + timeline = _collect_score_timeline(raw_relays) + blown_save_pitchers: list[str] = [] + + pitcher_entries: list[dict[str, Any]] = [] + for relay in raw_relays: + inning = int(relay.get("inn", 0) or 0) + if inning < 7: + continue + batting_side = int(relay.get("homeOrAway", -1)) + pitcher_team = "home" if batting_side == 0 else "away" + pitcher_team_name = home_name if pitcher_team == "home" else away_name + + for option in relay.get("textOptions", []): + if option.get("type") != 2: + continue + player_change = option.get("playerChange") or {} + in_player = player_change.get("inPlayer") or {} + if in_player.get("playerPos") != "투수": + continue + state = option.get("currentGameState") or {} + pitcher_entries.append({ + "name": in_player.get("playerName"), + "team": pitcher_team, + "team_name": pitcher_team_name, + "entry_seqno": option.get("seqno"), + "home_score": int(state.get("homeScore", 0)), + "away_score": int(state.get("awayScore", 0)), + }) + + for entry in pitcher_entries: + team_score = entry["home_score"] if entry["team"] == "home" else entry["away_score"] + opp_score = entry["away_score"] if entry["team"] == "home" else entry["home_score"] + if team_score <= opp_score: + continue + for state in timeline: + if state["seqno"] <= entry["entry_seqno"]: + continue + current_team = state["home_score"] if entry["team"] == "home" else state["away_score"] + current_opp = state["away_score"] if entry["team"] == "home" else state["home_score"] + if current_team <= current_opp: + blown_save_pitchers.append(entry["name"]) + break + + return sorted(set(blown_save_pitchers)) + + +# ────────────────────────────────────────────── +# 게임 정보 빌드 +# ────────────────────────────────────────────── + +def _build_game_info( + game_info: dict[str, Any], + record_data: dict[str, Any], + review_meta: dict[str, Any], +) -> dict[str, Any]: + end_time = build_iso_datetime(game_info.get("gameDate"), review_meta.get("END_TM")) + return { + "date": game_info.get("gameDate"), + "stadium": game_info.get("stadium"), + "start_time": game_info.get("gameDateTime"), + "end_time": end_time, + "season": game_info.get("seasonYear"), + "game_type": infer_game_type(game_info), + "home_team": game_info.get("homeTeamName"), + "away_team": game_info.get("awayTeamName"), + "attendance": review_meta.get("CROWD_CN"), + "umpires": derive_umpires(record_data), + } + + +def _build_pitcher_section( + record_data: dict[str, Any], + raw_relays: list[dict[str, Any]], + away_name: str, + home_name: str, +) -> dict[str, list[str]]: + summary = extract_pitching_summary(record_data) + summary["블론세이브"] = _collect_blown_saves(raw_relays, away_name, home_name) + return summary + + +# ────────────────────────────────────────────── +# 리포트 빌드 & 저장 +# ────────────────────────────────────────────── + +def build_report( + game_id: str, + start_inning: str | None = None, + end_inning: str | None = None, +) -> dict[str, Any]: + """게임 ID로 전체 리포트 생성 + + 네이버 API 4종 + KBO 메타를 수집하여 정규화된 JSON dict 반환. + """ + game_id = clean_game_id(game_id) + + with NaverApiClient() as api: + relay_data = api.fetch_relay(game_id) + record_data = api.fetch_record(game_id) + game_info = api.fetch_game_info(game_id) + preview_data = api.fetch_preview(game_id) + review_meta = api.fetch_kbo_review_meta(game_id, game_info) + + lineup_summary = build_lineup_summary(game_id, game_info, relay_data, preview_data) + innings, raw_relays = collect_inning_data( + api, game_id, + start_inning_val=start_inning, + end_inning_val=end_inning, + ) + pitcher_section = _build_pitcher_section( + record_data, raw_relays, + lineup_summary["away_team"]["team_name"], + lineup_summary["home_team"]["team_name"], + ) + + return { + "game_id": game_id, + "game_info": _build_game_info(game_info, record_data, review_meta), + "lineups": lineup_summary, + "game_contents": innings, + "pitching_summary": pitcher_section, + } + + +def filter_report( + report: dict[str, Any], + inning: str | None = None, + lineup_only: bool = False, + start_inning: str | None = None, + end_inning: str | None = None, +) -> dict[str, Any]: + """리포트에서 특정 이닝만 필터링""" + filtered = json.loads(json.dumps(report, ensure_ascii=False)) + + if lineup_only: + filtered["game_contents"] = [] + filtered["pitching_summary"] = { + "승리투수": [], "패전투수": [], "홀드": [], "세이브": [], "블론세이브": [], + } + return filtered + + start_v = parse_inning_value(start_inning, 0.0) + end_v = parse_inning_value(end_inning, 99.0) + + if inning is not None: + iv = parse_inning_value(inning, 0.0) + start_v = iv + end_v = iv + 0.5 + + filtered["game_contents"] = [ + half + for half in filtered.get("game_contents", []) + if start_v <= ( + float(half.get("inning") or 0) + + (0.5 if half.get("half") == "bottom" else 0.0) + ) <= end_v + ] + return filtered + + +def save_report( + report: dict[str, Any], + output_dir: Path, + output_json: Path | None = None, +) -> Path: + """리포트를 JSON 파일로 저장""" + output_dir.mkdir(parents=True, exist_ok=True) + game_id = report["game_id"] + json_path = output_json or (output_dir / f"{game_id}_report.json") + json_path.parent.mkdir(parents=True, exist_ok=True) + json_path.write_text( + json.dumps(report, ensure_ascii=False, indent=2), + encoding="utf-8", + ) + return json_path diff --git a/my_profile/BrowserMetrics/BrowserMetrics-69F5A518-63E9.pma b/my_profile/BrowserMetrics/BrowserMetrics-69F5A518-63E9.pma new file mode 100644 index 0000000000000000000000000000000000000000..054df0c67298f14e2a4ca524a6a592c974d625b2 GIT binary patch literal 4194304 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+0D=GC4jl^s0000C^0%JGjzY+Q0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ J0|pFS1_D(9O(Cur0m! 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 CZ(?l# literal 0 HcmV?d00001 diff --git a/my_profile/Default/Affiliation Database-journal b/my_profile/Default/Affiliation Database-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/BookmarkMergedSurfaceOrdering b/my_profile/Default/BookmarkMergedSurfaceOrdering new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/my_profile/Default/BookmarkMergedSurfaceOrdering @@ -0,0 +1,2 @@ +{ +} diff --git a/my_profile/Default/Cache/Cache_Data/13d9afa0c3ccf0e2_0 b/my_profile/Default/Cache/Cache_Data/13d9afa0c3ccf0e2_0 new file mode 100644 index 0000000000000000000000000000000000000000..577d8b561067aa75846d709bd5a9fd75d7869c8a GIT binary patch literal 24854 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 Z|IV-ehvM&7pzYHy{`$|qhMnQh4*+K2YB2x+ literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/20f8a7ac591e3cfb_0 b/my_profile/Default/Cache/Cache_Data/20f8a7ac591e3cfb_0 new file mode 100644 index 0000000000000000000000000000000000000000..2818a70098d96ddd4a9088ad2a7dc1d8424ac888 GIT binary patch literal 11499 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 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/36999aedce6b9850_0 b/my_profile/Default/Cache/Cache_Data/36999aedce6b9850_0 new file mode 100644 index 0000000000000000000000000000000000000000..6cc965c40d591c5e875318b63b192487f0d2d4aa GIT binary patch literal 660 zcmaJ;J%|%Q6n@E_qR16urPqvyg+(&EGuhqjjvN^8;`wtq4_y#JIVRcJ&EoBD*o<%y z3+)6;4;5@|M6eNTY-|J(kyP3UmSU?SD)@86w*kRJ@xgmD^S#G>?|siao8OyGe*D}5 z05STjOS>@wFvB!fg7Yg~t$V^SY?pHGQEt~Lb6oOYG)`osXq2sn7qgUhvcwo8eM1IG zoEl*+6V=Z0K;<-w!-b=VT~C&v1eXDZ!y$6-{We*&0F@#XnSd5X5T-T z5T5;XW2s0NwvNCAOkUlJ_qXT1J_{chuzqdxxgBec`2MoNC?ni7$%*4IFSQcnl++bs za?+9mOmK&ob;0VwvdBWqhq)}(D%I6Rl}5TNh*g6|r=xnhdQzs5>I>2yXw`?NFC#%_ z92Pj1?RkQ?XJAqGb+wfRaTu#W5Wjl?i5zlFrUelvCKJ3a?Aj(Gf6&9G#)=sz56sC< zS5=EP@@!R*M6Oj)-dS#YIE4w#wO*VTZJbs?g|ONmV=!UiB;NS%c)bNj)U)I^g`P*`cCw}7Ks@77fvIcNZRdpg7LmbXjlfjHeNp5H+|*I((Okd npKsd}l-_)J^6u%O`)tRTJNqBsegAu(6IgqFGQJ)n2{F literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/3fdc6fba64f26c1c_0 b/my_profile/Default/Cache/Cache_Data/3fdc6fba64f26c1c_0 new file mode 100644 index 0000000000000000000000000000000000000000..87afd26a4f319cc62cbf18908572948ea82eac85 GIT binary patch literal 3187 zcmb7G-ES0C6d!{cx3T^MJb2s?X146k>~239z9h5-v`ZVhNJ43v+nKw&1G78hd~{hz z6(b;oKA4yS)fPqZ6B99j=>yNkzrgswi*JO^1`~NvN%Y)%ceh)MByQTdGv}V~bMEil z^il82jpe@{KPO320sr3{T!`T!Wwf+5Wged@1%az;TJM0G&2Ck*z1?c2Zvg%WRUb$X zY}KlCT07=zMcbJswrV)#vQtr!(ACx10bQ{2?Q(SW{rZ)8h|b@@w`l1K;8%2U307{M zt}k5ST(7#sBW0+BW%23JAoMEiUF+;9gcT#OoC^3fI1rYnsiz=g0#0>y!~`QK+EH_h zR#XG(2YfRDy8w0ibbo~tl8{L!K!^0U&W_p6jy9!Xh580@>Ark!L@5PjdyV2vN_@L% z&49Kuo>1AYU_nDC0wvK@)(o~jw-jAIyK?cygXNn~3&gM;pN=`Ml3+0ej;p$k8@f4C zAw}w`e0zk{Fi>Wq8DxRjKK-{zN{TjxK@!k0%Q#LwOzv{@!y>mXTo9=Zh*zXR8{^8{ z>FC{ep5`U;4>9el$`zqyO@=D8+NM?6)Z|IRsTlemGfC|LDN}#Ezbz#6t}ddRgMV*YndL(c|Q?`w-IA1nfXwI>`K z1nQU1M<0F-^@aK9>gU+}?fbrUl0toME?T;aJS!hxXx}uPu!7=z_rcA@==_>vVmk)G zqDPmOqf57=vlrVXP3&ff&Rk#l=4?9|1?*{J9EWJ(%*tnTQ2*!*L>I5uFI}k5e**RS zuUaP79KFtt8REfId0j?!;90e8Y{s^eWO}69o;C$Dk_5~{5?HWF;87((xSs^(DiRx> zA*bjos{qP+iwRak;Tt;=__v-1cEGyYseZ|+DyNvVu&X!i3x#in2pNYwTW9r4GFkyE zAJkl`bJv>`=BzGU=DMu16|ksu5nGGKW7Hd=GAbgXiwcpkiDL?#p_M=c8;h|7d(_7a zqx%z+EI2{L-X=)m%qsg(eb=@EMV=boKQc6RXl!J3_u$mQq47f_`6-zLMJ&dW#|2*z z6@ty1fy>&oQVdG46A%V@HZV}f1BIEl&`f$8F5BCAk+5Y;iLRBO5JgiWjLuNvCIF2X@6@i+U zhvm%Vyj81WI#rwu)GC&6AV3P!U&BBVVTAL%Aeh+RR^D+xwF9zgHi{b2ulHXSNUIvY zuf)+Vf}&aD8ZlA$*V)mWImE^Gf(N(m)X&|4y@!XMJ^c4JXp&j}pEv9TlKnij{UwZ*tw z-GtbKVoe2jPPF35#+6DFS1K*!!$_m16*!*EC7%qqa+i9{EpB5^%9f&4K#w!&Y)=<| zWRuXn3c~UIEG58l0u1$h?6hXOny0V<7*E2B#)%i`vKBEgjT1bTld4PnfbL_rCwaS7 zE`skFJK_u(gg9b@%20QVAVOjAalCFJpz%%+@E}SXqnJ>Rhl8|05NX8qNX+qHc6VML za{heu3|?_>9r^t&cGYFSG!iyQ&z^oB->Y{Y{aE-;lYV`;cD;{#`||lQEu&`G$%N6@ zrE%)bP)~>5E-^|pwa2MB0c8x*Zo{B%kUB^zMe6G?UBg?aG?XVr9S&>pY+rwOD$~>5 zpH2^?vze`#zPL1k@uzZ*X%#GL>X0vmSdcz=Ews^ErWev_y|-KM$-v%RUfSbS0z{uw zp3fk5ye-j9+A%Uie8aQcpv5%8VIA){XjK}-^QOZ%!GW93LXOl>d$teK{d%Tf@9E*% zrI#?)wRe6=T6kHKSl<4|A1=~;=l-$BUmQ8Q{M)Bv_eOVVw|_eK_Kn-u68AQK|H8u; U_w+S$y#aau=&%0V!-Vno4;KX5x&QzG literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/63f351f1930af849_0 b/my_profile/Default/Cache/Cache_Data/63f351f1930af849_0 new file mode 100644 index 0000000000000000000000000000000000000000..71104ed64f01cc06e065380c81512d6be892bc73 GIT binary patch literal 79122 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 C1Au4% literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/66d04e225683fe99_0 b/my_profile/Default/Cache/Cache_Data/66d04e225683fe99_0 new file mode 100644 index 0000000000000000000000000000000000000000..a70a165298cad9d58adbceded430172b914436d2 GIT binary patch literal 1387 zcmcIk&ui2`6rNJ`rvHEir}d;XnI!wO*)*{2t}bY8v3pU(GMk;-cqSSP}-r}KD zS~T$do>`|Z59nlBc+{VaXc#FG6JD$2aGwiv)%7GRHK?=P7Q7oamDGGSXXGk{d?_J{ zyvNKmjLurAk88%6u5b)?6`gb%=VXdb~Hby*}?6Lt~r3Ws4Yf@mbBE7bF8 z!)K~R4v0<&*v%Z3;;|2N6rJ0+0IUA~ z``gw_f?kjO7+N>M7pqHjRZpb71Hs;idlM}(vBHFj(}zKsA||K1vZWONp>DIVEnO2&6*8zoC7f8KauRC>o})c%Xht4u1ye7W*(|;} zS4Swm!0=m#(DoIC;`{x90SnrCXKp+nseIY{uu*J}J=?oht-2qdZdb-{ts0w8u74e9 QG78v-yRYUy#fM=01tp}+3;+NC literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/7f62be85fe6088aa_0 b/my_profile/Default/Cache/Cache_Data/7f62be85fe6088aa_0 new file mode 100644 index 0000000000000000000000000000000000000000..566e28c462897a0dc8740c6a0f3736dde15dde28 GIT binary patch literal 1489 zcmXqrDOxU_`}+?o0|P@k5YJcG*9D{)4D}84<5RNZGfGMdtn~FwE%c0xEcJ{`jr9!8 zEEMpHX67cQr|PBW=cHBT=jkQq=jww+iuDsyax?SvGn4c4;?weTQuNX@)7(AXEG!c_ z88{ifGcY`TckjW)b^gTej~`y&zkTV`r+44Ke>u2g`SiWyr$9vlUuAuz~7K=CIF*hM-Z5|k$#INTZRJ0v^;j<7ef zvU90?SfA+3!)#sg;lq0777k{13y%-}2Uxh7ojYVClN8wbr2c8{U`R+{V;1^nYSEDJ zfQgIMET0kr$8|oP<7#SES_7A6p|`SQi~Z}LlV=i6qL*i zQ_M_EEiJ8#%@UOud=iUGbba$vGSf0sQ>+w1GD?9~nJIWB=7Fp-QZO*IGBUR^HAb;2 zq_P0$EO3FN4=i68oD-8XQguNNDay~WQpioL&;^!GwnnCwKz|r8xKYg zU}%iw5hE)Tb1R@VAdfhv0}VAaGc~s`G6IGZFAy7A80Z;V80ncA>zSDW`2j!-3RET_ z76f99QV=MnfK6O4y(BkLFQYg)1zcDHOQ`=qWel$~Huh~_DW|t*v*L%THWxkSN4~zf fW9#ms&y)NLDsoC5!{U<}sMdP_8Zj>s|e?tZ!D;sa;z7(3Tc&(Q2eho4W~dF9^o_w$e3=-GVc>hljPPT$isbiR7~ zN%5o&k6wNVO02G1av;25;+v1(W}W%H_wL{0kN>W}_UGx_uN`ZyEWh-7+pRyJzWwUo zaOMC1|3FVE{$ycfV31?b0r?PQrvq#K0wEUeB$dEd7W2e?uWpOok`_Fpp&;z(=>y#C zN|^;}5@(WsTKF*aFdTDQ`b$fO!C}$^#&lEO_6H4(xl&!f3^+6lPH-A^-mDVa(^q%@ z;SWVN8`c`h)+7PJrmEIf1}O;^ebMHgUJ-sKJ{iNrtSn(>KB2_|0xT>{Ow7zY0*VaQ zHynAVyXOD;0(2R}fma8%f!qcHQ-A`@3@jaNK(=|@w_|DR^%>rEq0-zyH69@$0s4k| zh6+Xo1`7V(3@(W!sa6WXi6uG;21W|LiIqSJBQpg9b1Or0D-#n1ci#{O=lr~q)Vva1 zpVYkck_;;aBU1|o$K>SHf)d@J#Ju#>Vk?ED%97M#2G@|pbSniVGs6@!6H`k|D?8S9yu0r>$y3<_H&AQl8-jN}OvQ@|#! zmtK;asFzWkoB~e8z$64pLkx$?gnDfks(un(H*M+yCceu?-(P%hN`KmTl{;Nu{Y9IU6zuQwi#CkJ7Keg1cx?axNJiEs=xFT_s3<>lk?llR-o+NXtgOVi-om(1ehoICKR zSkCQ2@lEsx8y+xX2F&ixvGwZBV6Xa;2Vb8bo#$B2MNKR47-1+10=#k=tWwV)@EY|J zP!M6Bw%7+zhC-U)G)YNtJ+FbR>v)Faahrx?dNl%ZN(Pxq#i)DSRqB{VlfZJzGnyc$ zQIo*9jCDCBsVY&$IM}33kITEdRkaMAK&`gTlw`O;olr@H0w!XbNXa8gTC2{wicH~| z4IoP^HG>QLXt-Mh+H{9w4xSe!l^sI>xt+Sz2;0cJ4y%sg#&%Tw_c{kQ oZ&&1RvFxehvq#@QNZhNSIG;H7`bXx_%NbVl=fd9Z!%&>XFPO~hTL1t6 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/b56cc14f6e606ea0_0 b/my_profile/Default/Cache/Cache_Data/b56cc14f6e606ea0_0 new file mode 100644 index 0000000000000000000000000000000000000000..605a6d99a877a721ad1e7b329255c64582c1b903 GIT binary patch literal 7825 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 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/Cache_Data/cd46246e2a12c82d_0 b/my_profile/Default/Cache/Cache_Data/cd46246e2a12c82d_0 new file mode 100644 index 0000000000000000000000000000000000000000..8f4ca5ee3662a876fd69c5a7c052d909dfe78934 GIT binary patch literal 899 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 Iet_K#0Ei%Jn*aa+ literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cache/No_Vary_Search/journal.baj b/my_profile/Default/Cache/No_Vary_Search/journal.baj new file mode 100644 index 0000000..54fe66e --- /dev/null +++ b/my_profile/Default/Cache/No_Vary_Search/journal.baj @@ -0,0 +1 @@ +$F~ \ No newline at end of file diff --git a/my_profile/Default/Cache/No_Vary_Search/snapshot.baf b/my_profile/Default/Cache/No_Vary_Search/snapshot.baf new file mode 100644 index 0000000000000000000000000000000000000000..8912405f361089375a773ff93370d55411ac14de GIT binary patch literal 20 ScmYfLnR7+=X^ZpJg!64ZMLf4 zvkQU!BDJOCg?u<12{u$lqbKuq-RslbZolUCdbGT)zI>m{=hy3lWqPf>rp1TlU|IotGofDOWWf#_l-gl*mCVnEL9t{t zlsO=p0|O$m7Ot!V=X$s!GB&`RaBc+qCOD7_{ch;;Lcuop=?5bKW4qx}A-pPrxV++z z5-2$cyDH&P2xcNs7?rVFIYY$jz;Rk~676ST>YUvDJgjVlw!6@D51QK{vje_Af$cpo z-Ya+PlRO4xFL71Oy_VeGLi&*8_6~C6(D)vfjzRB7h)qD&Cpl*lEK^V{LZVwZrXlSM z9Q!7PpOH1QaN!TM2m?jAQcQ@ODT;*fFHp3a6mP7GBbvl?g~vSnwaGc09jMsjx&PE_ hBuZoBhRszJ>%Sg2YjjV}*F0HQ$2I$d=ThTj`wQQKm*D^a literal 0 HcmV?d00001 diff --git a/my_profile/Default/Code Cache/js/749d48cfaad904d2_0 b/my_profile/Default/Code Cache/js/749d48cfaad904d2_0 new file mode 100644 index 0000000000000000000000000000000000000000..c7b7a921293eb85f3ac7a0f2f113c83778b4a185 GIT binary patch literal 222 zcmXqrDOxU_`}+?o0|SE}5TE(yAq}J$;-FJ^3X>hZ SOS=NZ;NmP0Jv{zj!Ri3{hZhY1 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Code Cache/wasm/index b/my_profile/Default/Code Cache/wasm/index new file mode 100644 index 0000000000000000000000000000000000000000..79bd403ac665228853dd8fa54b8f4427af1721c0 GIT binary patch literal 24 TcmXqrDOxU_`}+?k11bOjQGf(4 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Code Cache/wasm/index-dir/the-real-index b/my_profile/Default/Code Cache/wasm/index-dir/the-real-index new file mode 100644 index 0000000000000000000000000000000000000000..fab96524c5f97fc3e24f3291f1f497ab369f0568 GIT binary patch literal 48 ncmdO3U|`5<{HU5=sZf+!l9$Q}oWiV=Jg40 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cookies b/my_profile/Default/Cookies new file mode 100644 index 0000000000000000000000000000000000000000..923fcfc62b92ffc5bb0c65ba176269e5f56d1b40 GIT binary patch literal 20480 zcmeI%Pi)&%90zbaPTLq7yn;$30@~Xjv}Fn{$>=oJ%hJw_FfUme`*C zTv~A|LLd%s9}?om4ebJ)#$^+1J4_%D9EOCrOq@WP7}A7<;Jq~7x+dYkX_LNBc5MHi z?f2g2JxB8M!ZE{Plr+7dV==N<+9JuabdV59l9GHK;cJ`}z9V9BlH;BK*e0c^_y0<3 zx25FxK}kEUeKYOjdrY;J8b4#rC{24h_x7 zbM$%=67=V0EY&@)wr% zSj!4cJMhAAJ!ZK!4Vf3@iObK+6W?O3JPExhu=!PXi;7_H(DwqCd;7F9mdR%2_nv0f zsW$CZrngD<>RT_(8Ty?H*#WhfrloU!>q(TLrg?=^RZ5h zYUS|pQf>al(%qpIKQ=Gd%12AJMRG)6%#-y|u;KLFuEc0&c2btQ4_wrNEPlGCR?o z#<0B(p96CEOqRJUrdT|;_}q9x$xhrk+9E4ECORF&sUb@|Wn-`-?Pl?xxg`}3v6%*@5_-g&`$b^FOjKmWe*#1AKnk2SKdooasa zrS|C;-~Ms@jRUz?e!Mvym-)}ubG_Y$`2H_zKS_K+f&c^{009U<00Izz00bZa0SG|g W!4uf2=F;jmO--o7<`|~8p8FSMUAWc& literal 0 HcmV?d00001 diff --git a/my_profile/Default/Cookies-journal b/my_profile/Default/Cookies-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/DawnGraphiteCache/data_0 b/my_profile/Default/DawnGraphiteCache/data_0 new file mode 100644 index 0000000000000000000000000000000000000000..d76fb77e93ac8a536b5dbade616d63abd00626c5 GIT binary patch literal 8192 zcmeIuK?wjL5Jka{7-jo+5O1auw}mk8@B+*}b0s6M>Kg$91PBlyK!5-N0t5&UAV7cs W0RjXF5FkK+009C72oNCfo4^Gh&;oe? literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnGraphiteCache/data_1 b/my_profile/Default/DawnGraphiteCache/data_1 new file mode 100644 index 0000000000000000000000000000000000000000..dcaafa9740ee97afbdf50792612ef9f379e292dc GIT binary patch literal 270336 zcmeI%I}Lz93;@sqCjk%O-vMDm1rl%oM}vSHZXtOc`bnA&Z|#1REn zIz@m00RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_E F-~kAc1(N^( literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnGraphiteCache/data_2 b/my_profile/Default/DawnGraphiteCache/data_2 new file mode 100644 index 0000000000000000000000000000000000000000..c7e2eb9adcfb2d3313ec85f5c28cedda950a3f9b GIT binary patch literal 8192 zcmeIu!3h8`2n0b1_TQ7_m#U&=2(t%Qz}%M=ae7_Oi2wlt1PBlyK!5-N0t5&UAV7cs V0RjXF5FkK+009C72oTsN@Bv`}0$Tt8 literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnGraphiteCache/data_3 b/my_profile/Default/DawnGraphiteCache/data_3 new file mode 100644 index 0000000000000000000000000000000000000000..5eec97358cf550862fd343fc9a73c159d4c0ab10 GIT binary patch literal 8192 zcmeIuK@9*P5CpLeAOQbv2)|PW$RO!FMnHFsm9+HS=9>r*AV7cs0RjXF5FkK+009C7 W2oNAZfB*pk1PBlyK!5;&-vkZ-dID$w literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnGraphiteCache/index b/my_profile/Default/DawnGraphiteCache/index new file mode 100644 index 0000000000000000000000000000000000000000..f72ccc143be110379add426eb3a77d070cc15d5a GIT binary patch literal 262512 zcmeIuF%5t)00h8qDuxkN;0pz4AWaxBg9TDpDuD5R`cHnkcGV-P8B^X-w&ZJlPRo6+ z`#j!s0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ JfB=CX1RgI~27Ukl literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnWebGPUCache/data_0 b/my_profile/Default/DawnWebGPUCache/data_0 new file mode 100644 index 0000000000000000000000000000000000000000..d76fb77e93ac8a536b5dbade616d63abd00626c5 GIT binary patch literal 8192 zcmeIuK?wjL5Jka{7-jo+5O1auw}mk8@B+*}b0s6M>Kg$91PBlyK!5-N0t5&UAV7cs W0RjXF5FkK+009C72oNCfo4^Gh&;oe? literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnWebGPUCache/data_1 b/my_profile/Default/DawnWebGPUCache/data_1 new file mode 100644 index 0000000000000000000000000000000000000000..dcaafa9740ee97afbdf50792612ef9f379e292dc GIT binary patch literal 270336 zcmeI%I}Lz93;@sqCjk%O-vMDm1rl%oM}vSHZXtOc`bnA&Z|#1REn zIz@m00RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_E F-~kAc1(N^( literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnWebGPUCache/data_2 b/my_profile/Default/DawnWebGPUCache/data_2 new file mode 100644 index 0000000000000000000000000000000000000000..c7e2eb9adcfb2d3313ec85f5c28cedda950a3f9b GIT binary patch literal 8192 zcmeIu!3h8`2n0b1_TQ7_m#U&=2(t%Qz}%M=ae7_Oi2wlt1PBlyK!5-N0t5&UAV7cs V0RjXF5FkK+009C72oTsN@Bv`}0$Tt8 literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnWebGPUCache/data_3 b/my_profile/Default/DawnWebGPUCache/data_3 new file mode 100644 index 0000000000000000000000000000000000000000..5eec97358cf550862fd343fc9a73c159d4c0ab10 GIT binary patch literal 8192 zcmeIuK@9*P5CpLeAOQbv2)|PW$RO!FMnHFsm9+HS=9>r*AV7cs0RjXF5FkK+009C7 W2oNAZfB*pk1PBlyK!5;&-vkZ-dID$w literal 0 HcmV?d00001 diff --git a/my_profile/Default/DawnWebGPUCache/index b/my_profile/Default/DawnWebGPUCache/index new file mode 100644 index 0000000000000000000000000000000000000000..cdc389e3678dd43cc107ae1802fc60a78fd00bd2 GIT binary patch literal 262512 zcmeIuu?c`M00h7f8A#m7%DtSx86;rgGOi%eCIeXBSO4(UwW}UU&6x6zvL#>Zb6)Oq z-KX)U6Cgl<009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N K0t5*BAn*V-@dkqc literal 0 HcmV?d00001 diff --git a/my_profile/Default/Extension Rules/CURRENT b/my_profile/Default/Extension Rules/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Extension Rules/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Extension Rules/LOCK b/my_profile/Default/Extension Rules/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Extension Rules/LOG b/my_profile/Default/Extension Rules/LOG new file mode 100644 index 0000000..3fb08a0 --- /dev/null +++ b/my_profile/Default/Extension Rules/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.440 3dfcfa Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Extension Rules since it was missing. +2026/05/02-16:17:44.442 3dfcfa Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Extension Rules/MANIFEST-000001 diff --git a/my_profile/Default/Extension Rules/MANIFEST-000001 b/my_profile/Default/Extension Rules/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Extension Scripts/CURRENT b/my_profile/Default/Extension Scripts/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Extension Scripts/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Extension Scripts/LOCK b/my_profile/Default/Extension Scripts/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Extension Scripts/LOG b/my_profile/Default/Extension Scripts/LOG new file mode 100644 index 0000000..966884c --- /dev/null +++ b/my_profile/Default/Extension Scripts/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.442 3dfcfa Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Extension Scripts since it was missing. +2026/05/02-16:17:44.444 3dfcfa Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Extension Scripts/MANIFEST-000001 diff --git a/my_profile/Default/Extension Scripts/MANIFEST-000001 b/my_profile/Default/Extension Scripts/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Extension State/CURRENT b/my_profile/Default/Extension State/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Extension State/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Extension State/LOCK b/my_profile/Default/Extension State/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Extension State/LOG b/my_profile/Default/Extension State/LOG new file mode 100644 index 0000000..c20e066 --- /dev/null +++ b/my_profile/Default/Extension State/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.775 3dfcfa Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Extension State since it was missing. +2026/05/02-16:17:44.777 3dfcfa Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Extension State/MANIFEST-000001 diff --git a/my_profile/Default/Extension State/MANIFEST-000001 b/my_profile/Default/Extension State/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Favicons b/my_profile/Default/Favicons new file mode 100644 index 0000000000000000000000000000000000000000..4856bc2a3b325fa7720a3f64962a9436d7272d10 GIT binary patch literal 20480 zcmeI2PjAyO7{=qKtJ_UufHdV$O|mp98m+)4PN+ho+rk)xmX&s57ou#UJ%hr#_b4#C~nR@AI=;J5^q9n=W_QL9<=AIeVzY z6+)CJj46sjM4lEoOmT4&4GZGx+y9q{a{u$6S^8T^s9zLXrRTA)vDK;d=y~*Q^tPx% z0s#;hN5D%^ExSazvu>l}oE+H4?tZgj?YX>ew>&E-xRs&m>Gh(KD;aDnzhS&#L&mTV zE98ew>E3Yq^LR{4Ef8Dw=~jEg3m-hYJD*O3WZTO-3<)(;5P=I2TGK@er#;kKV615x=k z>37cQNRO+jE7#M zITsdg5_R!bT^zwJkK4TC-COY=@Kt)I&@=jr{ViWOhYFKfB*=900{I6VE^y4 zz#RyH00@8p2uuor;06ESO~6S}44ohV0w4eaAOHf`|FH%@00ck)1VCW&2w?x8yg7$r a5C8!X009ud{*N^P0w4eaAOHfBN8m3H394uS literal 0 HcmV?d00001 diff --git a/my_profile/Default/Favicons-journal b/my_profile/Default/Favicons-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/GPUCache/data_0 b/my_profile/Default/GPUCache/data_0 new file mode 100644 index 0000000000000000000000000000000000000000..d76fb77e93ac8a536b5dbade616d63abd00626c5 GIT binary patch literal 8192 zcmeIuK?wjL5Jka{7-jo+5O1auw}mk8@B+*}b0s6M>Kg$91PBlyK!5-N0t5&UAV7cs W0RjXF5FkK+009C72oNCfo4^Gh&;oe? literal 0 HcmV?d00001 diff --git a/my_profile/Default/GPUCache/data_1 b/my_profile/Default/GPUCache/data_1 new file mode 100644 index 0000000000000000000000000000000000000000..dcaafa9740ee97afbdf50792612ef9f379e292dc GIT binary patch literal 270336 zcmeI%I}Lz93;@sqCjk%O-vMDm1rl%oM}vSHZXtOc`bnA&Z|#1REn zIz@m00RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_E F-~kAc1(N^( literal 0 HcmV?d00001 diff --git a/my_profile/Default/GPUCache/data_2 b/my_profile/Default/GPUCache/data_2 new file mode 100644 index 0000000000000000000000000000000000000000..c7e2eb9adcfb2d3313ec85f5c28cedda950a3f9b GIT binary patch literal 8192 zcmeIu!3h8`2n0b1_TQ7_m#U&=2(t%Qz}%M=ae7_Oi2wlt1PBlyK!5-N0t5&UAV7cs V0RjXF5FkK+009C72oTsN@Bv`}0$Tt8 literal 0 HcmV?d00001 diff --git a/my_profile/Default/GPUCache/data_3 b/my_profile/Default/GPUCache/data_3 new file mode 100644 index 0000000000000000000000000000000000000000..5eec97358cf550862fd343fc9a73c159d4c0ab10 GIT binary patch literal 8192 zcmeIuK@9*P5CpLeAOQbv2)|PW$RO!FMnHFsm9+HS=9>r*AV7cs0RjXF5FkK+009C7 W2oNAZfB*pk1PBlyK!5;&-vkZ-dID$w literal 0 HcmV?d00001 diff --git a/my_profile/Default/GPUCache/index b/my_profile/Default/GPUCache/index new file mode 100644 index 0000000000000000000000000000000000000000..dde1bbe0401c54b9d1d01f55aaf1bdb3f94c957b GIT binary patch literal 262512 zcmeIuF%5t)00h8q8uZ`?0r)}z8b}ic%wT~OmI`3JpZ=4du3hy=YQ~gzlr8yMpVM-m z>pqV+od5v>1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF K5FkL{2Z0CcAO=wY literal 0 HcmV?d00001 diff --git a/my_profile/Default/History b/my_profile/Default/History new file mode 100644 index 0000000000000000000000000000000000000000..64bd16dc97e7a131555fc97db1f22c6533855dd7 GIT binary patch literal 163840 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 literal 0 HcmV?d00001 diff --git a/my_profile/Default/History-journal b/my_profile/Default/History-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/LOCK b/my_profile/Default/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/LOG b/my_profile/Default/LOG new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Local Storage/leveldb/CURRENT b/my_profile/Default/Local Storage/leveldb/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Local Storage/leveldb/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Local Storage/leveldb/LOCK b/my_profile/Default/Local Storage/leveldb/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Local Storage/leveldb/LOG b/my_profile/Default/Local Storage/leveldb/LOG new file mode 100644 index 0000000..42c39f1 --- /dev/null +++ b/my_profile/Default/Local Storage/leveldb/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.458 3dfd53 Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Local Storage/leveldb since it was missing. +2026/05/02-16:17:44.462 3dfd53 Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Local Storage/leveldb/MANIFEST-000001 diff --git a/my_profile/Default/Local Storage/leveldb/MANIFEST-000001 b/my_profile/Default/Local Storage/leveldb/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Login Data b/my_profile/Default/Login Data new file mode 100644 index 0000000000000000000000000000000000000000..d3dce2e42f4152eb027d6fe994d41a6678f10a07 GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/my_profile/Default/ServerCertificate-journal b/my_profile/Default/ServerCertificate-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Session Storage/CURRENT b/my_profile/Default/Session Storage/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Session Storage/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Session Storage/LOCK b/my_profile/Default/Session Storage/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Session Storage/LOG b/my_profile/Default/Session Storage/LOG new file mode 100644 index 0000000..d3fd3a1 --- /dev/null +++ b/my_profile/Default/Session Storage/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.513 3dfd53 Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Session Storage since it was missing. +2026/05/02-16:17:44.516 3dfd53 Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Session Storage/MANIFEST-000001 diff --git a/my_profile/Default/Session Storage/MANIFEST-000001 b/my_profile/Default/Session Storage/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Sessions/Session_13422179865101812 b/my_profile/Default/Sessions/Session_13422179865101812 new file mode 100644 index 0000000000000000000000000000000000000000..bcb10aa2473f8abe23435486822b5d3463cdf530 GIT binary patch literal 3739 zcmbtWORw9;6`nYaos0B|K9X!&2go8oYKtPpE73sE4&S6iN~B1N;j;GQq{y0&TMT#kxYNqG$1De=NMS`7U!b>X1m8j5r)T}C{^y^^ ze`uh$(D%sdgM06Obno_<`#__GxK2Wwv1HlDjv-rq$z@Vbj7&|qO6I{d*R3JOnzmFsj?D1hkPY~F-sH@7l5uX3u@Ecuqp5t#1x(fiTZQ+0O`RsJx`;zNOh)`H z<#H#R3w0ctOyO@=u%GxhGiFm2!KCjq)!rMatF(fvW`EN29!oRT@vci$=}Lsy5)qUPqz5_vY$`#I2|=#$AkrX0F>QobBa$wT}JfBx5&Y zMT$@E*PNtth#h>U3)g|O_oRODh-Zc)m*`gUys9#YRc)U7Z{9%tbg-+kxymFX;X2&n zIE0$fJo)nge61>%4X(lOB-g4Na%cS{|B#2n{h$Wdx$3S`4Qkc2nJ9EC#i^wdcQJ0^ zL5Z;`MHrV@!lHpyB_cY-!3M@px7h1SvnSnMy|JgYFqpZP=kso$u8Oef&(cM(PNAPn zSyZfj#9CgU^}HG9c*@3BV#$@5ma~ueo@dLhj9Yyr+S;Dcv|*1vHFkzfrn0kSTv{I9 z*%Gde1D|az32!YqY8hH+=)ET^EXnG2om(Uq&ceLOIlIbcJh?j?2l*=2@+zmb6s+ss z9`^4^|5?`w^m^7@_5B@x6U|pu#JT(6%AKZ~y3a0^U5S&4ZQyQ++n&8I>%O;a!#NSD zZ^W4u)WV9w>Lw4}An+^2=iD9i;{t4kudwk*ZAx5V$-pMq%&dK`^yPAI&6JHbb6ER| zsjZnU_I!hPr`ZPbvbPjvZ^^1;O|3fA*IRq9)IE{|4|C((Xh0K6BN{Wy6KnytZ~GMb zyLdT{;g#dt?y-=d<=MhMuAF5yyZV{-n3JlLH1+ zv&z`&GWPQ-1^h#Ak>?QDZeO-lUftIaAH_D!F_ksw|4kfWtHdmpAYM)1w5_SJCVev= z)@89j^bW{MZB1Qa3|LhcU?bI~r88^eG>_0rg*-!?K(-0L{uH6FDQ7V+f@Thueh>!V~t7Co-|8>%aVa^^3m_?xJ5E>3bwj7|fC0N(g;)ls`Sw z({)N|oHV{4!ouO6C`C(jjW*~Ja1~0>0+Ab^+tYoNcEE-l$-pFo$j`^;KcVvAx$?kK zzf}D?nVv(|zXo#x5zZmLbNl<$(QD|bA7Vn~0r2D-EkgzTc+`TMFsO|lpe7n44*nm2 zE`xmJz$G9Hhy{)TYX)QiRxe?F4ALdo(74Y1w_qm^nQb3zIq;BzrgQY4!%pF-OOGdY zfO4>>fb$ZtOn?@LULx_60qyt79{t;g|2lj%9*p3R^b;9W|J89&nXFx)13*YAjW_Sg z00@E?B9brJ$!4>9)M)UXhb${RWO?pk^Rn}(!*qnkJXs`V@w8DU^P*8*tv6tfegmOB zJEG*%{{toeAkI$4=O;X2>H4pa=y-Od6b(N;Lqq2%e|DxnbNf;ie+CAJJV5tt&~AwP_Ktj(M!-jg2})Xz-|t;Tfi)#eosLzfu954fIhxLYw&p9HMDyu z{qHC{kN&w#{Zh@je4j47hSKxtJ}M8uo}h+UUi2!{~^3n#H0(wYyzs^5F7jwvLamecfKo8lQfUg$#CJ1~08iK_FxE$6=9h#sg mYi-~QI2FoGLqDMAf9dIWe)q+HQ1zFSd{H!=Q)2Q4`s&}BO*LZx literal 0 HcmV?d00001 diff --git a/my_profile/Default/Sessions/Tabs_13422179865124776 b/my_profile/Default/Sessions/Tabs_13422179865124776 new file mode 100644 index 0000000000000000000000000000000000000000..d230fafda0c6313fbc95ced7945cba8e7e1c8cf8 GIT binary patch literal 1707 zcmbu8ziSjx5Xa||7?d>HNGget!os`VyS=^JJrKphQVt@5oqNgNC3trU$p%u0q)}5? z=ge9v9z$a)G}Z|t>R}MZ_Kgr1o17i^YhJ{H*dZxcUM+sMI@FBAuP)8+=od8 z`tt6_`~I6iE+gN7X3mMcBvyU4F3DVzEo%Di!+*|Hj%P&FtWgV4*4x}II=x{wexxRO zjDHWhio6A1bXJjzC4S!Phwypm!0X0do8bA|30>pO|Mc_l$;a-zJo9|fUm={l3h~#x zzF)FWq;;azY4u&f>h38$*_2%=q=Ph+Ova)&F2~zG;|Vc(WC-a}{d67OG`)Ljbdu#Y z^EBPgQU4sYPK6`tE5|QcqA7ebkA|4uMP7zhCFhH!$xT9OOI7O9mxzBA+baE7L(0%o zX&{9}hv+HZ7XCh3ix{h`oWIG=n9jCcY($10mc-{@V`u7ZJ%3UHkJyuQUPfdF&)qC( z{kj;xKhEf<zLMyVyhDbaZ+nE(pn>qYV}sq zNx~!zM%g$Uo1NdqI5%9xD6)0hO;>-^4nakX1DQa}SXN z&kYi{N{~preps@X(w=$BhXlC3FoK0_0hE9*=4om?O@jwi9`k55p0$O&1BFmZ+=#A> zp#dG*Mjs%LkOMlkLEnlq=h+Au|2x#m)t~A%l4dFEOXiru?R?v3dY5>GPQ>un9aP%f zzr`5mjCtauCO(CgLZ^>Sp%c-Ql;PICwBbDb2Q~O*c7vAb>aNJiFWE)CE&u=k literal 0 HcmV?d00001 diff --git a/my_profile/Default/Shared Dictionary/cache/index b/my_profile/Default/Shared Dictionary/cache/index new file mode 100644 index 0000000000000000000000000000000000000000..79bd403ac665228853dd8fa54b8f4427af1721c0 GIT binary patch literal 24 TcmXqrDOxU_`}+?k11bOjQGf(4 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Shared Dictionary/cache/index-dir/the-real-index b/my_profile/Default/Shared Dictionary/cache/index-dir/the-real-index new file mode 100644 index 0000000000000000000000000000000000000000..722c08f7169d1cd820a0ddd1047bdd6b1a4dec0a GIT binary patch literal 48 ncmdO3U|?7j7c7xqsZf+!l9$Q}oWiV%dQA> literal 0 HcmV?d00001 diff --git a/my_profile/Default/Shared Dictionary/db b/my_profile/Default/Shared Dictionary/db new file mode 100644 index 0000000000000000000000000000000000000000..49646ff0bb4eddb2cbda4bd6e9f26a590a16bac7 GIT binary patch literal 45056 zcmeI&J#X7a7{GB-R3ux9%M^y8!9xx(jGC3&G;NZ_OXZYEjVe;2$Z3oY1S`=N5s8#V zDlbJAqeFoL{S5sGow9Z8(y5=JL)QY`icCGyQo$FwYXJ36Kr(rER*RpnD56h$e>S5>|i$C^ATE-vI>HF18~X+in$hc_Gg-%6$Oy`rD$ zziqtQc>n5;S8r5*u6|j0BMUhYKmY**5I_I{1pcQ2UZq^Sy{n$JthMO0Me>flbR*-d^-|5)RiDR?c3w;_ z2~d}ctx#wQg4c*gWLtLDX{O875xm>Hu zAlKs{Zs3pX$R{6YEfpx!Fc<7(YD;l{>Yln@BlIWMML{6f35Hinc2c@BAGe%}yR3CC zc)F2szILTt+m$&!igTQK?%8a~XeiAC9kmZ19xVn%vT-iXeZ1)<;SG-QuIId-}PVQ2?qiQAb7awhF+P)s|arFK1MD78~4JzxIGY#Zs;H_#w+twEs*Hmri z-SOC-SV3rqv*3f96`4^{f34`h>VN64^*`Qrg2YDv0R#|0009ILKmY**5I_Kdxxl7Y zS2LRc#cge0y<`tSt7_Zod<&rPj<&O&*a3*X|Cc}d=Rg1f1Q0*~0R#|0009ILKmdUi z7GV9q!ktTM2q1s}0tg_000IagfB*sr%mt#~|MUGn!vO&V5I_I{1Q0*~0R#|00D;vO zVEw<^{Y!QTAb;Kj7 zV=_bl0R#|0009ILKmY**5I}(SKVtv^1Q0*~0R#|0009ILKmdW&7hwIr`h84>2q1s} R0tg_000IagfB*sr`~$t5AYcFh literal 0 HcmV?d00001 diff --git a/my_profile/Default/Shared Dictionary/db-journal b/my_profile/Default/Shared Dictionary/db-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/SharedStorage b/my_profile/Default/SharedStorage new file mode 100644 index 0000000000000000000000000000000000000000..159e90adb13561c0365c22e76084c658383a62f1 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYFvV#S79dK(-m98b?E5 nGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nC=3Arqf-Z% literal 0 HcmV?d00001 diff --git a/my_profile/Default/Site Characteristics Database/CURRENT b/my_profile/Default/Site Characteristics Database/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Site Characteristics Database/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Site Characteristics Database/LOCK b/my_profile/Default/Site Characteristics Database/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Site Characteristics Database/LOG b/my_profile/Default/Site Characteristics Database/LOG new file mode 100644 index 0000000..527d1b9 --- /dev/null +++ b/my_profile/Default/Site Characteristics Database/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.432 3dfd0b Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Site Characteristics Database since it was missing. +2026/05/02-16:17:44.436 3dfd0b Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Site Characteristics Database/MANIFEST-000001 diff --git a/my_profile/Default/Site Characteristics Database/MANIFEST-000001 b/my_profile/Default/Site Characteristics Database/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Sync Data/LevelDB/CURRENT b/my_profile/Default/Sync Data/LevelDB/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/Sync Data/LevelDB/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/Sync Data/LevelDB/LOCK b/my_profile/Default/Sync Data/LevelDB/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/Sync Data/LevelDB/LOG b/my_profile/Default/Sync Data/LevelDB/LOG new file mode 100644 index 0000000..10710b5 --- /dev/null +++ b/my_profile/Default/Sync Data/LevelDB/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.425 3dfcfc Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Sync Data/LevelDB since it was missing. +2026/05/02-16:17:44.435 3dfcfc Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/Sync Data/LevelDB/MANIFEST-000001 diff --git a/my_profile/Default/Sync Data/LevelDB/MANIFEST-000001 b/my_profile/Default/Sync Data/LevelDB/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/Top Sites b/my_profile/Default/Top Sites new file mode 100644 index 0000000000000000000000000000000000000000..c5ce8e9dd96d1228e1bf850c19f52f4063b51488 GIT binary patch literal 20480 zcmeI(zi-n(6bJA-pZkldxiUlz)dlwdV7&@`=4=}I=BsRpvxscEdRT)$9ee%V3K3jhN$V;B>&5cr1NwF7% zzN^F~GEXQaH-#XCP~9eU8-$@d=3t=L@%(8)N%qChIsSu~i37sx{A1#PUq0<1%tHVI z5P$##AOHafKmY;|fWUt*&@ppx|lzwuZi(P!Vmd({$)%r5NSaG0uX=z1Rwwb2tWV=5P$##An;ot z%?k8{8UUMRY5J!GU?kYW%&`hU{QRHt4@55r2tWV=5P$##AOHafKmY;|fB*!>S>P%) zx2G2yN_C=Zx!i6e41Afb2SMGFS^Y{t?y=m_Ur2=VM#H<_3i_|!iT?99U!T41zkC}% o|EK&D(F+0s5P$##AOHafKmY;|fB*y_0D&_kaDi>l{A)4b7tBw~#sB~S literal 0 HcmV?d00001 diff --git a/my_profile/Default/Top Sites-journal b/my_profile/Default/Top Sites-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/TransportSecurity b/my_profile/Default/TransportSecurity new file mode 100644 index 0000000..1bfd975 --- /dev/null +++ b/my_profile/Default/TransportSecurity @@ -0,0 +1 @@ +{"sts":[{"expiry":1809242264.920548,"host":"5EdUoB7YUY9zZV+2DkgVXgho8WUvp+D+6KpeUOhNQIM=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1777706264.920549},{"expiry":1809242264.918215,"host":"8/RrMmQlCD2Gsp14wUCE1P8r7B2C5+yE0+g79IPyRsc=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1777706264.918218}],"version":2} \ No newline at end of file diff --git a/my_profile/Default/Trust Tokens b/my_profile/Default/Trust Tokens new file mode 100644 index 0000000000000000000000000000000000000000..e128fda6c00d302a8822bbbc824258d4e8f38986 GIT binary patch literal 36864 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 literal 0 HcmV?d00001 diff --git a/my_profile/Default/Web Data-journal b/my_profile/Default/Web Data-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/WebStorage/QuotaManager b/my_profile/Default/WebStorage/QuotaManager new file mode 100644 index 0000000000000000000000000000000000000000..55083940647c4004ab8c1fd7cfc4fb92048b1083 GIT binary patch literal 40960 zcmeI)O>5&u7{GBU@=LObtIZ*p#VyRThsMO)V!9AYDAdV{)YP$ey-wMj#KfMY+QgP) z$zgLUTiRp3M%!DzLvKCxD-=qvh2F}ZI#T7tcAWII7xNb=wq{22Xnr#o=CR3(=QS@> z;>aI#Whg!|?i;3Qd@h7x7^Xh&>2q{s^_$e_Lcd1!|96Q^OdNG0|5jOKmY**5I_I{1a1h(rA&UaV1DEEI_mY|uzjM!z&*Th)$6`D zkfG=IlEQmCO{dawM793Zc`0VL6pi|*V*UF5;>lt*|5?F&vpgN+R0g5j^*i2?r#eZG zOSgrYXgnTiqM~?`y(^e(w^a~a1zWr`*r@T1V55p+Ba_K*6wKr4fqm@9e9pZm31 zNyMB}Wzhpow;Kk^ZTrJscopxuk9Z}GCik}b(R!Uxf4$~sRGtm}P|hgtt3luep_=(b zo#8+pdU{GOZroWEFIvs&PV30b=GWHDHy_8=T@~sRte`RXk~o*ALp9#K_~Ak(zqMu>@ybl5UJgS)zILMsZaMmE>5rJj=wl|Q&$RuW zVgF_SZvSHcsNZrRfB*srAb9sS^b< zP)*hK&sC@VAZ2apCfom|{$Rx380dIzi-~NBIiBS1zwC zScTQAtNW()XtmpweK!bYI1C<_qc8Z=_N8I}Y+u^H+JD=BzJmeMB?1T_fB*srAb(SC!1|a(WU;pTz z0|5jOKmY**5I_I{1Q0*~0R-k)fc^g*PcB14009ILKmY**5I_I{1Q0+V5s3f6AK(A8 z9uPnP0R#|0009ILKmY**5SVKL_WyG|y$lWk1Q0*~0R#|0009ILKmdVQfc-xU0RaRM zKmY**5I_I{1Q0*~f%z9;|3Ck8%m@)c009ILKmY**5I_I{1Q1~V&l*4g0R#|0009IL OKmY**5I|u51^xvEm)NiX literal 0 HcmV?d00001 diff --git a/my_profile/Default/WebStorage/QuotaManager-journal b/my_profile/Default/WebStorage/QuotaManager-journal new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/chrome_cart_db/LOCK b/my_profile/Default/chrome_cart_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/chrome_cart_db/LOG b/my_profile/Default/chrome_cart_db/LOG new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/commerce_subscription_db/LOCK b/my_profile/Default/commerce_subscription_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/commerce_subscription_db/LOG b/my_profile/Default/commerce_subscription_db/LOG new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/discount_infos_db/LOCK b/my_profile/Default/discount_infos_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/discount_infos_db/LOG b/my_profile/Default/discount_infos_db/LOG new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/discounts_db/LOCK b/my_profile/Default/discounts_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/discounts_db/LOG b/my_profile/Default/discounts_db/LOG new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/engine_allowlist.bf b/my_profile/Default/engine_allowlist.bf new file mode 100644 index 0000000000000000000000000000000000000000..871816f9410c061115d5d60177404fedfbd547ec GIT binary patch literal 360 zcmWO0JxfAS00!XqoQ`s?-iybN8WQ z0fWyZ)Tcoq?Ga)n@8cQ6}9@DPbtqA*3jB!#I2k1OC)gJ-Bivct?tZ}1&e-D~cZvX%Q literal 0 HcmV?d00001 diff --git a/my_profile/Default/parcel_tracking_db/LOCK b/my_profile/Default/parcel_tracking_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/parcel_tracking_db/LOG b/my_profile/Default/parcel_tracking_db/LOG new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/shared_proto_db/CURRENT b/my_profile/Default/shared_proto_db/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/shared_proto_db/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/shared_proto_db/LOCK b/my_profile/Default/shared_proto_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/shared_proto_db/LOG b/my_profile/Default/shared_proto_db/LOG new file mode 100644 index 0000000..d11618e --- /dev/null +++ b/my_profile/Default/shared_proto_db/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.748 3dfd0b Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/shared_proto_db since it was missing. +2026/05/02-16:17:44.751 3dfd0b Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/shared_proto_db/MANIFEST-000001 diff --git a/my_profile/Default/shared_proto_db/MANIFEST-000001 b/my_profile/Default/shared_proto_db/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/shared_proto_db/metadata/CURRENT b/my_profile/Default/shared_proto_db/metadata/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/my_profile/Default/shared_proto_db/metadata/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/my_profile/Default/shared_proto_db/metadata/LOCK b/my_profile/Default/shared_proto_db/metadata/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/my_profile/Default/shared_proto_db/metadata/LOG b/my_profile/Default/shared_proto_db/metadata/LOG new file mode 100644 index 0000000..71f7182 --- /dev/null +++ b/my_profile/Default/shared_proto_db/metadata/LOG @@ -0,0 +1,2 @@ +2026/05/02-16:17:44.744 3dfd0b Creating DB /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/shared_proto_db/metadata since it was missing. +2026/05/02-16:17:44.747 3dfd0b Reusing MANIFEST /Users/legojeon/Documents/learnsteam/baseball-automation/my_profile/Default/shared_proto_db/metadata/MANIFEST-000001 diff --git a/my_profile/Default/shared_proto_db/metadata/MANIFEST-000001 b/my_profile/Default/shared_proto_db/metadata/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/my_profile/Default/trusted_vault.pb b/my_profile/Default/trusted_vault.pb new file mode 100644 index 0000000..5f83178 --- /dev/null +++ b/my_profile/Default/trusted_vault.pb @@ -0,0 +1,2 @@ + + 0ba4067c95d8d92744702afdd1697107,FMha/UXuYCgxOs6kA5eqLYr/3JE3lSTZCKkpGExmGqM= \ No newline at end of file diff --git a/my_profile/GrShaderCache/data_0 b/my_profile/GrShaderCache/data_0 new file mode 100644 index 0000000000000000000000000000000000000000..d76fb77e93ac8a536b5dbade616d63abd00626c5 GIT binary patch literal 8192 zcmeIuK?wjL5Jka{7-jo+5O1auw}mk8@B+*}b0s6M>Kg$91PBlyK!5-N0t5&UAV7cs W0RjXF5FkK+009C72oNCfo4^Gh&;oe? literal 0 HcmV?d00001 diff --git a/my_profile/GrShaderCache/data_1 b/my_profile/GrShaderCache/data_1 new file mode 100644 index 0000000000000000000000000000000000000000..dcaafa9740ee97afbdf50792612ef9f379e292dc GIT binary patch literal 270336 zcmeI%I}Lz93;@sqCjk%O-vMDm1rl%oM}vSHZXtOc`bnA&Z|#1REn zIz@m00RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_E F-~kAc1(N^( literal 0 HcmV?d00001 diff --git a/my_profile/GrShaderCache/data_2 b/my_profile/GrShaderCache/data_2 new file mode 100644 index 0000000000000000000000000000000000000000..c7e2eb9adcfb2d3313ec85f5c28cedda950a3f9b GIT binary patch literal 8192 zcmeIu!3h8`2n0b1_TQ7_m#U&=2(t%Qz}%M=ae7_Oi2wlt1PBlyK!5-N0t5&UAV7cs V0RjXF5FkK+009C72oTsN@Bv`}0$Tt8 literal 0 HcmV?d00001 diff --git a/my_profile/GrShaderCache/data_3 b/my_profile/GrShaderCache/data_3 new file mode 100644 index 0000000000000000000000000000000000000000..5eec97358cf550862fd343fc9a73c159d4c0ab10 GIT binary patch literal 8192 zcmeIuK@9*P5CpLeAOQbv2)|PW$RO!FMnHFsm9+HS=9>r*AV7cs0RjXF5FkK+009C7 W2oNAZfB*pk1PBlyK!5;&-vkZ-dID$w literal 0 HcmV?d00001 diff --git a/my_profile/GrShaderCache/index b/my_profile/GrShaderCache/index new file mode 100644 index 0000000000000000000000000000000000000000..4f75ae63d38a9061c1736781b04a65f9543b84c2 GIT binary patch literal 262512 zcmeIuF%5t)00h8qx?_bMLHI%e8b}ic)F6QrmI`3JpZ=4du3hy=YQ~gzlr8yMpUZTg z>pqV+od5v>1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF K5FkL{2Z0C55(YZ} literal 0 HcmV?d00001 diff --git a/my_profile/GraphiteDawnCache/data_0 b/my_profile/GraphiteDawnCache/data_0 new file mode 100644 index 0000000000000000000000000000000000000000..fccd644939e794d9cdc38ad03e0b4c3d3f2a79b5 GIT binary patch literal 45056 zcmeI&FGyWc90&08+;jfL3GRW241+-t9BUgGtP3m4X2GyD3^wE96HJ0ZOi+uR z?dHjY5di`O2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkL{KMSlMp8uHNeICk= z_03wGj!@f3ubR2s8s5p7vQsAhG0?2%%<0LO$&WcxcItQ(r#sX(Q_r8)UTr^T%C0&> z^KtHZGyC?#i*JALzNhTe(HW;dXQqB1PAs*mOxf{wh1e0A137ctw>=#Ws!Z9bqbtr} z{+_dip|M}zt4!IcqdU&ioVobi`1<~;%9Nctdg2V{cQsb$U$=9n?9|a4XC!CZKNpu@ zUROP3r;ffjqd7A-`RUzC&Xk=xQs!CCyjnY(NtO-)0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ n009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF{JX#{&y1SM literal 0 HcmV?d00001 diff --git a/my_profile/GraphiteDawnCache/data_1 b/my_profile/GraphiteDawnCache/data_1 new file mode 100644 index 0000000000000000000000000000000000000000..51012fa068ebba20648fb2bc50dd156e7b24eb93 GIT binary patch literal 270336 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 literal 0 HcmV?d00001 diff --git a/my_profile/GraphiteDawnCache/data_2 b/my_profile/GraphiteDawnCache/data_2 new file mode 100644 index 0000000000000000000000000000000000000000..890cec1e13999ea17929566696d6bf761484b8f5 GIT binary patch literal 1056768 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly VK!5-N0t5&UAV7cs0Rm@J;D5zmOmhGL literal 0 HcmV?d00001 diff --git a/my_profile/GraphiteDawnCache/data_3 b/my_profile/GraphiteDawnCache/data_3 new file mode 100644 index 0000000000000000000000000000000000000000..c539b366d7543b28d60258c00e5b3dd571f16e5a GIT binary patch literal 4202496 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfWZH4hmHjR00006`CCt8MYwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj WFkrxd0RsjM7%*VKfB^#rJ_7-3OsCcW literal 0 HcmV?d00001 diff --git a/my_profile/GraphiteDawnCache/index b/my_profile/GraphiteDawnCache/index new file mode 100644 index 0000000000000000000000000000000000000000..03b6272513cb1bd19725575fa9c2a3735002fe2d GIT binary patch literal 262512 zcmeI)K}y6h6b9h`IU<6CxDXT>Jb)W-HRqWtq!;i8f(R}=jYp8t#caBnfz(pJtkRIY z*Y^dwC{5o#S8vHG>l|ABbgL!5z5V6W-PgzVf0RjXF5FkK+009C72oNAZfB*pk1PJsHxJ(T_;)+Rt009C72oNAZfB*pk z1PBlyK!CvU0_VPGJ|4{q0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UATY7OMXF7l zQaSKg$91PBlyK!5-N0t5&UAV7cs W0RjXF5FkK+009C72oNCfo4^Gh&;oe? literal 0 HcmV?d00001 diff --git a/my_profile/ShaderCache/data_1 b/my_profile/ShaderCache/data_1 new file mode 100644 index 0000000000000000000000000000000000000000..dcaafa9740ee97afbdf50792612ef9f379e292dc GIT binary patch literal 270336 zcmeI%I}Lz93;@sqCjk%O-vMDm1rl%oM}vSHZXtOc`bnA&Z|#1REn zIz@m00RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_E F-~kAc1(N^( literal 0 HcmV?d00001 diff --git a/my_profile/ShaderCache/data_2 b/my_profile/ShaderCache/data_2 new file mode 100644 index 0000000000000000000000000000000000000000..c7e2eb9adcfb2d3313ec85f5c28cedda950a3f9b GIT binary patch literal 8192 zcmeIu!3h8`2n0b1_TQ7_m#U&=2(t%Qz}%M=ae7_Oi2wlt1PBlyK!5-N0t5&UAV7cs V0RjXF5FkK+009C72oTsN@Bv`}0$Tt8 literal 0 HcmV?d00001 diff --git a/my_profile/ShaderCache/data_3 b/my_profile/ShaderCache/data_3 new file mode 100644 index 0000000000000000000000000000000000000000..5eec97358cf550862fd343fc9a73c159d4c0ab10 GIT binary patch literal 8192 zcmeIuK@9*P5CpLeAOQbv2)|PW$RO!FMnHFsm9+HS=9>r*AV7cs0RjXF5FkK+009C7 W2oNAZfB*pk1PBlyK!5;&-vkZ-dID$w literal 0 HcmV?d00001 diff --git a/my_profile/ShaderCache/index b/my_profile/ShaderCache/index new file mode 100644 index 0000000000000000000000000000000000000000..8cf927e2ac70603d89b1948b30a587e55e3c9054 GIT binary patch literal 262512 zcmeIuF%5t)00h8qDhO8y!3he`Ku9{^g^`^UmI`3JpZ=4d?l|k7)Ql1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF K5FkL{2Z0BV{|9FP literal 0 HcmV?d00001 diff --git a/my_profile/Variations b/my_profile/Variations new file mode 100644 index 0000000..18056c3 --- /dev/null +++ b/my_profile/Variations @@ -0,0 +1 @@ +{"user_experience_metrics.stability.exited_cleanly":true,"variations_crash_streak":0} \ No newline at end of file diff --git a/my_profile/first_party_sets.db b/my_profile/first_party_sets.db new file mode 100644 index 0000000000000000000000000000000000000000..c43377c08f091e2ecaeb2ec2ce40f115b74c0168 GIT binary patch literal 49152 zcmeI&J#X7a7{GC!shGB8h3Vijfrk)qfl7ee!YBd{f`KXykqB0$Mv93D6eFyji1Z{6_L>5}$7q^29*Z~yqa79oB9<9}K8Un#Tpour0i>f*AKkiEC?Wg00IagkRX9!Bco`0dt!9vTE{KBZFL4#%RK3J zPMc?gzU4N%9Vd3@#zD;})(yR0yk9o-*dn>(e)pAQ_x)eg*iJkE@ZkFJzFnT>c&H(w)0J`^mVcJTt76P$6RB4LO%brRDV=G zs_V7t)6#=sEqxj0!8pubx79qkh=dutGZP9kwn$79A~DTknMb}D=6eM7$-1IF*%w2j z*=gA4&BnQT(z30--7qcJ><>C-Bmquzds;p{iLz9AU_8^WQITG)=*ue0g&UC{?yo7@ z{=OJx$M(xkTeg2al!0ZXmL?&AhCGpw@?T^}Rt7kf{rHLfB*sr RAb|f+VEQt|7eS{68LOSv4!5Tgw``4T*3l$$KKRh> z*+0ZT#s~if-~1DN@}|l1v%_b@x6n1*dwNdp=bjcWl)Zn~u{}#W9#0(8(>A3$Ql%n2 z*EC6z8qrg{%pP^|cQLvSUgXsEZI=z{(YHUVVzyp;Dy{uqo37no{keMC_)-5=|5TT1 z-^DNw1Q0*~0R#|00D=ER;Iyu&Pg?SH#XdW-E`7%wIF>iD4+lfj9S(AXZsTRo*ytA?7@saTv61=Vhu}i-t)=$ z*dB@0M}_RQLiT)czD6>ye_mG9XQI-*xRP~Yop}S#b}ZL3o%2Gul|s3>@5tB81?kfh zMNwNV`FhYp?4NnoSv%Qfu%dwF{2v($jSgNWIo3cM^ zhLAA%)P$>atC{`J2L;<61-6qpeP^+%K4{8T*k!Y2hK&`)E@hI24q-q#VK}av3yQkg zl&5l-?bI2#V}Ej(d^n<{i`k^bxJ>T!w0=?%Um~JJ_$88Srp%o$WQxp#wusi0(XksYJQM_KybJ|LTxjiJN^-+SN}lbG0@eZ>z1Q0*~0R#|0 z009ILKmY**B#HAsU4Q@r2q1s}0tg_000IagfI#^LIRBS_k69rC2q1s}0tg_000Iag zfB*uV|LFk)5I_I{1Q0*~0R#|0009KbFTnr*EB_v|LIe;%009ILKmY**5I_I{1UUcG z0|+3100IagfB*srAb