From c50af78cceb28fbe2f5b4953ee428f1fd55d799c Mon Sep 17 00:00:00 2001 From: VineFeeder Date: Sun, 24 Aug 2025 13:43:11 +0100 Subject: [PATCH] initial commit --- README.md | 0 packages/envied/CONFIG.md | 582 +++++ packages/envied/LICENSE | 674 ++++++ packages/envied/README.md | 106 + packages/envied/cliff.toml | 71 + packages/envied/img/envied1.png | Bin 0 -> 129348 bytes packages/envied/install.bat | 61 + packages/envied/pyproject.toml | 111 + packages/envied/src/envied/__init__.py | 0 packages/envied/src/envied/__main__.py | 4 + .../envied/src/envied/binaries/placehere.txt | 0 .../cache/ITV/titles_19f8a2a55bf283b0_gb.json | 1 + .../cache/ITV/titles_494df8449cc64f5a_gb.json | 1 + .../cache/ITV/titles_5bb08ebb94a57d2c_gb.json | 1 + .../cache/ITV/titles_76a2d94a004a3357_gb.json | 1 + .../src/envied/cache/global/ip_info.json | 1 + .../envied/src/envied/commands/__init__.py | 0 packages/envied/src/envied/commands/cfg.py | 90 + packages/envied/src/envied/commands/dl.py | 1550 +++++++++++++ packages/envied/src/envied/commands/env.py | 237 ++ packages/envied/src/envied/commands/kv.py | 201 ++ packages/envied/src/envied/commands/prd.py | 271 +++ packages/envied/src/envied/commands/search.py | 151 ++ packages/envied/src/envied/commands/serve.py | 45 + packages/envied/src/envied/commands/util.py | 267 +++ packages/envied/src/envied/commands/wvd.py | 272 +++ packages/envied/src/envied/core/__init__.py | 1 + packages/envied/src/envied/core/__main__.py | 88 + packages/envied/src/envied/core/binaries.py | 77 + packages/envied/src/envied/core/cacher.py | 156 ++ .../envied/src/envied/core/cdm/__init__.py | 3 + .../core/cdm/decrypt_labs_remote_cdm.py | 143 ++ packages/envied/src/envied/core/commands.py | 35 + packages/envied/src/envied/core/config.py | 138 ++ packages/envied/src/envied/core/console.py | 351 +++ packages/envied/src/envied/core/constants.py | 25 + packages/envied/src/envied/core/credential.py | 87 + .../src/envied/core/downloaders/__init__.py | 6 + .../src/envied/core/downloaders/aria2c.py | 331 +++ .../core/downloaders/curl_impersonate.py | 264 +++ .../envied/core/downloaders/n_m3u8dl_re.py | 299 +++ .../src/envied/core/downloaders/requests.py | 271 +++ .../envied/src/envied/core/drm/__init__.py | 10 + .../envied/src/envied/core/drm/clearkey.py | 111 + .../envied/src/envied/core/drm/playready.py | 402 ++++ .../envied/src/envied/core/drm/widevine.py | 381 ++++ packages/envied/src/envied/core/events.py | 76 + .../src/envied/core/manifests/__init__.py | 5 + .../envied/src/envied/core/manifests/dash.py | 800 +++++++ .../envied/src/envied/core/manifests/hls.py | 888 ++++++++ .../envied/src/envied/core/manifests/ism.py | 335 +++ .../envied/src/envied/core/manifests/m3u8.py | 76 + .../src/envied/core/proxies/__init__.py | 6 + .../envied/src/envied/core/proxies/basic.py | 54 + .../envied/src/envied/core/proxies/hola.py | 60 + .../envied/src/envied/core/proxies/nordvpn.py | 128 ++ .../envied/src/envied/core/proxies/proxy.py | 31 + .../src/envied/core/proxies/surfsharkvpn.py | 124 ++ .../envied/src/envied/core/search_result.py | 44 + packages/envied/src/envied/core/service.py | 368 ++++ packages/envied/src/envied/core/services.py | 90 + .../envied/src/envied/core/title_cacher.py | 240 +++ .../envied/src/envied/core/titles/__init__.py | 11 + .../envied/src/envied/core/titles/episode.py | 230 ++ .../envied/src/envied/core/titles/movie.py | 164 ++ .../envied/src/envied/core/titles/song.py | 144 ++ .../envied/src/envied/core/titles/title.py | 68 + .../envied/src/envied/core/tracks/__init__.py | 11 + .../src/envied/core/tracks/attachment.py | 147 ++ .../envied/src/envied/core/tracks/audio.py | 188 ++ .../envied/src/envied/core/tracks/chapter.py | 77 + .../envied/src/envied/core/tracks/chapters.py | 144 ++ .../envied/src/envied/core/tracks/hybrid.py | 327 +++ .../envied/src/envied/core/tracks/subtitle.py | 967 +++++++++ .../envied/src/envied/core/tracks/track.py | 597 +++++ .../envied/src/envied/core/tracks/tracks.py | 481 +++++ .../envied/src/envied/core/tracks/video.py | 455 ++++ .../envied/src/envied/core/update_checker.py | 276 +++ packages/envied/src/envied/core/utilities.py | 451 ++++ .../envied/src/envied/core/utils/__init__.py | 0 .../src/envied/core/utils/click_types.py | 292 +++ .../src/envied/core/utils/collections.py | 51 + .../envied/src/envied/core/utils/gen_esn.py | 30 + .../src/envied/core/utils/osenvironment.py | 24 + .../src/envied/core/utils/sslciphers.py | 77 + .../src/envied/core/utils/subprocess.py | 25 + packages/envied/src/envied/core/utils/tags.py | 410 ++++ .../envied/src/envied/core/utils/webvtt.py | 192 ++ packages/envied/src/envied/core/utils/xml.py | 24 + packages/envied/src/envied/core/vault.py | 49 + packages/envied/src/envied/core/vaults.py | 83 + packages/envied/src/envied/envied.yaml | 150 ++ .../src/envied/services/ALL4/__init__.py | 416 ++++ .../src/envied/services/ALL4/config.yaml | 27 + .../src/envied/services/ARD/__init__.py | 175 ++ .../src/envied/services/ARD/config.yaml | 8 + .../src/envied/services/AUBC/__init__.py | 251 +++ .../src/envied/services/AUBC/config.yaml | 9 + .../src/envied/services/CBC/__init__.py | 319 +++ .../src/envied/services/CBC/config.yaml | 7 + .../src/envied/services/CBS/__init__.py | 242 +++ .../src/envied/services/CBS/config.yaml | 10 + .../src/envied/services/CTV/__init__.py | 373 ++++ .../src/envied/services/CTV/config.yaml | 6 + .../src/envied/services/DSCP/__init__.py | 301 +++ .../src/envied/services/DSCP/config.yaml | 4 + .../src/envied/services/DSNP/__init__.py | 657 ++++++ .../src/envied/services/DSNP/config.yaml | 27 + .../src/envied/services/DSNP/queries.py | 13 + .../src/envied/services/ITV/__init__.py | 361 ++++ .../src/envied/services/ITV/config.yaml | 7 + .../src/envied/services/MAX/__init__.py | 650 ++++++ .../src/envied/services/MAX/config.yaml | 6 + .../src/envied/services/MTSP/__init__.py | 101 + .../src/envied/services/MTSP/config.yaml | 8 + .../src/envied/services/MY5/__init__.py | 208 ++ .../src/envied/services/MY5/config.yaml | 38 + .../src/envied/services/NBLA/__init__.py | 297 +++ .../src/envied/services/NBLA/config.yaml | 13 + .../src/envied/services/NF/MSL/MSLKeys.py | 10 + .../src/envied/services/NF/MSL/MSLObject.py | 6 + .../src/envied/services/NF/MSL/__init__.py | 408 ++++ .../NF/MSL/schemes/EntityAuthentication.py | 59 + .../NF/MSL/schemes/KeyExchangeRequest.py | 80 + .../NF/MSL/schemes/UserAuthentication.py | 59 + .../services/NF/MSL/schemes/__init__.py | 24 + .../envied/src/envied/services/NF/__init__.py | 770 +++++++ .../envied/src/envied/services/NF/config.yaml | 216 ++ .../src/envied/services/NRK/__init__.py | 142 ++ .../src/envied/services/NRK/config.yaml | 9 + .../src/envied/services/PCOK/__init__.py | 472 ++++ .../src/envied/services/PCOK/config.yaml | 27 + .../src/envied/services/PLUTO/__init__.py | 295 +++ .../src/envied/services/PLUTO/config.yaml | 7 + .../src/envied/services/ROKU/__init__.py | 262 +++ .../src/envied/services/ROKU/config.yaml | 5 + .../src/envied/services/RTE/__init__.py | 285 +++ .../src/envied/services/RTE/config.yaml | 7 + .../src/envied/services/SPOT/__init__.py | 257 +++ .../src/envied/services/SPOT/config.yaml | 9 + .../src/envied/services/STV/__init__.py | 231 ++ .../src/envied/services/STV/config.yaml | 20 + .../src/envied/services/TPTV/__init__.py | 332 +++ .../src/envied/services/TPTV/config.yaml | 23 + .../src/envied/services/TUBI/__init__.py | 239 ++ .../src/envied/services/TUBI/config.yaml | 5 + .../src/envied/services/TVNZ/__init__.py | 305 +++ .../src/envied/services/TVNZ/config.yaml | 9 + .../src/envied/services/UKTV/__init__.py | 194 ++ .../src/envied/services/UKTV/config.yaml | 9 + .../src/envied/services/YTBE/__init__.py | 204 ++ .../src/envied/services/YTBE/config.yaml | 5 + .../src/envied/services/YTBE/default.txt | 173 ++ .../src/envied/services/ZDF/__init__.py | 213 ++ .../src/envied/services/ZDF/config.yaml | 117 + .../envied/src/envied/services/iP/__init__.py | 450 ++++ .../envied/src/envied/services/iP/config.yaml | 56 + .../envied/src/envied/unshackle-example.yaml | 260 +++ packages/envied/src/envied/utils/base62.py | 118 + .../envied/src/envied/utils/osenvironment.py | 24 + packages/vinefeeder/README.md | 419 ++++ packages/vinefeeder/pyproject.toml | 21 + packages/vinefeeder/src/vinefeeder/LICENSE | 21 + packages/vinefeeder/src/vinefeeder/README.md | 419 ++++ .../vinefeeder/src/vinefeeder/__init__.py | 0 .../vinefeeder/src/vinefeeder/__main__.py | 688 ++++++ .../vinefeeder/src/vinefeeder/base_loader.py | 486 +++++ .../vinefeeder/src/vinefeeder/batchloader.py | 35 + packages/vinefeeder/src/vinefeeder/bbc_uhd.py | 21 + .../vinefeeder/src/vinefeeder/config.yaml | 6 + .../vinefeeder/src/vinefeeder/config_io.py | 13 + .../src/vinefeeder/images/vinefeeder1.png | Bin 0 -> 622403 bytes .../src/vinefeeder/images/vinefeeder2.png | Bin 0 -> 578187 bytes .../src/vinefeeder/images/vinefeeder3.png | Bin 0 -> 793583 bytes .../src/vinefeeder/images/vinefeeder4.png | Bin 0 -> 796079 bytes .../src/vinefeeder/images/vinefeeder5.png | Bin 0 -> 885402 bytes .../src/vinefeeder/images/vinefeeder6.png | Bin 0 -> 892072 bytes .../src/vinefeeder/parsing_utils.py | 298 +++ packages/vinefeeder/src/vinefeeder/pretty.py | 74 + .../src/vinefeeder/requirements.txt | 9 + .../src/vinefeeder/selenium_bbc_uhd.py | 39 + .../src/vinefeeder/services/ALL4/__init__.py | 320 +++ .../vinefeeder/services/ALL4/__init__.py.bak | 325 +++ .../src/vinefeeder/services/ALL4/config.yaml | 17 + .../src/vinefeeder/services/BBC/__init__.py | 486 +++++ .../src/vinefeeder/services/BBC/config.yaml | 22 + .../src/vinefeeder/services/ITVX/__init__.py | 323 +++ .../vinefeeder/services/ITVX/__init__.py.bak | 323 +++ .../src/vinefeeder/services/ITVX/config.yaml | 22 + .../src/vinefeeder/services/MY5/__init__.py | 281 +++ .../src/vinefeeder/services/MY5/config.yaml | 18 + .../src/vinefeeder/services/STV/__init__.py | 387 ++++ .../src/vinefeeder/services/STV/config.yaml | 22 + .../src/vinefeeder/services/TPTV/README.txt | 6 + .../src/vinefeeder/services/TPTV/__init__.py | 236 ++ .../src/vinefeeder/services/TPTV/config.yaml | 6 + .../src/vinefeeder/services/TVNZ/__init__.py | 428 ++++ .../src/vinefeeder/services/TVNZ/config.yaml | 17 + .../src/vinefeeder/services/U/__init__.py | 220 ++ .../src/vinefeeder/services/U/config.yaml | 6 + .../src/vinefeeder/services/word_replace.sh | 7 + pyproject.toml | 15 + uv.lock | 1918 +++++++++++++++++ vaults/API.py | 184 ++ vaults/HTTP.py | 337 +++ vaults/HTTPAPI.py | 215 ++ vaults/MySQL.py | 244 +++ vaults/SQLite.py | 179 ++ vaults/__init__.py | 0 209 files changed, 37390 insertions(+) create mode 100644 README.md create mode 100644 packages/envied/CONFIG.md create mode 100644 packages/envied/LICENSE create mode 100644 packages/envied/README.md create mode 100644 packages/envied/cliff.toml create mode 100644 packages/envied/img/envied1.png create mode 100644 packages/envied/install.bat create mode 100644 packages/envied/pyproject.toml create mode 100644 packages/envied/src/envied/__init__.py create mode 100644 packages/envied/src/envied/__main__.py create mode 100644 packages/envied/src/envied/binaries/placehere.txt create mode 100644 packages/envied/src/envied/cache/ITV/titles_19f8a2a55bf283b0_gb.json create mode 100644 packages/envied/src/envied/cache/ITV/titles_494df8449cc64f5a_gb.json create mode 100644 packages/envied/src/envied/cache/ITV/titles_5bb08ebb94a57d2c_gb.json create mode 100644 packages/envied/src/envied/cache/ITV/titles_76a2d94a004a3357_gb.json create mode 100644 packages/envied/src/envied/cache/global/ip_info.json create mode 100644 packages/envied/src/envied/commands/__init__.py create mode 100644 packages/envied/src/envied/commands/cfg.py create mode 100644 packages/envied/src/envied/commands/dl.py create mode 100644 packages/envied/src/envied/commands/env.py create mode 100644 packages/envied/src/envied/commands/kv.py create mode 100644 packages/envied/src/envied/commands/prd.py create mode 100644 packages/envied/src/envied/commands/search.py create mode 100644 packages/envied/src/envied/commands/serve.py create mode 100644 packages/envied/src/envied/commands/util.py create mode 100644 packages/envied/src/envied/commands/wvd.py create mode 100644 packages/envied/src/envied/core/__init__.py create mode 100644 packages/envied/src/envied/core/__main__.py create mode 100644 packages/envied/src/envied/core/binaries.py create mode 100644 packages/envied/src/envied/core/cacher.py create mode 100644 packages/envied/src/envied/core/cdm/__init__.py create mode 100644 packages/envied/src/envied/core/cdm/decrypt_labs_remote_cdm.py create mode 100644 packages/envied/src/envied/core/commands.py create mode 100644 packages/envied/src/envied/core/config.py create mode 100644 packages/envied/src/envied/core/console.py create mode 100644 packages/envied/src/envied/core/constants.py create mode 100644 packages/envied/src/envied/core/credential.py create mode 100644 packages/envied/src/envied/core/downloaders/__init__.py create mode 100644 packages/envied/src/envied/core/downloaders/aria2c.py create mode 100644 packages/envied/src/envied/core/downloaders/curl_impersonate.py create mode 100644 packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py create mode 100644 packages/envied/src/envied/core/downloaders/requests.py create mode 100644 packages/envied/src/envied/core/drm/__init__.py create mode 100644 packages/envied/src/envied/core/drm/clearkey.py create mode 100644 packages/envied/src/envied/core/drm/playready.py create mode 100644 packages/envied/src/envied/core/drm/widevine.py create mode 100644 packages/envied/src/envied/core/events.py create mode 100644 packages/envied/src/envied/core/manifests/__init__.py create mode 100644 packages/envied/src/envied/core/manifests/dash.py create mode 100644 packages/envied/src/envied/core/manifests/hls.py create mode 100644 packages/envied/src/envied/core/manifests/ism.py create mode 100644 packages/envied/src/envied/core/manifests/m3u8.py create mode 100644 packages/envied/src/envied/core/proxies/__init__.py create mode 100644 packages/envied/src/envied/core/proxies/basic.py create mode 100644 packages/envied/src/envied/core/proxies/hola.py create mode 100644 packages/envied/src/envied/core/proxies/nordvpn.py create mode 100644 packages/envied/src/envied/core/proxies/proxy.py create mode 100644 packages/envied/src/envied/core/proxies/surfsharkvpn.py create mode 100644 packages/envied/src/envied/core/search_result.py create mode 100644 packages/envied/src/envied/core/service.py create mode 100644 packages/envied/src/envied/core/services.py create mode 100644 packages/envied/src/envied/core/title_cacher.py create mode 100644 packages/envied/src/envied/core/titles/__init__.py create mode 100644 packages/envied/src/envied/core/titles/episode.py create mode 100644 packages/envied/src/envied/core/titles/movie.py create mode 100644 packages/envied/src/envied/core/titles/song.py create mode 100644 packages/envied/src/envied/core/titles/title.py create mode 100644 packages/envied/src/envied/core/tracks/__init__.py create mode 100644 packages/envied/src/envied/core/tracks/attachment.py create mode 100644 packages/envied/src/envied/core/tracks/audio.py create mode 100644 packages/envied/src/envied/core/tracks/chapter.py create mode 100644 packages/envied/src/envied/core/tracks/chapters.py create mode 100644 packages/envied/src/envied/core/tracks/hybrid.py create mode 100644 packages/envied/src/envied/core/tracks/subtitle.py create mode 100644 packages/envied/src/envied/core/tracks/track.py create mode 100644 packages/envied/src/envied/core/tracks/tracks.py create mode 100644 packages/envied/src/envied/core/tracks/video.py create mode 100644 packages/envied/src/envied/core/update_checker.py create mode 100644 packages/envied/src/envied/core/utilities.py create mode 100644 packages/envied/src/envied/core/utils/__init__.py create mode 100644 packages/envied/src/envied/core/utils/click_types.py create mode 100644 packages/envied/src/envied/core/utils/collections.py create mode 100644 packages/envied/src/envied/core/utils/gen_esn.py create mode 100644 packages/envied/src/envied/core/utils/osenvironment.py create mode 100644 packages/envied/src/envied/core/utils/sslciphers.py create mode 100644 packages/envied/src/envied/core/utils/subprocess.py create mode 100644 packages/envied/src/envied/core/utils/tags.py create mode 100644 packages/envied/src/envied/core/utils/webvtt.py create mode 100644 packages/envied/src/envied/core/utils/xml.py create mode 100644 packages/envied/src/envied/core/vault.py create mode 100644 packages/envied/src/envied/core/vaults.py create mode 100644 packages/envied/src/envied/envied.yaml create mode 100644 packages/envied/src/envied/services/ALL4/__init__.py create mode 100644 packages/envied/src/envied/services/ALL4/config.yaml create mode 100644 packages/envied/src/envied/services/ARD/__init__.py create mode 100644 packages/envied/src/envied/services/ARD/config.yaml create mode 100644 packages/envied/src/envied/services/AUBC/__init__.py create mode 100644 packages/envied/src/envied/services/AUBC/config.yaml create mode 100644 packages/envied/src/envied/services/CBC/__init__.py create mode 100644 packages/envied/src/envied/services/CBC/config.yaml create mode 100644 packages/envied/src/envied/services/CBS/__init__.py create mode 100644 packages/envied/src/envied/services/CBS/config.yaml create mode 100644 packages/envied/src/envied/services/CTV/__init__.py create mode 100644 packages/envied/src/envied/services/CTV/config.yaml create mode 100644 packages/envied/src/envied/services/DSCP/__init__.py create mode 100644 packages/envied/src/envied/services/DSCP/config.yaml create mode 100644 packages/envied/src/envied/services/DSNP/__init__.py create mode 100644 packages/envied/src/envied/services/DSNP/config.yaml create mode 100644 packages/envied/src/envied/services/DSNP/queries.py create mode 100644 packages/envied/src/envied/services/ITV/__init__.py create mode 100644 packages/envied/src/envied/services/ITV/config.yaml create mode 100755 packages/envied/src/envied/services/MAX/__init__.py create mode 100755 packages/envied/src/envied/services/MAX/config.yaml create mode 100644 packages/envied/src/envied/services/MTSP/__init__.py create mode 100644 packages/envied/src/envied/services/MTSP/config.yaml create mode 100644 packages/envied/src/envied/services/MY5/__init__.py create mode 100644 packages/envied/src/envied/services/MY5/config.yaml create mode 100644 packages/envied/src/envied/services/NBLA/__init__.py create mode 100644 packages/envied/src/envied/services/NBLA/config.yaml create mode 100644 packages/envied/src/envied/services/NF/MSL/MSLKeys.py create mode 100644 packages/envied/src/envied/services/NF/MSL/MSLObject.py create mode 100644 packages/envied/src/envied/services/NF/MSL/__init__.py create mode 100644 packages/envied/src/envied/services/NF/MSL/schemes/EntityAuthentication.py create mode 100644 packages/envied/src/envied/services/NF/MSL/schemes/KeyExchangeRequest.py create mode 100644 packages/envied/src/envied/services/NF/MSL/schemes/UserAuthentication.py create mode 100644 packages/envied/src/envied/services/NF/MSL/schemes/__init__.py create mode 100644 packages/envied/src/envied/services/NF/__init__.py create mode 100644 packages/envied/src/envied/services/NF/config.yaml create mode 100644 packages/envied/src/envied/services/NRK/__init__.py create mode 100644 packages/envied/src/envied/services/NRK/config.yaml create mode 100755 packages/envied/src/envied/services/PCOK/__init__.py create mode 100755 packages/envied/src/envied/services/PCOK/config.yaml create mode 100644 packages/envied/src/envied/services/PLUTO/__init__.py create mode 100644 packages/envied/src/envied/services/PLUTO/config.yaml create mode 100644 packages/envied/src/envied/services/ROKU/__init__.py create mode 100644 packages/envied/src/envied/services/ROKU/config.yaml create mode 100644 packages/envied/src/envied/services/RTE/__init__.py create mode 100644 packages/envied/src/envied/services/RTE/config.yaml create mode 100644 packages/envied/src/envied/services/SPOT/__init__.py create mode 100644 packages/envied/src/envied/services/SPOT/config.yaml create mode 100644 packages/envied/src/envied/services/STV/__init__.py create mode 100644 packages/envied/src/envied/services/STV/config.yaml create mode 100644 packages/envied/src/envied/services/TPTV/__init__.py create mode 100644 packages/envied/src/envied/services/TPTV/config.yaml create mode 100644 packages/envied/src/envied/services/TUBI/__init__.py create mode 100644 packages/envied/src/envied/services/TUBI/config.yaml create mode 100644 packages/envied/src/envied/services/TVNZ/__init__.py create mode 100644 packages/envied/src/envied/services/TVNZ/config.yaml create mode 100644 packages/envied/src/envied/services/UKTV/__init__.py create mode 100644 packages/envied/src/envied/services/UKTV/config.yaml create mode 100644 packages/envied/src/envied/services/YTBE/__init__.py create mode 100644 packages/envied/src/envied/services/YTBE/config.yaml create mode 100644 packages/envied/src/envied/services/YTBE/default.txt create mode 100644 packages/envied/src/envied/services/ZDF/__init__.py create mode 100644 packages/envied/src/envied/services/ZDF/config.yaml create mode 100644 packages/envied/src/envied/services/iP/__init__.py create mode 100644 packages/envied/src/envied/services/iP/config.yaml create mode 100644 packages/envied/src/envied/unshackle-example.yaml create mode 100644 packages/envied/src/envied/utils/base62.py create mode 100644 packages/envied/src/envied/utils/osenvironment.py create mode 100644 packages/vinefeeder/README.md create mode 100644 packages/vinefeeder/pyproject.toml create mode 100644 packages/vinefeeder/src/vinefeeder/LICENSE create mode 100644 packages/vinefeeder/src/vinefeeder/README.md create mode 100644 packages/vinefeeder/src/vinefeeder/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/__main__.py create mode 100644 packages/vinefeeder/src/vinefeeder/base_loader.py create mode 100644 packages/vinefeeder/src/vinefeeder/batchloader.py create mode 100644 packages/vinefeeder/src/vinefeeder/bbc_uhd.py create mode 100644 packages/vinefeeder/src/vinefeeder/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/config_io.py create mode 100644 packages/vinefeeder/src/vinefeeder/images/vinefeeder1.png create mode 100644 packages/vinefeeder/src/vinefeeder/images/vinefeeder2.png create mode 100644 packages/vinefeeder/src/vinefeeder/images/vinefeeder3.png create mode 100644 packages/vinefeeder/src/vinefeeder/images/vinefeeder4.png create mode 100644 packages/vinefeeder/src/vinefeeder/images/vinefeeder5.png create mode 100644 packages/vinefeeder/src/vinefeeder/images/vinefeeder6.png create mode 100644 packages/vinefeeder/src/vinefeeder/parsing_utils.py create mode 100644 packages/vinefeeder/src/vinefeeder/pretty.py create mode 100644 packages/vinefeeder/src/vinefeeder/requirements.txt create mode 100644 packages/vinefeeder/src/vinefeeder/selenium_bbc_uhd.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/ALL4/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/ALL4/__init__.py.bak create mode 100644 packages/vinefeeder/src/vinefeeder/services/ALL4/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/BBC/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/BBC/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/ITVX/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/ITVX/__init__.py.bak create mode 100644 packages/vinefeeder/src/vinefeeder/services/ITVX/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/MY5/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/MY5/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/STV/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/STV/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/TPTV/README.txt create mode 100644 packages/vinefeeder/src/vinefeeder/services/TPTV/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/TPTV/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/TVNZ/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/TVNZ/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/U/__init__.py create mode 100644 packages/vinefeeder/src/vinefeeder/services/U/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/word_replace.sh create mode 100644 pyproject.toml create mode 100644 uv.lock create mode 100644 vaults/API.py create mode 100644 vaults/HTTP.py create mode 100644 vaults/HTTPAPI.py create mode 100644 vaults/MySQL.py create mode 100644 vaults/SQLite.py create mode 100644 vaults/__init__.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/envied/CONFIG.md b/packages/envied/CONFIG.md new file mode 100644 index 0000000..323bf17 --- /dev/null +++ b/packages/envied/CONFIG.md @@ -0,0 +1,582 @@ +# Config Documentation + +This page documents configuration values and what they do. You begin with an empty configuration file. +You may alter your configuration with `envied cfg --help`, or find the direct location with `envied env info`. +Configuration values are listed in alphabetical order. + +Avoid putting comments in the config file as they may be removed. Comments are currently kept only thanks +to the usage of `ruamel.yaml` to parse and write YAML files. In the future `yaml` may be used instead, +which does not keep comments. + +## aria2c (dict) + +- `max_concurrent_downloads` + Maximum number of parallel downloads. Default: `min(32,(cpu_count+4))` + Note: Overrides the `max_workers` parameter of the aria2(c) downloader function. +- `max_connection_per_server` + Maximum number of connections to one server for each download. Default: `1` +- `split` + Split a file into N chunks and download each chunk on its own connection. Default: `5` +- `file_allocation` + Specify file allocation method. Default: `"prealloc"` + + - `"none"` doesn't pre-allocate file space. + - `"prealloc"` pre-allocates file space before download begins. This may take some time depending on the size of the + file. + - `"falloc"` is your best choice if you are using newer file systems such as ext4 (with extents support), btrfs, xfs + or NTFS (MinGW build only). It allocates large(few GiB) files almost instantly. Don't use falloc with legacy file + systems such as ext3 and FAT32 because it takes almost same time as prealloc, and it blocks aria2 entirely until + allocation finishes. falloc may not be available if your system doesn't have posix_fallocate(3) function. + - `"trunc"` uses ftruncate(2) system call or platform-specific counterpart to truncate a file to a specified length. + +## cdm (dict) + +Pre-define which Widevine or PlayReady device to use for each Service by Service Tag as Key (case-sensitive). +The value should be a WVD or PRD filename without the file extension. When +loading the device, envied will look in both the `WVDs` and `PRDs` directories +for a matching file. + +For example, + +```yaml +AMZN: chromecdm_903_l3 +NF: nexus_6_l1 +``` + +You may also specify this device based on the profile used. + +For example, + +```yaml +AMZN: chromecdm_903_l3 +NF: nexus_6_l1 +DSNP: + john_sd: chromecdm_903_l3 + jane_uhd: nexus_5_l1 +``` + +You can also specify a fallback value to predefine if a match was not made. +This can be done using `default` key. This can help reduce redundancy in your specifications. + +For example, the following has the same result as the previous example, as well as all other +services and profiles being pre-defined to use `chromecdm_903_l3`. + +```yaml +NF: nexus_6_l1 +DSNP: + jane_uhd: nexus_5_l1 +default: chromecdm_903_l3 +``` + +## chapter_fallback_name (str) + +The Chapter Name to use when exporting a Chapter without a Name. +The default is no fallback name at all and no Chapter name will be set. + +The fallback name can use the following variables in f-string style: + +- `{i}`: The Chapter number starting at 1. + E.g., `"Chapter {i}"`: "Chapter 1", "Intro", "Chapter 3". +- `{j}`: A number starting at 1 that increments any time a Chapter has no title. + E.g., `"Chapter {j}"`: "Chapter 1", "Intro", "Chapter 2". + +These are formatted with f-strings, directives are supported. +For example, `"Chapter {i:02}"` will result in `"Chapter 01"`. + +## credentials (dict[str, str|list|dict]) + +Specify login credentials to use for each Service, and optionally per-profile. + +For example, + +```yaml +ALL4: jane@gmail.com:LoremIpsum100 # directly +AMZN: # or per-profile, optionally with a default + default: jane@example.tld:LoremIpsum99 # <-- used by default if -p/--profile is not used + james: james@gmail.com:TheFriend97 + john: john@example.tld:LoremIpsum98 +NF: # the `default` key is not necessary, but no credential will be used by default + john: john@gmail.com:TheGuyWhoPaysForTheNetflix69420 +``` + +The value should be in string form, i.e. `john@gmail.com:password123` or `john:password123`. +Any arbitrary values can be used on the left (username/password/phone) and right (password/secret). +You can also specify these in list form, i.e., `["john@gmail.com", ":PasswordWithAColon"]`. + +If you specify multiple credentials with keys like the `AMZN` and `NF` example above, then you should +use a `default` key or no credential will be loaded automatically unless you use `-p/--profile`. You +do not have to use a `default` key at all. + +Please be aware that this information is sensitive and to keep it safe. Do not share your config. + +## curl_impersonate (dict) + +- `browser` - The Browser to impersonate as. A list of available Browsers and Versions are listed here: + + + Default: `"chrome124"` + +For example, + +```yaml +curl_impersonate: + browser: "chrome120" +``` + +## directories (dict) + +Override the default directories used across envied. +The directories are set to common values by default. + +The following directories are available and may be overridden, + +- `commands` - CLI Command Classes. +- `services` - Service Classes. +- `vaults` - Vault Classes. +- `fonts` - Font files (ttf or otf). +- `downloads` - Downloads. +- `temp` - Temporary files or conversions during download. +- `cache` - Expiring data like Authorization tokens, or other misc data. +- `cookies` - Expiring Cookie data. +- `logs` - Logs. +- `wvds` - Widevine Devices. +- `prds` - PlayReady Devices. + +For example, + +```yaml +downloads: "D:/Downloads/envied" +temp: "D:/Temp/envied" +``` + +There are directories not listed that cannot be modified as they are crucial to the operation of envied. + +## dl (dict) + +Pre-define default options and switches of the `dl` command. +The values will be ignored if explicitly set in the CLI call. + +The Key must be the same value Python click would resolve it to as an argument. +E.g., `@click.option("-r", "--range", "range_", type=...` actually resolves as `range_` variable. + +For example to set the default primary language to download to German, + +```yaml +lang: de +``` + +to set how many tracks to download concurrently to 4 and download threads to 16, + +```yaml +downloads: 4 +workers: 16 +``` + +to set `--bitrate=CVBR` for the AMZN service, + +```yaml +lang: de +AMZN: + bitrate: CVBR +``` + +or to change the output subtitle format from the default (original format) to WebVTT, + +```yaml +sub_format: vtt +``` + +## downloader (str | dict) + +Choose what software to use to download data throughout envied where needed. +You may provide a single downloader globally or a mapping of service tags to +downloaders. + +Options: + +- `requests` (default) - +- `aria2c` - +- `curl_impersonate` - (via ) +- `n_m3u8dl_re` - + +Note that aria2c can reach the highest speeds as it utilizes threading and more connections than the other downloaders. However, aria2c can also be one of the more unstable downloaders. It will work one day, then not another day. It also does not support HTTP(S) proxies while the other downloaders do. + +Example mapping: + +```yaml +downloader: + NF: requests + AMZN: n_m3u8dl_re + DSNP: n_m3u8dl_re + default: requests +``` + +The `default` entry is optional. If omitted, `requests` will be used for services not listed. + +## decryption (str | dict) + +Choose what software to use to decrypt DRM-protected content throughout envied where needed. +You may provide a single decryption method globally or a mapping of service tags to +decryption methods. + +Options: + +- `shaka` (default) - Shaka Packager - +- `mp4decrypt` - mp4decrypt from Bento4 - + +Note that Shaka Packager is the traditional method and works with most services. mp4decrypt +is an alternative that may work better with certain services that have specific encryption formats. + +Example mapping: + +```yaml +decryption: + ATVP: mp4decrypt + AMZN: shaka + default: shaka +``` + +The `default` entry is optional. If omitted, `shaka` will be used for services not listed. + +Simple configuration (single method for all services): + +```yaml +decryption: mp4decrypt +``` + +## filenames (dict) + +Override the default filenames used across envied. +The filenames use various variables that are replaced during runtime. + +The following filenames are available and may be overridden: + +- `log` - Log filenames. Uses `{name}` and `{time}` variables. +- `config` - Service configuration filenames. +- `root_config` - Root configuration filename. +- `chapters` - Chapter export filenames. Uses `{title}` and `{random}` variables. +- `subtitle` - Subtitle export filenames. Uses `{id}` and `{language}` variables. + +For example, + +```yaml +filenames: + log: "envied_{name}_{time}.log" + config: "config.yaml" + root_config: "envied.yaml" + chapters: "Chapters_{title}_{random}.txt" + subtitle: "Subtitle_{id}_{language}.srt" +``` + +## headers (dict) + +Case-Insensitive dictionary of headers that all Services begin their Request Session state with. +All requests will use these unless changed explicitly or implicitly via a Server response. +These should be sane defaults and anything that would only be useful for some Services should not +be put here. + +Avoid headers like 'Accept-Encoding' as that would be a compatibility header that Python-requests will +set for you. + +I recommend using, + +```yaml +Accept-Language: "en-US,en;q=0.8" +User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" +``` + +## key_vaults (list\[dict]) + +Key Vaults store your obtained Content Encryption Keys (CEKs) and Key IDs per-service. + +This can help reduce unnecessary License calls even during the first download. This is because a Service may +provide the same Key ID and CEK for both Video and Audio, as well as for multiple resolutions or bitrates. + +You can have as many Key Vaults as you would like. It's nice to share Key Vaults or use a unified Vault on +Teams as sharing CEKs immediately can help reduce License calls drastically. + +Three types of Vaults are in the Core codebase, API, SQLite and MySQL. API makes HTTP requests to a RESTful API, +whereas SQLite and MySQL directly connect to an SQLite or MySQL Database. + +Note: SQLite and MySQL vaults have to connect directly to the Host/IP. It cannot be in front of a PHP API or such. +Beware that some Hosting Providers do not let you access the MySQL server outside their intranet and may not be +accessible outside their hosting platform. + +### Using an API Vault + +API vaults use a specific HTTP request format, therefore API or HTTP Key Vault APIs from other projects or services may +not work in envied. The API format can be seen in the [API Vault Code](envied/vaults/API.py). + +```yaml +- type: API + name: "John#0001's Vault" # arbitrary vault name + uri: "https://key-vault.example.com" # api base uri (can also be an IP or IP:Port) + # uri: "127.0.0.1:80/key-vault" + # uri: "https://api.example.com/key-vault" + token: "random secret key" # authorization token +``` + +### Using a MySQL Vault + +MySQL vaults can be either MySQL or MariaDB servers. I recommend MariaDB. +A MySQL Vault can be on a local or remote network, but I recommend SQLite for local Vaults. + +```yaml +- type: MySQL + name: "John#0001's Vault" # arbitrary vault name + host: "127.0.0.1" # host/ip + # port: 3306 # port (defaults to 3306) + database: vault # database used for envied + username: jane11 + password: Doe123 +``` + +I recommend giving only a trustable user (or yourself) CREATE permission and then use envied to cache at least one CEK +per Service to have it create the tables. If you don't give any user permissions to create tables, you will need to +make tables yourself. + +- Use a password on all user accounts. +- Never use the root account with envied (even if it's you). +- Do not give multiple users the same username and/or password. +- Only give users access to the database used for envied. +- You may give trusted users CREATE permission so envied can create tables if needed. +- Other uses should only be given SELECT and INSERT permissions. + +### Using an SQLite Vault + +SQLite Vaults are usually only used for locally stored vaults. This vault may be stored on a mounted Cloud storage +drive, but I recommend using SQLite exclusively as an offline-only vault. Effectively this is your backup vault in +case something happens to your MySQL Vault. + +```yaml +- type: SQLite + name: "My Local Vault" # arbitrary vault name + path: "C:/Users/Jane11/Documents/envied/data/key_vault.db" +``` + +**Note**: You do not need to create the file at the specified path. +SQLite will create a new SQLite database at that path if one does not exist. +Try not to accidentally move the `db` file once created without reflecting the change in the config, or you will end +up with multiple databases. + +If you work on a Team I recommend every team member having their own SQLite Vault even if you all use a MySQL vault +together. + +## muxing (dict) + +- `set_title` + Set the container title to `Show SXXEXX Episode Name` or `Movie (Year)`. Default: `true` + +## n_m3u8dl_re (dict) + +Configuration for N_m3u8DL-RE downloader. This downloader is particularly useful for HLS streams. + +- `thread_count` + Number of threads to use for downloading. Default: Uses the same value as max_workers from the command. +- `ad_keyword` + Keyword to identify and potentially skip advertisement segments. Default: `None` +- `use_proxy` + Whether to use proxy when downloading. Default: `true` + +For example, + +```yaml +n_m3u8dl_re: + thread_count: 16 + ad_keyword: "advertisement" + use_proxy: true +``` + +## nordvpn (dict) + +**Legacy configuration. Use `proxy_providers.nordvpn` instead.** + +Set your NordVPN Service credentials with `username` and `password` keys to automate the use of NordVPN as a Proxy +system where required. + +You can also specify specific servers to use per-region with the `servers` key. +Sometimes a specific server works best for a service than others, so hard-coding one for a day or two helps. + +For example, + +```yaml +nordvpn: + username: zxqsR7C5CyGwmGb6KSvk8qsZ # example of the login format + password: wXVHmht22hhRKUEQ32PQVjCZ + servers: + - us: 12 # force US server #12 for US proxies +``` + +The username and password should NOT be your normal NordVPN Account Credentials. +They should be the `Service credentials` which can be found on your Nord Account Dashboard. + +Note that `gb` is used instead of `uk` to be more consistent across regional systems. + +## proxy_providers (dict) + +Enable external proxy provider services. These proxies will be used automatically where needed as defined by the +Service's GEOFENCE class property, but can also be explicitly used with `--proxy`. You can specify which provider +to use by prefixing it with the provider key name, e.g., `--proxy basic:de` or `--proxy nordvpn:de`. Some providers +support specific query formats for selecting a country/server. + +### basic (dict[str, str|list]) + +Define a mapping of country to proxy to use where required. +The keys are region Alpha 2 Country Codes. Alpha 2 Country Codes are `[a-z]{2}` codes, e.g., `us`, `gb`, and `jp`. +Don't get this mixed up with language codes like `en` vs. `gb`, or `ja` vs. `jp`. + +Do note that each key's value can be a list of strings, or a string. For example, + +```yaml +us: + - "http://john%40email.tld:password123@proxy-us.domain.tld:8080" + - "http://jane%40email.tld:password456@proxy-us.domain2.tld:8080" +de: "https://127.0.0.1:8080" +``` + +Note that if multiple proxies are defined for a region, then by default one will be randomly chosen. +You can choose a specific one by specifying it's number, e.g., `--proxy basic:us2` will choose the +second proxy of the US list. + +### nordvpn (dict) + +Set your NordVPN Service credentials with `username` and `password` keys to automate the use of NordVPN as a Proxy +system where required. + +You can also specify specific servers to use per-region with the `servers` key. +Sometimes a specific server works best for a service than others, so hard-coding one for a day or two helps. + +For example, + +```yaml +username: zxqsR7C5CyGwmGb6KSvk8qsZ # example of the login format +password: wXVHmht22hhRKUEQ32PQVjCZ +servers: + - us: 12 # force US server #12 for US proxies +``` + +The username and password should NOT be your normal NordVPN Account Credentials. +They should be the `Service credentials` which can be found on your Nord Account Dashboard. + +Once set, you can also specifically opt in to use a NordVPN proxy by specifying `--proxy=gb` or such. +You can even set a specific server number this way, e.g., `--proxy=gb2366`. + +Note that `gb` is used instead of `uk` to be more consistent across regional systems. + +### hola (dict) + +Enable Hola VPN proxy service. This is a simple provider that doesn't require configuration. + +For example, + +```yaml +proxy_providers: + hola: {} +``` + +Note: Hola VPN is automatically enabled when proxy_providers is configured, no additional setup is required. + +## remote_cdm (list\[dict]) + +Use [pywidevine] Serve-compliant Remote CDMs in envied as if it was a local widevine device file. +The name of each defined device maps as if it was a local device and should be used like a local device. + +For example, + +```yaml +- name: chromecdm_903_l3 # name must be unique for each remote CDM + # the device type, system id and security level must match the values of the device on the API + # if any of the information is wrong, it will raise an error, if you do not know it ask the API owner + device_type: CHROME + system_id: 1234 + security_level: 3 + host: "http://xxxxxxxxxxxxxxxx/the_cdm_endpoint" + secret: "secret/api key" + device_name: "remote device to use" # the device name from the API, usually a wvd filename +``` + +[pywidevine]: https://github.com/rlaphoenix/pywidevine + +## serve (dict) + +Configuration data for pywidevine's serve functionality run through envied. +This effectively allows you to run `envied serve` to start serving pywidevine Serve-compliant CDMs right from your +local widevine device files. + +For example, + +```yaml +users: + secret_key_for_jane: # 32bit hex recommended, case-sensitive + devices: # list of allowed devices for this user + - generic_nexus_4464_l3 + username: jane # only for internal logging, users will not see this name + secret_key_for_james: + devices: + - generic_nexus_4464_l3 + username: james + secret_key_for_john: + devices: + - generic_nexus_4464_l3 + username: john +# devices can be manually specified by path if you don't want to add it to +# envied's WVDs directory for whatever reason +# devices: +# - 'C:\Users\john\Devices\test_devices_001.wvd' +``` + +## services (dict) + +Configuration data for each Service. The Service will have the data within this section merged into the `config.yaml` +before provided to the Service class. + +Think of this config to be used for more sensitive configuration data, like user or device-specific API keys, IDs, +device attributes, and so on. A `config.yaml` file is typically shared and not meant to be modified, so use this for +any sensitive configuration data. + +The Key is the Service Tag, but can take any arbitrary form for its value. It's expected to begin as either a list or +a dictionary. + +For example, + +```yaml +NOW: + client: + auth_scheme: MESSO + # ... more sensitive data +``` + +## set_terminal_bg (bool) + +Controls whether envied should set the terminal background color. Default: `false` + +For example, + +```yaml +set_terminal_bg: true +``` + +## tag (str) + +Group or Username to postfix to the end of all download filenames following a dash. +For example, `tag: "J0HN"` will have `-J0HN` at the end of all download filenames. + +## tmdb_api_key (str) + +API key for The Movie Database (TMDB). This is used for tagging downloaded files with TMDB, +IMDB and TVDB identifiers. Leave empty to disable automatic lookups. + +To obtain a TMDB API key: + +1. Create an account at +2. Go to to register for API access +3. Fill out the API application form with your project details +4. Once approved, you'll receive your API key + +For example, + +```yaml +tmdb_api_key: cf66bf18956kca5311ada3bebb84eb9a # Not a real key +``` + +**Note**: Keep your API key secure and do not share it publicly. This key is used by the core/utils/tags.py module to fetch metadata from TMDB for proper file tagging. diff --git a/packages/envied/LICENSE b/packages/envied/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/packages/envied/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/packages/envied/README.md b/packages/envied/README.md new file mode 100644 index 0000000..c469ef3 --- /dev/null +++ b/packages/envied/README.md @@ -0,0 +1,106 @@ + + +## What is envied? + +Envied is a fork of [Devine](https://github.com/devine-dl/devine/). The name 'envied' is an anagram of Devine, and as such, pays homage to the original author. +Is is based on v 1.4.3 of envied. It is a powerful archival tool for downloading movies, TV shows, and music from streaming services. Built with a focus on modularity and extensibility, it provides a robust framework for content acquisition with support for DRM-protected content. + +No commands have been changed 'uv run envied' still works as usual. + +The major difference is that envied comes complete and needs little configuration. +CDM and services are taken care of. +The prime reason for the existence of envied is a --select-titles function. + +If you already use envied you'll probably just want to replace envied/envied/envied.yaml +with your own. But the exisiting yaml is close to working - just needs a few directory locations. +## Select Titles Feature +![--select-titles option](https://github.com/vinefeeder/envied/blob/main/img/envied1.png) + +## Key Features + +- 🚀 **Easy Installation** - Simple UV installation +- 🎥 **Multi-Media Support** - Movies, TV episodes, and music +- 🛠️ **Built-in Parsers** - DASH/HLS and ISM manifest support +- 🔒 **DRM Support** - Widevine and PlayReady integration +- 🌈 **HDR10+DV Hybrid** - Hybrid Dolby Vision injection via [dovi_tool](https://github.com/quietvoid/dovi_tool) +- 💾 **Flexible Storage** - Local and remote key vaults +- 👥 **Multi-Profile Auth** - Support for cookies and credentials +- 🤖 **Smart Naming** - Automatic P2P-style filename structure +- ⚙️ **Configurable** - YAML-based configuration +- ❤️ **Open Source** - Fully open-source with community contributions welcome + +## Quick Start + +### Installation + +This installs the latest version directly from the GitHub repository: + +```shell +git clone https://github.com/vinefeeder/envied.git +cd envied +uv sync +uv run envied --help +``` + +### Install envied as a global (per-user) tool + +```bash +uv tool install git+https://github.com/vinefeeder/envied.git +# Then run: +uvx envied --help # or just `envied` once PATH updated +``` + +> [!NOTE] +> After installation, you may need to add the installation path to your PATH environment variable if prompted. + +> **Recommended:** Use `uv run envied` instead of direct command execution to ensure proper virtual environment activation. + + +### Basic Usage + +```shell +# Check available commands +uv run envied --help + +# Configure your settings +git clone https://github.com/vinefeeder/envied.git +cd envied +uv sync +uv run envied --help + +# Download content (requires configured services) +uv run envied dl SERVICE_NAME CONTENT_ID +``` + +## Documentation + +For comprehensive setup guides, configuration options, and advanced usage: + +📖 **[Visit their WIKI](https://github.com/envied-dl/envied/wiki)** + +The WIKI contains detailed information on: + +- Service configuration +- DRM configuration +- Advanced features and troubleshooting + +For guidance on creating services, see their [WIKI documentation](https://github.com/envied-dl/envied/wiki). + +## End User License Agreement + +Envied, and it's community pages, should be treated with the same kindness as other projects. +Please refrain from spam or asking for questions that infringe upon a Service's End User License Agreement. + +1. Do not use envied for any purposes of which you do not have the rights to do so. +2. Do not share or request infringing content; this includes widevine Provision Keys, Content Encryption Keys, + or Service API Calls or Code. +3. The Core codebase is meant to stay Free and Open-Source while the Service code should be kept private. +4. Do not sell any part of this project, neither alone nor as part of a bundle. + If you paid for this software or received it as part of a bundle following payment, you should demand your money + back immediately. +5. Be kind to one another and do not single anyone out. + +## Licensing + +This software is licensed under the terms of [GNU General Public License, Version 3.0](LICENSE). +You can find a copy of the license in the LICENSE file in the root folder. diff --git a/packages/envied/cliff.toml b/packages/envied/cliff.toml new file mode 100644 index 0000000..f8552cb --- /dev/null +++ b/packages/envied/cliff.toml @@ -0,0 +1,71 @@ +# git-cliff ~ default configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +header = """ +# Changelog\n +All notable changes to this project will be documented in this file. + +This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +Versions [3.0.0] and older use a format based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +but versions thereafter use a custom changelog format using [git-cliff](https://git-cliff.org).\n +""" +body = """ +{% if version -%} + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else -%} + ## [Unreleased] +{% endif -%} +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}*{{ commit.scope }}*: {% endif %}\ + {% if commit.breaking %}[**breaking**] {% endif %}\ + {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" +footer = """ +{% for release in releases -%} + {% if release.version -%} + {% if release.previous.version -%} + [{{ release.version | trim_start_matches(pat="v") }}]: \ + https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\ + /compare/{{ release.previous.version }}..{{ release.version }} + {% endif -%} + {% else -%} + [unreleased]: https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\ + /compare/{{ release.previous.version }}..HEAD + {% endif -%} +{% endfor %} +""" +trim = true +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] + +[git] +conventional_commits = true +filter_unconventional = true +split_commits = false +commit_preprocessors = [] +commit_parsers = [ + { message = "^feat", group = "Features" }, + { message = "^fix|revert", group = "Bug Fixes" }, + { message = "^docs", group = "Documentation" }, + { message = "^style", skip = true }, + { message = "^refactor", group = "Changes" }, + { message = "^perf", group = "Performance Improvements" }, + { message = "^test", skip = true }, + { message = "^build", group = "Builds" }, + { message = "^ci", skip = true }, + { message = "^chore", skip = true }, +] +protect_breaking_commits = false +filter_commits = false +# tag_pattern = "v[0-9].*" +# skip_tags = "" +# ignore_tags = "" +topo_order = false +sort_commits = "oldest" diff --git a/packages/envied/img/envied1.png b/packages/envied/img/envied1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a62320fd6288e83b89172858d571bc5a1d9881d GIT binary patch literal 129348 zcmeAS@N?(olHy`uVBq!ia0y~yU^&CUz&eA2je&u|>rRvz0|Ns~v6E*A2L}g74M$1` z0|SF(iEBhjaDG}zd16s2Lwa6*ZmMo^a#3n(UU5c#$$RGgb_@&*S|CNvMX8A;nfZAN zA(^?U3?Zed3Wk;nj-}}eMg~Tv3Wi2j28LFKCJIi$A(d(c_6!UP44y8IAr*7p+%2yN zxq9vR$9Sg(2F1OC3JY7bLSHUWP~hrf4GGzx*pbw_x+&>kQ`f!@-i_ip986^_nMz7Z zt^qIiw(z~=iJ-2OQwW%=LN zVy{y^akiRdD0^DXEQ$GjU01K9KK_3|t7%?(bV7QMP`y4LS&6N-wqd|0aZY2A~>-SWR&CQX?* zYsHTJ;+bc^aC%wpIxm{Y2+=*g=w`#s2J^6$ZXUUwL6;WBM*VykarE!!)he2+z8-y5 z@w@vIcmFgMRr!01E&0nzTq7Xb4lMODQQf?yXw&AY^J)%#vrtxbym>Qn+wsspOse|& z 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�s zaiAtleA(KlZSNLD1zueBQa++-@h6Moe_@j6WF_W=veK=s8s@ zG$WPZI=RWC4?8-^I?v({E6t_R3zZaCG{Es^*_sUhhz_ z?`^t%Lfy9DnKQT5|Niyt{iLW}KiI#%te*QTwsP{}hMO~A9?1^>zb^S`%#@qnJ~n}m zYEPfq7yanT$wlmplO}iVtB%i-e19SHlKty{A@~28uPU4zc574R-f4RO0&T0}mzu7g z_VW8ud+$lJOtKfBmHt0XV%}_5wO^V4U;66e?^F4h({lA+sNK}vQM+#Ktgmx( z4|q&kbS^vU$-g7|b7gOvt+-kFe0AaGYpOSH2S#Oey}f@>@u5}Snh)03udbL_esOl# zfvU__->(~U*U#E+tEp*s|C{{2pFXv};+8Kvd)w-c>&EU}tF)KPgrCo5d&c&yIpwJD z)s6ApD;NDJy~rr`u6PE1M0WjwO1-%_2X;v z`%AB;ddpfV$G-f=e?R1{Sfy+pyII~v_U-p#U;I=5CVnS$)BE|nzkbi2pVQB*bXazq z{Qc*@{!Fj^Fmqb%hsb@;7oW>s^{VW3$=l!Q&iiUrUS4;-pM7}$YVO*8{PkBm z_s=AY9htKaH$?U>xKtW9_3BQG{~kg6|CztsCGGC9{J->r)#vYPec;<-uXoDc_3FIM z&);t<`1V^}Q}f`rJH`IJS610i-=U&E`JL?FIdAXp+jsTLkqmDnkCF&3~rM| ze>rXb>h^y(&?xwfU%gwapNoM~w^sPdMN5wSs43rX6|NOt8uQ?148KgsmmjaM{acv! zeD3;P7kNXqwU&jHpSCHo$d6rntMrw4<-wrcesSq-f4|HzK6HqCex8Qs!opeHQ zd31j8Z43MU>vaFi&gb{89e%9#`YGq)lJl~EudMQQcXhcI8Wq*`FZ%!Vrl!Lt-%ef+ z-Mef4vOT|+M1QiV-jI5H{_3wsYx_ki&m8oP{$x9S?$o6_h2u*r^mgRkb9(vmq-K|X z%7PQJR{T5fJ^Xkrm9_l&*_l5V1{eD5uTSla7rM$MyL{DrA79;)cT2!>iuHv`r-T(VJUtQU{eVtT= z^xU)t_N0sT3ULj zK5^pjdG%GkQ*C!|7p*ubA|w^~#5Mf$w4LTQ79|Ds3ojo&cSrN>ndjS1x9*%#Qhs<6`YkFKOgZ>(ul^OsqC?yla&Ei+G--u}@3 zR9;|>bNjcIK})@MeZ2Pj%eUj7Ma1Nms>|)Xt9v&!oqyY!--U6VY|%n|GM6^q?R)K$ z`|~Zo?5#=WA8u}nmv1-SQMUfy?bJ%~<$o72W?j>M|7YU7DQm9A*FXPcvFtv0NW*IF zIqj0!@fjVjwr0QnFsC+8)G=i4uSrYn{qD1FQpmkss{O4rrtqJhZu;8;_rQZT|YTj>)Di({u%%LjZLbL{hqYscDwze8^?5c(m5W)fYuD$Nw}zgKjTC$ z|BFTQ!e9K(w+mgpZLW$ZcYWFYyN2(7{Lr0yLwtE}_q444^|M9f%N-&mXL5D$T(6w| zEogP!bc;9pi&HNKH@DUP>O0(YUeU1B^#4@N=Q{iR{vWS?ylm~(N8jVOWFLQ~^u5&m z&!rptzS{rY_5@s0RmEF5+&25a`2GH$TaFz6zcFVYXrya;ylKS!v;USH=w7((?XH!X zo6ROIasA94Z?M~c|7*}d=hNzaVIe)aSszx}i;EYetZV)JJmW=dGH8${EZ1sP@b!B; z&!0E0-@da+#=6R5w%MA{%g=I4J@03K{aCFpzT^G@$HTeh&Bf}!=f@s)d!Bjv*`fDQ z&%L;xoxRjnAHMqjRP&dMy7jM{Ucaj-FE5{(GUv*_z1F6WKd+qi^=frqXYIEH@2r}p zzIS&PpWA*X;Duq~|J*C@uD(|BtgrvSx$5rh^6y73R9)oC4)Av`dlS^$_x8%~MnS&g z>;4zkP5kL%lDFbisBHbUiN4aW4;(w|WgGV)WLt;YMyoBB-w*9itC*oQ`^c+5tM$Vd zb6Z=#+5Y8krt2|1?#rMl(DjvNbDq3i`u24As{_Y$y{w8tEGHd$<+}Rr*XtH*=9g(H z2TO~K)tbAmw%nW->A?8fYo6hcYm-XnSyunk<4)gSFZRdA+u6M*@bzcw)xp=jw>@+xHe_kFE%y|!w#_4~@0d-v{vM!Rn7&uM<;veH{n+#-F6s#@kzabxbgakd&4 z5;yovk}7>2@}yy=_T$$j>KBal>ooNB^4j~1852X%+ZiipUp z+WoHHOT6U8I{E#-V}5^s7joxcY*$}rXvo{Dtm_+he|vZHox$G6pZ(*)fBT8AcI%y0 z_3!_(ms30YE$&QR9X$P>l<7CsmnG!~&*m&8lCm-$f-P7J&wG)%JeaaCplNZ@t}N=J)MZo!L3%SX+I#He`Z!*TZMk zTQVQtV!Ccz)V|~I?l1qYJpcOd%JcJ{Hl9}hXKBl@MXRi=N@zID;OF@7M^0Prfv5eM zm#@CNr7bETsW?~egQVf#W~Tn`+Z!ThPuDs9{SWW@y$fb+TN`?FdsgG|yB3z;Z7rux zT)Fr4zpKx`+oaqMGq&+LY+t+lMwGc;)T*iRyUJv}z>}rkK@KiE&h3B3^>UUH|K&;L zc0rdCua~%s9us{o|GU_4YLb=f_S~Q0y|cGn3T4i}ylSeqOx^ut>FpOjOzdA-czM#= z{Fhyy%QG#1|22NS`g=)Ye_hsU7!nKYo2`xmfjgZoX)!wOjJM3SZ&*wFh)9nKkM` zm8`i%Nx}Sozn|-G&A58-+P(bx2Y%ADN2=XT_)&WhCZRLeD=r#@R`eQB!7 zK9#GhWR>;x^*w`p|2wdilRMKHPCgd67s#)!Vf{ek51b)jSNgtB?P+ z+39fB%Z10)GJl*nUh?8W-PI4PSKeB_oF_Fs{qX-A;7pzzL+5X*;F?-Tv;nGJx1VOXO=JAzIzrVdJ zsOVj&eC*Ypu(wa*jRXEMI<9*7JpcDk?@QM5=Y!MImI(>_YZ(69A@r#K^-@m$TgzD2 z{wnSS4N!t6qd<*}?{={ZYOBjNbWL3+ZhdviUcsZC|800yR@bYm`7tSP*BSi1tSMFY zeK8kr_m$c2|1Q{3yL-x%DGO%(YvkhYzqEy4?dGyy5%cbzKPegCUm0b-_urybtUtte z`9FH7JnQcbW7a(G4i5d24QJ;0Pd&9tGHln@H=8zZ-kNpH{OG@n3w(U`*Xwn~&w2AE zNB92|@3lX^Xiwj_?({i(UHt&x{|;BzNP<==Y+GmO3CcL2`3Y6EIRQ?G3RUM=JS+J3 zGwGIe)u)~1A|f)ge*fNAzkSkVArT?5l@lfufQEo3$NiY^X7{7#&mXS;KX<(P6C1Ve z$G@2$uGm)P{Fx0}yU=#$TLTF9$=EGea-`ztudv{X6xp9Yp2St<-F$M(Ue45=Jqeg(~V7DPRcGxaK3n1S~c@#`+QAx_3z(4 z%zXJW>eoH>=O+KA^}e1`^Xpx-^|oA{vJGdhemtFZf8N_&Pj~6fvVF{abiT#3{OYi< zX=Zv|vrL}r;+FDRnzjyDRmuKNwh7#AJgvV*M1+P7F zBR;I&ytWvqHNT1Xi0jq9z{kthiU*?&7CUwLtIAm_sr;i^mE^Pk&JsgI9T zY^}X1EVi}9?bPl`+l3zYXMbO}R@H7>;N)qm!uGaJ5*FT){QH>F_u7|RUs|nCwO$+h zceh;qkFeXHeP?eEUFv0LRg9V?Zy1k`m8rA4lcF2wq?bwuOd=n z3(uVKIr{c~>T8vXzjNPT*$`NK_SY-h+8^hR6i@PwsL*X~bzeEDzkia@+Kvns(_Ahcppa1%6t-K^|%O9tv zsgvifo$^@y)7=RR7OfT)U3}q#$J3PO8UOFeS`|LZ*m!)$<3DfLT&npmqM~3Bp{OXh zD)93DEB9*|0^$r*g&DLKJXw4^rf8wKeE9~SyBzDf^jBVKPF>gceoZs`w^t7uH^my< zTCW%!6j$`;^si;S*{4OKCslnpwbweUGWN}Wjl$pMntA`%)tqN%YxfFjESD&quH4T5 z;>1Jd=Q?q&56}5sXp*_P(c8W3$^SDES9jL^KWDKmyT9+P)~?B`l&l4|-%k8{fICXpb`lZX%UQeID-)wH5x6AP(S}H0rleW~q z-}!n6BLhRjSI~MChEI|vDN9sdPM;rJ?e0*Xd0|83#@}}euP>goWXlziwGsOs$fU3` zFfgo60?8@?J{GF1Tnt4n-`0Lv>{pTy|7#J8ffCi8lRxp_5 z{)m2=x$@S&T<4YjzFs}oK_fNb0xD>0@^80V`}A2$-#zKU%hrZows-LChbMDKMQ%{=s#62f{dwX-CGyC_cuWleO zk@S1c&d_kR0+zKI7A)$_y5};rwsvZfQk;AFJF~fbT^}xGUq)W|=(9Xn&0g=8n&+o|`R!>P*KUb-@_}ST@-USY~A75X$!_l+7e}`(=@`Kk`mj2(zl`Zi2LrqxPva)qC zimsl3ayEtrL!KFo3=Gpd z^KN_DzL#BRr8|4JpX;QOr@{ReJkxf16Ik8%`rDj_Nl|-?GWTUp&pr2k5$AvNvk`s_ z3^R^3NHQ=KL{%(idu3TPBWZV;$=ojAz29=LzWU^SS8h4(b#(viw?AiNU})I%P;Vv! z!-34}elqdv*iNggyniF`xyrdl-{>u=FNi1j!Szm8#{+0E`V(qM-y_+^~ z&bcD(&KaqjM?;zDb({+aeZx%_!vBGiaAf19-4R$NSO z>4Xa$p=)17FS~QTqpveGA)sT^rcI?kF4W0d%7ibwZm6iVsn6+fmZq()>+S8i26Oos z7?y&=QOvyLNCdBpiI2MfvTTR@Vy^FQFD&-AHGLTCd8uXjyNjRhKijF&j(ye6GVi$E zTMi{luXz06&cT(FHCNu+`YYdb=ZfyzkC9gd8OQIJ$~*r&=GU9oqFh{jSDPv~n^rzj zZhdF|`uNvRYr|sipZgW@-mmi9w?8v?hwS_Cr53bqmRHu$ZF+2BbJmp;(gnW${+G|& z`&_Ti_tp6FReABE($g0%zPhn=dQI(W%be3^PF!gFe=Xygc<|P;ukTsq(3U?5+}`%& ziA$~Z>*U&xCttJ5MK8}|{`#_fZq=7vL5d3n`EG+6o@G~!YQNm`zO}P9c;Qd)pwD7& zOYZiTuR6;b8@kjhv^|&o(YK6)dv4D9_j0!DKDWeWbze3wN=}+Op&%w%ZjWbmdA|1L z*CJ1+S-Y+FzyDfPL?)|RPg~o&{@=!c`E?(oe5hph!*V0d=`v`a=O@8O@D zla{Ost-bntQ={v<>WfFiJtheW_3h5t@TMn!UQOI&y`65_cC!^dKdp?~dL#MH!%v0( zgH`9>+0Uu>`$h3wtIA6ra^F^kl*{b#v?@9iq4zX$FPpE)!>5^`G_SLIP%+ps@pVtPhCpmet6STyL@5tN0s;E_<5y)$~ z)+@8FX0giYd%n!nl=}JLGH7vBP3`LJ*VF1nx7Tmqw0ZN>=g-$4+zja z?N>K8w`r@GIB9Bn-rDsvKKI@ZKlMKOsoS@2*LzVgQEl(ft+VEq*Dd^*zvro)Z_QWk z(ie9wn?+2UQQ)NRzs!45maFUP@cG$ZKi55*_2rq5>+vI6wz{E@kMkA(Oo&Vg*|Mz8 zBD|TcKO~@Fg^*BR_T{#%ph1E?d-q;l8ZGZT>(ka-bKd_un9aZt(+Jv?p_BLhobIiC zrOi@iS?jv>_BnCa%?o|8Z|<%ylT>tLzbroe*hQN)rLR^8U%wZ%vBq)X z$7Jd40mt?Be)-%V|FYNfanAYUSMt|v^xwDc#f*rrFRsSh*L+@S_HX;Khc_bQ_pV>E zgauR|URxjgaKl>61sn7A%dU6pU7m1TZi0%eWsQUU{_mTn>HImj%~r+4N!IFXNLX1I z=RHq%f7}1_W|`%$KGVZv`~At?Tbp*~1iN$_<^2(Hy`H^f$`qBoUtb0D?R3AoZn^us ziqKxE?H3L|R?Gfy;M3N7iVO^_pe-W}TnQKTi&Z>9B+}_j>|{O`M286v)3%Y6_pxqJU1^Lv_xNQ`qxdi=T4ryIP2zp>9Z^M zfD3`MGoKkmsCgdmm%a9+GdZVUKchZyU-E0y3?mGkm$&^osN)eq}i{oG5B z9dJB+RbksqmCR2^41X5&-`?+izGruE=1NV_V)X~n@5?Ls7#Ma)fzCe&VdxgGSslFG z4?JeOp?W{l_njNu-+hLzGT3FWxxUys;oA3!>^Z^m=DLx~-q!z7_5AeB@OnVJtwsRz zy!uNImoeAZ|DOEFEXQnGaOL;EZ!%f!>R&vtleL?&`$cU=M9RLmCr@@>dU^EU+>cMU zm~++CoqqPUtN;95FX>3_U02rcesg{2w)*+D3D-9Hx<~uQ*Z*ACCvP3|>bkx1?RCs= zuO;%|T$bryo4d!EZ{3y8Ura7;U0r`&{`52P9p^tLw{Ly){m#36>+b&ErOMC15Yx$M z%)p@4(DLJP)aF;_oO?b$K87tr~c`@!?-!?>Z<9lN|~9OMFk^|f7`KY{rbb-j`>F2{P#DU@owSL zi8E(vdcLavdUn^pWxGKwQ;SIZ+W)P=>!W8pm{4$a_5FxRTdJO3Qu=;(d;ap0Uu>KV z3{%QM-EarijRp5|N?(+01Z9Jc6INCw1@m*G`{Tk-UEe-y)22;ZeoW8rdG?ZTdf&O- z&QCw}?+-cD=w3J)Jzob$h|%<$jjmn%Uv-n%{DIXy4+J!Y%X`>@sL#^o{f%*+Za6<7)~jJ&f-|10BRkh%+m(v-rn{7%wFqf zvqJa3Jkq(CZF9-q)AG`~`!6JT23`BVx%~daK+$Z81NXo9o=*!lYgK7cX%TW#aL`~< zVsh;I(kI}!tAUkq>LQV+T?$PaD->KES(b2J>R$MLUVxK_Qx*S`=l?d|oE*Dpx8`m| z#(Vca|F~nDo_6kxW&73L^2Ya{JXN$;XK(yl#r1Sr*(uAre|DF;mASD6B_|br-)|gh zv~1#jy>{=~_=gq`>sZWuesDy3YKC5#AG7$F?t|Ft{<)Q2MNU({tzUcR(Om`Y?DKuS z7S*pfe(}q7_r?A?aCEELF~3=@3zgN9pKrUr;p6sHsoVA^Ppv4quk2ReW5?{~93Q`} zLD^Q9mH*vcx2h_wqTZpF$IHzGp%qFh{DuC_B8D=96Sexh@6wcwpvfm`Ko z7K#{fXWU|AFnPD&=b}$Jf*Lhu21ZWDPbQmQ%eOC6VR&$E14|Xlxyy4^a_ZQy2O?+`H*`5Ed6e4?S~JJ5>~9=ngJpHCQHZO+V}MO^J~+!s-(=S1iIgvOnV)b4v>U zRfc*^&EJO_r3b&S#+UgW9WPXiKL27p;&OV@ zvhD9L$TD15_oKdF_Gawb*L&yyhe<4TrVQE%-lZ=O1RCn!1P ztFe&jbAPS;|3&B7POp1&^M6cp>QzmB|8G4K+nh!g_C3Uq*N{e0{l1y`PanYZ7nEl_e3xbm`ZgVz&^Q+ocij{?t zf$wc~-R@+oUsoC@c5b|6xpFL*vGZj;~oPkm|2PoeKoKfXs_?L2+G|F6U2 zt!?Y0xV9ftt=wBzozG?T$n^QARUZEX1a+z>&1yTsJ~6|xX2C5pL-V|c4_mdRj(=R# z(cj(JyqJ5>9_bZpKZl)HJYVW_-pIg!L8PgAm&$qZwA|d)+s;iWzjEGYchO6cOF@$p za+MwbA57j@{`{C%|I?R~b(TJ!eO*7{a+|2cr*pqw+}UcsF2<@gxxFm(*RNGFceaZv zCfhaEPoBn+^;gaBf4Rf*>*`8MtN7+5y1BS~nPmCreVK@;sN<^;?)Sbwcz*r*)zQP@ zeq-+H&|B{hycc^k`Em8fn>U>$_9lj|{N(5@_Mo{o+VJlaJD$joy|-S^=**qc6w2`6 zuG$K(V{5wq&HnOgnTQTEgRyk>9>c;d$LjY)+3&Ajl{H&@2|b zu%&crU*gBE{Q`G#1=i$xv9Gma{qFp?&6knEeBDdC{@FEc5$Elc19tbV51KjM-??V* zm+~J!er4}D*0yyMFXtQCIU9=3+OcfQh+oxL@8G@1{NZM<{`cSSPkVSv^d`^l&fxtm zo4eg-=DI96}7 z*CqGoRvE8GMaY<$=MdDki$`taZUY&^3)*VO;-><;iUa(?WeIB_1= z#1kTXLE#cor|PO&?ykG_z*bOjqFzCpq@dtM?-v*TO=5^lOjP8P|FJvjcyOS4{oRH| ziyhW*8h7u_0@k@liX7ZF&5=auCA^I#+w`Z^Obj0Rw(P6v+w`Ejpx439|6Jd z-tT2rYTy3%hqZ8HAOl0^T;;6lYp%KHcWv0P!O5*ktL*)a27dK#u325r?vzd~eD_7L z=I74{7u#L@3e?FIa2q1l|H<^jv*!{ z`|zo#H6l8bjZI8i)*g}DYWsRo;pH%a&NK6N*6}Rsd*3@hTu-2kV{3Uq)ADdzi``WR zE?f{O+!%OcYpt!5|G(&!)e1^VRr9_q3CavCc-=XPqWvj{MX-9 z#XIZ3i4z>1oP`~oeHHKiUN8FI6rtl-SI2ni@}yRWYo8xHdBbPTuGz)aE%5h+T~Lsa zcCGGttFH-(sl8{um@HYMqNEyG{BG~8Be#x;33V!;(Oo-X-mIQ>!G~9ERg{z#aU~w; z>3{+c#_1_Sf>5BDfGokB<^ls;5}^E}1O`C|8YH3W1t&7Goq-zE(IH}x;0DvMqybce zgVif3v4U$oh@Md^Mgt0zNNALz8WT(T8(vgqJh;wdzHaX7cZn0GNwKmVymyaNO>NnU zs!5GAR&cc3-x-#+Tm0$Y-8-uf-n$r?`?GcP@%gVSR&~`ocuPo0D(aa@1y1}PxAR{o zC~dEJc6qYbQrD}t9IK+rz6EvUzD;#(TT^1QqkQ+S_AfDO|9q7P6vQrJ6x76J@u~b{(&ckwpX{+PQ3TO zMKgXucK^Yw)9Ez^EaCd|E7v8j;+kC^*V5W5T9y;r9jg6oZ_!_2Q2q%#dt5S2f8)O9 zV+)F}|0^gf47ZApi0J6}U0z`IMd91K8y!=o9LbVS4lSOt>(JT5(hLcSnY{0J^=6eE zaJk;Jo7d_2_Fsp0ubY4A=b}YQE;by8PbU9QxcuwsRkMAcB*ctFncMvs7@j-@4vq4!+_J@yepLpr#p+inDUcYws_vhbg`})w`!_w~jZ(VYH zQnvPP)v>MG&&<%#!*M+QvYUdY;krAy@ms#vKYa5s=(L`+d1mX+`)gKjGXy(GaBr7{ zK{aQu-2asVI@W*hJLcT`zoLOTfT*YC%ZQaqS-pd&ngsk0nTv^pyw!WOXK}uGqxcGb1%$ckV3CFkH*Amg0 zTrGOv9%5f+JLBf*7iJ%k6)Qfis+iiO`dIC}U{h*#nC_wY z*(5=cOmN!#t-UTkWaPzTU%uYs^?p7m@pW`;Io@#7+b!uiM{%(? z!-1ER*-MLj-B)VAc{6vyUlZ={@9teWXKPF{5bv+OFrz`}Q^q?<$+F+G}6>$zf$eWNJmlwbrFec_#@y77&&VT$z1k-D7TT zZNqtXXPs`mUHvpeaq;r-Pdit<`1#)dQPgSSZ9>&4>Go?c?8p|%y*Gbvv$0B9pMjxZ z=#RT6Z{NP@y>Na00+}sq4(z`2?DyhsNY;6A^+>}_?_&oRJem6J`SZ-uwGZFdHTWI; ztGI2e@HtTtkq2j1I!F9Jy{kXxc2^$=ke=8 zZoiw$n0rcg!Rq@40)N@|wjcA2K78Yb%gQ%}J}P|g?k_V;tV^9Yf16d=OYYj*T80Df z_v^0yQkr%BZ$lyhStqz^N!6Z*A#_$nL~cRk2ggb)%wJ z?ccH`h3DPX7>jFHf7dS#*5{G6WaaDAJGAr89T}Nh`*}}Kujwm4e$L_jzxUT}#ENPE z{udyl^5)7``CI!hG7DL|FWq$LkW-9Ry-;?T{-qta-$mQDFG!y+SWviDcaFA(#)19S z|Brl9ov*BJ&MuaEr`hbjeC!v0P+{w`-i+-`oYBX^iziN=Z0qdgI2*O)_&44CAwQ&o z(#_Az`#yQY8hu?|$^OOiht8Z~+Ina2g;l=lkxHK;9~b^iS`l>n_xHSmE-Fo1ds)Q9 z!VXosyNj39S4%h@t6^d|ar$)gym@jwyu1?y{!4&b)VVK=6GVJ`TwdH*%Fp-i_Nua; z-0si$OP8v0A2ed{@b`AR@piS-1y{p>V8P}#|3eQRPHuTH`OPg&1HqYxj<~R>r$-uVAS1&fxx4OZX;w0_v5MQa zIyh})+V|4#CZSCetfyV?eVqV?xnZ<|5Yej zv3_UnN@umJst~udyjid^RQljucE?w5+Sc@#c&PAc9bf zINQEtF1%89^7`c|efwj!i1{+zKCr%!yW)Co%aN9dHGlH>{Mt`V>;CoQ7xM(&{;D4e zJl_xHFX}6=-BP=E_OXV@fYs&<49EH32U^vC{>ADedq4VR%=$V-3Ddl^o$vRT-qw?_ zN-|>Fj3BZaDh`o%xG)O^;LYkD(a)n|M&Ftn7p~QZ(Yc| z-3zG3t9q(4t~&iE2nzVwsX+oslpt9w7pjxfpRS|oQ@{M2#(ncdr~crI4( z->RuExd<)V8D30Z%(pjTTCK70M8Ss)4Sf0gdiR&bA6!vrocR7hNZM^XW;bqct?4y? zJ1_NzGIVtI9T1dGAzgz#{{@(g&S*u?^4-fqG{FBAA#HF|TCH@-v__%oZ`X0LSaqrY7T?SCg;Mw_! ztW)mX*?XbzGj6CbI7DR$E%TQR%KG_i8L#$+^ykNl;@?+ZKKk3b{1?Zw^HS@J zf;+sQ`*V3`+U|X&sT=9~@r)0{i8DUO*Su7o+7!z0;qaxKJL*FJvhm!itKae#QoVWf zff@`uCM3MM|684liz^{3tuOAc(}&M(%0DumZ7(SP9&~%1^YS=`25<3yhgVMiziQ3o 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πAaRJ#q2->5CTwEiEl){d;1|Iw>_ZG55E2 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 UJ|0-m z7oU9hUoUH)v6;!CV~6WO1}YfoaS2~Lb6{rZ&fqxd@b&A(SdIVvQ&bAd2e%+rPOuU^ z!?57%423iDHq4HVvWZD4J^$WTFV25G&!Xg`#I=84vlqU$FU`Co$58O@+ft^ZT{RO6 z1ApA#8vNqU3fZXZx$7=8MP{y#-yXyu{m{g`r`3ce3Q;%!0PX$%{Fp5R;gyII*;P)e3fUE1B^+28H! zvi|&ac3E=o%CdxIdG-<=9UXR|lj~>pmi{(Rtk~|D5x-xwq_p(n%E0K7j0;lH{cjI_ z->*Bx;@-JaVs=l9-Jj3dTj}_0XMD>(CWZ>Dotipvt}*+&(p3|GfBCwZtGjoKf8hQ7 zvFiVwE=%=3c=x1B+53CK$#3&T?EVHx<*vP>+PZatYWV&+bLKGpj%zvj@BZcO^Y1#} zuF_T5w4rVBiG?R7E>2yTc(v-n^~>xGf1+Lfox8WIBdX5y!RuG5TWzfr#nvCXFLKLX zQI*rrtk1wG;Eh#@>e2i5E-tTn!8McC1J@hcJwG$GroD@3t$SPb_;XrpLP|o5-P-Cy zhfng>KIakaE8Vb7c$@ln$>x)_$3!aYWMySLbk=~9%Bu*`!di7{_JwaVPjm+zcS&^* zyuUv=+%NIj`p11-53I>kilz3K~v4w5@mP)+muPNA9QnvRd>ZNt|I%Cx_s+y)iaiJr%tAuReQd z8m$tl|1Ti8(tMxlR)THhD8Wx6cz}3qHOJWpFsWs#H+qMxezpuN>W_J!g3K zoUMpnQ{PsZzfeclHRgVRe);d*W6`ZgTvFX9-rv90y?o)(7kWP)-L~tULGrUm?MXOe@cFfVu!d@eel&zObzp$jh_gHck#US$$KY z+V4F(gNlke*KyuRqp(*^FHbG$c&+|qZG7s21xj*LWnJt4J1stJSbI2T&5gZcwNc+) z){EUu$jxgNyvx2g_V2V8rr8Ue;!`Hr`-a5(%jfYu{b;o3L!kS-bMFp)E7r_kuamWE z;lhaOJvVBDmp=LOUEg}c=1o&~)-Bk%@#gQkOxN{4-CSHkq#)JB(QigN-;eM8ab-in z#>}{L{Df(XjUz` zIrsVZ*0-eRWaInu9IAAj^Hb>$lS`pBC9({kcly}z$xJgSj(^7VdqbHV8%{0uMdteATy+1ez7 zm0?H8`&C!Us&dXz^0H;A=mv>z^BK+Eldu=8me`na7`Px96>k zd-BCsNomogByiWPYpLT@tAcH%ObmBw%ig{9KPuiWo^4!wSkdHr4Kl;6V^qc&`;qxY=}YF_%_nB`@ZR5V zx?#mcy{;YqPQ_+3GW418S?tQ;XZkBGX0fd9>8%;p%IBPk_*Y#b+*z5us8-xWVBflX zM*ZR8k6tIvln||NtZ=RUx9Qyfc{^u+bp5Q*@yRW)>-D`Y##z5Y*coD~D>l2#cc0dJ zJ4{JSul&gMPlBHf7W@r&`lDCoH{(k676Z{QkM6Fv_;`P&)A_Ht&+{+r4222B*IoI*b}JoU-Gt0EMsDHahqHce+O$bvx=8bZHN|XxN5yq_an`4&rz@Ko^4+qs+F-UBG_G(jZIA2Gd!?!O&NIHlnY_uRWrY3`pw`xx0%4<=))cj;@&c9L@ zgI&I_yJxgSXhd!0n!2&@mDIzi6TknxeA1iad@tlk+-5eB9q+Bv|F<#3*URiIVd^vc zwjykyQIgPO0U=2)_?HoN(OKR7Nncb6SFf0ljuy7@;N zSd~-mF)Jx4K??K@kAK9yc>Qv5+|yeEGoue)I1uotx9Vm7<-%9TEZ5xHEXN;jJFTkk z!i$2EnU|#h-u~`3T}}4E^H;p?((D#pYgdZMNOn!W{{QGkZFSXOzpBF<_m_vxG<@~y z)uC&r*tUi3RL<|=>1Eg`e`o2=x_z0ipFjFD_w&nATU>;`@iU= z@H=hI(E`)wG`w$OTeN3y_mQNhH*enb@bcCBB$Imb{_ZY=yK4=qc2#ZIys35WR9%Iq z|GFoC|Ge7ypSjG9rfa3M4jw(n`R!Vnkp8v~f4>6c? zyXv-`i13=U|59CjUz}yxD;$EY*;ywbJP8&eH*GKZC|m=#^qVqhRxfWTRSC_gdczSan^Y0k=18j z|K9oYz@;NHA2mBW`ua6X7M4WHxblHC&s(SWXp+!}7hi>Uo?mz}BWG)4h5_rR>e+BWBD{R8!n`;{U%-?h$i$*K&f|5#N4ShqkWk<8xYc*efO@ zDD>Z|im;ZI3ppPJ3w?a>bg|J+H9^6N7T`gSjt-NEx`S{2%su_$^Wp8Q_}V)+Vg8uIPv*mSq&kD?+)grAgzrspJX;Sm{#nN-uzTwKXFa7T|^O!T(PfN6PW=wQC z%O%xxOLWzPQWGZkv1J9DHaWAl ze_F-2*5%ZvpDTH0$=QQkJ5eq8chk&m+ssNzN=|*56%`egT6dQJW^{+aqOa3`Y;v@g zc=3|^_tvdbx4)U=$N7Hiwrj^Xi_F_LXXo{%X+e)Q*IILbKXmL4SL5dW2N!RczKYNN z?bGLR(cWcopZ`Z+ycqVbc+r~A<*)utWxA{<{qx#^brZd(*5$ee9sL|U(Zse6lpGfI zH{KFIbA(sUMnX|h(QE&?#qRwV_SIHDe1EK0I{8owr`P_xeK+s6KV01=o3J9EfuTa^ z8`r#VPpAA#&b&51J25jUEaCsF{AGs@USfMLfA_$q!?U@!v>$QPGSv%}++AuI=hk}4 z=2>M*!OWw0Wt*Pzi$@jNT=7=p0dU<`X{3oAR|Gu2r&d~5;$qxUlzl);R%RP?!5FFYb zm~^i%4`R5sWT>sZsO#m&>L3sPipU5#_$Jse^EcOxnbFD5mnt8!TdTCJW995Qb7VUA zYg<(xx^;!AP_wg0eBr51nFlGU?Nhd|-0|D(Ggn02Ik^ocX3iBgCUGvBX)R0k&z3LQ zvQx^u%1jg`kMtaowUJ~huOV#=RC>dTiudbYZ~=^Tj0r}rgZn`avITXy~? zxv8f@H8#{=dDeQP@*_vvwjVOdx4*V-Y@B$Z?Cnq6l88UDvqIN3E1tD)U%Zr8MmIMx zB|$@`IO!JK%In24mqH%Bzs>#qz_mM4yY*y`p77=7`df28Or~vPqu{mqe}s+8){A}n zZ~M*t%DMp7=4^c>18r?5gy_iTS=?ey3WU zv)i+-$zMHs`7Ga!i_W_w@-9jj%%3n}R!fl*`;A%A$pxR^WxT%6u{YfR(Blo^LbdN( zZJHy5s8k;DE2dNb~Qjb?C23sc*&Wy^xqi@PV>;9zKIpUW-vAF4hH(T$^x+2$GldWWEDrp{X*RpY+;+>qi2`LF3j%RlrzPwMSYW=*J1@D*70=48W zzlTiSOtb>|cu`hm{+2aS^0&{)9@>%X-ST&z-@6F&1hqXfu@{$y8UHE!r5{sW=fCLv z`sRJ@+b2s;x)fxP`J3y_-l~|4;_ao!&i_qcuxhpWwHjmIP_;7M%jZKy^4-lBMihO1 z>dbTBMBe{!JonqRtIQ6Z+9w?7_oRWBdB6MPoAKUX{uhK??|ayNaY+)xtLjkaQuFwh zqppdc`leb`{kEB4Zfacr>-De6)lSa)#b9dzHoU*}duv}*cy@>D-eU|5yY!@6mkX{B z3}Z8Y&8J-JeCEbpuGjwW1i#&m?%1&HzR8u(>-y5BzFyQB&v4FWhuX#O!Dsg``n3Gy zcksHb4v*LmTcekV@J%zbsCzyMv?g1wZQlWojf(<4pDIbRkBfO`WH2Z2jF;{Og|8kMHg-f3Yp8CqRd}L0VtlV-2U+R0;Jz-afu!-;S%Pdu)07 zKUgf8S@};@)_Ra*l!THDiat9%e7{UI+k4Au?|-vH*LB~#+b;U+{P~;CS^FFSRNlU-ju}fTI?m`k%zCVH@!DQLZ-xW=`PV(1Kl}NTZ~Yz} z2PZ~97Ytd>dh56Ou}RI+Qw3}dmLD(o@blN+Vr!^o?RTb2yUV|J>6&u$AW7J95;w7I48;qRlb-|D)2C@o`W zn6s-s^x4n(uKO4nLN@5H-!Q{I?3!>zIk>5J*~U_?RRup#f5Uq zu2ebuⅈ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 2>&1 +if %errorlevel% equ 0 ( + echo [OK] uv is already installed. + goto install_deps +) + +echo [..] uv not found. Installing... + +powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://astral.sh/uv/install.ps1 | iex" +if %errorlevel% neq 0 ( + echo [ERR] Failed to install uv. + echo PowerShell may be blocking scripts. Try: + echo Set-ExecutionPolicy RemoteSigned -Scope CurrentUser + echo or install manually: https://docs.astral.sh/uv/getting-started/installation/ + pause + exit /b 1 +) + +set "UV_BIN=" +for %%D in ("%USERPROFILE%\.local\bin" "%LOCALAPPDATA%\Programs\uv\bin" "%USERPROFILE%\.cargo\bin") do ( + if exist "%%~fD\uv.exe" set "UV_BIN=%%~fD" +) + +if not defined UV_BIN ( + echo [WARN] Could not locate uv.exe. You may need to reopen your terminal. +) else ( + set "PATH=%UV_BIN%;%PATH%" +) + +:: Verify +uv --version >nul 2>&1 +if %errorlevel% neq 0 ( + echo [ERR] uv still not reachable in this shell. Open a new terminal and re-run this script. + pause + exit /b 1 +) +echo [OK] uv installed and reachable. + +:install_deps +echo. +uv sync +if %errorlevel% neq 0 ( + echo [ERR] Dependency install failed. See errors above. + pause + exit /b 1 +) + +echo. +echo Installation completed successfully! +echo Try: +echo uv run envied --help +echo. +pause +endlocal diff --git a/packages/envied/pyproject.toml b/packages/envied/pyproject.toml new file mode 100644 index 0000000..eea6cff --- /dev/null +++ b/packages/envied/pyproject.toml @@ -0,0 +1,111 @@ +[build-system] +requires = ["uv_build>=0.8.12,<0.9.0"] +build-backend = "uv_build" + +[project] +name = "envied" +version = "1.4.2" +description = "Modular Movie, TV, and Music Archival Software." +authors = [{ name = "envied team" }] +requires-python = ">=3.10,<3.13" +readme = "README.md" +license = "GPL-3.0-only" +keywords = [ + "python", + "downloader", + "drm", + "widevine", +] +classifiers = [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Intended Audience :: End Users/Desktop", + "Natural Language :: English", + "Operating System :: OS Independent", + "Topic :: Multimedia :: Video", + "Topic :: Security :: Cryptography", +] +dependencies = [ + "appdirs>=1.4.4,<2", + "Brotli>=1.1.0,<2", + "click>=8.1.8,<9", + "construct>=2.8.8,<3", + "crccheck>=1.3.0,<2", + "jsonpickle>=3.0.4,<4", + "langcodes>=3.4.0,<4", + "lxml>=5.2.1,<6", + "pproxy>=2.7.9,<3", + "protobuf>=4.25.3,<5", + "pycaption>=2.2.6,<3", + "pycryptodomex>=3.20.0,<4", + "pyjwt>=2.8.0,<3", + "pymediainfo>=6.1.0,<7", + "pymp4>=1.4.0,<2", + "pymysql>=1.1.0,<2", + "pywidevine[serve]>=1.8.0,<2", + "PyYAML>=6.0.1,<7", + "requests[socks]>=2.31.0,<3", + "rich>=13.7.1,<14", + "rlaphoenix.m3u8>=3.4.0,<4", + "ruamel.yaml>=0.18.6,<0.19", + "sortedcontainers>=2.4.0,<3", + "subtitle-filter>=1.4.9,<2", + "Unidecode>=1.3.8,<2", + "urllib3>=2.2.1,<3", + "chardet>=5.2.0,<6", + "curl-cffi>=0.7.0b4,<0.8", + "pyplayready>=0.6.0,<0.7", + "httpx>=0.28.1,<0.29", + "cryptography>=45.0.0", + "subby", + "webvtt-py", + "isodate", + "beaupy", +] + +[project.urls] +Homepage = "https://github.com/envied-dl/envied" +Repository = "https://github.com/envied-dl/envied" +Issues = "https://github.com/envied-dl/envied/issues" +Discussions = "https://github.com/envied-dl/envied/discussions" +Changelog = "https://github.com/envied-dl/envied/blob/master/CHANGELOG.md" + +[project.scripts] +envied = "envied.core.__main__:main" + +[dependency-groups] +dev = [ + "pre-commit>=3.7.0,<4", + "mypy>=1.9.0,<2", + "mypy-protobuf>=3.6.0,<4", + "types-protobuf>=4.24.0.20240408,<5", + "types-PyMySQL>=1.1.0.1,<2", + "types-requests>=2.31.0.20240406,<3", + "isort>=5.13.2,<6", + "ruff~=0.3.7" +] + +#[tool.hatch.build.targets.wheel] +#packages = ["envied"] + + +[tool.ruff] +force-exclude = true +line-length = 120 + +[tool.ruff.lint] +select = ["E4", "E7", "E9", "F", "W"] + +[tool.isort] +line_length = 118 + +[tool.mypy] +check_untyped_defs = true +disallow_incomplete_defs = true +disallow_untyped_defs = true +follow_imports = "silent" +ignore_missing_imports = true +no_implicit_optional = true + +[tool.uv.sources] +subby = { git = "https://github.com/vevv/subby.git" } diff --git a/packages/envied/src/envied/__init__.py b/packages/envied/src/envied/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/packages/envied/src/envied/__main__.py b/packages/envied/src/envied/__main__.py new file mode 100644 index 0000000..cf26b60 --- /dev/null +++ b/packages/envied/src/envied/__main__.py @@ -0,0 +1,4 @@ +if __name__ == "__main__": + from envied.core.__main__ import main + + main() diff --git a/packages/envied/src/envied/binaries/placehere.txt b/packages/envied/src/envied/binaries/placehere.txt new file mode 100644 index 0000000..e69de29 diff --git a/packages/envied/src/envied/cache/ITV/titles_19f8a2a55bf283b0_gb.json b/packages/envied/src/envied/cache/ITV/titles_19f8a2a55bf283b0_gb.json new file mode 100644 index 0000000..f526b29 --- /dev/null +++ b/packages/envied/src/envied/cache/ITV/titles_19f8a2a55bf283b0_gb.json @@ -0,0 +1 @@ +{"data": {"py/object": "envied.core.titles.episode.Series", "_len": 1, "_load": 1000, "_lists": [[{"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0001", "service": {"py/type": "ITV.ITV"}, "language": {"py/object": "langcodes.Language", "language": "en", "extlangs": null, "script": null, "territory": null, "variants": null, "extensions": null, "private": null, "_simplified": null, "_searchable": null, "_broader": null, "_assumed": null, "_filled": null, "_macrolanguage": null, "_str_tag": "en", "_dict": null, "_disp_separator": null, "_disp_pattern": null}, "data": {"ccid": "z60cfmh", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-13T21:12:02Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 1 of series 1, Check In is Now Open", "episodeLabel": "S1: E1 - Check In is Now Open"}, "contentInfo": "S1:E1", "contentOwner": null, "dateTime": "2025-04-21T22:00:00.000Z", "description": "Stephen Mangan invites ten pairs for a devious game in a luxury resort.", "duration": "1h", "episode": 1, "episodeId": "10/5106/0001", "encodedEpisodeId": {"letterA": "10a5106a0001", "underscore": "10_5106_0001"}, "episodeTitle": "Check In is Now Open", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/z60cfmh/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts the first episode of a thrilling game show set in a luxury resort as ten pairs of contestants play a high-stakes game of cat and mouse to win \u00a3250,000.", "longRunning": false, "nextProductionId": "10/5106/0002", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0001.001", "premium": false, "productionId": "10/5106/0001#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0001.002", "regionalisation": false, "broadcastDateTime": "2025-04-21T22:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 1, "name": "Check In is Now Open", "year": null, "description": null}]], "_keys": [[{"py/tuple": [1, 1, 0]}]], "_maxes": [{"py/tuple": [1, 1, 0]}], "_index": [], "_offset": 0}, "expiration": {"py/object": "datetime.datetime", "__reduce__": [{"py/type": "datetime.datetime"}, ["B+kIFw00Mwj7Gg=="]]}, "version": 1, "crc32": 3883666712} \ No newline at end of file diff --git a/packages/envied/src/envied/cache/ITV/titles_494df8449cc64f5a_gb.json b/packages/envied/src/envied/cache/ITV/titles_494df8449cc64f5a_gb.json new file mode 100644 index 0000000..b6019a6 --- /dev/null +++ b/packages/envied/src/envied/cache/ITV/titles_494df8449cc64f5a_gb.json @@ -0,0 +1 @@ +{"data": {"py/object": "envied.core.titles.episode.Series", "_len": 14, "_load": 1000, "_lists": [[{"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0001", "service": {"py/type": "ITV.ITV"}, "language": {"py/object": "langcodes.Language", "language": "en", "extlangs": null, "script": null, "territory": null, "variants": null, "extensions": null, "private": null, "_simplified": null, "_searchable": null, "_broader": null, "_assumed": null, "_filled": null, "_macrolanguage": null, "_str_tag": "en", "_dict": null, "_disp_separator": null, "_disp_pattern": null}, "data": {"ccid": "z60cfmh", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-13T21:12:02Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 1 of series 1, Check In is Now Open", "episodeLabel": "S1: E1 - Check In is Now Open"}, "contentInfo": "S1:E1", "contentOwner": null, "dateTime": "2025-04-21T22:00:00.000Z", "description": "Stephen Mangan invites ten pairs for a devious game in a luxury resort.", "duration": "1h", "episode": 1, "episodeId": "10/5106/0001", "encodedEpisodeId": {"letterA": "10a5106a0001", "underscore": "10_5106_0001"}, "episodeTitle": "Check In is Now Open", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/z60cfmh/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts the first episode of a thrilling game show set in a luxury resort as ten pairs of contestants play a high-stakes game of cat and mouse to win \u00a3250,000.", "longRunning": false, "nextProductionId": "10/5106/0002", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0001.001", "premium": false, "productionId": "10/5106/0001#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0001.002", "regionalisation": false, "broadcastDateTime": "2025-04-21T22:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 1, "name": "Check In is Now Open", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0002", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "d1ptzbk", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-14T13:30:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 2 of series 1, X Marks the Spot", "episodeLabel": "S1: E2 - X Marks the Spot"}, "contentInfo": "S1:E2", "contentOwner": null, "dateTime": "2025-04-22T21:55:00.000Z", "description": "Stephen Mangan hosts as the pairs face a room service challenge.", "duration": "1h", "episode": 2, "episodeId": "10/5106/0002", "encodedEpisodeId": {"letterA": "10a5106a0002", "underscore": "10_5106_0002"}, "episodeTitle": "X Marks the Spot", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/d1ptzbk/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts a high-stakes bluffing game in a luxury resort. Guests sample dubious cocktails in the first Room Service game and dig for treasure in the Day Trip Challenge.", "longRunning": false, "nextProductionId": "10/5106/0003", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0002.001", "premium": false, "productionId": "10/5106/0002#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0002.002", "regionalisation": false, "broadcastDateTime": "2025-04-22T21:55:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 2, "name": "X Marks the Spot", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0003", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "vrv0782", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-15T06:00:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 3 of series 1, A Twist in the River Run", "episodeLabel": "S1: E3 - A Twist in the River Run"}, "contentInfo": "S1:E3", "contentOwner": null, "dateTime": "2025-04-23T22:00:00.000Z", "description": "Stephen Mangan hosts as a twist changes everything.", "duration": "1h", "episode": 3, "episodeId": "10/5106/0003", "encodedEpisodeId": {"letterA": "10a5106a0003", "underscore": "10_5106_0003"}, "episodeTitle": "A Twist in the River Run", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/vrv0782/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Game show hosted by Stephen Mangan. The guests get personal in a devious Room Service game and rapid on a river for a thrilling Day Trip challenge.", "longRunning": false, "nextProductionId": "10/5106/0004", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0003.002", "premium": false, "productionId": "10/5106/0003#002", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0003.003", "regionalisation": false, "broadcastDateTime": "2025-04-23T22:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 3, "name": "A Twist in the River Run", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0004", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "fb2mpy9", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-16T06:00:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 4 of series 1, Speeding to Victory", "episodeLabel": "S1: E4 - Speeding to Victory"}, "contentInfo": "S1:E4", "contentOwner": null, "dateTime": "2025-04-24T22:15:00.000Z", "description": "Stephen Mangan hosts as the pairs fight it out in a speedboat challenge.", "duration": "1h", "episode": 4, "episodeId": "10/5106/0004", "encodedEpisodeId": {"letterA": "10a5106a0004", "underscore": "10_5106_0004"}, "episodeTitle": "Speeding to Victory", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/fb2mpy9/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts the game show as alliances are formed, suspicions grow, the pairs are all at sea in an epic Day Trip Challenge and one team is targeted.", "longRunning": false, "nextProductionId": "10/5106/0005", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0004.004", "premium": false, "productionId": "10/5106/0004#004", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0004.003", "regionalisation": false, "broadcastDateTime": "2025-04-24T22:15:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 4, "name": "Speeding to Victory", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0005", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "69436dd", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-20T06:00:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 5 of series 1, Over and Out", "episodeLabel": "S1: E5 - Over and Out"}, "contentInfo": "S1:E5", "contentOwner": null, "dateTime": "2025-04-28T22:00:00.000Z", "description": "Stephen Mangan hosts as alliances grow and plots are hatched...", "duration": "1h", "episode": 5, "episodeId": "10/5106/0005", "encodedEpisodeId": {"letterA": "10a5106a0005", "underscore": "10_5106_0005"}, "episodeTitle": "Over and Out", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/69436dd/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts as communication skills are tested, the pairs get closer to the fortune, plots are hatched and a late swap at the Lady Luck Bar foils everything.", "longRunning": false, "nextProductionId": "10/5106/0006", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0005.001", "premium": false, "productionId": "10/5106/0005#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0005.002", "regionalisation": false, "broadcastDateTime": "2025-04-28T22:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 5, "name": "Over and Out", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0006", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "lyr07yz", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-21T06:00:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 6 of series 1, Coconuts at Dawn", "episodeLabel": "S1: E6 - Coconuts at Dawn"}, "contentInfo": "S1:E6", "contentOwner": null, "dateTime": "2025-04-29T21:55:00.000Z", "description": "Stephen Mangan hosts as the stakes are raised when the guests take aim at their rivals.", "duration": "1h", "episode": 6, "episodeId": "10/5106/0006", "encodedEpisodeId": {"letterA": "10a5106a0006", "underscore": "10_5106_0006"}, "episodeTitle": "Coconuts at Dawn", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/lyr07yz/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts as new alliances hatch, the pairs take aim at rivals, and one pair's hopes are dashed as a proposition at the Night Cap backfires dramatically.", "longRunning": false, "nextProductionId": "10/5106/0007", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0006.001", "premium": false, "productionId": "10/5106/0006#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0006.002", "regionalisation": false, "broadcastDateTime": "2025-04-29T21:55:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 6, "name": "Coconuts at Dawn", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0007", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "yp00y76", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-22T06:00:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 7 of series 1, Don't Rock the Boat", "episodeLabel": "S1: E7 - Don't Rock the Boat"}, "contentInfo": "S1:E7", "contentOwner": null, "dateTime": "2025-04-30T22:00:00.000Z", "description": "Stephen Mangan hosts as the games get personal and the remaining pairs fight to survive.", "duration": "1h", "episode": 7, "episodeId": "10/5106/0007", "encodedEpisodeId": {"letterA": "10a5106a0007", "underscore": "10_5106_0007"}, "episodeTitle": "Don't Rock the Boat", "guidance": null, "image": "https://ovp.itv.com/v2/images/episode/yp00y76/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts as the final is within touching distance, but one pair's hopes are sunk and a late swap at the Lady Luck Bar leaves another pair distraught.", "longRunning": false, "nextProductionId": "10/5106/0008", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0007.001", "premium": false, "productionId": "10/5106/0007#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0007.002", "regionalisation": false, "broadcastDateTime": "2025-04-30T22:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 7, "name": "Don't Rock the Boat", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0008", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "8xlqdp5", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-05-23T06:00:00Z", "availabilityUntil": "2029-03-10T23:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITVBE", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 8 of series 1, A Race to the Fortune", "episodeLabel": "S1: E8 - A Race to the Fortune"}, "contentInfo": "S1:E8", "contentOwner": null, "dateTime": "2025-05-01T22:00:00.000Z", "description": "Stephen Mangan hosts as the finalists race to the hotel to win a life-changing fortune.", "duration": "1h", "episode": 8, "episodeId": "10/5106/0008", "encodedEpisodeId": {"letterA": "10a5106a0008", "underscore": "10_5106_0008"}, "episodeTitle": "A Race to the Fortune", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/8xlqdp5/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Stephen Mangan hosts the game show as a life-changing amount of cash must be won and the finalists face a big decision that could change their lives forever.", "longRunning": false, "nextProductionId": "10/5106/0009", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0008.001", "premium": false, "productionId": "10/5106/0008#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0008.002", "regionalisation": false, "broadcastDateTime": "2025-05-01T22:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 1, "number": 8, "name": "A Race to the Fortune", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0009", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "4ccgv48", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-08-06T20:59:48Z", "availabilityUntil": "2030-08-27T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 1 of series 2, The Race to Check In", "episodeLabel": "S2: E1 - The Race to Check In"}, "contentInfo": "S2:E1", "contentOwner": null, "dateTime": "2025-08-06T20:00:00.000Z", "description": "A new set of guests dive into an epic first challenge.", "duration": "1h", "episode": 1, "episodeId": "10/5106/0009", "encodedEpisodeId": {"letterA": "10a5106a0009", "underscore": "10_5106_0009"}, "episodeTitle": "The Race to Check In", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/4ccgv48/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": false, "linearContent": true, "longDescription": "A new group of guests dive into an epic first challenge where a land and sea race determine who is at risk of heading home.", "longRunning": false, "nextProductionId": "10/5106/0010", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0009.003", "premium": false, "productionId": "10/5106/0009#003", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": true, "broadcastDateTime": "2025-08-06T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 2, "number": 1, "name": "The Race to Check In", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0010", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "f9f7yy8", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-08-07T20:59:38Z", "availabilityUntil": "2030-08-27T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 2 of series 2, Picking Up the Pieces", "episodeLabel": "S2: E2 - Picking Up the Pieces"}, "contentInfo": "S2:E2", "contentOwner": null, "dateTime": "2025-08-07T20:00:00.000Z", "description": "Memory meets mayhem in a hilarious Hotel Game.", "duration": "1h", "episode": 2, "episodeId": "10/5106/0010", "encodedEpisodeId": {"letterA": "10a5106a0010", "underscore": "10_5106_0010"}, "episodeTitle": "Picking Up the Pieces", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/f9f7yy8/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": false, "linearContent": true, "longDescription": "Memory meets mayhem in a hilarious Hotel Game before a high-stakes Day Trip Challenge has the pairs solving puzzles at sea.", "longRunning": false, "nextProductionId": "10/5106/0011", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0010.001", "premium": false, "productionId": "10/5106/0010#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": true, "broadcastDateTime": "2025-08-07T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 2, "number": 2, "name": "Picking Up the Pieces", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0011", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "05s19fr", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-08-13T20:59:36Z", "availabilityUntil": "2030-08-27T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 3 of series 2, Searching for Stephen", "episodeLabel": "S2: E3 - Searching for Stephen"}, "contentInfo": "S2:E3", "contentOwner": null, "dateTime": "2025-08-13T20:00:00.000Z", "description": "A postcard trail sends the pairs across paradise.", "duration": "1h", "episode": 3, "episodeId": "10/5106/0011", "encodedEpisodeId": {"letterA": "10a5106a0011", "underscore": "10_5106_0011"}, "episodeTitle": "Searching for Stephen", "guidance": "", "image": "https://ovp.itv.com/v2/images/episode/05s19fr/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": false, "linearContent": true, "longDescription": "A postcard trail sends the pairs across paradise to find Stephen, as one pair wins the power to decide what happens next.", "longRunning": false, "nextProductionId": "10/5106/0012", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0011.001", "premium": false, "productionId": "10/5106/0011#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": true, "broadcastDateTime": "2025-08-13T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 2, "number": 3, "name": "Searching for Stephen", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0012", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "0bm4jxc", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-08-14T21:00:22Z", "availabilityUntil": "2030-08-27T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 4 of series 2, A Twist in the Tale", "episodeLabel": "S2: E4 - A Twist in the Tale"}, "contentInfo": "S2:E4", "contentOwner": null, "dateTime": "2025-08-14T20:00:00.000Z", "description": "A turbo-charged challenge sends the pairs racing.", "duration": "1h", "episode": 4, "episodeId": "10/5106/0012", "encodedEpisodeId": {"letterA": "10a5106a0012", "underscore": "10_5106_0012"}, "episodeTitle": "A Twist in the Tale", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/0bm4jxc/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": false, "linearContent": true, "longDescription": "A revealing Hotel Game stirs up suspicion before the guests shift into gear for a full-throttle Day Trip Challenge.", "longRunning": false, "nextProductionId": "10/5106/0013", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0012.001", "premium": false, "productionId": "10/5106/0012#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": true, "broadcastDateTime": "2025-08-14T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 2, "number": 4, "name": "A Twist in the Tale", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0013", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "s2fjj61", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-08-20T20:59:38Z", "availabilityUntil": "2030-08-27T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 5 of series 2, Knowledge is Power", "episodeLabel": "S2: E5 - Knowledge is Power"}, "contentInfo": "S2:E5", "contentOwner": null, "dateTime": "2025-08-20T20:00:00.000Z", "description": "The guests tackle an explosive beach challenge.", "duration": "1h", "episode": 5, "episodeId": "10/5106/0013", "encodedEpisodeId": {"letterA": "10a5106a0013", "underscore": "10_5106_0013"}, "episodeTitle": "Knowledge is Power", "guidance": "", "image": "https://ovp.itv.com/v2/images/episode/s2fjj61/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": false, "linearContent": true, "longDescription": "The remaining guests make a dash in a classic poolside Hotel Game and head to the beach for a dramatic tower-building contest.", "longRunning": false, "nextProductionId": "10/5106/0014", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0013.001", "premium": false, "productionId": "10/5106/0013#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": true, "broadcastDateTime": "2025-08-20T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 2, "number": 5, "name": "Knowledge is Power", "year": null, "description": null}, {"py/object": "envied.core.titles.episode.Episode", "id": "10/5106/0014", "service": {"py/type": "ITV.ITV"}, "language": {"py/id": 5}, "data": {"ccid": "ktw99nw", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-08-21T20:59:14Z", "availabilityUntil": "2030-08-27T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 6 of series 2, Under the Cloche", "episodeLabel": "S2: E6 - Under the Cloche"}, "contentInfo": "S2:E6", "contentOwner": null, "dateTime": "2025-08-21T20:00:00.000Z", "description": "The remaining pairs face a game of lollipop roulette.", "duration": "1h", "episode": 6, "episodeId": "10/5106/0014", "encodedEpisodeId": {"letterA": "10a5106a0014", "underscore": "10_5106_0014"}, "episodeTitle": "Under the Cloche", "guidance": "With some strong language.", "image": "https://ovp.itv.com/v2/images/episode/ktw99nw/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": false, "linearContent": true, "longDescription": "A high-stakes ice lolly roulette game puts targets on backs before the guests hit the streets to hunt for some secret words.", "longRunning": false, "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5106_0014.002", "premium": false, "productionId": "10/5106/0014#002", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5106", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": true, "broadcastDateTime": "2025-08-21T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "The Fortune Hotel", "season": 2, "number": 6, "name": "Under the Cloche", "year": null, "description": null}]], "_keys": [[{"py/tuple": [1, 1, 0]}, {"py/tuple": [1, 2, 0]}, {"py/tuple": [1, 3, 0]}, {"py/tuple": [1, 4, 0]}, {"py/tuple": [1, 5, 0]}, {"py/tuple": [1, 6, 0]}, {"py/tuple": [1, 7, 0]}, {"py/tuple": [1, 8, 0]}, {"py/tuple": [2, 1, 0]}, {"py/tuple": [2, 2, 0]}, {"py/tuple": [2, 3, 0]}, {"py/tuple": [2, 4, 0]}, {"py/tuple": [2, 5, 0]}, {"py/tuple": [2, 6, 0]}]], "_maxes": [{"py/tuple": [2, 6, 0]}], "_index": [], "_offset": 0}, "expiration": {"py/object": "datetime.datetime", "__reduce__": [{"py/type": "datetime.datetime"}, ["B+kIFxELFAIr0Q=="]]}, "version": 1, "crc32": 2061751600} \ No newline at end of file diff --git a/packages/envied/src/envied/cache/ITV/titles_5bb08ebb94a57d2c_gb.json b/packages/envied/src/envied/cache/ITV/titles_5bb08ebb94a57d2c_gb.json new file mode 100644 index 0000000..784d617 --- /dev/null +++ b/packages/envied/src/envied/cache/ITV/titles_5bb08ebb94a57d2c_gb.json @@ -0,0 +1 @@ +{"data": {"py/object": "envied.core.titles.episode.Series", "_len": 1, "_load": 1000, "_lists": [[{"py/object": "envied.core.titles.episode.Episode", "id": "10/0641/0005", "service": {"py/type": "ITV.ITV"}, "language": {"py/object": "langcodes.Language", "language": "en", "extlangs": null, "script": null, "territory": null, "variants": null, "extensions": null, "private": null, "_simplified": null, "_searchable": null, "_broader": null, "_assumed": null, "_filled": null, "_macrolanguage": null, "_str_tag": "en", "_dict": null, "_disp_separator": null, "_disp_pattern": null}, "data": {"ccid": "cc4nsfh", "accessibilityTags": ["ad", "s", "bsl"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2025-07-20T06:00:00Z", "availabilityUntil": "2030-07-19T22:59:00Z", "genres": [{"id": "DRAMA_AND_SOAPS", "name": "Drama"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 2 of series 2, Episode 2", "episodeLabel": "S2: E2 - Episode 2"}, "contentInfo": "S2:E2", "contentOwner": null, "dateTime": "2025-07-27T20:00:00.000Z", "description": "The team are closer than ever to the truth as Karen digs into Cat's life.", "duration": "2h", "episode": 2, "episodeId": "10/0641/0005", "encodedEpisodeId": {"letterA": "10a0641a0005", "underscore": "10_0641_0005"}, "episodeTitle": null, "guidance": "With strong violence, distress and gun threat", "image": "https://ovp.itv.com/v2/images/episode/cc4nsfh/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": true, "longDescription": "The team are closer than ever to the truth as Karen digs into Cat's life and disappearance, but a shock discovery changes the course of the investigation.", "longRunning": false, "nextProductionId": "10/0641/0006", "notFormattedDuration": "PT2H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_0641_0005.006", "premium": false, "productionId": "10/0641/0005#006", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/0641", "series": 2, "subtitled": true, "tier": ["FREE"], "visuallySigned": true, "bslPlaylistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_0641_0005.007", "regionalisation": true, "broadcastDateTime": "2025-07-27T20:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "Karen Pirie", "season": 2, "number": 2, "name": null, "year": null, "description": null}]], "_keys": [[{"py/tuple": [2, 2, 0]}]], "_maxes": [{"py/tuple": [2, 2, 0]}], "_index": [], "_offset": 0}, "expiration": {"py/object": "datetime.datetime", "__reduce__": [{"py/type": "datetime.datetime"}, ["B+kIFg8qKg3B6w=="]]}, "version": 1, "crc32": 302954263} \ No newline at end of file diff --git a/packages/envied/src/envied/cache/ITV/titles_76a2d94a004a3357_gb.json b/packages/envied/src/envied/cache/ITV/titles_76a2d94a004a3357_gb.json new file mode 100644 index 0000000..d498f18 --- /dev/null +++ b/packages/envied/src/envied/cache/ITV/titles_76a2d94a004a3357_gb.json @@ -0,0 +1 @@ +{"data": {"py/object": "envied.core.titles.episode.Series", "_len": 1, "_load": 1000, "_lists": [[{"py/object": "envied.core.titles.episode.Episode", "id": "10/5591/0001", "service": {"py/type": "ITV.ITV"}, "language": {"py/object": "langcodes.Language", "language": "en", "extlangs": null, "script": null, "territory": null, "variants": null, "extensions": null, "private": null, "_simplified": null, "_searchable": null, "_broader": null, "_assumed": null, "_filled": null, "_macrolanguage": null, "_str_tag": "en", "_dict": null, "_disp_separator": null, "_disp_pattern": null}, "data": {"ccid": "rz8jz25", "accessibilityTags": ["ad", "s"], "audioDescribed": true, "availabilityFeatures": ["MPEG_DASH", "OUTBAND_WEBVTT", "PLAYREADY", "WIDEVINE", "INBAND_AUDIO_DESCRIPTION"], "availabilityFrom": "2024-09-17T19:59:27Z", "availabilityUntil": "2029-10-21T22:59:00Z", "genres": [{"id": "ENTERTAINMENT", "name": "Entertainment & Reality"}], "channel": "ITV", "fullSeriesRange": [], "heroCtaLabel": {"label": "Watch Now", "ariaLabel": "Watch episode 1 of series 1, Episode 1", "episodeLabel": "S1: E1 - Episode 1"}, "contentInfo": "S1:E1", "contentOwner": null, "dateTime": "2024-09-17T19:00:00.000Z", "description": "Hosts Vernon Kay and AJ Odudu are joined by guest judge Mel B for Womenswear Week.", "duration": "1h", "episode": 1, "episodeId": "10/5591/0001", "encodedEpisodeId": {"letterA": "10a5591a0001", "underscore": "10_5591_0001"}, "episodeTitle": null, "guidance": null, "image": "https://ovp.itv.com/v2/images/episode/rz8jz25/itv_hub/08_Episodic/16x9?distributionPartner=itv_hub&fallback=standard&w={width}&h={height}&q={quality}&blur={blur}&bg={bg}", "isFullSeries": true, "linearContent": false, "longDescription": "Hosts Vernon Kay and AJ Odudu are joined by guest judge Mel B as ten amateur designers compete to win a dream job at high street giant Marks and Spencer in Womenswear Week.", "longRunning": false, "nextProductionId": "10/5591/0002", "notFormattedDuration": "PT1H", "partnership": null, "playlistUrl": "https://magni.itv.com/playlist/itvonline/ITV/10_5591_0001.001", "premium": false, "productionId": "10/5591/0001#001", "productionType": "EPISODE", "contentType": "episode", "productionYear": null, "programmeId": "10/5591", "series": 1, "subtitled": true, "tier": ["FREE"], "visuallySigned": false, "regionalisation": false, "broadcastDateTime": "2024-09-17T19:00:00Z"}, "tracks": {"py/object": "envied.core.tracks.tracks.Tracks", "videos": [], "audio": [], "subtitles": [], "chapters": {"py/object": "envied.core.tracks.chapters.Chapters", "_len": 0, "_load": 1000, "_lists": [], "_keys": [], "_maxes": [], "_index": [], "_offset": 0}, "attachments": []}, "title": "M&S: Dress The Nation", "season": 1, "number": 1, "name": null, "year": null, "description": null}]], "_keys": [[{"py/tuple": [1, 1, 0]}]], "_maxes": [{"py/tuple": [1, 1, 0]}], "_index": [], "_offset": 0}, "expiration": {"py/object": "datetime.datetime", "__reduce__": [{"py/type": "datetime.datetime"}, ["B+kIFw0eJQzppQ=="]]}, "version": 1, "crc32": 1189608074} \ No newline at end of file diff --git a/packages/envied/src/envied/cache/global/ip_info.json b/packages/envied/src/envied/cache/global/ip_info.json new file mode 100644 index 0000000..737e9b3 --- /dev/null +++ b/packages/envied/src/envied/cache/global/ip_info.json @@ -0,0 +1 @@ +{"data": {"ip": "134.65.156.36", "city": "Fawkham", "region": "England", "country": "GB", "loc": "51.3626,0.2797", "org": "AS48101 Trooli Ltd.", "postal": "DA3", "timezone": "Europe/London", "readme": "https://ipinfo.io/missingauth", "_provider": "ipinfo"}, "expiration": {"py/object": "datetime.datetime", "__reduce__": [{"py/type": "datetime.datetime"}, ["B+kIGBAJHQzh6g=="]]}, "version": 1, "crc32": 2339177396} \ No newline at end of file diff --git a/packages/envied/src/envied/commands/__init__.py b/packages/envied/src/envied/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/packages/envied/src/envied/commands/cfg.py b/packages/envied/src/envied/commands/cfg.py new file mode 100644 index 0000000..b21872f --- /dev/null +++ b/packages/envied/src/envied/commands/cfg.py @@ -0,0 +1,90 @@ +import ast +import logging +import sys + +import click +from ruamel.yaml import YAML + +from envied.core.config import config, get_config_path +from envied.core.constants import context_settings + + +@click.command( + short_help="Manage configuration values for the program and its services.", context_settings=context_settings +) +@click.argument("key", type=str, required=False) +@click.argument("value", type=str, required=False) +@click.option("--unset", is_flag=True, default=False, help="Unset/remove the configuration value.") +@click.option("--list", "list_", is_flag=True, default=False, help="List all set configuration values.") +@click.pass_context +def cfg(ctx: click.Context, key: str, value: str, unset: bool, list_: bool) -> None: + """ + Manage configuration values for the program and its services. + + \b + Known Issues: + - Config changes remove all comments of the changed files, which may hold critical data. (#14) + """ + if not key and not value and not list_: + raise click.UsageError("Nothing to do.", ctx) + + if value: + try: + value = ast.literal_eval(value) + except (ValueError, SyntaxError): + pass # probably a str without quotes or similar, assume it's a string value + + log = logging.getLogger("cfg") + + yaml, data = YAML(), None + yaml.default_flow_style = False + + config_path = get_config_path() or config.directories.user_configs / config.filenames.root_config + if config_path.exists(): + data = yaml.load(config_path) + + if not data: + log.warning("No config file was found or it has no data, yet") + # yaml.load() returns `None` if the input data is blank instead of a usable object + # force a usable object by making one and removing the only item within it + data = yaml.load("""__TEMP__: null""") + del data["__TEMP__"] + + if list_: + yaml.dump(data, sys.stdout) + return + + key_items = key.split(".") + parent_key = key_items[:-1] + trailing_key = key_items[-1] + + is_write = value is not None + is_delete = unset + if is_write and is_delete: + raise click.ClickException("You cannot set a value and use --unset at the same time.") + + if not is_write and not is_delete: + data = data.mlget(key_items, default=KeyError) + if data is KeyError: + raise click.ClickException(f"Key '{key}' does not exist in the config.") + yaml.dump(data, sys.stdout) + else: + try: + parent_data = data + if parent_key: + parent_data = data.mlget(parent_key, default=data) + if parent_data == data: + for key in parent_key: + if not hasattr(parent_data, key): + parent_data[key] = {} + parent_data = parent_data[key] + if is_write: + parent_data[trailing_key] = value + log.info(f"Set {key} to {repr(value)}") + elif is_delete: + del parent_data[trailing_key] + log.info(f"Unset {key}") + except KeyError: + raise click.ClickException(f"Key '{key}' does not exist in the config.") + config_path.parent.mkdir(parents=True, exist_ok=True) + yaml.dump(data, config_path) diff --git a/packages/envied/src/envied/commands/dl.py b/packages/envied/src/envied/commands/dl.py new file mode 100644 index 0000000..6e04d65 --- /dev/null +++ b/packages/envied/src/envied/commands/dl.py @@ -0,0 +1,1550 @@ +from __future__ import annotations + +import html +import logging +import math +import random +import re +import shutil +import subprocess +import sys +import time +from concurrent import futures +from concurrent.futures import ThreadPoolExecutor +from copy import deepcopy +from functools import partial +from http.cookiejar import CookieJar, MozillaCookieJar +from itertools import product +from pathlib import Path +from threading import Lock +from typing import Any, Callable, Optional +from uuid import UUID + +import click +import jsonpickle +import yaml +from construct import ConstError +from pymediainfo import MediaInfo +from pyplayready.cdm import Cdm as PlayReadyCdm +from pyplayready.device import Device as PlayReadyDevice +from pywidevine.cdm import Cdm as WidevineCdm +from pywidevine.device import Device +from pywidevine.remotecdm import RemoteCdm +from rich.console import Group +from rich.live import Live +from rich.padding import Padding +from rich.panel import Panel +from rich.progress import BarColumn, Progress, SpinnerColumn, TaskID, TextColumn, TimeRemainingColumn +from rich.rule import Rule +from rich.table import Table +from rich.text import Text +from rich.tree import Tree + +from envied.core import binaries +from envied.core.cdm import DecryptLabsRemoteCDM +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import DOWNLOAD_LICENCE_ONLY, AnyTrack, context_settings +from envied.core.credential import Credential +from envied.core.drm import DRM_T, PlayReady, Widevine +from envied.core.events import events +from envied.core.proxies import Basic, Hola, NordVPN, SurfsharkVPN +from envied.core.service import Service +from envied.core.services import Services +from envied.core.titles import Movie, Movies, Series, Song, Title_T +from envied.core.titles.episode import Episode +from envied.core.tracks import Audio, Subtitle, Tracks, Video +from envied.core.tracks.attachment import Attachment +from envied.core.tracks.hybrid import Hybrid +from envied.core.utilities import get_system_fonts, is_close_match, time_elapsed_since +from envied.core.utils import tags +from envied.core.utils.click_types import (LANGUAGE_RANGE, QUALITY_LIST, SEASON_RANGE, ContextData, MultipleChoice, + SubtitleCodecChoice, VideoCodecChoice) +from envied.core.utils.collections import merge_dict +from envied.core.utils.subprocess import ffprobe +from envied.core.vaults import Vaults +from beaupy import select_multiple, Config + + +class dl: + @click.command( + short_help="Download, Decrypt, and Mux tracks for titles from a Service.", + cls=Services, + context_settings=dict(**context_settings, default_map=config.dl, token_normalize_func=Services.get_tag), + ) + @click.option( + "-p", "--profile", type=str, default=None, help="Profile to use for Credentials and Cookies (if available)." + ) + @click.option( + "-q", + "--quality", + type=QUALITY_LIST, + default=[], + help="Download Resolution(s), defaults to the best available resolution.", + ) + @click.option( + "-v", + "--vcodec", + type=VideoCodecChoice(Video.Codec), + default=None, + help="Video Codec to download, defaults to any codec.", + ) + @click.option( + "-a", + "--acodec", + type=click.Choice(Audio.Codec, case_sensitive=False), + default=None, + help="Audio Codec to download, defaults to any codec.", + ) + @click.option( + "-vb", + "--vbitrate", + type=int, + default=None, + help="Video Bitrate to download (in kbps), defaults to highest available.", + ) + @click.option( + "-ab", + "--abitrate", + type=int, + default=None, + help="Audio Bitrate to download (in kbps), defaults to highest available.", + ) + @click.option( + "-r", + "--range", + "range_", + type=MultipleChoice(Video.Range, case_sensitive=False), + default=[Video.Range.SDR], + help="Video Color Range(s) to download, defaults to SDR.", + ) + @click.option( + "-c", + "--channels", + type=float, + default=None, + help="Audio Channel(s) to download. Matches sub-channel layouts like 5.1 with 6.0 implicitly.", + ) + @click.option( + "-naa", + "--noatmos", + "no_atmos", + is_flag=True, + default=False, + help="Exclude Dolby Atmos audio tracks when selecting audio.", + ) + @click.option( + "-w", + "--wanted", + type=SEASON_RANGE, + default=None, + help="Wanted episodes, e.g. `S01-S05,S07`, `S01E01-S02E03`, `S02-S02E03`, e.t.c, defaults to all.", + ) + @click.option( + "-l", + "--lang", + type=LANGUAGE_RANGE, + default="orig", + help="Language wanted for Video and Audio. Use 'orig' to select the original language, e.g. 'orig,en' for both original and English.", + ) + @click.option( + "-vl", + "--v-lang", + type=LANGUAGE_RANGE, + default=[], + help="Language wanted for Video, you would use this if the video language doesn't match the audio.", + ) + @click.option( + "-al", + "--a-lang", + type=LANGUAGE_RANGE, + default=[], + help="Language wanted for Audio, overrides -l/--lang for audio tracks.", + ) + @click.option("-sl", "--s-lang", type=LANGUAGE_RANGE, default=["all"], help="Language wanted for Subtitles.") + @click.option("-fs", "--forced-subs", is_flag=True, default=False, help="Include forced subtitle tracks.") + @click.option( + "--proxy", + type=str, + default=None, + help="Proxy URI to use. If a 2-letter country is provided, it will try get a proxy from the config.", + ) + @click.option( + "--tag", type=str, default=None, help="Set the Group Tag to be used, overriding the one in config if any." + ) + @click.option( + "--tmdb", + "tmdb_id", + type=int, + default=None, + help="Use this TMDB ID for tagging instead of automatic lookup.", + ) + @click.option( + "--tmdb-name", + "tmdb_name", + is_flag=True, + default=False, + help="Rename titles using the name returned from TMDB lookup.", + ) + @click.option( + "--tmdb-year", + "tmdb_year", + is_flag=True, + default=False, + help="Use the release year from TMDB for naming and tagging.", + ) + @click.option( + "--sub-format", + type=SubtitleCodecChoice(Subtitle.Codec), + default="srt", + help="Set Output Subtitle Format, only converting if necessary.", + ) + @click.option("-V", "--video-only", is_flag=True, default=False, help="Only download video tracks.") + @click.option("-A", "--audio-only", is_flag=True, default=False, help="Only download audio tracks.") + @click.option("-S", "--subs-only", is_flag=True, default=False, help="Only download subtitle tracks.") + @click.option("-C", "--chapters-only", is_flag=True, default=False, help="Only download chapters.") + @click.option("-ns", "--no-subs", is_flag=True, default=False, help="Do not download subtitle tracks.") + @click.option("-na", "--no-audio", is_flag=True, default=False, help="Do not download audio tracks.") + @click.option("-nc", "--no-chapters", is_flag=True, default=False, help="Do not download chapters tracks.") + @click.option( + "--slow", + is_flag=True, + default=False, + help="Add a 60-120 second delay between each Title download to act more like a real device. " + "This is recommended if you are downloading high-risk titles or streams.", + ) + @click.option( + "--list", + "list_", + is_flag=True, + default=False, + help="Skip downloading and list available tracks and what tracks would have been downloaded.", + ) + @click.option( + "--list-titles", + is_flag=True, + default=False, + help="Skip downloading, only list available titles that would have been downloaded.", + ) + @click.option( + "--select-titles", + is_flag=True, + default=False, + help="Interactively select downloads from a list. Only use with Series to select Episodes", + ) + @click.option( + "--skip-dl", is_flag=True, default=False, help="Skip downloading while still retrieving the decryption keys." + ) + @click.option("--export", type=Path, help="Export Decryption Keys as you obtain them to a JSON file.") + @click.option( + "--cdm-only/--vaults-only", + is_flag=True, + default=None, + help="Only use CDM, or only use Key Vaults for retrieval of Decryption Keys.", + ) + @click.option("--no-proxy", is_flag=True, default=False, help="Force disable all proxy use.") + @click.option("--no-folder", is_flag=True, default=False, help="Disable folder creation for TV Shows.") + @click.option( + "--no-source", is_flag=True, default=False, help="Disable the source tag from the output file name and path." + ) + @click.option( + "--workers", + type=int, + default=None, + help="Max workers/threads to download with per-track. Default depends on the downloader.", + ) + @click.option("--downloads", type=int, default=1, help="Amount of tracks to download concurrently.") + @click.option("--no-cache", "no_cache", is_flag=True, default=False, help="Bypass title cache for this download.") + @click.option("--reset-cache", "reset_cache", is_flag=True, default=False, help="Clear title cache before fetching.") + @click.pass_context + def cli(ctx: click.Context, **kwargs: Any) -> dl: + return dl(ctx, **kwargs) + + DRM_TABLE_LOCK = Lock() + + def __init__( + self, + ctx: click.Context, + no_proxy: bool, + profile: Optional[str] = None, + proxy: Optional[str] = None, + tag: Optional[str] = None, + tmdb_id: Optional[int] = None, + tmdb_name: bool = False, + tmdb_year: bool = False, + *_: Any, + **__: Any, + ): + if not ctx.invoked_subcommand: + raise ValueError("A subcommand to invoke was not specified, the main code cannot continue.") + + self.log = logging.getLogger("download") + + self.service = Services.get_tag(ctx.invoked_subcommand) + self.profile = profile + self.tmdb_id = tmdb_id + self.tmdb_name = tmdb_name + self.tmdb_year = tmdb_year + + if self.profile: + self.log.info(f"Using profile: '{self.profile}'") + + with console.status("Loading Service Config...", spinner="dots"): + service_config_path = Services.get_path(self.service) / config.filenames.config + if service_config_path.exists(): + self.service_config = yaml.safe_load(service_config_path.read_text(encoding="utf8")) + self.log.info("Service Config loaded") + else: + self.service_config = {} + merge_dict(config.services.get(self.service), self.service_config) + + if getattr(config, "downloader_map", None): + config.downloader = config.downloader_map.get(self.service, config.downloader) + + with console.status("Loading DRM CDM...", spinner="dots"): + try: + self.cdm = self.get_cdm(self.service, self.profile) + except ValueError as e: + self.log.error(f"Failed to load CDM, {e}") + sys.exit(1) + + if self.cdm: + if hasattr(self.cdm, "device_type") and self.cdm.device_type.name in ["ANDROID", "CHROME"]: + self.log.info(f"Loaded Widevine CDM: {self.cdm.system_id} (L{self.cdm.security_level})") + else: + self.log.info( + f"Loaded PlayReady CDM: {self.cdm.certificate_chain.get_name()} (L{self.cdm.security_level})" + ) + + with console.status("Loading Key Vaults...", spinner="dots"): + self.vaults = Vaults(self.service) + total_vaults = len(config.key_vaults) + failed_vaults = [] + + for vault in config.key_vaults: + vault_type = vault["type"] + vault_name = vault.get("name", vault_type) + vault_copy = vault.copy() + del vault_copy["type"] + + if vault_type.lower() == "sqlite": + try: + self.vaults.load_critical(vault_type, **vault_copy) + self.log.debug(f"Successfully loaded vault: {vault_name} ({vault_type})") + except Exception as e: + self.log.error(f"vault failure: {vault_name} ({vault_type}) - {e}") + raise + else: + # Other vaults (MySQL, HTTP, API) - soft fail + if not self.vaults.load(vault_type, **vault_copy): + failed_vaults.append(vault_name) + self.log.debug(f"Failed to load vault: {vault_name} ({vault_type})") + else: + self.log.debug(f"Successfully loaded vault: {vault_name} ({vault_type})") + + loaded_count = len(self.vaults) + if failed_vaults: + self.log.warning(f"Failed to load {len(failed_vaults)} vault(s): {', '.join(failed_vaults)}") + self.log.info(f"Loaded {loaded_count}/{total_vaults} Vaults") + + # Debug: Show detailed vault status + if loaded_count > 0: + vault_names = [vault.name for vault in self.vaults] + self.log.debug(f"Active vaults: {', '.join(vault_names)}") + else: + self.log.debug("No vaults are currently active") + + self.proxy_providers = [] + if no_proxy: + ctx.params["proxy"] = None + else: + with console.status("Loading Proxy Providers...", spinner="dots"): + if config.proxy_providers.get("basic"): + self.proxy_providers.append(Basic(**config.proxy_providers["basic"])) + if config.proxy_providers.get("nordvpn"): + self.proxy_providers.append(NordVPN(**config.proxy_providers["nordvpn"])) + if config.proxy_providers.get("surfsharkvpn"): + self.proxy_providers.append(SurfsharkVPN(**config.proxy_providers["surfsharkvpn"])) + if binaries.HolaProxy: + self.proxy_providers.append(Hola()) + for proxy_provider in self.proxy_providers: + self.log.info(f"Loaded {proxy_provider.__class__.__name__}: {proxy_provider}") + + if proxy: + requested_provider = None + if re.match(r"^[a-z]+:.+$", proxy, re.IGNORECASE): + # requesting proxy from a specific proxy provider + requested_provider, proxy = proxy.split(":", maxsplit=1) + if re.match(r"^[a-z]{2}(?:\d+)?$", proxy, re.IGNORECASE): + proxy = proxy.lower() + with console.status(f"Getting a Proxy to {proxy}...", spinner="dots"): + if requested_provider: + proxy_provider = next( + (x for x in self.proxy_providers if x.__class__.__name__.lower() == requested_provider), + None, + ) + if not proxy_provider: + self.log.error(f"The proxy provider '{requested_provider}' was not recognised.") + sys.exit(1) + proxy_uri = proxy_provider.get_proxy(proxy) + if not proxy_uri: + self.log.error(f"The proxy provider {requested_provider} had no proxy for {proxy}") + sys.exit(1) + proxy = ctx.params["proxy"] = proxy_uri + self.log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + else: + for proxy_provider in self.proxy_providers: + proxy_uri = proxy_provider.get_proxy(proxy) + if proxy_uri: + proxy = ctx.params["proxy"] = proxy_uri + self.log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + break + else: + self.log.info(f"Using explicit Proxy: {proxy}") + + ctx.obj = ContextData( + config=self.service_config, cdm=self.cdm, proxy_providers=self.proxy_providers, profile=self.profile + ) + + if tag: + config.tag = tag + + # needs to be added this way instead of @cli.result_callback to be + # able to keep `self` as the first positional + self.cli._result_callback = self.result + + def result( + self, + service: Service, + quality: list[int], + vcodec: Optional[Video.Codec], + acodec: Optional[Audio.Codec], + vbitrate: int, + abitrate: int, + range_: list[Video.Range], + channels: float, + no_atmos: bool, + wanted: list[str], + lang: list[str], + v_lang: list[str], + a_lang: list[str], + s_lang: list[str], + forced_subs: bool, + sub_format: Optional[Subtitle.Codec], + video_only: bool, + audio_only: bool, + subs_only: bool, + chapters_only: bool, + no_subs: bool, + no_audio: bool, + no_chapters: bool, + slow: bool, + list_: bool, + list_titles: bool, + select_titles: bool, + skip_dl: bool, + export: Optional[Path], + cdm_only: Optional[bool], + no_proxy: bool, + no_folder: bool, + no_source: bool, + workers: Optional[int], + downloads: int, + *_: Any, + **__: Any, + ) -> None: + self.tmdb_searched = False + self.search_source = None + start_time = time.time() + + # Check if dovi_tool is available when hybrid mode is requested + if any(r == Video.Range.HYBRID for r in range_): + from envied.core.binaries import DoviTool + + if not DoviTool: + self.log.error("Unable to run hybrid mode: dovi_tool not detected") + self.log.error("Please install dovi_tool from https://github.com/quietvoid/dovi_tool") + sys.exit(1) + + if cdm_only is None: + vaults_only = None + else: + vaults_only = not cdm_only + + with console.status("Authenticating with Service...", spinner="dots"): + cookies = self.get_cookie_jar(self.service, self.profile) + credential = self.get_credentials(self.service, self.profile) + service.authenticate(cookies, credential) + if cookies or credential: + self.log.info("Authenticated with Service") + + with console.status("Fetching Title Metadata...", spinner="dots"): + titles = service.get_titles_cached() + if not titles: + self.log.error("No titles returned, nothing to download...") + sys.exit(1) + + if self.tmdb_year and self.tmdb_id: + sample_title = titles[0] if hasattr(titles, "__getitem__") else titles + kind = "tv" if isinstance(sample_title, Episode) else "movie" + tmdb_year_val = tags.get_year(self.tmdb_id, kind) + if tmdb_year_val: + if isinstance(titles, (Series, Movies)): + for t in titles: + t.year = tmdb_year_val + else: + titles.year = tmdb_year_val + + console.print(Padding(Rule(f"[rule.text]{titles.__class__.__name__}: {titles}"), (1, 2))) + + console.print(Padding(titles.tree(verbose=list_titles), (0, 5))) + if list_titles: + return + + # modification to enable beaupy module to list titles for download for manual selection + # use --select-titles after dl in envied command + + Config.transient = True + if select_titles and type(titles)==Series: + console.print(Padding(Rule(f"[rule.text]\nSelect Titles Option\n"))) + + + beaupy_titles = [ + f"{i+1} {t.title}, {t.season}, {t.number}" + for i, t in enumerate(titles) + ] + + selected_idx = select_multiple( + beaupy_titles, + preprocessor=lambda val: f"[rgb(245,194,231)]{val}[/rgb(245,194,231)]", + minimal_count=1, + page_size=8, + pagination=True, + return_indices=True, + + ) + + # Keep indices unique & ordered + selected_idx = sorted(set(selected_idx)) + keep = set(selected_idx) + + # In-place filter: delete everything not selected (walk backwards!) + # need to delete from original list to keep super classes meta data + for i in range(len(titles) - 1, -1, -1): + if i not in keep: + del titles[i] + # end modification + + + + for i, title in enumerate(titles): + if isinstance(title, Episode) and wanted and f"{title.season}x{title.number}" not in wanted: + continue + + console.print(Padding(Rule(f"[rule.text]{title}"), (1, 2))) + + if isinstance(title, Episode) and not self.tmdb_searched: + kind = "tv" + if self.tmdb_id: + tmdb_title = tags.get_title(self.tmdb_id, kind) + else: + self.tmdb_id, tmdb_title, self.search_source = tags.search_show_info(title.title, title.year, kind) + if not (self.tmdb_id and tmdb_title and tags.fuzzy_match(tmdb_title, title.title)): + self.tmdb_id = None + if list_ or list_titles: + if self.tmdb_id: + console.print( + Padding( + f"Search -> {tmdb_title or '?'} [bright_black](ID {self.tmdb_id})", + (0, 5), + ) + ) + else: + console.print(Padding("Search -> [bright_black]No match found[/]", (0, 5))) + self.tmdb_searched = True + + if isinstance(title, Movie) and (list_ or list_titles) and not self.tmdb_id: + movie_id, movie_title, _ = tags.search_show_info(title.name, title.year, "movie") + if movie_id: + console.print( + Padding( + f"Search -> {movie_title or '?'} [bright_black](ID {movie_id})", + (0, 5), + ) + ) + else: + console.print(Padding("Search -> [bright_black]No match found[/]", (0, 5))) + + if self.tmdb_id and getattr(self, 'search_source', None) != 'simkl': + kind = "tv" if isinstance(title, Episode) else "movie" + tags.external_ids(self.tmdb_id, kind) + if self.tmdb_year: + tmdb_year_val = tags.get_year(self.tmdb_id, kind) + if tmdb_year_val: + title.year = tmdb_year_val + + if slow and i != 0: + delay = random.randint(60, 120) + with console.status(f"Delaying by {delay} seconds..."): + time.sleep(delay) + + with console.status("Subscribing to events...", spinner="dots"): + events.reset() + events.subscribe(events.Types.SEGMENT_DOWNLOADED, service.on_segment_downloaded) + events.subscribe(events.Types.TRACK_DOWNLOADED, service.on_track_downloaded) + events.subscribe(events.Types.TRACK_DECRYPTED, service.on_track_decrypted) + events.subscribe(events.Types.TRACK_REPACKED, service.on_track_repacked) + events.subscribe(events.Types.TRACK_MULTIPLEX, service.on_track_multiplex) + + if hasattr(service, "NO_SUBTITLES") and service.NO_SUBTITLES: + console.log("Skipping subtitles - service does not support subtitle downloads") + no_subs = True + s_lang = None + title.tracks.subtitles = [] + elif no_subs: + console.log("Skipped subtitles as --no-subs was used...") + s_lang = None + title.tracks.subtitles = [] + + with console.status("Getting tracks...", spinner="dots"): + title.tracks.add(service.get_tracks(title), warn_only=True) + title.tracks.chapters = service.get_chapters(title) + + # strip SDH subs to non-SDH if no equivalent same-lang non-SDH is available + # uses a loose check, e.g, wont strip en-US SDH sub if a non-SDH en-GB is available + for subtitle in title.tracks.subtitles: + if subtitle.sdh and not any( + is_close_match(subtitle.language, [x.language]) + for x in title.tracks.subtitles + if not x.sdh and not x.forced + ): + non_sdh_sub = deepcopy(subtitle) + non_sdh_sub.id += "_stripped" + non_sdh_sub.sdh = False + title.tracks.add(non_sdh_sub) + events.subscribe( + events.Types.TRACK_MULTIPLEX, + lambda track: (track.strip_hearing_impaired()) if track.id == non_sdh_sub.id else None, + ) + + with console.status("Sorting tracks by language and bitrate...", spinner="dots"): + video_sort_lang = v_lang or lang + processed_video_sort_lang = [] + for language in video_sort_lang: + if language == "orig": + if title.language: + orig_lang = str(title.language) if hasattr(title.language, "__str__") else title.language + if orig_lang not in processed_video_sort_lang: + processed_video_sort_lang.append(orig_lang) + else: + if language not in processed_video_sort_lang: + processed_video_sort_lang.append(language) + + audio_sort_lang = a_lang or lang + processed_audio_sort_lang = [] + for language in audio_sort_lang: + if language == "orig": + if title.language: + orig_lang = str(title.language) if hasattr(title.language, "__str__") else title.language + if orig_lang not in processed_audio_sort_lang: + processed_audio_sort_lang.append(orig_lang) + else: + if language not in processed_audio_sort_lang: + processed_audio_sort_lang.append(language) + + title.tracks.sort_videos(by_language=processed_video_sort_lang) + title.tracks.sort_audio(by_language=processed_audio_sort_lang) + title.tracks.sort_subtitles(by_language=s_lang) + + if list_: + available_tracks, _ = title.tracks.tree() + console.print(Padding(Panel(available_tracks, title="Available Tracks"), (0, 5))) + continue + + with console.status("Selecting tracks...", spinner="dots"): + if isinstance(title, (Movie, Episode)): + # filter video tracks + if vcodec: + title.tracks.select_video(lambda x: x.codec == vcodec) + if not title.tracks.videos: + self.log.error(f"There's no {vcodec.name} Video Track...") + sys.exit(1) + + if range_: + # Special handling for HYBRID - don't filter, keep all HDR10 and DV tracks + if Video.Range.HYBRID not in range_: + title.tracks.select_video(lambda x: x.range in range_) + missing_ranges = [r for r in range_ if not any(x.range == r for x in title.tracks.videos)] + for color_range in missing_ranges: + self.log.warning(f"Skipping {color_range.name} video tracks as none are available.") + + if vbitrate: + title.tracks.select_video(lambda x: x.bitrate and x.bitrate // 1000 == vbitrate) + if not title.tracks.videos: + self.log.error(f"There's no {vbitrate}kbps Video Track...") + sys.exit(1) + + video_languages = [lang for lang in (v_lang or lang) if lang != "best"] + if video_languages and "all" not in video_languages: + processed_video_lang = [] + for language in video_languages: + if language == "orig": + if title.language: + orig_lang = ( + str(title.language) if hasattr(title.language, "__str__") else title.language + ) + if orig_lang not in processed_video_lang: + processed_video_lang.append(orig_lang) + else: + self.log.warning( + "Original language not available for title, skipping 'orig' selection for video" + ) + else: + if language not in processed_video_lang: + processed_video_lang.append(language) + title.tracks.videos = title.tracks.by_language(title.tracks.videos, processed_video_lang) + if not title.tracks.videos: + self.log.error(f"There's no {processed_video_lang} Video Track...") + sys.exit(1) + + if quality: + missing_resolutions = [] + if any(r == Video.Range.HYBRID for r in range_): + title.tracks.select_video(title.tracks.select_hybrid(title.tracks.videos, quality)) + else: + title.tracks.by_resolutions(quality) + + for resolution in quality: + if any(v.height == resolution for v in title.tracks.videos): + continue + if any(int(v.width * 9 / 16) == resolution for v in title.tracks.videos): + continue + missing_resolutions.append(resolution) + + if missing_resolutions: + res_list = "" + if len(missing_resolutions) > 1: + res_list = ", ".join([f"{x}p" for x in missing_resolutions[:-1]]) + " or " + res_list = f"{res_list}{missing_resolutions[-1]}p" + plural = "s" if len(missing_resolutions) > 1 else "" + self.log.error(f"There's no {res_list} Video Track{plural}...") + sys.exit(1) + + # choose best track by range and quality + if any(r == Video.Range.HYBRID for r in range_): + # For hybrid mode, always apply hybrid selection + # If no quality specified, use only the best (highest) resolution + if not quality: + # Get the highest resolution available + best_resolution = max((v.height for v in title.tracks.videos), default=None) + if best_resolution: + # Use the hybrid selection logic with only the best resolution + title.tracks.select_video( + title.tracks.select_hybrid(title.tracks.videos, [best_resolution]) + ) + # If quality was specified, hybrid selection was already applied above + else: + selected_videos: list[Video] = [] + for resolution, color_range in product(quality or [None], range_ or [None]): + match = next( + ( + t + for t in title.tracks.videos + if ( + not resolution + or t.height == resolution + or int(t.width * (9 / 16)) == resolution + ) + and (not color_range or t.range == color_range) + ), + None, + ) + if match and match not in selected_videos: + selected_videos.append(match) + title.tracks.videos = selected_videos + + # filter subtitle tracks + if s_lang and "all" not in s_lang: + missing_langs = [ + lang_ + for lang_ in s_lang + if not any(is_close_match(lang_, [sub.language]) for sub in title.tracks.subtitles) + ] + if missing_langs: + self.log.error(", ".join(missing_langs) + " not found in tracks") + sys.exit(1) + + title.tracks.select_subtitles(lambda x: is_close_match(x.language, s_lang)) + if not title.tracks.subtitles: + self.log.error(f"There's no {s_lang} Subtitle Track...") + sys.exit(1) + + if not forced_subs: + title.tracks.select_subtitles(lambda x: not x.forced or is_close_match(x.language, lang)) + + # filter audio tracks + # might have no audio tracks if part of the video, e.g. transport stream hls + if len(title.tracks.audio) > 0: + title.tracks.select_audio(lambda x: not x.descriptive) # exclude descriptive audio + if acodec: + title.tracks.select_audio(lambda x: x.codec == acodec) + if not title.tracks.audio: + self.log.error(f"There's no {acodec.name} Audio Tracks...") + sys.exit(1) + if channels: + title.tracks.select_audio(lambda x: math.ceil(x.channels) == math.ceil(channels)) + if not title.tracks.audio: + self.log.error(f"There's no {channels} Audio Track...") + sys.exit(1) + if no_atmos: + title.tracks.audio = [x for x in title.tracks.audio if not x.atmos] + if not title.tracks.audio: + self.log.error("No non-Atmos audio tracks available...") + sys.exit(1) + if abitrate: + title.tracks.select_audio(lambda x: x.bitrate and x.bitrate // 1000 == abitrate) + if not title.tracks.audio: + self.log.error(f"There's no {abitrate}kbps Audio Track...") + sys.exit(1) + audio_languages = a_lang or lang + if audio_languages: + processed_lang = [] + for language in audio_languages: + if language == "orig": + if title.language: + orig_lang = ( + str(title.language) if hasattr(title.language, "__str__") else title.language + ) + if orig_lang not in processed_lang: + processed_lang.append(orig_lang) + else: + self.log.warning( + "Original language not available for title, skipping 'orig' selection" + ) + else: + if language not in processed_lang: + processed_lang.append(language) + + if "best" in processed_lang: + unique_languages = {track.language for track in title.tracks.audio} + selected_audio = [] + for language in unique_languages: + highest_quality = max( + (track for track in title.tracks.audio if track.language == language), + key=lambda x: x.bitrate or 0, + ) + selected_audio.append(highest_quality) + title.tracks.audio = selected_audio + elif "all" not in processed_lang: + per_language = 1 + title.tracks.audio = title.tracks.by_language( + title.tracks.audio, processed_lang, per_language=per_language + ) + if not title.tracks.audio: + self.log.error(f"There's no {processed_lang} Audio Track, cannot continue...") + sys.exit(1) + + if video_only or audio_only or subs_only or chapters_only or no_subs or no_audio or no_chapters: + keep_videos = False + keep_audio = False + keep_subtitles = False + keep_chapters = False + + if video_only or audio_only or subs_only or chapters_only: + if video_only: + keep_videos = True + if audio_only: + keep_audio = True + if subs_only: + keep_subtitles = True + if chapters_only: + keep_chapters = True + else: + keep_videos = True + keep_audio = True + keep_subtitles = True + keep_chapters = True + + if no_subs: + keep_subtitles = False + if no_audio: + keep_audio = False + if no_chapters: + keep_chapters = False + + kept_tracks = [] + if keep_videos: + kept_tracks.extend(title.tracks.videos) + if keep_audio: + kept_tracks.extend(title.tracks.audio) + if keep_subtitles: + kept_tracks.extend(title.tracks.subtitles) + if keep_chapters: + kept_tracks.extend(title.tracks.chapters) + + title.tracks = Tracks(kept_tracks) + + selected_tracks, tracks_progress_callables = title.tracks.tree(add_progress=True) + + download_table = Table.grid() + download_table.add_row(selected_tracks) + + dl_start_time = time.time() + + if skip_dl: + DOWNLOAD_LICENCE_ONLY.set() + + try: + with Live(Padding(download_table, (1, 5)), console=console, refresh_per_second=5): + with ThreadPoolExecutor(downloads) as pool: + for download in futures.as_completed( + ( + pool.submit( + track.download, + session=service.session, + prepare_drm=partial( + partial(self.prepare_drm, table=download_table), + track=track, + title=title, + certificate=partial( + service.get_widevine_service_certificate, + title=title, + track=track, + ), + licence=partial( + service.get_playready_license + if isinstance(self.cdm, PlayReadyCdm) + and hasattr(service, "get_playready_license") + else service.get_widevine_license, + title=title, + track=track, + ), + cdm_only=cdm_only, + vaults_only=vaults_only, + export=export, + ), + cdm=self.cdm, + max_workers=workers, + progress=tracks_progress_callables[i], + ) + for i, track in enumerate(title.tracks) + ) + ): + download.result() + except KeyboardInterrupt: + console.print(Padding(":x: Download Cancelled...", (0, 5, 1, 5))) + return + except Exception as e: # noqa + error_messages = [ + ":x: Download Failed...", + ] + if isinstance(e, EnvironmentError): + error_messages.append(f" {e}") + if isinstance(e, ValueError): + error_messages.append(f" {e}") + if isinstance(e, (AttributeError, TypeError)): + console.print_exception() + else: + error_messages.append( + " An unexpected error occurred in one of the download workers.", + ) + if hasattr(e, "returncode"): + error_messages.append(f" Binary call failed, Process exit code: {e.returncode}") + error_messages.append(" See the error trace above for more information.") + if isinstance(e, subprocess.CalledProcessError): + # CalledProcessError already lists the exception trace + console.print_exception() + console.print(Padding(Group(*error_messages), (1, 5))) + return + + if skip_dl: + console.log("Skipped downloads as --skip-dl was used...") + else: + dl_time = time_elapsed_since(dl_start_time) + console.print(Padding(f"Track downloads finished in [progress.elapsed]{dl_time}[/]", (0, 5))) + + video_track_n = 0 + + while ( + not title.tracks.subtitles + and not no_subs + and not (hasattr(service, "NO_SUBTITLES") and service.NO_SUBTITLES) + and not video_only + and len(title.tracks.videos) > video_track_n + and any( + x.get("codec_name", "").startswith("eia_") + for x in ffprobe(title.tracks.videos[video_track_n].path).get("streams", []) + ) + ): + with console.status(f"Checking Video track {video_track_n + 1} for Closed Captions..."): + try: + # TODO: Figure out the real language, it might be different + # EIA-CC tracks sadly don't carry language information :( + # TODO: Figure out if the CC language is original lang or not. + # Will need to figure out above first to do so. + video_track = title.tracks.videos[video_track_n] + track_id = f"ccextractor-{video_track.id}" + cc_lang = title.language or video_track.language + cc = video_track.ccextractor( + track_id=track_id, + out_path=config.directories.temp + / config.filenames.subtitle.format(id=track_id, language=cc_lang), + language=cc_lang, + original=False, + ) + if cc: + # will not appear in track listings as it's added after all times it lists + title.tracks.add(cc) + self.log.info(f"Extracted a Closed Caption from Video track {video_track_n + 1}") + else: + self.log.info(f"No Closed Captions were found in Video track {video_track_n + 1}") + except EnvironmentError: + self.log.error( + "Cannot extract Closed Captions as the ccextractor executable was not found..." + ) + break + video_track_n += 1 + + with console.status("Converting Subtitles..."): + for subtitle in title.tracks.subtitles: + if sub_format: + if subtitle.codec != sub_format: + subtitle.convert(sub_format) + elif subtitle.codec == Subtitle.Codec.TimedTextMarkupLang: + # MKV does not support TTML, VTT is the next best option + subtitle.convert(Subtitle.Codec.WebVTT) + + with console.status("Checking Subtitles for Fonts..."): + font_names = [] + for subtitle in title.tracks.subtitles: + if subtitle.codec == Subtitle.Codec.SubStationAlphav4: + for line in subtitle.path.read_text("utf8").splitlines(): + if line.startswith("Style: "): + font_names.append(line.removesuffix("Style: ").split(",")[1]) + + font_count = 0 + system_fonts = get_system_fonts() + for font_name in set(font_names): + family_dir = Path(config.directories.fonts, font_name) + fonts_from_system = [file for name, file in system_fonts.items() if name.startswith(font_name)] + if family_dir.exists(): + fonts = family_dir.glob("*.*tf") + for font in fonts: + title.tracks.add(Attachment(font, f"{font_name} ({font.stem})")) + font_count += 1 + elif fonts_from_system: + for font in fonts_from_system: + title.tracks.add(Attachment(font, f"{font_name} ({font.stem})")) + font_count += 1 + else: + self.log.warning(f"Subtitle uses font [text2]{font_name}[/] but it could not be found...") + + if font_count: + self.log.info(f"Attached {font_count} fonts for the Subtitles") + + # Handle DRM decryption BEFORE repacking (must decrypt first!) + service_name = service.__class__.__name__.upper() + decryption_method = config.decryption_map.get(service_name, config.decryption) + use_mp4decrypt = decryption_method.lower() == "mp4decrypt" + + if use_mp4decrypt: + decrypt_tool = "mp4decrypt" + else: + decrypt_tool = "Shaka Packager" + + drm_tracks = [track for track in title.tracks if track.drm] + if drm_tracks: + with console.status(f"Decrypting tracks with {decrypt_tool}..."): + has_decrypted = False + for track in drm_tracks: + drm = track.get_drm_for_cdm(self.cdm) + if drm and hasattr(drm, "decrypt"): + drm.decrypt(track.path, use_mp4decrypt=use_mp4decrypt) + has_decrypted = True + events.emit(events.Types.TRACK_REPACKED, track=track) + else: + self.log.warning( + f"No matching DRM found for track {track} with CDM type {type(self.cdm).__name__}" + ) + if has_decrypted: + self.log.info(f"Decrypted tracks with {decrypt_tool}") + + # Now repack the decrypted tracks + with console.status("Repackaging tracks with FFMPEG..."): + has_repacked = False + for track in title.tracks: + if track.needs_repack: + track.repackage() + has_repacked = True + events.emit(events.Types.TRACK_REPACKED, track=track) + if has_repacked: + # we don't want to fill up the log with "Repacked x track" + self.log.info("Repacked one or more tracks with FFMPEG") + + muxed_paths = [] + + if isinstance(title, (Movie, Episode)): + progress = Progress( + TextColumn("[progress.description]{task.description}"), + SpinnerColumn(finished_text=""), + BarColumn(), + "•", + TimeRemainingColumn(compact=True, elapsed_when_finished=True), + console=console, + ) + + multiplex_tasks: list[tuple[TaskID, Tracks]] = [] + + # Check if we're in hybrid mode + if any(r == Video.Range.HYBRID for r in range_) and title.tracks.videos: + # Hybrid mode: process DV and HDR10 tracks separately for each resolution + self.log.info("Processing Hybrid HDR10+DV tracks...") + + # Group video tracks by resolution + resolutions_processed = set() + hdr10_tracks = [v for v in title.tracks.videos if v.range == Video.Range.HDR10] + dv_tracks = [v for v in title.tracks.videos if v.range == Video.Range.DV] + + for hdr10_track in hdr10_tracks: + resolution = hdr10_track.height + if resolution in resolutions_processed: + continue + resolutions_processed.add(resolution) + + # Find matching DV track for this resolution (use the lowest DV resolution) + matching_dv = min(dv_tracks, key=lambda v: v.height) if dv_tracks else None + + if matching_dv: + # Create track pair for this resolution + resolution_tracks = [hdr10_track, matching_dv] + + for track in resolution_tracks: + track.needs_duration_fix = True + + # Run the hybrid processing for this resolution + Hybrid(resolution_tracks, self.service) + + # Create unique output filename for this resolution + hybrid_filename = f"HDR10-DV-{resolution}p.hevc" + hybrid_output_path = config.directories.temp / hybrid_filename + + # The Hybrid class creates HDR10-DV.hevc, rename it for this resolution + default_output = config.directories.temp / "HDR10-DV.hevc" + if default_output.exists(): + shutil.move(str(default_output), str(hybrid_output_path)) + + # Create a mux task for this resolution + task_description = f"Multiplexing Hybrid HDR10+DV {resolution}p" + task_id = progress.add_task(f"{task_description}...", total=None, start=False) + + # Create tracks with the hybrid video output for this resolution + task_tracks = Tracks(title.tracks) + title.tracks.chapters + title.tracks.attachments + + # Create a new video track for the hybrid output + hybrid_track = deepcopy(hdr10_track) + hybrid_track.path = hybrid_output_path + hybrid_track.range = Video.Range.DV # It's now a DV track + hybrid_track.needs_duration_fix = True + task_tracks.videos = [hybrid_track] + + multiplex_tasks.append((task_id, task_tracks)) + + console.print() + else: + # Normal mode: process each video track separately + for video_track in title.tracks.videos or [None]: + task_description = "Multiplexing" + if video_track: + if len(quality) > 1: + task_description += f" {video_track.height}p" + if len(range_) > 1: + task_description += f" {video_track.range.name}" + + task_id = progress.add_task(f"{task_description}...", total=None, start=False) + + task_tracks = Tracks(title.tracks) + title.tracks.chapters + title.tracks.attachments + if video_track: + task_tracks.videos = [video_track] + + multiplex_tasks.append((task_id, task_tracks)) + + with Live(Padding(progress, (0, 5, 1, 5)), console=console): + for task_id, task_tracks in multiplex_tasks: + progress.start_task(task_id) # TODO: Needed? + muxed_path, return_code, errors = task_tracks.mux( + str(title), progress=partial(progress.update, task_id=task_id), delete=False + ) + muxed_paths.append(muxed_path) + if return_code >= 2: + self.log.error(f"Failed to Mux video to Matroska file ({return_code}):") + elif return_code == 1 or errors: + self.log.warning("mkvmerge had at least one warning or error, continuing anyway...") + for line in errors: + if line.startswith("#GUI#error"): + self.log.error(line) + else: + self.log.warning(line) + if return_code >= 2: + sys.exit(1) + for video_track in task_tracks.videos: + video_track.delete() + for track in title.tracks: + track.delete() + for attachment in title.tracks.attachments: + attachment.delete() + + else: + # dont mux + muxed_paths.append(title.tracks.audio[0].path) + + for muxed_path in muxed_paths: + media_info = MediaInfo.parse(muxed_path) + final_dir = config.directories.downloads + final_filename = title.get_filename(media_info, show_service=not no_source) + + if not no_folder and isinstance(title, (Episode, Song)): + final_dir /= title.get_filename(media_info, show_service=not no_source, folder=True) + + final_dir.mkdir(parents=True, exist_ok=True) + final_path = final_dir / f"{final_filename}{muxed_path.suffix}" + + shutil.move(muxed_path, final_path) + tags.tag_file(final_path, title, self.tmdb_id) + + title_dl_time = time_elapsed_since(dl_start_time) + console.print( + Padding(f":tada: Title downloaded in [progress.elapsed]{title_dl_time}[/]!", (0, 5, 1, 5)) + ) + + # update cookies + cookie_file = self.get_cookie_path(self.service, self.profile) + if cookie_file: + self.save_cookies(cookie_file, service.session.cookies) + + dl_time = time_elapsed_since(start_time) + + console.print(Padding(f"Processed all titles in [progress.elapsed]{dl_time}", (0, 5, 1, 5))) + + def prepare_drm( + self, + drm: DRM_T, + track: AnyTrack, + title: Title_T, + certificate: Callable, + licence: Callable, + track_kid: Optional[UUID] = None, + table: Table = None, + cdm_only: bool = False, + vaults_only: bool = False, + export: Optional[Path] = None, + ) -> None: + """ + Prepare the DRM by getting decryption data like KIDs, Keys, and such. + The DRM object should be ready for decryption once this function ends. + """ + if not drm: + return + + if isinstance(drm, Widevine) and not isinstance(self.cdm, WidevineCdm): + self.cdm = self.get_cdm(self.service, self.profile, drm="widevine") + elif isinstance(drm, PlayReady) and not isinstance(self.cdm, PlayReadyCdm): + self.cdm = self.get_cdm(self.service, self.profile, drm="playready") + + if isinstance(drm, Widevine): + with self.DRM_TABLE_LOCK: + cek_tree = Tree(Text.assemble(("Widevine", "cyan"), (f"({drm.pssh.dumps()})", "text"), overflow="fold")) + pre_existing_tree = next( + (x for x in table.columns[0].cells if isinstance(x, Tree) and x.label == cek_tree.label), None + ) + if pre_existing_tree: + cek_tree = pre_existing_tree + + for kid in drm.kids: + if kid in drm.content_keys: + continue + + is_track_kid = ["", "*"][kid == track_kid] + + if not cdm_only: + content_key, vault_used = self.vaults.get_key(kid) + if content_key: + drm.content_keys[kid] = content_key + label = f"[text2]{kid.hex}:{content_key}{is_track_kid} from {vault_used}" + if not any(f"{kid.hex}:{content_key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + self.vaults.add_key(kid, content_key, excluding=vault_used) + elif vaults_only: + msg = f"No Vault has a Key for {kid.hex} and --vaults-only was used" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise Widevine.Exceptions.CEKNotFound(msg) + + if kid not in drm.content_keys and not vaults_only: + from_vaults = drm.content_keys.copy() + + try: + if self.service == "NF": + drm.get_NF_content_keys(cdm=self.cdm, licence=licence, certificate=certificate) + else: + drm.get_content_keys(cdm=self.cdm, licence=licence, certificate=certificate) + except Exception as e: + if isinstance(e, (Widevine.Exceptions.EmptyLicense, Widevine.Exceptions.CEKNotFound)): + msg = str(e) + else: + msg = f"An exception occurred in the Service's license function: {e}" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise e + + for kid_, key in drm.content_keys.items(): + if key == "0" * 32: + key = f"[red]{key}[/]" + label = f"[text2]{kid_.hex}:{key}{is_track_kid}" + if not any(f"{kid_.hex}:{key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + + drm.content_keys = { + kid_: key for kid_, key in drm.content_keys.items() if key and key.count("0") != len(key) + } + + # The CDM keys may have returned blank content keys for KIDs we got from vaults. + # So we re-add the keys from vaults earlier overwriting blanks or removed KIDs data. + drm.content_keys.update(from_vaults) + + successful_caches = self.vaults.add_keys(drm.content_keys) + self.log.info( + f"Cached {len(drm.content_keys)} Key{'' if len(drm.content_keys) == 1 else 's'} to " + f"{successful_caches}/{len(self.vaults)} Vaults" + ) + break # licensing twice will be unnecessary + + if track_kid and track_kid not in drm.content_keys: + msg = f"No Content Key for KID {track_kid.hex} was returned in the License" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise Widevine.Exceptions.CEKNotFound(msg) + + if cek_tree.children and not pre_existing_tree: + table.add_row() + table.add_row(cek_tree) + + if export: + keys = {} + if export.is_file(): + keys = jsonpickle.loads(export.read_text(encoding="utf8")) + if str(title) not in keys: + keys[str(title)] = {} + if str(track) not in keys[str(title)]: + keys[str(title)][str(track)] = {} + keys[str(title)][str(track)].update(drm.content_keys) + export.write_text(jsonpickle.dumps(keys, indent=4), encoding="utf8") + + elif isinstance(drm, PlayReady): + with self.DRM_TABLE_LOCK: + cek_tree = Tree( + Text.assemble( + ("PlayReady", "cyan"), + (f"({drm.pssh_b64 or ''})", "text"), + overflow="fold", + ) + ) + pre_existing_tree = next( + (x for x in table.columns[0].cells if isinstance(x, Tree) and x.label == cek_tree.label), None + ) + if pre_existing_tree: + cek_tree = pre_existing_tree + + for kid in drm.kids: + if kid in drm.content_keys: + continue + + is_track_kid = ["", "*"][kid == track_kid] + + if not cdm_only: + content_key, vault_used = self.vaults.get_key(kid) + if content_key: + drm.content_keys[kid] = content_key + label = f"[text2]{kid.hex}:{content_key}{is_track_kid} from {vault_used}" + if not any(f"{kid.hex}:{content_key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + self.vaults.add_key(kid, content_key, excluding=vault_used) + elif vaults_only: + msg = f"No Vault has a Key for {kid.hex} and --vaults-only was used" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise PlayReady.Exceptions.CEKNotFound(msg) + + if kid not in drm.content_keys and not vaults_only: + from_vaults = drm.content_keys.copy() + + try: + drm.get_content_keys(cdm=self.cdm, licence=licence, certificate=certificate) + except Exception as e: + if isinstance(e, (PlayReady.Exceptions.EmptyLicense, PlayReady.Exceptions.CEKNotFound)): + msg = str(e) + else: + msg = f"An exception occurred in the Service's license function: {e}" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise e + + for kid_, key in drm.content_keys.items(): + label = f"[text2]{kid_.hex}:{key}{is_track_kid}" + if not any(f"{kid_.hex}:{key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + + drm.content_keys.update(from_vaults) + + successful_caches = self.vaults.add_keys(drm.content_keys) + self.log.info( + f"Cached {len(drm.content_keys)} Key{'' if len(drm.content_keys) == 1 else 's'} to " + f"{successful_caches}/{len(self.vaults)} Vaults" + ) + break + + if track_kid and track_kid not in drm.content_keys: + msg = f"No Content Key for KID {track_kid.hex} was returned in the License" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise PlayReady.Exceptions.CEKNotFound(msg) + + if cek_tree.children and not pre_existing_tree: + table.add_row() + table.add_row(cek_tree) + + if export: + keys = {} + if export.is_file(): + keys = jsonpickle.loads(export.read_text(encoding="utf8")) + if str(title) not in keys: + keys[str(title)] = {} + if str(track) not in keys[str(title)]: + keys[str(title)][str(track)] = {} + keys[str(title)][str(track)].update(drm.content_keys) + export.write_text(jsonpickle.dumps(keys, indent=4), encoding="utf8") + + @staticmethod + def get_cookie_path(service: str, profile: Optional[str]) -> Optional[Path]: + """Get Service Cookie File Path for Profile.""" + direct_cookie_file = config.directories.cookies / f"{service}.txt" + profile_cookie_file = config.directories.cookies / service / f"{profile}.txt" + default_cookie_file = config.directories.cookies / service / "default.txt" + + if direct_cookie_file.exists(): + return direct_cookie_file + elif profile_cookie_file.exists(): + return profile_cookie_file + elif default_cookie_file.exists(): + return default_cookie_file + + @staticmethod + def get_cookie_jar(service: str, profile: Optional[str]) -> Optional[MozillaCookieJar]: + """Get Service Cookies for Profile.""" + cookie_file = dl.get_cookie_path(service, profile) + if cookie_file: + cookie_jar = MozillaCookieJar(cookie_file) + cookie_data = html.unescape(cookie_file.read_text("utf8")).splitlines(keepends=False) + for i, line in enumerate(cookie_data): + if line and not line.startswith("#"): + line_data = line.lstrip().split("\t") + # Disable client-side expiry checks completely across everywhere + # Even though the cookies are loaded under ignore_expires=True, stuff + # like python-requests may not use them if they are expired + line_data[4] = "" + cookie_data[i] = "\t".join(line_data) + cookie_data = "\n".join(cookie_data) + cookie_file.write_text(cookie_data, "utf8") + cookie_jar.load(ignore_discard=True, ignore_expires=True) + return cookie_jar + + @staticmethod + def save_cookies(path: Path, cookies: CookieJar): + cookie_jar = MozillaCookieJar(path) + cookie_jar.load() + for cookie in cookies: + cookie_jar.set_cookie(cookie) + cookie_jar.save(ignore_discard=True) + + @staticmethod + def get_credentials(service: str, profile: Optional[str]) -> Optional[Credential]: + """Get Service Credentials for Profile.""" + credentials = config.credentials.get(service) + if credentials: + if isinstance(credentials, dict): + if profile: + credentials = credentials.get(profile) or credentials.get("default") + else: + credentials = credentials.get("default") + if credentials: + if isinstance(credentials, list): + return Credential(*credentials) + return Credential.loads(credentials) # type: ignore + + @staticmethod + def get_cdm( + service: str, + profile: Optional[str] = None, + drm: Optional[str] = None, + ) -> Optional[object]: + """ + Get CDM for a specified service (either Local or Remote CDM). + Raises a ValueError if there's a problem getting a CDM. + """ + cdm_name = config.cdm.get(service) or config.cdm.get("default") + if not cdm_name: + return None + + if isinstance(cdm_name, dict): + lower_keys = {k.lower(): v for k, v in cdm_name.items()} + if {"widevine", "playready"} & lower_keys.keys(): + drm_key = None + if drm: + drm_key = { + "wv": "widevine", + "widevine": "widevine", + "pr": "playready", + "playready": "playready", + }.get(drm.lower()) + cdm_name = lower_keys.get(drm_key or "widevine") or lower_keys.get("playready") + else: + if not profile: + return None + cdm_name = cdm_name.get(profile) or config.cdm.get("default") + if not cdm_name: + return None + + cdm_api = next(iter(x for x in config.remote_cdm if x["name"] == cdm_name), None) + if cdm_api: + is_decrypt_lab = True if cdm_api["type"] == "decrypt_labs" else False + del cdm_api["name"] + del cdm_api["type"] + return DecryptLabsRemoteCDM(service_name=service, **cdm_api) if is_decrypt_lab else RemoteCdm(**cdm_api) + + prd_path = config.directories.prds / f"{cdm_name}.prd" + if not prd_path.is_file(): + prd_path = config.directories.wvds / f"{cdm_name}.prd" + if prd_path.is_file(): + device = PlayReadyDevice.load(prd_path) + return PlayReadyCdm.from_device(device) + + cdm_path = config.directories.wvds / f"{cdm_name}.wvd" + if not cdm_path.is_file(): + raise ValueError(f"{cdm_name} does not exist or is not a file") + + try: + device = Device.load(cdm_path) + except ConstError as e: + if "expected 2 but parsed 1" in str(e): + raise ValueError( + f"{cdm_name}.wvd seems to be a v1 WVD file, use `pywidevine migrate --help` to migrate it to v2." + ) + raise ValueError(f"{cdm_name}.wvd is an invalid or corrupt Widevine Device file, {e}") + + return WidevineCdm.from_device(device) + diff --git a/packages/envied/src/envied/commands/env.py b/packages/envied/src/envied/commands/env.py new file mode 100644 index 0000000..3301fb3 --- /dev/null +++ b/packages/envied/src/envied/commands/env.py @@ -0,0 +1,237 @@ +import logging +import os +import shutil +import sys +from pathlib import Path +from typing import Optional + +import click +from rich.padding import Padding +from rich.table import Table +from rich.tree import Tree + +from envied.core import binaries +from envied.core.config import POSSIBLE_CONFIG_PATHS, config, config_path +from envied.core.console import console +from envied.core.constants import context_settings +from envied.core.services import Services + + +@click.group(short_help="Manage and configure the project environment.", context_settings=context_settings) +def env() -> None: + """Manage and configure the project environment.""" + + +@env.command() +def check() -> None: + """Checks environment for the required dependencies.""" + # Define all dependencies + all_deps = [ + # Core Media Tools + {"name": "FFmpeg", "binary": binaries.FFMPEG, "required": True, "desc": "Media processing", "cat": "Core"}, + {"name": "FFprobe", "binary": binaries.FFProbe, "required": True, "desc": "Media analysis", "cat": "Core"}, + {"name": "MKVToolNix", "binary": binaries.MKVToolNix, "required": True, "desc": "MKV muxing", "cat": "Core"}, + { + "name": "mkvpropedit", + "binary": binaries.Mkvpropedit, + "required": True, + "desc": "MKV metadata", + "cat": "Core", + }, + { + "name": "shaka-packager", + "binary": binaries.ShakaPackager, + "required": True, + "desc": "DRM decryption", + "cat": "DRM", + }, + { + "name": "mp4decrypt", + "binary": binaries.Mp4decrypt, + "required": False, + "desc": "DRM decryption", + "cat": "DRM", + }, + # HDR Processing + {"name": "dovi_tool", "binary": binaries.DoviTool, "required": False, "desc": "Dolby Vision", "cat": "HDR"}, + { + "name": "HDR10Plus_tool", + "binary": binaries.HDR10PlusTool, + "required": False, + "desc": "HDR10+ metadata", + "cat": "HDR", + }, + # Downloaders + {"name": "aria2c", "binary": binaries.Aria2, "required": False, "desc": "Multi-thread DL", "cat": "Download"}, + { + "name": "N_m3u8DL-RE", + "binary": binaries.N_m3u8DL_RE, + "required": False, + "desc": "HLS/DASH/ISM", + "cat": "Download", + }, + # Subtitle Tools + { + "name": "SubtitleEdit", + "binary": binaries.SubtitleEdit, + "required": False, + "desc": "Sub conversion", + "cat": "Subtitle", + }, + { + "name": "CCExtractor", + "binary": binaries.CCExtractor, + "required": False, + "desc": "CC extraction", + "cat": "Subtitle", + }, + # Media Players + {"name": "FFplay", "binary": binaries.FFPlay, "required": False, "desc": "Simple player", "cat": "Player"}, + {"name": "MPV", "binary": binaries.MPV, "required": False, "desc": "Advanced player", "cat": "Player"}, + # Network Tools + { + "name": "HolaProxy", + "binary": binaries.HolaProxy, + "required": False, + "desc": "Proxy service", + "cat": "Network", + }, + {"name": "Caddy", "binary": binaries.Caddy, "required": False, "desc": "Web server", "cat": "Network"}, + ] + + # Track overall status + all_required_installed = True + total_installed = 0 + total_required = 0 + missing_required = [] + + # Create a single table + table = Table( + title="Environment Dependencies", title_style="bold", show_header=True, header_style="bold", expand=False + ) + table.add_column("Category", style="bold cyan", width=10) + table.add_column("Tool", width=16) + table.add_column("Status", justify="center", width=10) + table.add_column("Req", justify="center", width=4) + table.add_column("Purpose", style="bright_black", width=20) + + last_cat = None + for dep in all_deps: + path = dep["binary"] + + # Category column (only show when it changes) + category = dep["cat"] if dep["cat"] != last_cat else "" + last_cat = dep["cat"] + + # Status + if path: + status = "[green]✓[/green]" + total_installed += 1 + else: + status = "[red]✗[/red]" + if dep["required"]: + all_required_installed = False + missing_required.append(dep["name"]) + + if dep["required"]: + total_required += 1 + + # Required column (compact) + req = "[red]Y[/red]" if dep["required"] else "[bright_black]-[/bright_black]" + + # Add row + table.add_row(category, dep["name"], status, req, dep["desc"]) + + console.print(Padding(table, (1, 2))) + + # Compact summary + summary_parts = [f"[bold]Total:[/bold] {total_installed}/{len(all_deps)}"] + + if all_required_installed: + summary_parts.append("[green]All required tools installed ✓[/green]") + else: + summary_parts.append(f"[red]Missing required: {', '.join(missing_required)}[/red]") + + console.print(Padding(" ".join(summary_parts), (1, 2))) + + +@env.command() +def info() -> None: + """Displays information about the current environment.""" + log = logging.getLogger("env") + + if config_path: + log.info(f"Config loaded from {config_path}") + else: + tree = Tree("No config file found, you can use any of the following locations:") + for i, path in enumerate(POSSIBLE_CONFIG_PATHS, start=1): + tree.add(f"[repr.number]{i}.[/] [text2]{path.resolve()}[/]") + console.print(Padding(tree, (0, 5))) + + table = Table(title="Directories", title_style="bold", expand=True) + table.add_column("Name", no_wrap=True) + table.add_column("Path", no_wrap=False, overflow="fold") + + path_vars = { + x: Path(os.getenv(x)) + for x in ("TEMP", "APPDATA", "LOCALAPPDATA", "USERPROFILE") + if sys.platform == "win32" and os.getenv(x) + } + + for name in sorted(dir(config.directories)): + if name.startswith("__") or name == "app_dirs": + continue + attr_value = getattr(config.directories, name) + + # Handle both single Path objects and lists of Path objects + if isinstance(attr_value, list): + # For lists, show each path on a separate line + paths_str = "\n".join(str(path.resolve()) for path in attr_value) + table.add_row(name.title(), paths_str) + else: + # For single Path objects, use the original logic + path = attr_value.resolve() + for var, var_path in path_vars.items(): + if path.is_relative_to(var_path): + path = rf"%{var}%\{path.relative_to(var_path)}" + break + table.add_row(name.title(), str(path)) + + console.print(Padding(table, (1, 5))) + + +@env.group(name="clear", short_help="Clear an environment directory.", context_settings=context_settings) +def clear() -> None: + """Clear an environment directory.""" + + +@clear.command() +@click.argument("service", type=str, required=False) +def cache(service: Optional[str]) -> None: + """Clear the environment cache directory.""" + log = logging.getLogger("env") + cache_dir = config.directories.cache + if service: + cache_dir = cache_dir / Services.get_tag(service) + log.info(f"Clearing cache directory: {cache_dir}") + files_count = len(list(cache_dir.glob("**/*"))) + if not files_count: + log.info("No files to delete") + else: + log.info(f"Deleting {files_count} files...") + shutil.rmtree(cache_dir) + log.info("Cleared") + + +@clear.command() +def temp() -> None: + """Clear the environment temp directory.""" + log = logging.getLogger("env") + log.info(f"Clearing temp directory: {config.directories.temp}") + files_count = len(list(config.directories.temp.glob("**/*"))) + if not files_count: + log.info("No files to delete") + else: + log.info(f"Deleting {files_count} files...") + shutil.rmtree(config.directories.temp) + log.info("Cleared") diff --git a/packages/envied/src/envied/commands/kv.py b/packages/envied/src/envied/commands/kv.py new file mode 100644 index 0000000..05b4120 --- /dev/null +++ b/packages/envied/src/envied/commands/kv.py @@ -0,0 +1,201 @@ +import logging +import re +from pathlib import Path +from typing import Optional + +import click + +from envied.core.config import config +from envied.core.constants import context_settings +from envied.core.services import Services +from envied.core.vault import Vault +from envied.core.vaults import Vaults + + +@click.group(short_help="Manage and configure Key Vaults.", context_settings=context_settings) +def kv() -> None: + """Manage and configure Key Vaults.""" + + +@kv.command() +@click.argument("to_vault", type=str) +@click.argument("from_vaults", nargs=-1, type=click.UNPROCESSED) +@click.option("-s", "--service", type=str, default=None, help="Only copy data to and from a specific service.") +def copy(to_vault: str, from_vaults: list[str], service: Optional[str] = None) -> None: + """ + Copy data from multiple Key Vaults into a single Key Vault. + Rows with matching KIDs are skipped unless there's no KEY set. + Existing data is not deleted or altered. + + The `to_vault` argument is the key vault you wish to copy data to. + It should be the name of a Key Vault defined in the config. + + The `from_vaults` argument is the key vault(s) you wish to take + data from. You may supply multiple key vaults. + """ + if not from_vaults: + raise click.ClickException("No Vaults were specified to copy data from.") + + log = logging.getLogger("kv") + + vaults = Vaults() + for vault_name in [to_vault] + list(from_vaults): + vault = next((x for x in config.key_vaults if x["name"] == vault_name), None) + if not vault: + raise click.ClickException(f"Vault ({vault_name}) is not defined in the config.") + vault_type = vault["type"] + vault_args = vault.copy() + del vault_args["type"] + if not vaults.load(vault_type, **vault_args): + raise click.ClickException(f"Failed to load vault ({vault_name}).") + + to_vault: Vault = vaults.vaults[0] + from_vaults: list[Vault] = vaults.vaults[1:] + + log.info(f"Copying data from {', '.join([x.name for x in from_vaults])}, into {to_vault.name}") + if service: + service = Services.get_tag(service) + log.info(f"Only copying data for service {service}") + + total_added = 0 + for from_vault in from_vaults: + if service: + services = [service] + else: + services = from_vault.get_services() + + for service_ in services: + log.info(f"Getting data from {from_vault} for {service_}") + content_keys = list(from_vault.get_keys(service_)) # important as it's a generator we iterate twice + + bad_keys = {kid: key for kid, key in content_keys if not key or key.count("0") == len(key)} + + for kid, key in bad_keys.items(): + log.warning(f"Cannot add a NULL Content Key to a Vault, skipping: {kid}:{key}") + + content_keys = {kid: key for kid, key in content_keys if kid not in bad_keys} + + total_count = len(content_keys) + log.info(f"Adding {total_count} Content Keys to {to_vault} for {service_}") + + try: + added = to_vault.add_keys(service_, content_keys) + except PermissionError: + log.warning(f" - No permission to create table ({service_}) in {to_vault}, skipping...") + continue + + total_added += added + existed = total_count - added + + log.info(f"{to_vault} ({service_}): {added} newly added, {existed} already existed (skipped)") + + log.info(f"{to_vault}: {total_added} total newly added") + + +@kv.command() +@click.argument("vaults", nargs=-1, type=click.UNPROCESSED) +@click.option("-s", "--service", type=str, default=None, help="Only sync data to and from a specific service.") +@click.pass_context +def sync(ctx: click.Context, vaults: list[str], service: Optional[str] = None) -> None: + """ + Ensure multiple Key Vaults copies of all keys as each other. + It's essentially just a bi-way copy between each vault. + To see the precise details of what it's doing between each + provided vault, see the documentation for the `copy` command. + """ + if not len(vaults) > 1: + raise click.ClickException("You must provide more than one Vault to sync.") + + ctx.invoke(copy, to_vault=vaults[0], from_vaults=vaults[1:], service=service) + for i in range(1, len(vaults)): + ctx.invoke(copy, to_vault=vaults[i], from_vaults=[vaults[i - 1]], service=service) + + +@kv.command() +@click.argument("file", type=Path) +@click.argument("service", type=str) +@click.argument("vaults", nargs=-1, type=click.UNPROCESSED) +def add(file: Path, service: str, vaults: list[str]) -> None: + """ + Add new Content Keys to Key Vault(s) by service. + + File should contain one key per line in the format KID:KEY (HEX:HEX). + Each line should have nothing else within it except for the KID:KEY. + Encoding is presumed to be UTF8. + """ + if not file.exists(): + raise click.ClickException(f"File provided ({file}) does not exist.") + if not file.is_file(): + raise click.ClickException(f"File provided ({file}) is not a file.") + if not service or not isinstance(service, str): + raise click.ClickException(f"Service provided ({service}) is invalid.") + if len(vaults) < 1: + raise click.ClickException("You must provide at least one Vault.") + + log = logging.getLogger("kv") + service = Services.get_tag(service) + + vaults_ = Vaults() + for vault_name in vaults: + vault = next((x for x in config.key_vaults if x["name"] == vault_name), None) + if not vault: + raise click.ClickException(f"Vault ({vault_name}) is not defined in the config.") + vault_type = vault["type"] + vault_args = vault.copy() + del vault_args["type"] + vaults_.load(vault_type, **vault_args) + + data = file.read_text(encoding="utf8") + kid_keys: dict[str, str] = {} + for line in data.splitlines(keepends=False): + line = line.strip() + match = re.search(r"^(?P[0-9a-fA-F]{32}):(?P[0-9a-fA-F]{32})$", line) + if not match: + continue + kid = match.group("kid").lower() + key = match.group("key").lower() + kid_keys[kid] = key + + total_count = len(kid_keys) + + for vault in vaults_: + log.info(f"Adding {total_count} Content Keys to {vault}") + added_count = vault.add_keys(service, kid_keys) + existed_count = total_count - added_count + log.info(f"{vault}: {added_count} newly added, {existed_count} already existed (skipped)") + + log.info("Done!") + + +@kv.command() +@click.argument("vaults", nargs=-1, type=click.UNPROCESSED) +def prepare(vaults: list[str]) -> None: + """Create Service Tables on Vaults if not yet created.""" + log = logging.getLogger("kv") + + vaults_ = Vaults() + for vault_name in vaults: + vault = next((x for x in config.key_vaults if x["name"] == vault_name), None) + if not vault: + raise click.ClickException(f"Vault ({vault_name}) is not defined in the config.") + vault_type = vault["type"] + vault_args = vault.copy() + del vault_args["type"] + vaults_.load(vault_type, **vault_args) + + for vault in vaults_: + if hasattr(vault, "has_table") and hasattr(vault, "create_table"): + for service_tag in Services.get_tags(): + if vault.has_table(service_tag): + log.info(f"{vault} already has a {service_tag} Table") + else: + try: + vault.create_table(service_tag, commit=True) + log.info(f"{vault}: Created {service_tag} Table") + except PermissionError: + log.error(f"{vault} user has no create table permission, skipping...") + continue + else: + log.info(f"{vault} does not use tables, skipping...") + + log.info("Done!") diff --git a/packages/envied/src/envied/commands/prd.py b/packages/envied/src/envied/commands/prd.py new file mode 100644 index 0000000..8c1c053 --- /dev/null +++ b/packages/envied/src/envied/commands/prd.py @@ -0,0 +1,271 @@ +import logging +from pathlib import Path +from typing import Optional + +import click +import requests +from Crypto.Random import get_random_bytes +from pyplayready.cdm import Cdm +from pyplayready.crypto.ecc_key import ECCKey +from pyplayready.device import Device +from pyplayready.exceptions import InvalidCertificateChain, OutdatedDevice +from pyplayready.system.bcert import Certificate, CertificateChain +from pyplayready.system.pssh import PSSH + +from envied.core.config import config +from envied.core.constants import context_settings + + +@click.group( + short_help="Manage creation of PRD (Playready Device) files.", + context_settings=context_settings, +) +def prd() -> None: + """Manage creation of PRD (Playready Device) files.""" + + +@prd.command() +@click.argument("paths", type=Path, nargs=-1) +@click.option( + "-e", + "--encryption_key", + type=Path, + required=False, + help="Optional Device ECC private encryption key", +) +@click.option( + "-s", + "--signing_key", + type=Path, + required=False, + help="Optional Device ECC private signing key", +) +@click.option("-o", "--output", type=Path, default=None, help="Output Directory") +@click.pass_context +def new( + ctx: click.Context, + paths: tuple[Path, ...], + encryption_key: Optional[Path], + signing_key: Optional[Path], + output: Optional[Path], +) -> None: + """Create a new .PRD PlayReady Device file. + + Accepts either paths to a group key and certificate or a single directory + containing ``zgpriv.dat`` and ``bgroupcert.dat``. + """ + if len(paths) == 1 and paths[0].is_dir(): + device_dir = paths[0] + group_key = device_dir / "zgpriv.dat" + group_certificate = device_dir / "bgroupcert.dat" + if not group_key.is_file() or not group_certificate.is_file(): + raise click.UsageError("Folder must contain zgpriv.dat and bgroupcert.dat", ctx) + elif len(paths) == 2: + group_key, group_certificate = paths + if not group_key.is_file(): + raise click.UsageError("group_key: Not a path to a file, or it doesn't exist.", ctx) + if not group_certificate.is_file(): + raise click.UsageError("group_certificate: Not a path to a file, or it doesn't exist.", ctx) + device_dir = None + else: + raise click.UsageError( + "Provide either a folder path or paths to group_key and group_certificate", + ctx, + ) + if encryption_key and not encryption_key.is_file(): + raise click.UsageError("encryption_key: Not a path to a file, or it doesn't exist.", ctx) + if signing_key and not signing_key.is_file(): + raise click.UsageError("signing_key: Not a path to a file, or it doesn't exist.", ctx) + + log = logging.getLogger("prd") + + encryption_key_obj = ECCKey.load(encryption_key) if encryption_key else ECCKey.generate() + signing_key_obj = ECCKey.load(signing_key) if signing_key else ECCKey.generate() + + group_key_obj = ECCKey.load(group_key) + certificate_chain = CertificateChain.load(group_certificate) + + if certificate_chain.get(0).get_issuer_key() != group_key_obj.public_bytes(): + raise InvalidCertificateChain("Group key does not match this certificate") + + new_certificate = Certificate.new_leaf_cert( + cert_id=get_random_bytes(16), + security_level=certificate_chain.get_security_level(), + client_id=get_random_bytes(16), + signing_key=signing_key_obj, + encryption_key=encryption_key_obj, + group_key=group_key_obj, + parent=certificate_chain, + ) + certificate_chain.prepend(new_certificate) + certificate_chain.verify() + + device = Device( + group_key=group_key_obj.dumps(), + encryption_key=encryption_key_obj.dumps(), + signing_key=signing_key_obj.dumps(), + group_certificate=certificate_chain.dumps(), + ) + + if output and output.suffix: + if output.suffix.lower() != ".prd": + log.warning( + "Saving PRD with the file extension '%s' but '.prd' is recommended.", + output.suffix, + ) + out_path = output + else: + out_dir = output or (device_dir or config.directories.prds) + out_path = out_dir / f"{device.get_name()}.prd" + + if out_path.exists(): + log.error("A file already exists at the path '%s', cannot overwrite.", out_path) + return + + out_path.parent.mkdir(parents=True, exist_ok=True) + out_path.write_bytes(device.dumps()) + + log.info("Created Playready Device (.prd) file, %s", out_path.name) + log.info(" + Security Level: %s", device.security_level) + log.info(" + Group Key: %s bytes", len(device.group_key.dumps())) + log.info(" + Encryption Key: %s bytes", len(device.encryption_key.dumps())) + log.info(" + Signing Key: %s bytes", len(device.signing_key.dumps())) + log.info(" + Group Certificate: %s bytes", len(device.group_certificate.dumps())) + log.info(" + Saved to: %s", out_path.absolute()) + + +@prd.command(name="reprovision") +@click.argument("prd_path", type=Path) +@click.option( + "-e", + "--encryption_key", + type=Path, + required=False, + help="Optional Device ECC private encryption key", +) +@click.option( + "-s", + "--signing_key", + type=Path, + required=False, + help="Optional Device ECC private signing key", +) +@click.option("-o", "--output", type=Path, default=None, help="Output Path or Directory") +@click.pass_context +def reprovision_device( + ctx: click.Context, + prd_path: Path, + encryption_key: Optional[Path], + signing_key: Optional[Path], + output: Optional[Path] = None, +) -> None: + """Reprovision a Playready Device (.prd) file.""" + if not prd_path.is_file(): + raise click.UsageError("prd_path: Not a path to a file, or it doesn't exist.", ctx) + + log = logging.getLogger("prd") + log.info("Reprovisioning Playready Device (.prd) file, %s", prd_path.name) + + device = Device.load(prd_path) + + if device.group_key is None: + raise OutdatedDevice( + "Device does not support reprovisioning, re-create it or use a Device with a version of 3 or higher" + ) + + device.group_certificate.remove(0) + + encryption_key_obj = ECCKey.load(encryption_key) if encryption_key else ECCKey.generate() + signing_key_obj = ECCKey.load(signing_key) if signing_key else ECCKey.generate() + + device.encryption_key = encryption_key_obj + device.signing_key = signing_key_obj + + new_certificate = Certificate.new_leaf_cert( + cert_id=get_random_bytes(16), + security_level=device.group_certificate.get_security_level(), + client_id=get_random_bytes(16), + signing_key=signing_key_obj, + encryption_key=encryption_key_obj, + group_key=device.group_key, + parent=device.group_certificate, + ) + device.group_certificate.prepend(new_certificate) + + if output and output.suffix: + if output.suffix.lower() != ".prd": + log.warning( + "Saving PRD with the file extension '%s' but '.prd' is recommended.", + output.suffix, + ) + out_path = output + else: + out_path = prd_path + + out_path.parent.mkdir(parents=True, exist_ok=True) + out_path.write_bytes(device.dumps()) + + log.info("Reprovisioned Playready Device (.prd) file, %s", out_path.name) + + +@prd.command() +@click.argument("device", type=Path) +@click.option( + "-c", + "--ckt", + type=click.Choice(["aesctr", "aescbc"], case_sensitive=False), + default="aesctr", + help="Content Key Encryption Type", +) +@click.option( + "-sl", + "--security-level", + type=click.Choice(["150", "2000", "3000"], case_sensitive=False), + default="2000", + help="Minimum Security Level", +) +@click.pass_context +def test( + ctx: click.Context, + device: Path, + ckt: str, + security_level: str, +) -> None: + """Test a Playready Device on the Microsoft demo server.""" + + if not device.is_file(): + raise click.UsageError("device: Not a path to a file, or it doesn't exist.", ctx) + + log = logging.getLogger("prd") + + prd_device = Device.load(device) + log.info("Loaded Device: %s", prd_device.get_name()) + + cdm = Cdm.from_device(prd_device) + log.info("Loaded CDM") + + session_id = cdm.open() + log.info("Opened Session") + + pssh_b64 = "AAADfHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA1xcAwAAAQABAFIDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA0AFIAcABsAGIAKwBUAGIATgBFAFMAOAB0AEcAawBOAEYAVwBUAEUASABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AEsATABqADMAUQB6AFEAUAAvAE4AQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAHAAcgBvAGYAZgBpAGMAaQBhAGwAcwBpAHQAZQAuAGsAZQB5AGQAZQBsAGkAdgBlAHIAeQAuAG0AZQBkAGkAYQBzAGUAcgB2AGkAYwBlAHMALgB3AGkAbgBkAG8AdwBzAC4AbgBlAHQALwBQAGwAYQB5AFIAZQBhAGQAeQAvADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA4AC4AMQAuADIAMwAwADQALgAzADEAPAAvAEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==" + pssh = PSSH(pssh_b64) + + challenge = cdm.get_license_challenge(session_id, pssh.wrm_headers[0]) + log.info("Created License Request") + + license_server = f"https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:{security_level},ckt:{ckt})" + + response = requests.post( + url=license_server, + headers={"Content-Type": "text/xml; charset=UTF-8"}, + data=challenge, + ) + + cdm.parse_license(session_id, response.text) + log.info("License Parsed Successfully") + + for key in cdm.get_keys(session_id): + log.info(f"{key.key_id.hex}:{key.key.hex()}") + + cdm.close(session_id) + log.info("Closed Session") diff --git a/packages/envied/src/envied/commands/search.py b/packages/envied/src/envied/commands/search.py new file mode 100644 index 0000000..8cfbec2 --- /dev/null +++ b/packages/envied/src/envied/commands/search.py @@ -0,0 +1,151 @@ +from __future__ import annotations + +import logging +import re +import sys +from typing import Any, Optional + +import click +import yaml +from rich.padding import Padding +from rich.rule import Rule +from rich.tree import Tree + +from envied.commands.dl import dl +from envied.core import binaries +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import context_settings +from envied.core.proxies import Basic, Hola, NordVPN, SurfsharkVPN +from envied.core.service import Service +from envied.core.services import Services +from envied.core.utils.click_types import ContextData +from envied.core.utils.collections import merge_dict + + +@click.command( + short_help="Search for titles from a Service.", + cls=Services, + context_settings=dict(**context_settings, token_normalize_func=Services.get_tag), +) +@click.option( + "-p", "--profile", type=str, default=None, help="Profile to use for Credentials and Cookies (if available)." +) +@click.option( + "--proxy", + type=str, + default=None, + help="Proxy URI to use. If a 2-letter country is provided, it will try get a proxy from the config.", +) +@click.option("--no-proxy", is_flag=True, default=False, help="Force disable all proxy use.") +@click.pass_context +def search(ctx: click.Context, no_proxy: bool, profile: Optional[str] = None, proxy: Optional[str] = None): + if not ctx.invoked_subcommand: + raise ValueError("A subcommand to invoke was not specified, the main code cannot continue.") + + log = logging.getLogger("search") + + service = Services.get_tag(ctx.invoked_subcommand) + profile = profile + + if profile: + log.info(f"Using profile: '{profile}'") + + with console.status("Loading Service Config...", spinner="dots"): + service_config_path = Services.get_path(service) / config.filenames.config + if service_config_path.exists(): + service_config = yaml.safe_load(service_config_path.read_text(encoding="utf8")) + log.info("Service Config loaded") + else: + service_config = {} + merge_dict(config.services.get(service), service_config) + + proxy_providers = [] + if no_proxy: + ctx.params["proxy"] = None + else: + with console.status("Loading Proxy Providers...", spinner="dots"): + if config.proxy_providers.get("basic"): + proxy_providers.append(Basic(**config.proxy_providers["basic"])) + if config.proxy_providers.get("nordvpn"): + proxy_providers.append(NordVPN(**config.proxy_providers["nordvpn"])) + if config.proxy_providers.get("surfsharkvpn"): + proxy_providers.append(SurfsharkVPN(**config.proxy_providers["surfsharkvpn"])) + if binaries.HolaProxy: + proxy_providers.append(Hola()) + for proxy_provider in proxy_providers: + log.info(f"Loaded {proxy_provider.__class__.__name__}: {proxy_provider}") + + if proxy: + requested_provider = None + if re.match(r"^[a-z]+:.+$", proxy, re.IGNORECASE): + # requesting proxy from a specific proxy provider + requested_provider, proxy = proxy.split(":", maxsplit=1) + if re.match(r"^[a-z]{2}(?:\d+)?$", proxy, re.IGNORECASE): + proxy = proxy.lower() + with console.status(f"Getting a Proxy to {proxy}...", spinner="dots"): + if requested_provider: + proxy_provider = next( + (x for x in proxy_providers if x.__class__.__name__.lower() == requested_provider), None + ) + if not proxy_provider: + log.error(f"The proxy provider '{requested_provider}' was not recognised.") + sys.exit(1) + proxy_uri = proxy_provider.get_proxy(proxy) + if not proxy_uri: + log.error(f"The proxy provider {requested_provider} had no proxy for {proxy}") + sys.exit(1) + proxy = ctx.params["proxy"] = proxy_uri + log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + else: + for proxy_provider in proxy_providers: + proxy_uri = proxy_provider.get_proxy(proxy) + if proxy_uri: + proxy = ctx.params["proxy"] = proxy_uri + log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + break + else: + log.info(f"Using explicit Proxy: {proxy}") + + ctx.obj = ContextData(config=service_config, cdm=None, proxy_providers=proxy_providers, profile=profile) + + +@search.result_callback() +def result(service: Service, profile: Optional[str] = None, **_: Any) -> None: + log = logging.getLogger("search") + + service_tag = service.__class__.__name__ + + with console.status("Authenticating with Service...", spinner="dots"): + cookies = dl.get_cookie_jar(service_tag, profile) + credential = dl.get_credentials(service_tag, profile) + service.authenticate(cookies, credential) + if cookies or credential: + log.info("Authenticated with Service") + + search_results = Tree("Search Results", hide_root=True) + with console.status("Searching...", spinner="dots"): + for result in service.search(): + result_text = f"[bold text]{result.title}[/]" + if result.url: + result_text = f"[link={result.url}]{result_text}[/link]" + if result.label: + result_text += f" [pink]{result.label}[/]" + if result.description: + result_text += f"\n[text2]{result.description}[/]" + result_text += f"\n[bright_black]id: {result.id}[/]" + search_results.add(result_text + "\n") + + # update cookies + cookie_file = dl.get_cookie_path(service_tag, profile) + if cookie_file: + dl.save_cookies(cookie_file, service.session.cookies) + + console.print(Padding(Rule(f"[rule.text]{len(search_results.children)} Search Results"), (1, 2))) + + if search_results.children: + console.print(Padding(search_results, (0, 5))) + else: + console.print( + Padding("[bold text]No matches[/]\n[bright_black]Please check spelling and search again....[/]", (0, 5)) + ) diff --git a/packages/envied/src/envied/commands/serve.py b/packages/envied/src/envied/commands/serve.py new file mode 100644 index 0000000..85ae9d2 --- /dev/null +++ b/packages/envied/src/envied/commands/serve.py @@ -0,0 +1,45 @@ +import subprocess + +import click + +from envied.core import binaries +from envied.core.config import config +from envied.core.constants import context_settings + + +@click.command(short_help="Serve your Local Widevine Devices for Remote Access.", context_settings=context_settings) +@click.option("-h", "--host", type=str, default="0.0.0.0", help="Host to serve from.") +@click.option("-p", "--port", type=int, default=8786, help="Port to serve from.") +@click.option("--caddy", is_flag=True, default=False, help="Also serve with Caddy.") +def serve(host: str, port: int, caddy: bool) -> None: + """ + Serve your Local Widevine Devices for Remote Access. + + \b + Host as 127.0.0.1 may block remote access even if port-forwarded. + Instead, use 0.0.0.0 and ensure the TCP port you choose is forwarded. + + \b + You may serve with Caddy at the same time with --caddy. You can use Caddy + as a reverse-proxy to serve with HTTPS. The config used will be the Caddyfile + next to the envied config. + """ + from pywidevine import serve + + if caddy: + if not binaries.Caddy: + raise click.ClickException('Caddy executable "caddy" not found but is required for --caddy.') + caddy_p = subprocess.Popen( + [binaries.Caddy, "run", "--config", str(config.directories.user_configs / "Caddyfile")] + ) + else: + caddy_p = None + + try: + if not config.serve.get("devices"): + config.serve["devices"] = [] + config.serve["devices"].extend(list(config.directories.wvds.glob("*.wvd"))) + serve.run(config.serve, host, port) + finally: + if caddy_p: + caddy_p.kill() diff --git a/packages/envied/src/envied/commands/util.py b/packages/envied/src/envied/commands/util.py new file mode 100644 index 0000000..5fa1071 --- /dev/null +++ b/packages/envied/src/envied/commands/util.py @@ -0,0 +1,267 @@ +import subprocess +from pathlib import Path + +import click +from pymediainfo import MediaInfo + +from envied.core import binaries +from envied.core.constants import context_settings + + +@click.group(short_help="Various helper scripts and programs.", context_settings=context_settings) +def util() -> None: + """Various helper scripts and programs.""" + + +@util.command() +@click.argument("path", type=Path) +@click.argument("aspect", type=str) +@click.option( + "--letter/--pillar", + default=True, + help="Specify which direction to crop. Top and Bottom would be --letter, Sides would be --pillar.", +) +@click.option("-o", "--offset", type=int, default=0, help="Fine tune the computed crop area if not perfectly centered.") +@click.option( + "-p", + "--preview", + is_flag=True, + default=False, + help="Instantly preview the newly-set aspect crop in MPV (or ffplay if mpv is unavailable).", +) +def crop(path: Path, aspect: str, letter: bool, offset: int, preview: bool) -> None: + """ + Losslessly crop H.264 and H.265 video files at the bit-stream level. + You may provide a path to a file, or a folder of mkv and/or mp4 files. + + Note: If you notice that the values you put in are not quite working, try + tune -o/--offset. This may be necessary on videos with sub-sampled chroma. + + Do note that you may not get an ideal lossless cropping result on some + cases, again due to sub-sampled chroma. + + It's recommended that you try -o about 10 or so pixels and lower it until + you get as close in as possible. Do make sure it's not over-cropping either + as it may go from being 2px away from a perfect crop, to 20px over-cropping + again due to sub-sampled chroma. + """ + if not binaries.FFMPEG: + raise click.ClickException('FFmpeg executable "ffmpeg" not found but is required.') + + if path.is_dir(): + paths = list(path.glob("*.mkv")) + list(path.glob("*.mp4")) + else: + paths = [path] + for video_path in paths: + try: + video_track = next(iter(MediaInfo.parse(video_path).video_tracks or [])) + except StopIteration: + raise click.ClickException("There's no video tracks in the provided file.") + + crop_filter = {"HEVC": "hevc_metadata", "AVC": "h264_metadata"}.get(video_track.commercial_name) + if not crop_filter: + raise click.ClickException(f"{video_track.commercial_name} Codec not supported.") + + aspect_w, aspect_h = list(map(float, aspect.split(":"))) + if letter: + crop_value = (video_track.height - (video_track.width / (aspect_w * aspect_h))) / 2 + left, top, right, bottom = map(int, [0, crop_value + offset, 0, crop_value - offset]) + else: + crop_value = (video_track.width - (video_track.height * (aspect_w / aspect_h))) / 2 + left, top, right, bottom = map(int, [crop_value + offset, 0, crop_value - offset, 0]) + crop_filter += f"=crop_left={left}:crop_top={top}:crop_right={right}:crop_bottom={bottom}" + + if min(left, top, right, bottom) < 0: + raise click.ClickException("Cannot crop less than 0, are you cropping in the right direction?") + + if preview: + out_path = ["-f", "mpegts", "-"] # pipe + else: + out_path = [ + str( + video_path.with_name( + ".".join( + filter( + bool, + [ + video_path.stem, + video_track.language, + "crop", + str(offset or ""), + { + # ffmpeg's MKV muxer does not yet support HDR + "HEVC": "h265", + "AVC": "h264", + }.get(video_track.commercial_name, ".mp4"), + ], + ) + ) + ) + ) + ] + + ffmpeg_call = subprocess.Popen( + [binaries.FFMPEG, "-y", "-i", str(video_path), "-map", "0:v:0", "-c", "copy", "-bsf:v", crop_filter] + + out_path, + stdout=subprocess.PIPE, + ) + try: + if preview: + previewer = binaries.MPV or binaries.FFPlay + if not previewer: + raise click.ClickException("MPV/FFplay executables weren't found but are required for previewing.") + subprocess.Popen((previewer, "-"), stdin=ffmpeg_call.stdout) + finally: + if ffmpeg_call.stdout: + ffmpeg_call.stdout.close() + ffmpeg_call.wait() + + +@util.command(name="range") +@click.argument("path", type=Path) +@click.option("--full/--limited", is_flag=True, help="Full: 0..255, Limited: 16..235 (16..240 YUV luma)") +@click.option( + "-p", + "--preview", + is_flag=True, + default=False, + help="Instantly preview the newly-set video range in MPV (or ffplay if mpv is unavailable).", +) +def range_(path: Path, full: bool, preview: bool) -> None: + """ + Losslessly set the Video Range flag to full or limited at the bit-stream level. + You may provide a path to a file, or a folder of mkv and/or mp4 files. + + If you ever notice blacks not being quite black, and whites not being quite white, + then you're video may have the range set to the wrong value. Flip its range to the + opposite value and see if that fixes it. + """ + if not binaries.FFMPEG: + raise click.ClickException('FFmpeg executable "ffmpeg" not found but is required.') + + if path.is_dir(): + paths = list(path.glob("*.mkv")) + list(path.glob("*.mp4")) + else: + paths = [path] + for video_path in paths: + try: + video_track = next(iter(MediaInfo.parse(video_path).video_tracks or [])) + except StopIteration: + raise click.ClickException("There's no video tracks in the provided file.") + + metadata_key = {"HEVC": "hevc_metadata", "AVC": "h264_metadata"}.get(video_track.commercial_name) + if not metadata_key: + raise click.ClickException(f"{video_track.commercial_name} Codec not supported.") + + if preview: + out_path = ["-f", "mpegts", "-"] # pipe + else: + out_path = [ + str( + video_path.with_name( + ".".join( + filter( + bool, + [ + video_path.stem, + video_track.language, + "range", + ["limited", "full"][full], + { + # ffmpeg's MKV muxer does not yet support HDR + "HEVC": "h265", + "AVC": "h264", + }.get(video_track.commercial_name, ".mp4"), + ], + ) + ) + ) + ) + ] + + ffmpeg_call = subprocess.Popen( + [ + binaries.FFMPEG, + "-y", + "-i", + str(video_path), + "-map", + "0:v:0", + "-c", + "copy", + "-bsf:v", + f"{metadata_key}=video_full_range_flag={int(full)}", + ] + + out_path, + stdout=subprocess.PIPE, + ) + try: + if preview: + previewer = binaries.MPV or binaries.FFPlay + if not previewer: + raise click.ClickException("MPV/FFplay executables weren't found but are required for previewing.") + subprocess.Popen((previewer, "-"), stdin=ffmpeg_call.stdout) + finally: + if ffmpeg_call.stdout: + ffmpeg_call.stdout.close() + ffmpeg_call.wait() + + +@util.command() +@click.argument("path", type=Path) +@click.option( + "-m", "--map", "map_", type=str, default="0", help="Test specific streams by setting FFmpeg's -map parameter." +) +def test(path: Path, map_: str) -> None: + """ + Decode an entire video and check for any corruptions or errors using FFmpeg. + You may provide a path to a file, or a folder of mkv and/or mp4 files. + + Tests all streams within the file by default. Subtitles cannot be tested. + You may choose specific streams using the -m/--map parameter. E.g., + '0:v:0' to test the first video stream, or '0:a' to test all audio streams. + """ + if not binaries.FFMPEG: + raise click.ClickException('FFmpeg executable "ffmpeg" not found but is required.') + + if path.is_dir(): + paths = list(path.glob("*.mkv")) + list(path.glob("*.mp4")) + else: + paths = [path] + for video_path in paths: + print("Starting...") + p = subprocess.Popen( + [ + binaries.FFMPEG, + "-hide_banner", + "-benchmark", + "-i", + str(video_path), + "-map", + map_, + "-sn", + "-f", + "null", + "-", + ], + stderr=subprocess.PIPE, + universal_newlines=True, + ) + reached_output = False + errors = 0 + for line in p.stderr: + line = line.strip() + if "speed=" in line: + reached_output = True + if not reached_output: + continue + if line.startswith("["): # error of some kind + errors += 1 + stream, error = line.split("] ", maxsplit=1) + stream = stream.split(" @ ")[0] + line = f"{stream} ERROR: {error}" + print(line) + p.stderr.close() + print(f"Finished with {errors} Errors, Cleaning up...") + p.terminate() + p.wait() diff --git a/packages/envied/src/envied/commands/wvd.py b/packages/envied/src/envied/commands/wvd.py new file mode 100644 index 0000000..0dac520 --- /dev/null +++ b/packages/envied/src/envied/commands/wvd.py @@ -0,0 +1,272 @@ +import logging +import shutil +from pathlib import Path +from typing import Optional + +import click +import yaml +from google.protobuf.json_format import MessageToDict +from pywidevine.device import Device, DeviceTypes +from pywidevine.license_protocol_pb2 import FileHashes +from rich.prompt import Prompt +from unidecode import UnidecodeError, unidecode + +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import context_settings + + +@click.group( + short_help="Manage configuration and creation of WVD (Widevine Device) files.", context_settings=context_settings +) +def wvd() -> None: + """Manage configuration and creation of WVD (Widevine Device) files.""" + + +@wvd.command() +@click.argument("paths", type=Path, nargs=-1) +def add(paths: list[Path]) -> None: + """Add one or more WVD (Widevine Device) files to the WVDs Directory.""" + log = logging.getLogger("wvd") + for path in paths: + dst_path = config.directories.wvds / path.name + + if not path.exists(): + log.error(f"The WVD path '{path}' does not exist...") + elif dst_path.exists(): + log.error(f"WVD named '{path.stem}' already exists...") + else: + # TODO: Check for and log errors + _ = Device.load(path) # test if WVD is valid + dst_path.parent.mkdir(parents=True, exist_ok=True) + shutil.move(path, dst_path) + log.info(f"Added {path.stem}") + + +@wvd.command() +@click.argument("names", type=str, nargs=-1) +def delete(names: list[str]) -> None: + """Delete one or more WVD (Widevine Device) files from the WVDs Directory.""" + log = logging.getLogger("wvd") + for name in names: + path = (config.directories.wvds / name).with_suffix(".wvd") + if not path.exists(): + log.error(f"No WVD file exists by the name '{name}'...") + continue + + answer = Prompt.ask( + f"[red]Deleting '{name}'[/], are you sure you want to continue?", + choices=["y", "n"], + default="n", + console=console, + ) + if answer == "n": + log.info("Aborting...") + continue + + Path.unlink(path) + log.info(f"Deleted {name}") + + +@wvd.command() +@click.argument("path", type=Path) +def parse(path: Path) -> None: + """ + Parse a .WVD Widevine Device file to check information. + Relative paths are relative to the WVDs directory. + """ + try: + named = not path.suffix and path.relative_to(Path("")) + except ValueError: + named = False + if named: + path = config.directories.wvds / f"{path.name}.wvd" + + log = logging.getLogger("wvd") + + if not path.exists(): + console.log(f"[bright_blue]{path.absolute()}[/] does not exist...") + return + + device = Device.load(path) + + log.info(f"System ID: {device.system_id}") + log.info(f"Security Level: {device.security_level}") + log.info(f"Type: {device.type}") + log.info(f"Flags: {device.flags}") + log.info(f"Private Key: {bool(device.private_key)}") + log.info(f"Client ID: {bool(device.client_id)}") + log.info(f"VMP: {bool(device.client_id.vmp_data)}") + + log.info("Client ID:") + log.info(device.client_id) + + log.info("VMP:") + if device.client_id.vmp_data: + file_hashes = FileHashes() + file_hashes.ParseFromString(device.client_id.vmp_data) + log.info(str(file_hashes)) + else: + log.info("None") + + +@wvd.command() +@click.argument("wvd_paths", type=Path, nargs=-1) +@click.argument("out_dir", type=Path, nargs=1) +def dump(wvd_paths: list[Path], out_dir: Path) -> None: + """ + Extract data from a .WVD Widevine Device file to a folder structure. + + If the path is relative, with no file extension, it will dump the WVD in the WVDs + directory. + """ + log = logging.getLogger("wvd") + + if wvd_paths == (): + if not config.directories.wvds.exists(): + console.log(f"[bright_blue]{config.directories.wvds.absolute()}[/] does not exist...") + wvd_paths = list(x for x in config.directories.wvds.iterdir() if x.is_file() and x.suffix.lower() == ".wvd") + if not wvd_paths: + console.log(f"[bright_blue]{config.directories.wvds.absolute()}[/] is empty...") + + for i, (wvd_path, out_path) in enumerate(zip(wvd_paths, (out_dir / x.stem for x in wvd_paths))): + if i > 0: + log.info("") + + try: + named = not wvd_path.suffix and wvd_path.relative_to(Path("")) + except ValueError: + named = False + if named: + wvd_path = config.directories.wvds / f"{wvd_path.stem}.wvd" + out_path.mkdir(parents=True, exist_ok=True) + + log.info(f"Dumping: {wvd_path}") + device = Device.load(wvd_path) + + log.info(f"L{device.security_level} {device.system_id} {device.type.name}") + log.info(f"Saving to: {out_path}") + + device_meta = { + "wvd": {"device_type": device.type.name, "security_level": device.security_level, **device.flags}, + "client_info": {}, + "capabilities": MessageToDict(device.client_id, preserving_proto_field_name=True)["client_capabilities"], + } + for client_info in device.client_id.client_info: + device_meta["client_info"][client_info.name] = client_info.value + + device_meta_path = out_path / "metadata.yml" + device_meta_path.write_text(yaml.dump(device_meta), encoding="utf8") + log.info(" + Device Metadata") + + if device.private_key: + private_key_path = out_path / "private_key.pem" + private_key_path.write_text(data=device.private_key.export_key().decode(), encoding="utf8") + private_key_path.with_suffix(".der").write_bytes(device.private_key.export_key(format="DER")) + log.info(" + Private Key") + else: + log.warning(" - No Private Key available") + + if device.client_id: + client_id_path = out_path / "client_id.bin" + client_id_path.write_bytes(device.client_id.SerializeToString()) + log.info(" + Client ID") + else: + log.warning(" - No Client ID available") + + if device.client_id.vmp_data: + vmp_path = out_path / "vmp.bin" + vmp_path.write_bytes(device.client_id.vmp_data) + log.info(" + VMP (File Hashes)") + else: + log.info(" - No VMP (File Hashes) available") + + +@wvd.command() +@click.argument("name", type=str) +@click.argument("private_key", type=Path) +@click.argument("client_id", type=Path) +@click.argument("file_hashes", type=Path, required=False) +@click.option( + "-t", + "--type", + "type_", + type=click.Choice([x.name for x in DeviceTypes], case_sensitive=False), + default="Android", + help="Device Type", +) +@click.option("-l", "--level", type=click.IntRange(1, 3), default=1, help="Device Security Level") +@click.option("-o", "--output", type=Path, default=None, help="Output Directory") +@click.pass_context +def new( + ctx: click.Context, + name: str, + private_key: Path, + client_id: Path, + file_hashes: Optional[Path], + type_: str, + level: int, + output: Optional[Path], +) -> None: + """ + Create a new .WVD Widevine provision file. + + name: The origin device name of the provided data. e.g. `Nexus 6P`. You do not need to + specify the security level, that will be done automatically. + private_key: A PEM file of a Device's private key. + client_id: A binary blob file which follows the Widevine ClientIdentification protobuf + schema. + file_hashes: A binary blob file with follows the Widevine FileHashes protobuf schema. + Also known as VMP as it's used for VMP (Verified Media Path) assurance. + """ + try: + # TODO: Remove need for name, create name based on Client IDs ClientInfo values + name = unidecode(name.strip().lower().replace(" ", "_")) + except UnidecodeError as e: + raise click.UsageError(f"name: Failed to sanitize name, {e}", ctx) + if not name: + raise click.UsageError("name: Empty after sanitizing, please make sure the name is valid.", ctx) + if not private_key.is_file(): + raise click.UsageError("private_key: Not a path to a file, or it doesn't exist.", ctx) + if not client_id.is_file(): + raise click.UsageError("client_id: Not a path to a file, or it doesn't exist.", ctx) + if file_hashes and not file_hashes.is_file(): + raise click.UsageError("file_hashes: Not a path to a file, or it doesn't exist.", ctx) + + device = Device( + type_=DeviceTypes[type_.upper()], + security_level=level, + flags=None, + private_key=private_key.read_bytes(), + client_id=client_id.read_bytes(), + ) + + if file_hashes: + device.client_id.vmp_data = file_hashes.read_bytes() + + out_path = (output or config.directories.wvds) / f"{name}_{device.system_id}_l{device.security_level}.wvd" + device.dump(out_path) + + log = logging.getLogger("wvd") + + log.info(f"Created binary WVD file, {out_path.name}") + log.info(f" + Saved to: {out_path.absolute()}") + + log.info(f"System ID: {device.system_id}") + log.info(f"Security Level: {device.security_level}") + log.info(f"Type: {device.type}") + log.info(f"Flags: {device.flags}") + log.info(f"Private Key: {bool(device.private_key)}") + log.info(f"Client ID: {bool(device.client_id)}") + log.info(f"VMP: {bool(device.client_id.vmp_data)}") + + log.info("Client ID:") + log.info(device.client_id) + + log.info("VMP:") + if device.client_id.vmp_data: + file_hashes = FileHashes() + file_hashes.ParseFromString(device.client_id.vmp_data) + log.info(str(file_hashes)) + else: + log.info("None") diff --git a/packages/envied/src/envied/core/__init__.py b/packages/envied/src/envied/core/__init__.py new file mode 100644 index 0000000..daa50c7 --- /dev/null +++ b/packages/envied/src/envied/core/__init__.py @@ -0,0 +1 @@ +__version__ = "1.4.2" diff --git a/packages/envied/src/envied/core/__main__.py b/packages/envied/src/envied/core/__main__.py new file mode 100644 index 0000000..2c0b49b --- /dev/null +++ b/packages/envied/src/envied/core/__main__.py @@ -0,0 +1,88 @@ +import atexit +import logging +from pathlib import Path + +import click +import urllib3 +from rich import traceback +from rich.console import Group +from rich.padding import Padding +from rich.text import Text +from urllib3.exceptions import InsecureRequestWarning + +from . import __version__ +from .commands import Commands +from .config import config +from .console import ComfyRichHandler, console +from .constants import context_settings +from .update_checker import UpdateChecker +from .utilities import rotate_log_file + +LOGGING_PATH = None + + +@click.command(cls=Commands, invoke_without_command=True, context_settings=context_settings) +@click.option("-v", "--version", is_flag=True, default=False, help="Print version information.") +@click.option("-d", "--debug", is_flag=True, default=False, help="Enable DEBUG level logs.") +@click.option( + "--log", + "log_path", + type=Path, + default=config.directories.logs / config.filenames.log, + help="Log path (or filename). Path can contain the following f-string args: {name} {time}.", +) +def main(version: bool, debug: bool, log_path: Path) -> None: + """envied—Modular Movie, TV, and Music Archival Software.""" + logging.basicConfig( + level=logging.DEBUG if debug else logging.INFO, + format="%(message)s", + handlers=[ + ComfyRichHandler( + show_time=False, + show_path=debug, + console=console, + rich_tracebacks=True, + tracebacks_suppress=[click], + log_renderer=console._log_render, # noqa + ) + ], + ) + + if log_path: + global LOGGING_PATH + console.record = True + new_log_path = rotate_log_file(log_path) + LOGGING_PATH = new_log_path + + urllib3.disable_warnings(InsecureRequestWarning) + + traceback.install(console=console, width=80, suppress=[click]) + + console.print( + Padding( + Group( + Text( + r"░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄" + "\n" + r"░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█" + "\n" + r"░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░" + "\n" , + style="ascii.art", + ), + "v 3.3.3 Copyright © 2019-2025 rlaphoenix" + + f"\nv [repr.number]{__version__}[/] - unshackle", + ), + (1, 11, 1, 10), + expand=True, + ), + justify="center", +) + + +@atexit.register +def save_log(): + if console.record and LOGGING_PATH: + # TODO: Currently semi-bust. Everything that refreshes gets duplicated. + console.save_text(LOGGING_PATH) + + +if __name__ == "__main__": + main() diff --git a/packages/envied/src/envied/core/binaries.py b/packages/envied/src/envied/core/binaries.py new file mode 100644 index 0000000..da31fb5 --- /dev/null +++ b/packages/envied/src/envied/core/binaries.py @@ -0,0 +1,77 @@ +import shutil +import sys +from pathlib import Path +from typing import Optional + +__shaka_platform = {"win32": "win", "darwin": "osx"}.get(sys.platform, sys.platform) + + +def find(*names: str) -> Optional[Path]: + """Find the path of the first found binary name.""" + # Get the directory containing this file to find the local binaries folder + current_dir = Path(__file__).parent.parent + local_binaries_dir = current_dir / "binaries" + + for name in names: + # First check local binaries folder + if local_binaries_dir.exists(): + local_path = local_binaries_dir / name + if local_path.is_file() and local_path.stat().st_mode & 0o111: # Check if executable + return local_path + + # Also check with .exe extension on Windows + if sys.platform == "win32": + local_path_exe = local_binaries_dir / f"{name}.exe" + if local_path_exe.is_file(): + return local_path_exe + + # Fall back to system PATH + path = shutil.which(name) + if path: + return Path(path) + return None + + +FFMPEG = find("ffmpeg") +FFProbe = find("ffprobe") +FFPlay = find("ffplay") +SubtitleEdit = find("SubtitleEdit") +ShakaPackager = find( + "shaka-packager", + "packager", + f"packager-{__shaka_platform}", + f"packager-{__shaka_platform}-arm64", + f"packager-{__shaka_platform}-x64", +) +Aria2 = find("aria2c", "aria2") +CCExtractor = find("ccextractor", "ccextractorwin", "ccextractorwinfull") +HolaProxy = find("hola-proxy") +MPV = find("mpv") +Caddy = find("caddy") +N_m3u8DL_RE = find("N_m3u8DL-RE", "n-m3u8dl-re") +MKVToolNix = find("mkvmerge") +Mkvpropedit = find("mkvpropedit") +DoviTool = find("dovi_tool") +HDR10PlusTool = find("hdr10plus_tool", "HDR10Plus_tool") +Mp4decrypt = find("mp4decrypt") + + +__all__ = ( + "FFMPEG", + "FFProbe", + "FFPlay", + "SubtitleEdit", + "ShakaPackager", + "Aria2", + "CCExtractor", + "HolaProxy", + "MPV", + "Caddy", + "N_m3u8DL_RE", + "MKVToolNix", + "Mkvpropedit", + "DoviTool", + "HDR10PlusTool", + "Mp4decrypt", + "find", +) diff --git a/packages/envied/src/envied/core/cacher.py b/packages/envied/src/envied/core/cacher.py new file mode 100644 index 0000000..c88b9ed --- /dev/null +++ b/packages/envied/src/envied/core/cacher.py @@ -0,0 +1,156 @@ +from __future__ import annotations + +import zlib +from datetime import datetime, timedelta +from os import stat_result +from pathlib import Path +from typing import Any, Optional, Union + +import jsonpickle +import jwt + +from envied.core.config import config + +EXP_T = Union[datetime, str, int, float] + + +class Cacher: + """Cacher for Services to get and set arbitrary data with expiration dates.""" + + def __init__( + self, + service_tag: str, + key: Optional[str] = None, + version: Optional[int] = 1, + data: Optional[Any] = None, + expiration: Optional[datetime] = None, + ) -> None: + self.service_tag = service_tag + self.key = key + self.version = version + self.data = data or {} + self.expiration = expiration + + if self.expiration and self.expired: + # if its expired, remove the data for safety and delete cache file + self.data = None + self.path.unlink() + + def __bool__(self) -> bool: + return bool(self.data) + + @property + def path(self) -> Path: + """Get the path at which the cache will be read and written.""" + return (config.directories.cache / self.service_tag / self.key).with_suffix(".json") + + @property + def expired(self) -> bool: + return self.expiration and self.expiration < datetime.now() + + def get(self, key: str, version: int = 1) -> Cacher: + """ + Get Cached data for the Service by Key. + :param key: the filename to save the data to, should be url-safe. + :param version: the config data version you expect to use. + :returns: Cache object containing the cached data or None if the file does not exist. + """ + cache = Cacher(self.service_tag, key, version) + if cache.path.is_file(): + data = jsonpickle.loads(cache.path.read_text(encoding="utf8")) + payload = data.copy() + del payload["crc32"] + checksum = data["crc32"] + calculated = zlib.crc32(jsonpickle.dumps(payload).encode("utf8")) + if calculated != checksum: + raise ValueError( + f"The checksum of the Cache payload mismatched. Checksum: {checksum} !== Calculated: {calculated}" + ) + cache.data = data["data"] + cache.expiration = data["expiration"] + cache.version = data["version"] + if cache.version != version: + raise ValueError( + f"The version of your {self.service_tag} {key} cache is outdated. Please delete: {cache.path}" + ) + return cache + + def set(self, data: Any, expiration: Optional[EXP_T] = None) -> Any: + """ + Set Cached data for the Service by Key. + :param data: absolutely anything including None. + :param expiration: when the data expires, optional. Can be ISO 8601, seconds + til expiration, unix timestamp, or a datetime object. + :returns: the data provided for quick wrapping of functions or vars. + """ + self.data = data + + if not expiration: + try: + expiration = jwt.decode(self.data, options={"verify_signature": False})["exp"] + except jwt.DecodeError: + pass + + self.expiration = self._resolve_datetime(expiration) if expiration else None + + payload = {"data": self.data, "expiration": self.expiration, "version": self.version} + payload["crc32"] = zlib.crc32(jsonpickle.dumps(payload).encode("utf8")) + + self.path.parent.mkdir(parents=True, exist_ok=True) + self.path.write_text(jsonpickle.dumps(payload)) + + return self.data + + def stat(self) -> stat_result: + """ + Get Cache file OS Stat data like Creation Time, Modified Time, and such. + :returns: an os.stat_result tuple + """ + return self.path.stat() + + @staticmethod + def _resolve_datetime(timestamp: EXP_T) -> datetime: + """ + Resolve multiple formats of a Datetime or Timestamp to an absolute Datetime. + + Examples: + >>> now = datetime.now() + datetime.datetime(2022, 6, 27, 9, 49, 13, 657208) + >>> iso8601 = now.isoformat() + '2022-06-27T09:49:13.657208' + >>> Cacher._resolve_datetime(iso8601) + datetime.datetime(2022, 6, 27, 9, 49, 13, 657208) + >>> Cacher._resolve_datetime(iso8601 + "Z") + datetime.datetime(2022, 6, 27, 9, 49, 13, 657208) + >>> Cacher._resolve_datetime(3600) + datetime.datetime(2022, 6, 27, 10, 52, 50, 657208) + >>> Cacher._resolve_datetime('3600') + datetime.datetime(2022, 6, 27, 10, 52, 51, 657208) + >>> Cacher._resolve_datetime(7800.113) + datetime.datetime(2022, 6, 27, 11, 59, 13, 770208) + + In the int/float examples you may notice that it did not return now + 3600 seconds + but rather something a bit more than that. This is because it did not resolve 3600 + seconds from the `now` variable but from right now as the function was called. + """ + if isinstance(timestamp, datetime): + return timestamp + if isinstance(timestamp, str): + if timestamp.endswith("Z"): + # fromisoformat doesn't accept the final Z + timestamp = timestamp.split("Z")[0] + try: + return datetime.fromisoformat(timestamp) + except ValueError: + timestamp = float(timestamp) + try: + if len(str(int(timestamp))) == 13: # JS-style timestamp + timestamp /= 1000 + timestamp = datetime.fromtimestamp(timestamp) + except ValueError: + raise ValueError(f"Unrecognized Timestamp value {timestamp!r}") + if timestamp < datetime.now(): + # timestamp is likely an amount of seconds til expiration + # or, it's an already expired timestamp which is unlikely + timestamp = timestamp + timedelta(seconds=datetime.now().timestamp()) + return timestamp diff --git a/packages/envied/src/envied/core/cdm/__init__.py b/packages/envied/src/envied/core/cdm/__init__.py new file mode 100644 index 0000000..10c0131 --- /dev/null +++ b/packages/envied/src/envied/core/cdm/__init__.py @@ -0,0 +1,3 @@ +from .decrypt_labs_remote_cdm import DecryptLabsRemoteCDM + +__all__ = ["DecryptLabsRemoteCDM"] diff --git a/packages/envied/src/envied/core/cdm/decrypt_labs_remote_cdm.py b/packages/envied/src/envied/core/cdm/decrypt_labs_remote_cdm.py new file mode 100644 index 0000000..c040362 --- /dev/null +++ b/packages/envied/src/envied/core/cdm/decrypt_labs_remote_cdm.py @@ -0,0 +1,143 @@ +import base64 +import secrets +from typing import Optional, Type, Union +from uuid import UUID + +import requests +from pywidevine import PSSH, Device, DeviceTypes, Key, RemoteCdm +from pywidevine.license_protocol_pb2 import SignedDrmCertificate, SignedMessage + +# Copyright 2024 by DevYukine. + + +class DecryptLabsRemoteCDM(RemoteCdm): + def __init__( + self, + device_type: Union[DeviceTypes, str], + system_id: int, + security_level: int, + host: str, + secret: str, + device_name: str, + service_name: str, + ): + self.response_counter = 0 + self.pssh = None + self.api_session_ids = {} + self.license_request = None + self.service_name = service_name + self.keys = {} + try: + super().__init__(device_type, system_id, security_level, host, secret, device_name) + except Exception: + pass + self.req_session = requests.Session() + self.req_session.headers.update({"decrypt-labs-api-key": secret}) + + @classmethod + def from_device(cls, device: Device) -> Type["DecryptLabsRemoteCDM"]: + raise NotImplementedError("You cannot load a DecryptLabsRemoteCDM from a local Device file.") + + def open(self) -> bytes: + # We stub this method to return a random session ID for now, later we save the api session id and resolve by our random generated one. + return bytes.fromhex(secrets.token_hex(16)) + + def close(self, session_id: bytes) -> None: + # We stub this method to do nothing. + pass + + def set_service_certificate(self, session_id: bytes, certificate: Optional[Union[bytes, str]]) -> str: + if isinstance(certificate, bytes): + certificate = base64.b64encode(certificate).decode() + + # certificate needs to be base64 to be sent off to the API. + # it needs to intentionally be kept as base64 encoded SignedMessage. + + self.req_session.signed_device_certificate = certificate + self.req_session.privacy_mode = True + + return "success" + + def get_service_certificate(self, session_id: bytes) -> Optional[SignedDrmCertificate]: + raise NotImplementedError("This method is not implemented in this CDM") + + def get_license_challenge( + self, session_id: bytes, pssh: PSSH, license_type: str = "STREAMING", privacy_mode: bool = True + ) -> bytes: + self.pssh = pssh + + res = self.session( + self.host + "/get-request", + { + "init_data": self.pssh.dumps(), + "service_certificate": self.req_session.signed_device_certificate, + "scheme": "widevine", + "service": self.service_name, + }, + ) + + self.license_request = res["challenge"] + self.api_session_ids[session_id] = res["session_id"] + + return base64.b64decode(self.license_request) + + def parse_license(self, session_id: bytes, license_message: Union[SignedMessage, bytes, str]) -> None: + session_id_api = self.api_session_ids[session_id] + if session_id not in self.keys: + self.keys[session_id] = [] + session_keys = self.keys[session_id] + + if isinstance(license_message, dict) and "keys" in license_message: + session_keys.extend( + [ + Key(kid=Key.kid_to_uuid(x["kid"]), type_=x.get("type", "CONTENT"), key=bytes.fromhex(x["key"])) + for x in license_message["keys"] + ] + ) + + else: + res = self.session( + self.host + "/decrypt-response", + { + "session_id": session_id_api, + "init_data": self.pssh.dumps(), + "license_request": self.license_request, + "license_response": license_message, + "scheme": "widevine", + }, + ) + + original_keys = res["keys"].replace("\n", " ") + keys_separated = original_keys.split("--key ") + formatted_keys = [] + for k in keys_separated: + if ":" in k: + key = k.strip() + formatted_keys.append(key) + for keys in formatted_keys: + session_keys.append( + ( + Key( + kid=UUID(bytes=bytes.fromhex(keys.split(":")[0])), + type_="CONTENT", + key=bytes.fromhex(keys.split(":")[1]), + ) + ) + ) + + def get_keys(self, session_id: bytes, type_: Optional[Union[int, str]] = None) -> list[Key]: + return self.keys[session_id] + + def session(self, url, data, retries=3): + res = self.req_session.post(url, json=data).json() + + if res.get("message") != "success": + if "License Response Decryption Process Failed at the very beginning" in res.get("Error", ""): + if retries > 0: + return self.session(url, data, retries=retries - 1) + else: + raise ValueError(f"CDM API returned an error: {res['Error']}") + else: + raise ValueError(f"CDM API returned an error: {res['Error']}") + + return res diff --git a/packages/envied/src/envied/core/commands.py b/packages/envied/src/envied/core/commands.py new file mode 100644 index 0000000..e6024df --- /dev/null +++ b/packages/envied/src/envied/core/commands.py @@ -0,0 +1,35 @@ +from typing import Optional + +import click + +from .config import config +from .utilities import import_module_by_path + +_COMMANDS = sorted( + (path for path in config.directories.commands.glob("*.py") if path.stem.lower() != "__init__"), key=lambda x: x.stem +) + +_MODULES = {path.stem: getattr(import_module_by_path(path), path.stem) for path in _COMMANDS} + + +class Commands(click.MultiCommand): + """Lazy-loaded command group of project commands.""" + + def list_commands(self, ctx: click.Context) -> list[str]: + """Returns a list of command names from the command filenames.""" + return [x.stem for x in _COMMANDS] + + def get_command(self, ctx: click.Context, name: str) -> Optional[click.Command]: + """Load the command code and return the main click command function.""" + module = _MODULES.get(name) + if not module: + raise click.ClickException(f"Unable to find command by the name '{name}'") + + if hasattr(module, "cli"): + return module.cli + + return module + + +# Hide direct access to commands from quick import form, they shouldn't be accessed directly +__all__ = ("Commands",) diff --git a/packages/envied/src/envied/core/config.py b/packages/envied/src/envied/core/config.py new file mode 100644 index 0000000..07ddb07 --- /dev/null +++ b/packages/envied/src/envied/core/config.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any, Optional + +import yaml +from appdirs import AppDirs + + +class Config: + class _Directories: + # default directories, do not modify here, set via config + app_dirs = AppDirs("envied", False) + core_dir = Path(__file__).resolve().parent + namespace_dir = core_dir.parent + commands = namespace_dir / "commands" + services = [namespace_dir / "services"] + vaults = namespace_dir / "vaults" + fonts = namespace_dir / "fonts" + user_configs = core_dir.parent + data = core_dir.parent + downloads = core_dir.parent.parent / "downloads" + temp = core_dir.parent.parent / "temp" + cache = data / "cache" + cookies = data / "cookies" + logs = data / "logs" + wvds = data / "WVDs" + prds = data / "PRDs" + dcsl = data / "DCSL" + + class _Filenames: + # default filenames, do not modify here, set via config + log = "envied_{name}_{time}.log" # Directories.logs + config = "config.yaml" # Directories.services / tag + root_config = "envied.yaml" # Directories.user_configs + chapters = "Chapters_{title}_{random}.txt" # Directories.temp + subtitle = "Subtitle_{id}_{language}.srt" # Directories.temp + + def __init__(self, **kwargs: Any): + self.dl: dict = kwargs.get("dl") or {} + self.aria2c: dict = kwargs.get("aria2c") or {} + self.n_m3u8dl_re: dict = kwargs.get("n_m3u8dl_re") or {} + self.cdm: dict = kwargs.get("cdm") or {} + self.chapter_fallback_name: str = kwargs.get("chapter_fallback_name") or "" + self.curl_impersonate: dict = kwargs.get("curl_impersonate") or {} + self.remote_cdm: list[dict] = kwargs.get("remote_cdm") or [] + self.credentials: dict = kwargs.get("credentials") or {} + self.subtitle: dict = kwargs.get("subtitle") or {} + + self.directories = self._Directories() + for name, path in (kwargs.get("directories") or {}).items(): + if name.lower() in ("app_dirs", "core_dir", "namespace_dir", "user_configs", "data"): + # these must not be modified by the user + continue + if name == "services" and isinstance(path, list): + setattr(self.directories, name, [Path(p).expanduser() for p in path]) + else: + setattr(self.directories, name, Path(path).expanduser()) + + downloader_cfg = kwargs.get("downloader") or "requests" + if isinstance(downloader_cfg, dict): + self.downloader_map = {k.upper(): v for k, v in downloader_cfg.items()} + self.downloader = self.downloader_map.get("DEFAULT", "requests") + else: + self.downloader_map = {} + self.downloader = downloader_cfg + + self.filenames = self._Filenames() + for name, filename in (kwargs.get("filenames") or {}).items(): + setattr(self.filenames, name, filename) + + self.headers: dict = kwargs.get("headers") or {} + self.key_vaults: list[dict[str, Any]] = kwargs.get("key_vaults", []) + self.muxing: dict = kwargs.get("muxing") or {} + self.proxy_providers: dict = kwargs.get("proxy_providers") or {} + self.serve: dict = kwargs.get("serve") or {} + self.services: dict = kwargs.get("services") or {} + decryption_cfg = kwargs.get("decryption") or {} + if isinstance(decryption_cfg, dict): + self.decryption_map = {k.upper(): v for k, v in decryption_cfg.items()} + self.decryption = self.decryption_map.get("DEFAULT", "shaka") + else: + self.decryption_map = {} + self.decryption = decryption_cfg or "shaka" + + self.set_terminal_bg: bool = kwargs.get("set_terminal_bg", False) + self.tag: str = kwargs.get("tag") or "" + self.tag_group_name: bool = kwargs.get("tag_group_name", True) + self.tag_imdb_tmdb: bool = kwargs.get("tag_imdb_tmdb", True) + self.tmdb_api_key: str = kwargs.get("tmdb_api_key") or "" + self.update_checks: bool = kwargs.get("update_checks", True) + self.update_check_interval: int = kwargs.get("update_check_interval", 24) + self.scene_naming: bool = kwargs.get("scene_naming", True) + self.series_year: bool = kwargs.get("series_year", True) + + self.title_cache_time: int = kwargs.get("title_cache_time", 1800) # 30 minutes default + self.title_cache_max_retention: int = kwargs.get("title_cache_max_retention", 86400) # 24 hours default + self.title_cache_enabled: bool = kwargs.get("title_cache_enabled", True) + + @classmethod + def from_yaml(cls, path: Path) -> Config: + if not path.exists(): + raise FileNotFoundError(f"Config file path ({path}) was not found") + if not path.is_file(): + raise FileNotFoundError(f"Config file path ({path}) is not to a file.") + return cls(**yaml.safe_load(path.read_text(encoding="utf8")) or {}) + + +# noinspection PyProtectedMember +POSSIBLE_CONFIG_PATHS = ( + # The envied Namespace Folder (e.g., %appdata%/Python/Python311/site-packages/envied) + Config._Directories.namespace_dir / Config._Filenames.root_config, + # The Parent Folder to the envied Namespace Folder (e.g., %appdata%/Python/Python311/site-packages) + Config._Directories.namespace_dir.parent / Config._Filenames.root_config, + # The AppDirs User Config Folder (e.g., %localappdata%/envied) + Config._Directories.user_configs / Config._Filenames.root_config, +) + + +def get_config_path() -> Optional[Path]: + """ + Get Path to Config from any one of the possible locations. + + Returns None if no config file could be found. + """ + for path in POSSIBLE_CONFIG_PATHS: + if path.exists(): + return path + return None + + +config_path = get_config_path() +if config_path: + config = Config.from_yaml(config_path) +else: + config = Config() + +__all__ = ("config",) diff --git a/packages/envied/src/envied/core/console.py b/packages/envied/src/envied/core/console.py new file mode 100644 index 0000000..f139da6 --- /dev/null +++ b/packages/envied/src/envied/core/console.py @@ -0,0 +1,351 @@ +import logging +from datetime import datetime +from types import ModuleType +from typing import IO, Callable, Iterable, List, Literal, Mapping, Optional, Union + +from rich._log_render import FormatTimeCallable, LogRender +from rich.console import Console, ConsoleRenderable, HighlighterType, RenderableType +from rich.emoji import EmojiVariant +from rich.highlighter import Highlighter, ReprHighlighter +from rich.live import Live +from rich.logging import RichHandler +from rich.padding import Padding, PaddingDimensions +from rich.status import Status +from rich.style import StyleType +from rich.table import Table +from rich.text import Text, TextType +from rich.theme import Theme + +from envied.core.config import config + + +class ComfyLogRenderer(LogRender): + def __call__( + self, + console: "Console", + renderables: Iterable["ConsoleRenderable"], + log_time: Optional[datetime] = None, + time_format: Optional[Union[str, FormatTimeCallable]] = None, + level: TextType = "", + path: Optional[str] = None, + line_no: Optional[int] = None, + link_path: Optional[str] = None, + ) -> "Table": + from rich.containers import Renderables + + output = Table.grid(padding=(0, 5), pad_edge=True) + output.expand = True + if self.show_time: + output.add_column(style="log.time") + if self.show_level: + output.add_column(style="log.level", width=self.level_width) + output.add_column(ratio=1, style="log.message", overflow="fold") + if self.show_path and path: + output.add_column(style="log.path") + row: List["RenderableType"] = [] + if self.show_time: + log_time = log_time or console.get_datetime() + time_format = time_format or self.time_format + if callable(time_format): + log_time_display = time_format(log_time) + else: + log_time_display = Text(log_time.strftime(time_format)) + if log_time_display == self._last_time and self.omit_repeated_times: + row.append(Text(" " * len(log_time_display))) + else: + row.append(log_time_display) + self._last_time = log_time_display + if self.show_level: + row.append(level) + + row.append(Renderables(renderables)) + if self.show_path and path: + path_text = Text() + path_text.append(path, style=f"link file://{link_path}" if link_path else "") + if line_no: + path_text.append(":") + path_text.append( + f"{line_no}", + style=f"link file://{link_path}#{line_no}" if link_path else "", + ) + row.append(path_text) + + output.add_row(*row) + return output + + +class ComfyRichHandler(RichHandler): + def __init__( + self, + level: Union[int, str] = logging.NOTSET, + console: Optional[Console] = None, + *, + show_time: bool = True, + omit_repeated_times: bool = True, + show_level: bool = True, + show_path: bool = True, + enable_link_path: bool = True, + highlighter: Optional[Highlighter] = None, + markup: bool = False, + rich_tracebacks: bool = False, + tracebacks_width: Optional[int] = None, + tracebacks_extra_lines: int = 3, + tracebacks_theme: Optional[str] = None, + tracebacks_word_wrap: bool = True, + tracebacks_show_locals: bool = False, + tracebacks_suppress: Iterable[Union[str, ModuleType]] = (), + locals_max_length: int = 10, + locals_max_string: int = 80, + log_time_format: Union[str, FormatTimeCallable] = "[%x %X]", + keywords: Optional[List[str]] = None, + log_renderer: Optional[LogRender] = None, + ) -> None: + super().__init__( + level=level, + console=console, + show_time=show_time, + omit_repeated_times=omit_repeated_times, + show_level=show_level, + show_path=show_path, + enable_link_path=enable_link_path, + highlighter=highlighter, + markup=markup, + rich_tracebacks=rich_tracebacks, + tracebacks_width=tracebacks_width, + tracebacks_extra_lines=tracebacks_extra_lines, + tracebacks_theme=tracebacks_theme, + tracebacks_word_wrap=tracebacks_word_wrap, + tracebacks_show_locals=tracebacks_show_locals, + tracebacks_suppress=tracebacks_suppress, + locals_max_length=locals_max_length, + locals_max_string=locals_max_string, + log_time_format=log_time_format, + keywords=keywords, + ) + if log_renderer: + self._log_render = log_renderer + + +class ComfyConsole(Console): + """A comfy high level console interface. + + Args: + color_system (str, optional): The color system supported by your terminal, + either ``"standard"``, ``"256"`` or ``"truecolor"``. Leave as ``"auto"`` to autodetect. + force_terminal (Optional[bool], optional): Enable/disable terminal control codes, or None to auto-detect + terminal. Defaults to None. + force_jupyter (Optional[bool], optional): Enable/disable Jupyter rendering, or None to auto-detect Jupyter. + Defaults to None. + force_interactive (Optional[bool], optional): Enable/disable interactive mode, or None to auto-detect. + Defaults to None. + soft_wrap (Optional[bool], optional): Set soft wrap default on print method. Defaults to False. + theme (Theme, optional): An optional style theme object, or ``None`` for default theme. + stderr (bool, optional): Use stderr rather than stdout if ``file`` is not specified. Defaults to False. + file (IO, optional): A file object where the console should write to. Defaults to stdout. + quiet (bool, Optional): Boolean to suppress all output. Defaults to False. + width (int, optional): The width of the terminal. Leave as default to auto-detect width. + height (int, optional): The height of the terminal. Leave as default to auto-detect height. + style (StyleType, optional): Style to apply to all output, or None for no style. Defaults to None. + no_color (Optional[bool], optional): Enabled no color mode, or None to auto-detect. Defaults to None. + tab_size (int, optional): Number of spaces used to replace a tab character. Defaults to 8. + record (bool, optional): Boolean to enable recording of terminal output, + required to call :meth:`export_html`, :meth:`export_svg`, and :meth:`export_text`. Defaults to False. + markup (bool, optional): Boolean to enable :ref:`console_markup`. Defaults to True. + emoji (bool, optional): Enable emoji code. Defaults to True. + emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. + highlight (bool, optional): Enable automatic highlighting. Defaults to True. + log_time (bool, optional): Boolean to enable logging of time by :meth:`log` methods. Defaults to True. + log_path (bool, optional): Boolean to enable the logging of the caller by :meth:`log`. Defaults to True. + log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for + strftime or callable that formats the time. Defaults to "[%X] ". + highlighter (HighlighterType, optional): Default highlighter. + legacy_windows (bool, optional): Enable legacy Windows mode, or ``None`` to auto-detect. Defaults to ``None``. + safe_box (bool, optional): Restrict box options that don't render on legacy Windows. + get_datetime (Callable[[], datetime], optional): Callable that gets the current time as a datetime.datetime + object (used by Console.log), or None for datetime.now. + get_time (Callable[[], time], optional): Callable that gets the current time in seconds, default uses + time.monotonic. + """ + + def __init__( + self, + *, + color_system: Optional[Literal["auto", "standard", "256", "truecolor", "windows"]] = "auto", + force_terminal: Optional[bool] = None, + force_jupyter: Optional[bool] = None, + force_interactive: Optional[bool] = None, + soft_wrap: bool = False, + theme: Optional[Theme] = None, + stderr: bool = False, + file: Optional[IO[str]] = None, + quiet: bool = False, + width: Optional[int] = None, + height: Optional[int] = None, + style: Optional[StyleType] = None, + no_color: Optional[bool] = None, + tab_size: int = 8, + record: bool = False, + markup: bool = True, + emoji: bool = True, + emoji_variant: Optional[EmojiVariant] = None, + highlight: bool = True, + log_time: bool = True, + log_path: bool = True, + log_time_format: Union[str, FormatTimeCallable] = "[%X]", + highlighter: Optional["HighlighterType"] = ReprHighlighter(), + legacy_windows: Optional[bool] = None, + safe_box: bool = True, + get_datetime: Optional[Callable[[], datetime]] = None, + get_time: Optional[Callable[[], float]] = None, + _environ: Optional[Mapping[str, str]] = None, + log_renderer: Optional[LogRender] = None, + ): + super().__init__( + color_system=color_system, + force_terminal=force_terminal, + force_jupyter=force_jupyter, + force_interactive=force_interactive, + soft_wrap=soft_wrap, + theme=theme, + stderr=stderr, + file=file, + quiet=quiet, + width=width, + height=height, + style=style, + no_color=no_color, + tab_size=tab_size, + record=record, + markup=markup, + emoji=emoji, + emoji_variant=emoji_variant, + highlight=highlight, + log_time=log_time, + log_path=log_path, + log_time_format=log_time_format, + highlighter=highlighter, + legacy_windows=legacy_windows, + safe_box=safe_box, + get_datetime=get_datetime, + get_time=get_time, + _environ=_environ, + ) + if log_renderer: + self._log_render = log_renderer + + def status( + self, + status: RenderableType, + *, + spinner: str = "dots", + spinner_style: str = "status.spinner", + speed: float = 1.0, + refresh_per_second: float = 12.5, + pad: PaddingDimensions = (0, 5), + ) -> Union[Live, Status]: + """Display a comfy status and spinner. + + Args: + status (RenderableType): A status renderable (str or Text typically). + spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". + spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". + speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. + refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. + pad (Union[int, Tuple[int]]): Padding for top, right, bottom, and left borders. + May be specified with 1, 2, or 4 integers (CSS style). + + Returns: + Status: A Status object that may be used as a context manager. + """ + status_renderable = super().status( + status=status, + spinner=spinner, + spinner_style=spinner_style, + speed=speed, + refresh_per_second=refresh_per_second, + ) + + if pad: + top, right, bottom, left = Padding.unpack(pad) + + renderable_width = len(status_renderable.status) + spinner_width = len(status_renderable.renderable.text) + status_width = spinner_width + renderable_width + + available_width = self.width - status_width + if available_width > right: + # fill up the available width with padding to apply bg color + right = available_width - right + + padding = Padding(status_renderable, (top, right, bottom, left)) + + return Live(padding, console=self, transient=True) + + return status_renderable + + +catppuccin_mocha = { + # Colors based on "CatppuccinMocha" from Gogh themes + "bg": "rgb(30,30,46)", + "text": "rgb(205,214,244)", + "text2": "rgb(162,169,193)", # slightly darker + "black": "rgb(69,71,90)", + "bright_black": "rgb(88,91,112)", + "red": "rgb(243,139,168)", + "green": "rgb(166,227,161)", + "yellow": "rgb(249,226,175)", + "blue": "rgb(137,180,250)", + "pink": "rgb(245,194,231)", + "cyan": "rgb(148,226,213)", + "gray": "rgb(166,173,200)", + "bright_gray": "rgb(186,194,222)", + "dark_gray": "rgb(54,54,84)", +} + +primary_scheme = catppuccin_mocha +primary_scheme["none"] = primary_scheme["text"] +primary_scheme["grey23"] = primary_scheme["black"] +primary_scheme["magenta"] = primary_scheme["pink"] +primary_scheme["bright_red"] = primary_scheme["red"] +primary_scheme["bright_green"] = primary_scheme["green"] +primary_scheme["bright_yellow"] = primary_scheme["yellow"] +primary_scheme["bright_blue"] = primary_scheme["blue"] +primary_scheme["bright_magenta"] = primary_scheme["pink"] +primary_scheme["bright_cyan"] = primary_scheme["cyan"] +if config.set_terminal_bg: + primary_scheme["none"] += f" on {primary_scheme['bg']}" + +custom_colors = {"ascii.art": primary_scheme["pink"]} +if config.set_terminal_bg: + custom_colors["ascii.art"] += f" on {primary_scheme['bg']}" + + +console = ComfyConsole( + log_time=False, + log_path=False, + width=80, + theme=Theme( + { + "bar.back": primary_scheme["dark_gray"], + "bar.complete": primary_scheme["pink"], + "bar.finished": primary_scheme["green"], + "bar.pulse": primary_scheme["bright_black"], + "black": primary_scheme["black"], + "inspect.async_def": f"italic {primary_scheme['cyan']}", + "progress.data.speed": "dark_orange", + "repr.number": f"bold not italic {primary_scheme['cyan']}", + "repr.number_complex": f"bold not italic {primary_scheme['cyan']}", + "rule.line": primary_scheme["dark_gray"], + "rule.text": primary_scheme["pink"], + "tree.line": primary_scheme["dark_gray"], + "status.spinner": primary_scheme["pink"], + "progress.spinner": primary_scheme["pink"], + **primary_scheme, + **custom_colors, + } + ), + log_renderer=ComfyLogRenderer(show_time=False, show_path=False), +) + + +__all__ = ("ComfyLogRenderer", "ComfyRichHandler", "ComfyConsole", "console") diff --git a/packages/envied/src/envied/core/constants.py b/packages/envied/src/envied/core/constants.py new file mode 100644 index 0000000..609fcc3 --- /dev/null +++ b/packages/envied/src/envied/core/constants.py @@ -0,0 +1,25 @@ +from threading import Event +from typing import TypeVar, Union + +DOWNLOAD_CANCELLED = Event() +DOWNLOAD_LICENCE_ONLY = Event() + +DRM_SORT_MAP = ["ClearKey", "Widevine"] +LANGUAGE_MAX_DISTANCE = 5 # this is max to be considered "same", e.g., en, en-US, en-AU +VIDEO_CODEC_MAP = {"AVC": "H.264", "HEVC": "H.265"} +DYNAMIC_RANGE_MAP = {"HDR10": "HDR", "HDR10+": "HDR10P", "Dolby Vision": "DV", "HDR10 / HDR10+": "HDR10P", "HDR10 / HDR10": "HDR"} +AUDIO_CODEC_MAP = {"E-AC-3": "DDP", "AC-3": "DD"} + +context_settings = dict( + help_option_names=["-?", "-h", "--help"], # default only has --help + max_content_width=116, # max PEP8 line-width, -4 to adjust for initial indent +) + +# For use in signatures of functions which take one specific type of track at a time +# (it can't be a list that contains e.g. both Video and Audio objects) +TrackT = TypeVar("TrackT", bound="Track") # noqa: F821 + +# For general use in lists that can contain mixed types of tracks. +# list[Track] won't work because list is invariant. +# TODO: Add Chapter? +AnyTrack = Union["Video", "Audio", "Subtitle"] # noqa: F821 diff --git a/packages/envied/src/envied/core/credential.py b/packages/envied/src/envied/core/credential.py new file mode 100644 index 0000000..b923d70 --- /dev/null +++ b/packages/envied/src/envied/core/credential.py @@ -0,0 +1,87 @@ +from __future__ import annotations + +import base64 +import hashlib +import re +from pathlib import Path +from typing import Optional, Union + + +class Credential: + """Username (or Email) and Password Credential.""" + + def __init__(self, username: str, password: str, extra: Optional[str] = None): + self.username = username + self.password = password + self.extra = extra + self.sha1 = hashlib.sha1(self.dumps().encode()).hexdigest() + + def __bool__(self) -> bool: + return bool(self.username) and bool(self.password) + + def __str__(self) -> str: + return self.dumps() + + def __repr__(self) -> str: + return "{name}({items})".format( + name=self.__class__.__name__, items=", ".join([f"{k}={repr(v)}" for k, v in self.__dict__.items()]) + ) + + def dumps(self) -> str: + """Return credential data as a string.""" + return f"{self.username}:{self.password}" + (f":{self.extra}" if self.extra else "") + + def dump(self, path: Union[Path, str]) -> int: + """Write credential data to a file.""" + if isinstance(path, str): + path = Path(path) + return path.write_text(self.dumps(), encoding="utf8") + + def as_base64(self, with_extra: bool = False, encode_password: bool = False, encode_extra: bool = False) -> str: + """ + Dump Credential as a Base64-encoded string in Basic Authorization style. + encode_password and encode_extra will also Base64-encode the password and extra respectively. + """ + value = f"{self.username}:" + if encode_password: + value += base64.b64encode(self.password.encode()).decode() + else: + value += self.password + if with_extra and self.extra: + if encode_extra: + value += f":{base64.b64encode(self.extra.encode()).decode()}" + else: + value += f":{self.extra}" + return base64.b64encode(value.encode()).decode() + + @classmethod + def loads(cls, text: str) -> Credential: + """ + Load credential from a text string. + + Format: {username}:{password} + Rules: + Only one Credential must be in this text contents. + All whitespace before and after all text will be removed. + Any whitespace between text will be kept and used. + The credential can be spanned across one or multiple lines as long as it + abides with all the above rules and the format. + + Example that follows the format and rules: + `\tJohnd\noe@gm\n\rail.com\n:Pass1\n23\n\r \t \t` + >>>Credential(username='Johndoe@gmail.com', password='Pass123') + """ + text = "".join([x.strip() for x in text.splitlines(keepends=False)]).strip() + credential = re.fullmatch(r"^([^:]+?):([^:]+?)(?::(.+))?$", text) + if credential: + return cls(*credential.groups()) + raise ValueError("No credentials found in text string. Expecting the format `username:password`") + + @classmethod + def load(cls, path: Path) -> Credential: + """ + Load Credential from a file path. + Use Credential.loads() for loading from text content and seeing the rules and + format expected to be found in the URIs contents. + """ + return cls.loads(path.read_text("utf8")) diff --git a/packages/envied/src/envied/core/downloaders/__init__.py b/packages/envied/src/envied/core/downloaders/__init__.py new file mode 100644 index 0000000..aa0aecb --- /dev/null +++ b/packages/envied/src/envied/core/downloaders/__init__.py @@ -0,0 +1,6 @@ +from .aria2c import aria2c +from .curl_impersonate import curl_impersonate +from .n_m3u8dl_re import n_m3u8dl_re +from .requests import requests + +__all__ = ("aria2c", "curl_impersonate", "requests", "n_m3u8dl_re") diff --git a/packages/envied/src/envied/core/downloaders/aria2c.py b/packages/envied/src/envied/core/downloaders/aria2c.py new file mode 100644 index 0000000..de03533 --- /dev/null +++ b/packages/envied/src/envied/core/downloaders/aria2c.py @@ -0,0 +1,331 @@ +import os +import subprocess +import textwrap +import time +from functools import partial +from http.cookiejar import CookieJar +from pathlib import Path +from typing import Any, Callable, Generator, MutableMapping, Optional, Union +from urllib.parse import urlparse + +import requests +from Crypto.Random import get_random_bytes +from requests import Session +from requests.cookies import cookiejar_from_dict, get_cookie_header +from rich import filesize +from rich.text import Text + +from envied.core import binaries +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import DOWNLOAD_CANCELLED +from envied.core.utilities import get_extension, get_free_port + + +def rpc(caller: Callable, secret: str, method: str, params: Optional[list[Any]] = None) -> Any: + """Make a call to Aria2's JSON-RPC API.""" + try: + rpc_res = caller( + json={ + "jsonrpc": "2.0", + "id": get_random_bytes(16).hex(), + "method": method, + "params": [f"token:{secret}", *(params or [])], + } + ).json() + if rpc_res.get("code"): + # wrap to console width - padding - '[Aria2c]: ' + error_pretty = "\n ".join( + textwrap.wrap( + f"RPC Error: {rpc_res['message']} ({rpc_res['code']})".strip(), + width=console.width - 20, + initial_indent="", + ) + ) + console.log(Text.from_ansi("\n[Aria2c]: " + error_pretty)) + return rpc_res["result"] + except requests.exceptions.ConnectionError: + # absorb, process likely ended as it was calling RPC + return + + +def download( + urls: Union[str, list[str], dict[str, Any], list[dict[str, Any]]], + output_dir: Path, + filename: str, + headers: Optional[MutableMapping[str, Union[str, bytes]]] = None, + cookies: Optional[Union[MutableMapping[str, str], CookieJar]] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, +) -> Generator[dict[str, Any], None, None]: + if not urls: + raise ValueError("urls must be provided and not empty") + elif not isinstance(urls, (str, dict, list)): + raise TypeError(f"Expected urls to be {str} or {dict} or a list of one of them, not {type(urls)}") + + if not output_dir: + raise ValueError("output_dir must be provided") + elif not isinstance(output_dir, Path): + raise TypeError(f"Expected output_dir to be {Path}, not {type(output_dir)}") + + if not filename: + raise ValueError("filename must be provided") + elif not isinstance(filename, str): + raise TypeError(f"Expected filename to be {str}, not {type(filename)}") + + if not isinstance(headers, (MutableMapping, type(None))): + raise TypeError(f"Expected headers to be {MutableMapping}, not {type(headers)}") + + if not isinstance(cookies, (MutableMapping, CookieJar, type(None))): + raise TypeError(f"Expected cookies to be {MutableMapping} or {CookieJar}, not {type(cookies)}") + + if not isinstance(proxy, (str, type(None))): + raise TypeError(f"Expected proxy to be {str}, not {type(proxy)}") + + if not max_workers: + max_workers = min(32, (os.cpu_count() or 1) + 4) + elif not isinstance(max_workers, int): + raise TypeError(f"Expected max_workers to be {int}, not {type(max_workers)}") + + if not isinstance(urls, list): + urls = [urls] + + if not binaries.Aria2: + raise EnvironmentError("Aria2c executable not found...") + + if proxy and not proxy.lower().startswith("http://"): + raise ValueError("Only HTTP proxies are supported by aria2(c)") + + if cookies and not isinstance(cookies, CookieJar): + cookies = cookiejar_from_dict(cookies) + + url_files = [] + for i, url in enumerate(urls): + if isinstance(url, str): + url_data = {"url": url} + else: + url_data: dict[str, Any] = url + url_filename = filename.format(i=i, ext=get_extension(url_data["url"])) + url_text = url_data["url"] + url_text += f"\n\tdir={output_dir}" + url_text += f"\n\tout={url_filename}" + if cookies: + mock_request = requests.Request(url=url_data["url"]) + cookie_header = get_cookie_header(cookies, mock_request) + if cookie_header: + url_text += f"\n\theader=Cookie: {cookie_header}" + for key, value in url_data.items(): + if key == "url": + continue + if key == "headers": + for header_name, header_value in value.items(): + url_text += f"\n\theader={header_name}: {header_value}" + else: + url_text += f"\n\t{key}={value}" + url_files.append(url_text) + url_file = "\n".join(url_files) + + rpc_port = get_free_port() + rpc_secret = get_random_bytes(16).hex() + rpc_uri = f"http://127.0.0.1:{rpc_port}/jsonrpc" + rpc_session = Session() + + max_concurrent_downloads = int(config.aria2c.get("max_concurrent_downloads", max_workers)) + max_connection_per_server = int(config.aria2c.get("max_connection_per_server", 1)) + split = int(config.aria2c.get("split", 5)) + file_allocation = config.aria2c.get("file_allocation", "prealloc") + if len(urls) > 1: + split = 1 + file_allocation = "none" + + arguments = [ + # [Basic Options] + "--input-file", + "-", + "--all-proxy", + proxy or "", + "--continue=true", + # [Connection Options] + f"--max-concurrent-downloads={max_concurrent_downloads}", + f"--max-connection-per-server={max_connection_per_server}", + f"--split={split}", # each split uses their own connection + "--max-file-not-found=5", # counted towards --max-tries + "--max-tries=5", + "--retry-wait=2", + # [Advanced Options] + "--allow-overwrite=true", + "--auto-file-renaming=false", + "--console-log-level=warn", + "--download-result=default", + f"--file-allocation={file_allocation}", + "--summary-interval=0", + # [RPC Options] + "--enable-rpc=true", + f"--rpc-listen-port={rpc_port}", + f"--rpc-secret={rpc_secret}", + ] + + for header, value in (headers or {}).items(): + if header.lower() == "cookie": + raise ValueError("You cannot set Cookies as a header manually, please use the `cookies` param.") + if header.lower() == "accept-encoding": + # we cannot set an allowed encoding, or it will return compressed + # and the code is not set up to uncompress the data + continue + if header.lower() == "referer": + arguments.extend(["--referer", value]) + continue + if header.lower() == "user-agent": + arguments.extend(["--user-agent", value]) + continue + arguments.extend(["--header", f"{header}: {value}"]) + + yield dict(total=len(urls)) + + try: + p = subprocess.Popen([binaries.Aria2, *arguments], stdin=subprocess.PIPE, stdout=subprocess.DEVNULL) + + p.stdin.write(url_file.encode()) + p.stdin.close() + + while p.poll() is None: + global_stats: dict[str, Any] = ( + rpc(caller=partial(rpc_session.post, url=rpc_uri), secret=rpc_secret, method="aria2.getGlobalStat") + or {} + ) + + number_stopped = int(global_stats.get("numStoppedTotal", 0)) + download_speed = int(global_stats.get("downloadSpeed", -1)) + + if number_stopped: + yield dict(completed=number_stopped) + if download_speed != -1: + yield dict(downloaded=f"{filesize.decimal(download_speed)}/s") + + stopped_downloads: list[dict[str, Any]] = ( + rpc( + caller=partial(rpc_session.post, url=rpc_uri), + secret=rpc_secret, + method="aria2.tellStopped", + params=[0, 999999], + ) + or [] + ) + + for dl in stopped_downloads: + if dl["status"] == "error": + used_uri = next( + uri["uri"] + for file in dl["files"] + if file["selected"] == "true" + for uri in file["uris"] + if uri["status"] == "used" + ) + error = f"Download Error (#{dl['gid']}): {dl['errorMessage']} ({dl['errorCode']}), {used_uri}" + error_pretty = "\n ".join( + textwrap.wrap(error, width=console.width - 20, initial_indent="") + ) + console.log(Text.from_ansi("\n[Aria2c]: " + error_pretty)) + raise ValueError(error) + + if number_stopped == len(urls): + rpc(caller=partial(rpc_session.post, url=rpc_uri), secret=rpc_secret, method="aria2.shutdown") + break + + time.sleep(1) + + p.wait() + + if p.returncode != 0: + raise subprocess.CalledProcessError(p.returncode, arguments) + except ConnectionResetError: + # interrupted while passing URI to download + raise KeyboardInterrupt() + except subprocess.CalledProcessError as e: + if e.returncode in (7, 0xC000013A): + # 7 is when Aria2(c) handled the CTRL+C + # 0xC000013A is when it never got the chance to + raise KeyboardInterrupt() + raise + except KeyboardInterrupt: + DOWNLOAD_CANCELLED.set() # skip pending track downloads + yield dict(downloaded="[yellow]CANCELLED") + raise + except Exception: + DOWNLOAD_CANCELLED.set() # skip pending track downloads + yield dict(downloaded="[red]FAILED") + raise + finally: + rpc(caller=partial(rpc_session.post, url=rpc_uri), secret=rpc_secret, method="aria2.shutdown") + + +def aria2c( + urls: Union[str, list[str], dict[str, Any], list[dict[str, Any]]], + output_dir: Path, + filename: str, + headers: Optional[MutableMapping[str, Union[str, bytes]]] = None, + cookies: Optional[Union[MutableMapping[str, str], CookieJar]] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, +) -> Generator[dict[str, Any], None, None]: + """ + Download files using Aria2(c). + https://aria2.github.io + + Yields the following download status updates while chunks are downloading: + + - {total: 100} (100% download total) + - {completed: 1} (1% download progress out of 100%) + - {downloaded: "10.1 MB/s"} (currently downloading at a rate of 10.1 MB/s) + + The data is in the same format accepted by rich's progress.update() function. + + Parameters: + urls: Web URL(s) to file(s) to download. You can use a dictionary with the key + "url" for the URI, and other keys for extra arguments to use per-URL. + output_dir: The folder to save the file into. If the save path's directory does + not exist then it will be made automatically. + filename: The filename or filename template to use for each file. The variables + you can use are `i` for the URL index and `ext` for the URL extension. + headers: A mapping of HTTP Header Key/Values to use for all downloads. + cookies: A mapping of Cookie Key/Values or a Cookie Jar to use for all downloads. + proxy: An optional proxy URI to route connections through for all downloads. + max_workers: The maximum amount of threads to use for downloads. Defaults to + min(32,(cpu_count+4)). Use for the --max-concurrent-downloads option. + """ + if proxy and not proxy.lower().startswith("http://"): + # Only HTTP proxies are supported by aria2(c) + proxy = urlparse(proxy) + + port = get_free_port() + username, password = get_random_bytes(8).hex(), get_random_bytes(8).hex() + local_proxy = f"http://{username}:{password}@localhost:{port}" + + scheme = {"https": "http+ssl", "socks5h": "socks"}.get(proxy.scheme, proxy.scheme) + + remote_server = f"{scheme}://{proxy.hostname}" + if proxy.port: + remote_server += f":{proxy.port}" + if proxy.username or proxy.password: + remote_server += "#" + if proxy.username: + remote_server += proxy.username + if proxy.password: + remote_server += f":{proxy.password}" + + p = subprocess.Popen( + ["pproxy", "-l", f"http://:{port}#{username}:{password}", "-r", remote_server], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + try: + yield from download(urls, output_dir, filename, headers, cookies, local_proxy, max_workers) + finally: + p.kill() + p.wait() + return + yield from download(urls, output_dir, filename, headers, cookies, proxy, max_workers) + + +__all__ = ("aria2c",) diff --git a/packages/envied/src/envied/core/downloaders/curl_impersonate.py b/packages/envied/src/envied/core/downloaders/curl_impersonate.py new file mode 100644 index 0000000..8711459 --- /dev/null +++ b/packages/envied/src/envied/core/downloaders/curl_impersonate.py @@ -0,0 +1,264 @@ +import math +import time +from concurrent import futures +from concurrent.futures.thread import ThreadPoolExecutor +from http.cookiejar import CookieJar +from pathlib import Path +from typing import Any, Generator, MutableMapping, Optional, Union + +from curl_cffi.requests import Session +from rich import filesize + +from envied.core.config import config +from envied.core.constants import DOWNLOAD_CANCELLED +from envied.core.utilities import get_extension + +MAX_ATTEMPTS = 5 +RETRY_WAIT = 2 +CHUNK_SIZE = 1024 +PROGRESS_WINDOW = 5 +BROWSER = config.curl_impersonate.get("browser", "chrome124") + + +def download(url: str, save_path: Path, session: Session, **kwargs: Any) -> Generator[dict[str, Any], None, None]: + """ + Download files using Curl Impersonate. + https://github.com/lwthiker/curl-impersonate + + Yields the following download status updates while chunks are downloading: + + - {total: 123} (there are 123 chunks to download) + - {total: None} (there are an unknown number of chunks to download) + - {advance: 1} (one chunk was downloaded) + - {downloaded: "10.1 MB/s"} (currently downloading at a rate of 10.1 MB/s) + - {file_downloaded: Path(...), written: 1024} (download finished, has the save path and size) + + The data is in the same format accepted by rich's progress.update() function. The + `downloaded` key is custom and is not natively accepted by all rich progress bars. + + Parameters: + url: Web URL of a file to download. + save_path: The path to save the file to. If the save path's directory does not + exist then it will be made automatically. + session: The Requests or Curl-Impersonate Session to make HTTP requests with. + Useful to set Header, Cookie, and Proxy data. Connections are saved and + re-used with the session so long as the server keeps the connection alive. + kwargs: Any extra keyword arguments to pass to the session.get() call. Use this + for one-time request changes like a header, cookie, or proxy. For example, + to request Byte-ranges use e.g., `headers={"Range": "bytes=0-128"}`. + """ + save_dir = save_path.parent + control_file = save_path.with_name(f"{save_path.name}.!dev") + + save_dir.mkdir(parents=True, exist_ok=True) + + if control_file.exists(): + # consider the file corrupt if the control file exists + save_path.unlink(missing_ok=True) + control_file.unlink() + elif save_path.exists(): + # if it exists, and no control file, then it should be safe + yield dict(file_downloaded=save_path, written=save_path.stat().st_size) + + # TODO: Design a control file format so we know how much of the file is missing + control_file.write_bytes(b"") + + attempts = 1 + try: + while True: + written = 0 + download_sizes = [] + last_speed_refresh = time.time() + + try: + stream = session.get(url, stream=True, **kwargs) + stream.raise_for_status() + + try: + content_length = int(stream.headers.get("Content-Length", "0")) + + # Skip Content-Length validation for compressed responses since + # curl_impersonate automatically decompresses but Content-Length shows compressed size + if stream.headers.get("Content-Encoding", "").lower() in ["gzip", "deflate", "br"]: + content_length = 0 + except ValueError: + content_length = 0 + + if content_length > 0: + yield dict(total=math.ceil(content_length / CHUNK_SIZE)) + else: + # we have no data to calculate total chunks + yield dict(total=None) # indeterminate mode + + with open(save_path, "wb") as f: + for chunk in stream.iter_content(chunk_size=CHUNK_SIZE): + download_size = len(chunk) + f.write(chunk) + written += download_size + + yield dict(advance=1) + + now = time.time() + time_since = now - last_speed_refresh + + download_sizes.append(download_size) + if time_since > PROGRESS_WINDOW or download_size < CHUNK_SIZE: + data_size = sum(download_sizes) + download_speed = math.ceil(data_size / (time_since or 1)) + yield dict(downloaded=f"{filesize.decimal(download_speed)}/s") + last_speed_refresh = now + download_sizes.clear() + + if content_length and written < content_length: + raise IOError(f"Failed to read {content_length} bytes from the track URI.") + + yield dict(file_downloaded=save_path, written=written) + break + except Exception as e: + save_path.unlink(missing_ok=True) + if DOWNLOAD_CANCELLED.is_set() or attempts == MAX_ATTEMPTS: + raise e + time.sleep(RETRY_WAIT) + attempts += 1 + finally: + control_file.unlink() + + +def curl_impersonate( + urls: Union[str, list[str], dict[str, Any], list[dict[str, Any]]], + output_dir: Path, + filename: str, + headers: Optional[MutableMapping[str, Union[str, bytes]]] = None, + cookies: Optional[Union[MutableMapping[str, str], CookieJar]] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, +) -> Generator[dict[str, Any], None, None]: + """ + Download files using Curl Impersonate. + https://github.com/lwthiker/curl-impersonate + + Yields the following download status updates while chunks are downloading: + + - {total: 123} (there are 123 chunks to download) + - {total: None} (there are an unknown number of chunks to download) + - {advance: 1} (one chunk was downloaded) + - {downloaded: "10.1 MB/s"} (currently downloading at a rate of 10.1 MB/s) + - {file_downloaded: Path(...), written: 1024} (download finished, has the save path and size) + + The data is in the same format accepted by rich's progress.update() function. + However, The `downloaded`, `file_downloaded` and `written` keys are custom and not + natively accepted by rich progress bars. + + Parameters: + urls: Web URL(s) to file(s) to download. You can use a dictionary with the key + "url" for the URI, and other keys for extra arguments to use per-URL. + output_dir: The folder to save the file into. If the save path's directory does + not exist then it will be made automatically. + filename: The filename or filename template to use for each file. The variables + you can use are `i` for the URL index and `ext` for the URL extension. + headers: A mapping of HTTP Header Key/Values to use for all downloads. + cookies: A mapping of Cookie Key/Values or a Cookie Jar to use for all downloads. + proxy: An optional proxy URI to route connections through for all downloads. + max_workers: The maximum amount of threads to use for downloads. Defaults to + min(32,(cpu_count+4)). + """ + if not urls: + raise ValueError("urls must be provided and not empty") + elif not isinstance(urls, (str, dict, list)): + raise TypeError(f"Expected urls to be {str} or {dict} or a list of one of them, not {type(urls)}") + + if not output_dir: + raise ValueError("output_dir must be provided") + elif not isinstance(output_dir, Path): + raise TypeError(f"Expected output_dir to be {Path}, not {type(output_dir)}") + + if not filename: + raise ValueError("filename must be provided") + elif not isinstance(filename, str): + raise TypeError(f"Expected filename to be {str}, not {type(filename)}") + + if not isinstance(headers, (MutableMapping, type(None))): + raise TypeError(f"Expected headers to be {MutableMapping}, not {type(headers)}") + + if not isinstance(cookies, (MutableMapping, CookieJar, type(None))): + raise TypeError(f"Expected cookies to be {MutableMapping} or {CookieJar}, not {type(cookies)}") + + if not isinstance(proxy, (str, type(None))): + raise TypeError(f"Expected proxy to be {str}, not {type(proxy)}") + + if not isinstance(max_workers, (int, type(None))): + raise TypeError(f"Expected max_workers to be {int}, not {type(max_workers)}") + + if not isinstance(urls, list): + urls = [urls] + + urls = [ + dict(save_path=save_path, **url) if isinstance(url, dict) else dict(url=url, save_path=save_path) + for i, url in enumerate(urls) + for save_path in [ + output_dir / filename.format(i=i, ext=get_extension(url["url"] if isinstance(url, dict) else url)) + ] + ] + + session = Session(impersonate=BROWSER) + if headers: + headers = {k: v for k, v in headers.items() if k.lower() != "accept-encoding"} + session.headers.update(headers) + if cookies: + session.cookies.update(cookies) + if proxy: + session.proxies.update({"all": proxy}) + + yield dict(total=len(urls)) + + download_sizes = [] + last_speed_refresh = time.time() + + with ThreadPoolExecutor(max_workers=max_workers) as pool: + for i, future in enumerate( + futures.as_completed((pool.submit(download, session=session, **url) for url in urls)) + ): + file_path, download_size = None, None + try: + for status_update in future.result(): + if status_update.get("file_downloaded") and status_update.get("written"): + file_path = status_update["file_downloaded"] + download_size = status_update["written"] + elif len(urls) == 1: + # these are per-chunk updates, only useful if it's one big file + yield status_update + except KeyboardInterrupt: + DOWNLOAD_CANCELLED.set() # skip pending track downloads + yield dict(downloaded="[yellow]CANCELLING") + pool.shutdown(wait=True, cancel_futures=True) + yield dict(downloaded="[yellow]CANCELLED") + # tell dl that it was cancelled + # the pool is already shut down, so exiting loop is fine + raise + except Exception: + DOWNLOAD_CANCELLED.set() # skip pending track downloads + yield dict(downloaded="[red]FAILING") + pool.shutdown(wait=True, cancel_futures=True) + yield dict(downloaded="[red]FAILED") + # tell dl that it failed + # the pool is already shut down, so exiting loop is fine + raise + else: + yield dict(file_downloaded=file_path) + yield dict(advance=1) + + now = time.time() + time_since = now - last_speed_refresh + + if download_size: # no size == skipped dl + download_sizes.append(download_size) + + if download_sizes and (time_since > PROGRESS_WINDOW or i == len(urls)): + data_size = sum(download_sizes) + download_speed = math.ceil(data_size / (time_since or 1)) + yield dict(downloaded=f"{filesize.decimal(download_speed)}/s") + last_speed_refresh = now + download_sizes.clear() + + +__all__ = ("curl_impersonate",) diff --git a/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py b/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py new file mode 100644 index 0000000..8254be6 --- /dev/null +++ b/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py @@ -0,0 +1,299 @@ +import logging +import os +import re +import subprocess +import warnings +from http.cookiejar import CookieJar +from itertools import chain +from pathlib import Path +from typing import Any, Generator, MutableMapping, Optional, Union + +import requests +from requests.cookies import cookiejar_from_dict, get_cookie_header + +from envied.core import binaries +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import DOWNLOAD_CANCELLED + +# Ignore FutureWarnings +warnings.simplefilter(action="ignore", category=FutureWarning) + +AUDIO_CODEC_MAP = {"AAC": "mp4a", "AC3": "ac-3", "EC3": "ec-3"} +VIDEO_CODEC_MAP = {"AVC": "avc", "HEVC": "hvc", "DV": "dvh", "HLG": "hev"} + + +def track_selection(track: object) -> list[str]: + """Return the N_m3u8DL-RE stream selection arguments for a track.""" + + if "dash" in track.data: + adaptation_set = track.data["dash"]["adaptation_set"] + representation = track.data["dash"]["representation"] + + track_type = track.__class__.__name__ + codec = track.codec.name + bitrate = track.bitrate // 1000 + language = track.language + width = track.width if track_type == "Video" else None + height = track.height if track_type == "Video" else None + range = track.range.name if track_type == "Video" else None + + elif "ism" in track.data: + stream_index = track.data["ism"]["stream_index"] + quality_level = track.data["ism"]["quality_level"] + + track_type = track.__class__.__name__ + codec = track.codec.name + bitrate = track.bitrate // 1000 + language = track.language + width = track.width if track_type == "Video" else None + height = track.height if track_type == "Video" else None + range = track.range.name if track_type == "Video" else None + adaptation_set = stream_index + representation = quality_level + + else: + return [] + + if track_type == "Audio": + codecs = AUDIO_CODEC_MAP.get(codec) + langs = adaptation_set.findall("lang") + representation.findall("lang") + track_ids = list( + set( + v + for x in chain(adaptation_set, representation) + for v in (x.get("audioTrackId"), x.get("id")) + if v is not None + ) + ) + roles = adaptation_set.findall("Role") + representation.findall("Role") + role = ":role=main" if next((i for i in roles if i.get("value").lower() == "main"), None) else "" + bandwidth = f"bwMin={bitrate}:bwMax={bitrate + 5}" + + if langs: + track_selection = ["-sa", f"lang={language}:codecs={codecs}:{bandwidth}{role}"] + elif len(track_ids) == 1: + track_selection = ["-sa", f"id={track_ids[0]}"] + else: + track_selection = ["-sa", f"for=best{role}"] + return track_selection + + if track_type == "Video": + # adjust codec based on range + codec_adjustments = {("HEVC", "DV"): "DV", ("HEVC", "HLG"): "HLG"} + codec = codec_adjustments.get((codec, range), codec) + codecs = VIDEO_CODEC_MAP.get(codec) + + bandwidth = f"bwMin={bitrate}:bwMax={bitrate + 5}" + if width and height: + resolution = f"{width}x{height}" + elif width: + resolution = f"{width}*" + else: + resolution = "for=best" + if resolution.startswith("for="): + track_selection = ["-sv", resolution] + track_selection.append(f"codecs={codecs}:{bandwidth}") + else: + track_selection = ["-sv", f"res={resolution}:codecs={codecs}:{bandwidth}"] + return track_selection + + +def download( + urls: Union[str, dict[str, Any], list[str], list[dict[str, Any]]], + track: object, + output_dir: Path, + filename: str, + headers: Optional[MutableMapping[str, Union[str, bytes]]] = None, + cookies: Optional[Union[MutableMapping[str, str], CookieJar]] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, + content_keys: Optional[dict[str, Any]] = None, +) -> Generator[dict[str, Any], None, None]: + if not urls: + raise ValueError("urls must be provided and not empty") + elif not isinstance(urls, (str, dict, list)): + raise TypeError(f"Expected urls to be {str} or {dict} or a list of one of them, not {type(urls)}") + + if not output_dir: + raise ValueError("output_dir must be provided") + elif not isinstance(output_dir, Path): + raise TypeError(f"Expected output_dir to be {Path}, not {type(output_dir)}") + + if not filename: + raise ValueError("filename must be provided") + elif not isinstance(filename, str): + raise TypeError(f"Expected filename to be {str}, not {type(filename)}") + + if not isinstance(headers, (MutableMapping, type(None))): + raise TypeError(f"Expected headers to be {MutableMapping}, not {type(headers)}") + + if not isinstance(cookies, (MutableMapping, CookieJar, type(None))): + raise TypeError(f"Expected cookies to be {MutableMapping} or {CookieJar}, not {type(cookies)}") + + if not isinstance(proxy, (str, type(None))): + raise TypeError(f"Expected proxy to be {str}, not {type(proxy)}") + + if not max_workers: + max_workers = min(32, (os.cpu_count() or 1) + 4) + elif not isinstance(max_workers, int): + raise TypeError(f"Expected max_workers to be {int}, not {type(max_workers)}") + + if not isinstance(urls, list): + urls = [urls] + + if not binaries.N_m3u8DL_RE: + raise EnvironmentError("N_m3u8DL-RE executable not found...") + + if cookies and not isinstance(cookies, CookieJar): + cookies = cookiejar_from_dict(cookies) + + track_type = track.__class__.__name__ + thread_count = str(config.n_m3u8dl_re.get("thread_count", max_workers)) + ad_keyword = config.n_m3u8dl_re.get("ad_keyword") + + arguments = [ + track.url, + "--save-dir", + output_dir, + "--tmp-dir", + output_dir, + "--thread-count", + thread_count, + "--no-log", + "--write-meta-json", + "false", + ] + + for header, value in (headers or {}).items(): + if header.lower() in ("accept-encoding", "cookie"): + continue + arguments.extend(["--header", f"{header}: {value}"]) + + if cookies: + cookie_header = get_cookie_header(cookies, requests.Request(url=track.url)) + if cookie_header: + arguments.extend(["--header", f"Cookie: {cookie_header}"]) + + if proxy: + arguments.extend(["--custom-proxy", proxy]) + + if content_keys: + for kid, key in content_keys.items(): + keys = f"{kid.hex}:{key.lower()}" + arguments.extend(["--key", keys]) + arguments.extend(["--use-shaka-packager"]) + + if ad_keyword: + arguments.extend(["--ad-keyword", ad_keyword]) + + if track.descriptor.name == "URL": + error = f"[N_m3u8DL-RE]: {track.descriptor} is currently not supported" + raise ValueError(error) + elif track.descriptor.name == "DASH": + arguments.extend(track_selection(track)) + + # TODO: improve this nonsense + percent_re = re.compile(r"(\d+\.\d+%)") + speed_re = re.compile(r"(? Generator[dict[str, Any], None, None]: + """ + Download files using N_m3u8DL-RE. + https://github.com/nilaoda/N_m3u8DL-RE + + Yields the following download status updates while chunks are downloading: + + - {total: 100} (100% download total) + - {completed: 1} (1% download progress out of 100%) + - {downloaded: "10.1 MB/s"} (currently downloading at a rate of 10.1 MB/s) + + The data is in the same format accepted by rich's progress.update() function. + + Parameters: + urls: Web URL(s) to file(s) to download. You can use a dictionary with the key + "url" for the URI, and other keys for extra arguments to use per-URL. + track: The track to download. Used to get track attributes for the selection + process. Note that Track.Descriptor.URL is not supported by N_m3u8DL-RE. + output_dir: The folder to save the file into. If the save path's directory does + not exist then it will be made automatically. + filename: The filename or filename template to use for each file. The variables + you can use are `i` for the URL index and `ext` for the URL extension. + headers: A mapping of HTTP Header Key/Values to use for the download. + cookies: A mapping of Cookie Key/Values or a Cookie Jar to use for the download. + max_workers: The maximum amount of threads to use for downloads. Defaults to + min(32,(cpu_count+4)). Can be set in config with --thread-count option. + content_keys: The content keys to use for decryption. + """ + track_type = track.__class__.__name__ + + log = logging.getLogger("N_m3u8DL-RE") + if proxy and not config.n_m3u8dl_re.get("use_proxy", True): + log.warning(f"{track_type}: Ignoring proxy as N_m3u8DL-RE is set to use_proxy=False") + proxy = None + + yield from download(urls, track, output_dir, filename, headers, cookies, proxy, max_workers, content_keys) + + +__all__ = ("n_m3u8dl_re",) diff --git a/packages/envied/src/envied/core/downloaders/requests.py b/packages/envied/src/envied/core/downloaders/requests.py new file mode 100644 index 0000000..ecddb55 --- /dev/null +++ b/packages/envied/src/envied/core/downloaders/requests.py @@ -0,0 +1,271 @@ +import math +import os +import time +from concurrent.futures import as_completed +from concurrent.futures.thread import ThreadPoolExecutor +from http.cookiejar import CookieJar +from pathlib import Path +from typing import Any, Generator, MutableMapping, Optional, Union + +from requests import Session +from requests.adapters import HTTPAdapter +from rich import filesize + +from envied.core.constants import DOWNLOAD_CANCELLED +from envied.core.utilities import get_extension + +MAX_ATTEMPTS = 5 +RETRY_WAIT = 2 +CHUNK_SIZE = 1024 +PROGRESS_WINDOW = 5 + +DOWNLOAD_SIZES = [] +LAST_SPEED_REFRESH = time.time() + + +def download( + url: str, save_path: Path, session: Optional[Session] = None, segmented: bool = False, **kwargs: Any +) -> Generator[dict[str, Any], None, None]: + """ + Download a file using Python Requests. + https://requests.readthedocs.io + + Yields the following download status updates while chunks are downloading: + + - {total: 123} (there are 123 chunks to download) + - {total: None} (there are an unknown number of chunks to download) + - {advance: 1} (one chunk was downloaded) + - {downloaded: "10.1 MB/s"} (currently downloading at a rate of 10.1 MB/s) + - {file_downloaded: Path(...), written: 1024} (download finished, has the save path and size) + + The data is in the same format accepted by rich's progress.update() function. The + `downloaded` key is custom and is not natively accepted by all rich progress bars. + + Parameters: + url: Web URL of a file to download. + save_path: The path to save the file to. If the save path's directory does not + exist then it will be made automatically. + session: The Requests Session to make HTTP requests with. Useful to set Header, + Cookie, and Proxy data. Connections are saved and re-used with the session + so long as the server keeps the connection alive. + segmented: If downloads are segments or parts of one bigger file. + kwargs: Any extra keyword arguments to pass to the session.get() call. Use this + for one-time request changes like a header, cookie, or proxy. For example, + to request Byte-ranges use e.g., `headers={"Range": "bytes=0-128"}`. + """ + global LAST_SPEED_REFRESH + + session = session or Session() + + save_dir = save_path.parent + control_file = save_path.with_name(f"{save_path.name}.!dev") + + save_dir.mkdir(parents=True, exist_ok=True) + + if control_file.exists(): + # consider the file corrupt if the control file exists + save_path.unlink(missing_ok=True) + control_file.unlink() + elif save_path.exists(): + # if it exists, and no control file, then it should be safe + yield dict(file_downloaded=save_path, written=save_path.stat().st_size) + # TODO: This should return, potential recovery bug + + # TODO: Design a control file format so we know how much of the file is missing + control_file.write_bytes(b"") + + attempts = 1 + try: + while True: + written = 0 + + # these are for single-url speed calcs only + download_sizes = [] + last_speed_refresh = time.time() + + try: + stream = session.get(url, stream=True, **kwargs) + stream.raise_for_status() + + if not segmented: + try: + content_length = int(stream.headers.get("Content-Length", "0")) + + # Skip Content-Length validation for compressed responses since + # requests automatically decompresses but Content-Length shows compressed size + if stream.headers.get("Content-Encoding", "").lower() in ["gzip", "deflate", "br"]: + content_length = 0 + except ValueError: + content_length = 0 + + if content_length > 0: + yield dict(total=math.ceil(content_length / CHUNK_SIZE)) + else: + # we have no data to calculate total chunks + yield dict(total=None) # indeterminate mode + + with open(save_path, "wb") as f: + for chunk in stream.iter_content(chunk_size=CHUNK_SIZE): + download_size = len(chunk) + f.write(chunk) + written += download_size + + if not segmented: + yield dict(advance=1) + now = time.time() + time_since = now - last_speed_refresh + download_sizes.append(download_size) + if time_since > PROGRESS_WINDOW or download_size < CHUNK_SIZE: + data_size = sum(download_sizes) + download_speed = math.ceil(data_size / (time_since or 1)) + yield dict(downloaded=f"{filesize.decimal(download_speed)}/s") + last_speed_refresh = now + download_sizes.clear() + + if content_length and written < content_length: + raise IOError(f"Failed to read {content_length} bytes from the track URI.") + + yield dict(file_downloaded=save_path, written=written) + + if segmented: + yield dict(advance=1) + now = time.time() + time_since = now - LAST_SPEED_REFRESH + if written: # no size == skipped dl + DOWNLOAD_SIZES.append(written) + if DOWNLOAD_SIZES and time_since > PROGRESS_WINDOW: + data_size = sum(DOWNLOAD_SIZES) + download_speed = math.ceil(data_size / (time_since or 1)) + yield dict(downloaded=f"{filesize.decimal(download_speed)}/s") + LAST_SPEED_REFRESH = now + DOWNLOAD_SIZES.clear() + break + except Exception as e: + save_path.unlink(missing_ok=True) + if DOWNLOAD_CANCELLED.is_set() or attempts == MAX_ATTEMPTS: + raise e + time.sleep(RETRY_WAIT) + attempts += 1 + finally: + control_file.unlink() + + +def requests( + urls: Union[str, list[str], dict[str, Any], list[dict[str, Any]]], + output_dir: Path, + filename: str, + headers: Optional[MutableMapping[str, Union[str, bytes]]] = None, + cookies: Optional[Union[MutableMapping[str, str], CookieJar]] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, +) -> Generator[dict[str, Any], None, None]: + """ + Download a file using Python Requests. + https://requests.readthedocs.io + + Yields the following download status updates while chunks are downloading: + + - {total: 123} (there are 123 chunks to download) + - {total: None} (there are an unknown number of chunks to download) + - {advance: 1} (one chunk was downloaded) + - {downloaded: "10.1 MB/s"} (currently downloading at a rate of 10.1 MB/s) + - {file_downloaded: Path(...), written: 1024} (download finished, has the save path and size) + + The data is in the same format accepted by rich's progress.update() function. + However, The `downloaded`, `file_downloaded` and `written` keys are custom and not + natively accepted by rich progress bars. + + Parameters: + urls: Web URL(s) to file(s) to download. You can use a dictionary with the key + "url" for the URI, and other keys for extra arguments to use per-URL. + output_dir: The folder to save the file into. If the save path's directory does + not exist then it will be made automatically. + filename: The filename or filename template to use for each file. The variables + you can use are `i` for the URL index and `ext` for the URL extension. + headers: A mapping of HTTP Header Key/Values to use for all downloads. + cookies: A mapping of Cookie Key/Values or a Cookie Jar to use for all downloads. + proxy: An optional proxy URI to route connections through for all downloads. + max_workers: The maximum amount of threads to use for downloads. Defaults to + min(32,(cpu_count+4)). + """ + if not urls: + raise ValueError("urls must be provided and not empty") + elif not isinstance(urls, (str, dict, list)): + raise TypeError(f"Expected urls to be {str} or {dict} or a list of one of them, not {type(urls)}") + + if not output_dir: + raise ValueError("output_dir must be provided") + elif not isinstance(output_dir, Path): + raise TypeError(f"Expected output_dir to be {Path}, not {type(output_dir)}") + + if not filename: + raise ValueError("filename must be provided") + elif not isinstance(filename, str): + raise TypeError(f"Expected filename to be {str}, not {type(filename)}") + + if not isinstance(headers, (MutableMapping, type(None))): + raise TypeError(f"Expected headers to be {MutableMapping}, not {type(headers)}") + + if not isinstance(cookies, (MutableMapping, CookieJar, type(None))): + raise TypeError(f"Expected cookies to be {MutableMapping} or {CookieJar}, not {type(cookies)}") + + if not isinstance(proxy, (str, type(None))): + raise TypeError(f"Expected proxy to be {str}, not {type(proxy)}") + + if not isinstance(max_workers, (int, type(None))): + raise TypeError(f"Expected max_workers to be {int}, not {type(max_workers)}") + + if not isinstance(urls, list): + urls = [urls] + + if not max_workers: + max_workers = min(32, (os.cpu_count() or 1) + 4) + + urls = [ + dict(save_path=save_path, **url) if isinstance(url, dict) else dict(url=url, save_path=save_path) + for i, url in enumerate(urls) + for save_path in [ + output_dir / filename.format(i=i, ext=get_extension(url["url"] if isinstance(url, dict) else url)) + ] + ] + + session = Session() + session.mount("https://", HTTPAdapter(pool_connections=max_workers, pool_maxsize=max_workers, pool_block=True)) + session.mount("http://", session.adapters["https://"]) + + if headers: + headers = {k: v for k, v in headers.items() if k.lower() != "accept-encoding"} + session.headers.update(headers) + if cookies: + session.cookies.update(cookies) + if proxy: + session.proxies.update({"all": proxy}) + + yield dict(total=len(urls)) + + try: + with ThreadPoolExecutor(max_workers=max_workers) as pool: + for future in as_completed(pool.submit(download, session=session, segmented=False, **url) for url in urls): + try: + yield from future.result() + except KeyboardInterrupt: + DOWNLOAD_CANCELLED.set() # skip pending track downloads + yield dict(downloaded="[yellow]CANCELLING") + pool.shutdown(wait=True, cancel_futures=True) + yield dict(downloaded="[yellow]CANCELLED") + # tell dl that it was cancelled + # the pool is already shut down, so exiting loop is fine + raise + except Exception: + DOWNLOAD_CANCELLED.set() # skip pending track downloads + yield dict(downloaded="[red]FAILING") + pool.shutdown(wait=True, cancel_futures=True) + yield dict(downloaded="[red]FAILED") + # tell dl that it failed + # the pool is already shut down, so exiting loop is fine + raise + finally: + DOWNLOAD_SIZES.clear() + + +__all__ = ("requests",) diff --git a/packages/envied/src/envied/core/drm/__init__.py b/packages/envied/src/envied/core/drm/__init__.py new file mode 100644 index 0000000..2b3c0ef --- /dev/null +++ b/packages/envied/src/envied/core/drm/__init__.py @@ -0,0 +1,10 @@ +from typing import Union + +from envied.core.drm.clearkey import ClearKey +from envied.core.drm.playready import PlayReady +from envied.core.drm.widevine import Widevine + +DRM_T = Union[ClearKey, Widevine, PlayReady] + + +__all__ = ("ClearKey", "Widevine", "PlayReady", "DRM_T") diff --git a/packages/envied/src/envied/core/drm/clearkey.py b/packages/envied/src/envied/core/drm/clearkey.py new file mode 100644 index 0000000..5652501 --- /dev/null +++ b/packages/envied/src/envied/core/drm/clearkey.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +import base64 +import shutil +from pathlib import Path +from typing import Optional, Union +from urllib.parse import urljoin + +from Cryptodome.Cipher import AES +from Cryptodome.Util.Padding import unpad +from m3u8.model import Key +from requests import Session + + +class ClearKey: + """AES Clear Key DRM System.""" + + def __init__(self, key: Union[bytes, str], iv: Optional[Union[bytes, str]] = None): + """ + Generally IV should be provided where possible. If not provided, it will be + set to \x00 of the same bit-size of the key. + """ + if isinstance(key, str): + key = bytes.fromhex(key.replace("0x", "")) + if not isinstance(key, bytes): + raise ValueError(f"Expected AES Key to be bytes, not {key!r}") + if not iv: + iv = b"\x00" + if isinstance(iv, str): + iv = bytes.fromhex(iv.replace("0x", "")) + if not isinstance(iv, bytes): + raise ValueError(f"Expected IV to be bytes, not {iv!r}") + + if len(iv) < len(key): + iv = iv * (len(key) - len(iv) + 1) + + self.key: bytes = key + self.iv: bytes = iv + + def decrypt(self, path: Path) -> None: + """Decrypt a Track with AES Clear Key DRM.""" + if not path or not path.exists(): + raise ValueError("Tried to decrypt a file that does not exist.") + + decrypted = AES.new(self.key, AES.MODE_CBC, self.iv).decrypt(path.read_bytes()) + + try: + decrypted = unpad(decrypted, AES.block_size) + except ValueError: + # the decrypted data is likely already in the block size boundary + pass + + decrypted_path = path.with_suffix(f".decrypted{path.suffix}") + decrypted_path.write_bytes(decrypted) + + path.unlink() + shutil.move(decrypted_path, path) + + @classmethod + def from_m3u_key(cls, m3u_key: Key, session: Optional[Session] = None) -> ClearKey: + """ + Load a ClearKey from an M3U(8) Playlist's EXT-X-KEY. + + Parameters: + m3u_key: A Key object parsed from a m3u(8) playlist using + the `m3u8` library. + session: Optional session used to request external URIs with. + Useful to set headers, proxies, cookies, and so forth. + """ + if not isinstance(m3u_key, Key): + raise ValueError(f"Provided M3U Key is in an unexpected type {m3u_key!r}") + if not isinstance(session, (Session, type(None))): + raise TypeError(f"Expected session to be a {Session}, not a {type(session)}") + + if not m3u_key.method.startswith("AES"): + raise ValueError(f"Provided M3U Key is not an AES Clear Key, {m3u_key.method}") + if not m3u_key.uri: + raise ValueError("No URI in M3U Key, unable to get Key.") + + if not session: + session = Session() + + if not session.headers.get("User-Agent"): + # commonly needed default for HLS playlists + session.headers["User-Agent"] = "smartexoplayer/1.1.0 (Linux;Android 8.0.0) ExoPlayerLib/2.13.3" + + if m3u_key.uri.startswith("data:"): + media_types, data = m3u_key.uri[5:].split(",") + media_types = media_types.split(";") + if "base64" in media_types: + data = base64.b64decode(data) + key = data + else: + url = urljoin(m3u_key.base_uri, m3u_key.uri) + res = session.get(url) + res.raise_for_status() + if not res.content: + raise EOFError("Unexpected Empty Response by M3U Key URI.") + if len(res.content) < 16: + raise EOFError(f"Unexpected Length of Key ({len(res.content)} bytes) in M3U Key.") + key = res.content + + if m3u_key.iv: + iv = bytes.fromhex(m3u_key.iv.replace("0x", "")) + else: + iv = None + + return cls(key=key, iv=iv) + + +__all__ = ("ClearKey",) diff --git a/packages/envied/src/envied/core/drm/playready.py b/packages/envied/src/envied/core/drm/playready.py new file mode 100644 index 0000000..2734fc8 --- /dev/null +++ b/packages/envied/src/envied/core/drm/playready.py @@ -0,0 +1,402 @@ +from __future__ import annotations + +import base64 +import shutil +import subprocess +import textwrap +from pathlib import Path +from typing import Any, Callable, Optional, Union +from uuid import UUID + +import m3u8 +from construct import Container +from pymp4.parser import Box +from pyplayready.cdm import Cdm as PlayReadyCdm +from pyplayready.system.pssh import PSSH +from requests import Session +from rich.text import Text + +from envied.core import binaries +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import AnyTrack +from envied.core.utilities import get_boxes +from envied.core.utils.subprocess import ffprobe + + +class PlayReady: + """PlayReady DRM System.""" + + def __init__( + self, + pssh: PSSH, + kid: Union[UUID, str, bytes, None] = None, + pssh_b64: Optional[str] = None, + **kwargs: Any, + ): + if not pssh: + raise ValueError("Provided PSSH is empty.") + if not isinstance(pssh, PSSH): + raise TypeError(f"Expected pssh to be a {PSSH}, not {pssh!r}") + + if pssh_b64: + kids = self._extract_kids_from_pssh_b64(pssh_b64) + else: + kids = [] + + # Extract KIDs using pyplayready's method (may miss some KIDs) + if not kids: + for header in pssh.wrm_headers: + try: + signed_ids, _, _, _ = header.read_attributes() + except Exception: + continue + for signed_id in signed_ids: + try: + kids.append(UUID(bytes_le=base64.b64decode(signed_id.value))) + except Exception: + continue + + if kid: + if isinstance(kid, str): + kid = UUID(hex=kid) + elif isinstance(kid, bytes): + kid = UUID(bytes=kid) + if not isinstance(kid, UUID): + raise ValueError(f"Expected kid to be a {UUID}, str, or bytes, not {kid!r}") + if kid not in kids: + kids.append(kid) + + self._pssh = pssh + self._kids = kids + + if not self.kids: + raise PlayReady.Exceptions.KIDNotFound("No Key ID was found within PSSH and none were provided.") + + self.content_keys: dict[UUID, str] = {} + self.data: dict = kwargs or {} + if pssh_b64: + self.data.setdefault("pssh_b64", pssh_b64) + + def _extract_kids_from_pssh_b64(self, pssh_b64: str) -> list[UUID]: + """Extract all KIDs from base64-encoded PSSH data.""" + try: + import xml.etree.ElementTree as ET + + # Decode the PSSH + pssh_bytes = base64.b64decode(pssh_b64) + + # Try to find XML in the PSSH data + # PlayReady PSSH usually has XML embedded in it + pssh_str = pssh_bytes.decode("utf-16le", errors="ignore") + + # Find WRMHEADER + xml_start = pssh_str.find("") + len("") + clean_xml = clean_xml[:xml_end] + + root = ET.fromstring(clean_xml) + ns = {"pr": "http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader"} + + kids = [] + + # Extract from CUSTOMATTRIBUTES/KIDS + kid_elements = root.findall(".//pr:CUSTOMATTRIBUTES/pr:KIDS/pr:KID", ns) + for kid_elem in kid_elements: + value = kid_elem.get("VALUE") + if value: + try: + kid_bytes = base64.b64decode(value + "==") + kid_uuid = UUID(bytes_le=kid_bytes) + kids.append(kid_uuid) + except Exception: + pass + + # Also get individual KID + individual_kids = root.findall(".//pr:DATA/pr:KID", ns) + for kid_elem in individual_kids: + if kid_elem.text: + try: + kid_bytes = base64.b64decode(kid_elem.text.strip() + "==") + kid_uuid = UUID(bytes_le=kid_bytes) + if kid_uuid not in kids: + kids.append(kid_uuid) + except Exception: + pass + + return kids + + except Exception: + pass + + return [] + + @classmethod + def from_track(cls, track: AnyTrack, session: Optional[Session] = None) -> PlayReady: + if not session: + session = Session() + session.headers.update(config.headers) + + kid: Optional[UUID] = None + pssh_boxes: list[Container] = [] + tenc_boxes: list[Container] = [] + + if track.descriptor == track.Descriptor.HLS: + m3u_url = track.url + master = m3u8.loads(session.get(m3u_url).text, uri=m3u_url) + pssh_boxes.extend( + Box.parse(base64.b64decode(x.uri.split(",")[-1])) + for x in (master.session_keys or master.keys) + if x and x.keyformat and "playready" in x.keyformat.lower() + ) + + init_data = track.get_init_segment(session=session) + if init_data: + probe = ffprobe(init_data) + if probe: + for stream in probe.get("streams") or []: + enc_key_id = stream.get("tags", {}).get("enc_key_id") + if enc_key_id: + kid = UUID(bytes=base64.b64decode(enc_key_id)) + pssh_boxes.extend(list(get_boxes(init_data, b"pssh"))) + tenc_boxes.extend(list(get_boxes(init_data, b"tenc"))) + + pssh = next((b for b in pssh_boxes if b.system_ID == PSSH.SYSTEM_ID.bytes), None) + if not pssh: + raise PlayReady.Exceptions.PSSHNotFound("PSSH was not found in track data.") + + tenc = next(iter(tenc_boxes), None) + if not kid and tenc and tenc.key_ID.int != 0: + kid = tenc.key_ID + + pssh_bytes = Box.build(pssh) + return cls(pssh=PSSH(pssh_bytes), kid=kid, pssh_b64=base64.b64encode(pssh_bytes).decode()) + + @classmethod + def from_init_data(cls, init_data: bytes) -> PlayReady: + if not init_data: + raise ValueError("Init data should be provided.") + if not isinstance(init_data, bytes): + raise TypeError(f"Expected init data to be bytes, not {init_data!r}") + + kid: Optional[UUID] = None + pssh_boxes: list[Container] = list(get_boxes(init_data, b"pssh")) + tenc_boxes: list[Container] = list(get_boxes(init_data, b"tenc")) + + probe = ffprobe(init_data) + if probe: + for stream in probe.get("streams") or []: + enc_key_id = stream.get("tags", {}).get("enc_key_id") + if enc_key_id: + kid = UUID(bytes=base64.b64decode(enc_key_id)) + + pssh = next((b for b in pssh_boxes if b.system_ID == PSSH.SYSTEM_ID.bytes), None) + if not pssh: + raise PlayReady.Exceptions.PSSHNotFound("PSSH was not found in track data.") + + tenc = next(iter(tenc_boxes), None) + if not kid and tenc and tenc.key_ID.int != 0: + kid = tenc.key_ID + + pssh_bytes = Box.build(pssh) + return cls(pssh=PSSH(pssh_bytes), kid=kid, pssh_b64=base64.b64encode(pssh_bytes).decode()) + + @property + def pssh(self) -> PSSH: + return self._pssh + + @property + def pssh_b64(self) -> Optional[str]: + return self.data.get("pssh_b64") + + @property + def kid(self) -> Optional[UUID]: + return next(iter(self.kids), None) + + @property + def kids(self) -> list[UUID]: + return self._kids + + def get_content_keys(self, cdm: PlayReadyCdm, certificate: Callable, licence: Callable) -> None: + for kid in self.kids: + if kid in self.content_keys: + continue + session_id = cdm.open() + try: + challenge = cdm.get_license_challenge(session_id, self.pssh.wrm_headers[0]) + license_res = licence(challenge=challenge) + + if isinstance(license_res, bytes): + license_str = license_res.decode(errors="ignore") + else: + license_str = str(license_res) + + if "" not in license_str: + try: + license_str = base64.b64decode(license_str + "===").decode() + except Exception: + pass + + cdm.parse_license(session_id, license_str) + keys = {key.key_id: key.key.hex() for key in cdm.get_keys(session_id)} + self.content_keys.update(keys) + finally: + cdm.close(session_id) + + if not self.content_keys: + raise PlayReady.Exceptions.EmptyLicense("No Content Keys were within the License") + + def decrypt(self, path: Path, use_mp4decrypt: bool = False) -> None: + """ + Decrypt a Track with PlayReady DRM. + Args: + path: Path to the encrypted file to decrypt + use_mp4decrypt: If True, use mp4decrypt instead of Shaka Packager + Raises: + EnvironmentError if the required decryption executable could not be found. + ValueError if the track has not yet been downloaded. + SubprocessError if the decryption process returned a non-zero exit code. + """ + if not self.content_keys: + raise ValueError("Cannot decrypt a Track without any Content Keys...") + + if not path or not path.exists(): + raise ValueError("Tried to decrypt a file that does not exist.") + + if use_mp4decrypt: + return self._decrypt_with_mp4decrypt(path) + else: + return self._decrypt_with_shaka_packager(path) + + def _decrypt_with_mp4decrypt(self, path: Path) -> None: + """Decrypt using mp4decrypt""" + if not binaries.Mp4decrypt: + raise EnvironmentError("mp4decrypt executable not found but is required.") + + output_path = path.with_stem(f"{path.stem}_decrypted") + + # Build key arguments + key_args = [] + for kid, key in self.content_keys.items(): + kid_hex = kid.hex if hasattr(kid, "hex") else str(kid).replace("-", "") + key_hex = key if isinstance(key, str) else key.hex() + key_args.extend(["--key", f"{kid_hex}:{key_hex}"]) + + cmd = [ + str(binaries.Mp4decrypt), + "--show-progress", + *key_args, + str(path), + str(output_path), + ] + + try: + subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + except subprocess.CalledProcessError as e: + error_msg = e.stderr if e.stderr else f"mp4decrypt failed with exit code {e.returncode}" + raise subprocess.CalledProcessError(e.returncode, cmd, output=e.stdout, stderr=error_msg) + + if not output_path.exists(): + raise RuntimeError(f"mp4decrypt failed: output file {output_path} was not created") + if output_path.stat().st_size == 0: + raise RuntimeError(f"mp4decrypt failed: output file {output_path} is empty") + + path.unlink() + shutil.move(output_path, path) + + def _decrypt_with_shaka_packager(self, path: Path) -> None: + """Decrypt using Shaka Packager (original method)""" + if not binaries.ShakaPackager: + raise EnvironmentError("Shaka Packager executable not found but is required.") + + output_path = path.with_stem(f"{path.stem}_decrypted") + config.directories.temp.mkdir(parents=True, exist_ok=True) + + try: + arguments = [ + f"input={path},stream=0,output={output_path},output_format=MP4", + "--enable_raw_key_decryption", + "--keys", + ",".join( + [ + *[ + f"label={i}:key_id={kid.hex}:key={key.lower()}" + for i, (kid, key) in enumerate(self.content_keys.items()) + ], + *[ + f"label={i}:key_id={'00' * 16}:key={key.lower()}" + for i, (kid, key) in enumerate(self.content_keys.items(), len(self.content_keys)) + ], + ] + ), + "--temp_dir", + config.directories.temp, + ] + + p = subprocess.Popen( + [binaries.ShakaPackager, *arguments], + stdout=subprocess.DEVNULL, + stderr=subprocess.PIPE, + universal_newlines=True, + ) + + stream_skipped = False + had_error = False + shaka_log_buffer = "" + for line in iter(p.stderr.readline, ""): + line = line.strip() + if not line: + continue + if "Skip stream" in line: + stream_skipped = True + if ":INFO:" in line: + continue + if "I0" in line or "W0" in line: + continue + if ":ERROR:" in line: + had_error = True + if "Insufficient bits in bitstream for given AVC profile" in line: + continue + shaka_log_buffer += f"{line.strip()}\n" + + if shaka_log_buffer: + shaka_log_buffer = "\n ".join( + textwrap.wrap(shaka_log_buffer.rstrip(), width=console.width - 22, initial_indent="") + ) + console.log(Text.from_ansi("\n[PlayReady]: " + shaka_log_buffer)) + + p.wait() + + if p.returncode != 0 or had_error: + raise subprocess.CalledProcessError(p.returncode, arguments) + + path.unlink() + if not stream_skipped: + shutil.move(output_path, path) + except subprocess.CalledProcessError as e: + if e.returncode == 0xC000013A: + raise KeyboardInterrupt() + raise + + class Exceptions: + class PSSHNotFound(Exception): + pass + + class KIDNotFound(Exception): + pass + + class CEKNotFound(Exception): + pass + + class EmptyLicense(Exception): + pass + + +__all__ = ("PlayReady",) diff --git a/packages/envied/src/envied/core/drm/widevine.py b/packages/envied/src/envied/core/drm/widevine.py new file mode 100644 index 0000000..3b1bdb6 --- /dev/null +++ b/packages/envied/src/envied/core/drm/widevine.py @@ -0,0 +1,381 @@ +from __future__ import annotations + +import base64 +import shutil +import subprocess +import textwrap +from pathlib import Path +from typing import Any, Callable, Optional, Union +from uuid import UUID + +import m3u8 +from construct import Container +from pymp4.parser import Box +from pywidevine.cdm import Cdm as WidevineCdm +from pywidevine.pssh import PSSH +from requests import Session +from rich.text import Text + +from envied.core import binaries +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import AnyTrack +from envied.core.utilities import get_boxes +from envied.core.utils.subprocess import ffprobe + + +class Widevine: + """Widevine DRM System.""" + + def __init__(self, pssh: PSSH, kid: Union[UUID, str, bytes, None] = None, **kwargs: Any): + if not pssh: + raise ValueError("Provided PSSH is empty.") + if not isinstance(pssh, PSSH): + raise TypeError(f"Expected pssh to be a {PSSH}, not {pssh!r}") + + if pssh.system_id == PSSH.SystemId.PlayReady: + pssh.to_widevine() + + if kid: + if isinstance(kid, str): + kid = UUID(hex=kid) + elif isinstance(kid, bytes): + kid = UUID(bytes=kid) + if not isinstance(kid, UUID): + raise ValueError(f"Expected kid to be a {UUID}, str, or bytes, not {kid!r}") + pssh.set_key_ids([kid]) + + self._pssh = pssh + + if not self.kids: + raise Widevine.Exceptions.KIDNotFound("No Key ID was found within PSSH and none were provided.") + + self.content_keys: dict[UUID, str] = {} + self.data: dict = kwargs or {} + + @classmethod + def from_track(cls, track: AnyTrack, session: Optional[Session] = None) -> Widevine: + """ + Get PSSH and KID from within the Initiation Segment of the Track Data. + It also tries to get PSSH and KID from other track data like M3U8 data + as well as through ffprobe. + + Create a Widevine DRM System object from a track's information. + This should only be used if a PSSH could not be provided directly. + It is *rare* to need to use this. + + You may provide your own requests session to be able to use custom + headers and more. + + Raises: + PSSHNotFound - If the PSSH was not found within the data. + KIDNotFound - If the KID was not found within the data or PSSH. + """ + if not session: + session = Session() + session.headers.update(config.headers) + + kid: Optional[UUID] = None + pssh_boxes: list[Container] = [] + tenc_boxes: list[Container] = [] + + if track.descriptor == track.Descriptor.HLS: + m3u_url = track.url + master = m3u8.loads(session.get(m3u_url).text, uri=m3u_url) + pssh_boxes.extend( + Box.parse(base64.b64decode(x.uri.split(",")[-1])) + for x in (master.session_keys or master.keys) + if x and x.keyformat and x.keyformat.lower() == WidevineCdm.urn + ) + + init_data = track.get_init_segment(session=session) + if init_data: + # try get via ffprobe, needed for non mp4 data e.g. WEBM from Google Play + probe = ffprobe(init_data) + if probe: + for stream in probe.get("streams") or []: + enc_key_id = stream.get("tags", {}).get("enc_key_id") + if enc_key_id: + kid = UUID(bytes=base64.b64decode(enc_key_id)) + pssh_boxes.extend(list(get_boxes(init_data, b"pssh"))) + tenc_boxes.extend(list(get_boxes(init_data, b"tenc"))) + + pssh_boxes.sort(key=lambda b: {PSSH.SystemId.Widevine: 0, PSSH.SystemId.PlayReady: 1}[b.system_ID]) + + pssh = next(iter(pssh_boxes), None) + if not pssh: + raise Widevine.Exceptions.PSSHNotFound("PSSH was not found in track data.") + + tenc = next(iter(tenc_boxes), None) + if not kid and tenc and tenc.key_ID.int != 0: + kid = tenc.key_ID + + return cls(pssh=PSSH(pssh), kid=kid) + + @classmethod + def from_init_data(cls, init_data: bytes) -> Widevine: + """ + Get PSSH and KID from within Initialization Segment Data. + + This should only be used if a PSSH could not be provided directly. + It is *rare* to need to use this. + + Raises: + PSSHNotFound - If the PSSH was not found within the data. + KIDNotFound - If the KID was not found within the data or PSSH. + """ + if not init_data: + raise ValueError("Init data should be provided.") + if not isinstance(init_data, bytes): + raise TypeError(f"Expected init data to be bytes, not {init_data!r}") + + kid: Optional[UUID] = None + pssh_boxes: list[Container] = list(get_boxes(init_data, b"pssh")) + tenc_boxes: list[Container] = list(get_boxes(init_data, b"tenc")) + + # try get via ffprobe, needed for non mp4 data e.g. WEBM from Google Play + probe = ffprobe(init_data) + if probe: + for stream in probe.get("streams") or []: + enc_key_id = stream.get("tags", {}).get("enc_key_id") + if enc_key_id: + kid = UUID(bytes=base64.b64decode(enc_key_id)) + + pssh_boxes.sort(key=lambda b: {PSSH.SystemId.Widevine: 0, PSSH.SystemId.PlayReady: 1}[b.system_ID]) + + pssh = next(iter(pssh_boxes), None) + if not pssh: + raise Widevine.Exceptions.PSSHNotFound("PSSH was not found in track data.") + + tenc = next(iter(tenc_boxes), None) + if not kid and tenc and tenc.key_ID.int != 0: + kid = tenc.key_ID + + return cls(pssh=PSSH(pssh), kid=kid) + + @property + def pssh(self) -> PSSH: + """Get Protection System Specific Header Box.""" + return self._pssh + + @property + def kid(self) -> Optional[UUID]: + """Get first Key ID, if any.""" + return next(iter(self.kids), None) + + @property + def kids(self) -> list[UUID]: + """Get all Key IDs.""" + return self._pssh.key_ids + + def get_content_keys(self, cdm: WidevineCdm, certificate: Callable, licence: Callable) -> None: + """ + Create a CDM Session and obtain Content Keys for this DRM Instance. + The certificate and license params are expected to be a function and will + be provided with the challenge and session ID. + """ + for kid in self.kids: + if kid in self.content_keys: + continue + + session_id = cdm.open() + + try: + cert = certificate(challenge=cdm.service_certificate_challenge) + if cert and hasattr(cdm, "set_service_certificate"): + cdm.set_service_certificate(session_id, cert) + + cdm.parse_license(session_id, licence(challenge=cdm.get_license_challenge(session_id, self.pssh))) + + self.content_keys = {key.kid: key.key.hex() for key in cdm.get_keys(session_id, "CONTENT")} + if not self.content_keys: + raise Widevine.Exceptions.EmptyLicense("No Content Keys were within the License") + + if kid not in self.content_keys: + raise Widevine.Exceptions.CEKNotFound(f"No Content Key for KID {kid.hex} within the License") + finally: + cdm.close(session_id) + + def get_NF_content_keys(self, cdm: WidevineCdm, certificate: Callable, licence: Callable) -> None: + """ + Create a CDM Session and obtain Content Keys for this DRM Instance. + The certificate and license params are expected to be a function and will + be provided with the challenge and session ID. + """ + for kid in self.kids: + if kid in self.content_keys: + continue + + session_id = cdm.open() + + try: + cert = certificate(challenge=cdm.service_certificate_challenge) + if cert and hasattr(cdm, "set_service_certificate"): + cdm.set_service_certificate(session_id, cert) + + cdm.parse_license( + session_id, + licence(session_id=session_id, challenge=cdm.get_license_challenge(session_id, self.pssh)), + ) + + self.content_keys = {key.kid: key.key.hex() for key in cdm.get_keys(session_id, "CONTENT")} + if not self.content_keys: + raise Widevine.Exceptions.EmptyLicense("No Content Keys were within the License") + + if kid not in self.content_keys: + raise Widevine.Exceptions.CEKNotFound(f"No Content Key for KID {kid.hex} within the License") + finally: + cdm.close(session_id) + + def decrypt(self, path: Path, use_mp4decrypt: bool = False) -> None: + """ + Decrypt a Track with Widevine DRM. + Args: + path: Path to the encrypted file to decrypt + use_mp4decrypt: If True, use mp4decrypt instead of Shaka Packager + Raises: + EnvironmentError if the required decryption executable could not be found. + ValueError if the track has not yet been downloaded. + SubprocessError if the decryption process returned a non-zero exit code. + """ + if not self.content_keys: + raise ValueError("Cannot decrypt a Track without any Content Keys...") + + if not path or not path.exists(): + raise ValueError("Tried to decrypt a file that does not exist.") + + if use_mp4decrypt: + return self._decrypt_with_mp4decrypt(path) + else: + return self._decrypt_with_shaka_packager(path) + + def _decrypt_with_mp4decrypt(self, path: Path) -> None: + """Decrypt using mp4decrypt""" + if not binaries.Mp4decrypt: + raise EnvironmentError("mp4decrypt executable not found but is required.") + + output_path = path.with_stem(f"{path.stem}_decrypted") + + # Build key arguments + key_args = [] + for kid, key in self.content_keys.items(): + kid_hex = kid.hex if hasattr(kid, "hex") else str(kid).replace("-", "") + key_hex = key if isinstance(key, str) else key.hex() + key_args.extend(["--key", f"{kid_hex}:{key_hex}"]) + + cmd = [ + str(binaries.Mp4decrypt), + "--show-progress", + *key_args, + str(path), + str(output_path), + ] + + try: + subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + except subprocess.CalledProcessError as e: + error_msg = e.stderr if e.stderr else f"mp4decrypt failed with exit code {e.returncode}" + raise subprocess.CalledProcessError(e.returncode, cmd, output=e.stdout, stderr=error_msg) + + if not output_path.exists(): + raise RuntimeError(f"mp4decrypt failed: output file {output_path} was not created") + if output_path.stat().st_size == 0: + raise RuntimeError(f"mp4decrypt failed: output file {output_path} is empty") + + path.unlink() + shutil.move(output_path, path) + + def _decrypt_with_shaka_packager(self, path: Path) -> None: + """Decrypt using Shaka Packager (original method)""" + if not binaries.ShakaPackager: + raise EnvironmentError("Shaka Packager executable not found but is required.") + + output_path = path.with_stem(f"{path.stem}_decrypted") + config.directories.temp.mkdir(parents=True, exist_ok=True) + + try: + arguments = [ + f"input={path},stream=0,output={output_path},output_format=MP4", + "--enable_raw_key_decryption", + "--keys", + ",".join( + [ + *[ + "label={}:key_id={}:key={}".format(i, kid.hex, key.lower()) + for i, (kid, key) in enumerate(self.content_keys.items()) + ], + *[ + # some services use a blank KID on the file, but real KID for license server + "label={}:key_id={}:key={}".format(i, "00" * 16, key.lower()) + for i, (kid, key) in enumerate(self.content_keys.items(), len(self.content_keys)) + ], + ] + ), + "--temp_dir", + config.directories.temp, + ] + + p = subprocess.Popen( + [binaries.ShakaPackager, *arguments], + stdout=subprocess.DEVNULL, + stderr=subprocess.PIPE, + universal_newlines=True, + ) + + stream_skipped = False + had_error = False + + shaka_log_buffer = "" + for line in iter(p.stderr.readline, ""): + line = line.strip() + if not line: + continue + if "Skip stream" in line: + # file/segment was so small that it didn't have any actual data, ignore + stream_skipped = True + if ":INFO:" in line: + continue + if "I0" in line or "W0" in line: + continue + if ":ERROR:" in line: + had_error = True + if "Insufficient bits in bitstream for given AVC profile" in line: + # this is a warning and is something we don't have to worry about + continue + shaka_log_buffer += f"{line.strip()}\n" + + if shaka_log_buffer: + # wrap to console width - padding - '[Widevine]: ' + shaka_log_buffer = "\n ".join( + textwrap.wrap(shaka_log_buffer.rstrip(), width=console.width - 22, initial_indent="") + ) + console.log(Text.from_ansi("\n[Widevine]: " + shaka_log_buffer)) + + p.wait() + + if p.returncode != 0 or had_error: + raise subprocess.CalledProcessError(p.returncode, arguments) + + path.unlink() + if not stream_skipped: + shutil.move(output_path, path) + except subprocess.CalledProcessError as e: + if e.returncode == 0xC000013A: # STATUS_CONTROL_C_EXIT + raise KeyboardInterrupt() + raise + + class Exceptions: + class PSSHNotFound(Exception): + """PSSH (Protection System Specific Header) was not found.""" + + class KIDNotFound(Exception): + """KID (Encryption Key ID) was not found.""" + + class CEKNotFound(Exception): + """CEK (Content Encryption Key) for KID was not found in License.""" + + class EmptyLicense(Exception): + """License returned no Content Encryption Keys.""" + + +__all__ = ("Widevine",) diff --git a/packages/envied/src/envied/core/events.py b/packages/envied/src/envied/core/events.py new file mode 100644 index 0000000..79316ea --- /dev/null +++ b/packages/envied/src/envied/core/events.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +from copy import deepcopy +from enum import Enum +from typing import Any, Callable + + +class Events: + class Types(Enum): + _reserved = 0 + # A Track's segment has finished downloading + SEGMENT_DOWNLOADED = 1 + # Track has finished downloading + TRACK_DOWNLOADED = 2 + # Track has finished decrypting + TRACK_DECRYPTED = 3 + # Track has finished repacking + TRACK_REPACKED = 4 + # Track is about to be Multiplexed into a Container + TRACK_MULTIPLEX = 5 + + def __init__(self): + self.__subscriptions: dict[Events.Types, list[Callable]] = {} + self.__ephemeral: dict[Events.Types, list[Callable]] = {} + self.reset() + + def reset(self): + """Reset Event Observer clearing all Subscriptions.""" + self.__subscriptions = {k: [] for k in Events.Types.__members__.values()} + self.__ephemeral = deepcopy(self.__subscriptions) + + def subscribe(self, event_type: Events.Types, callback: Callable, ephemeral: bool = False) -> None: + """ + Subscribe to an Event with a Callback. + + Parameters: + event_type: The Events.Type to subscribe to. + callback: The function or lambda to call on event emit. + ephemeral: Unsubscribe the callback from the event on first emit. + Note that this is not thread-safe and may be called multiple + times at roughly the same time. + """ + [self.__subscriptions, self.__ephemeral][ephemeral][event_type].append(callback) + + def unsubscribe(self, event_type: Events.Types, callback: Callable) -> None: + """ + Unsubscribe a Callback from an Event. + + Parameters: + event_type: The Events.Type to unsubscribe from. + callback: The function or lambda to remove from event emit. + """ + if callback in self.__subscriptions[event_type]: + self.__subscriptions[event_type].remove(callback) + if callback in self.__ephemeral[event_type]: + self.__ephemeral[event_type].remove(callback) + + def emit(self, event_type: Events.Types, *args: Any, **kwargs: Any) -> None: + """ + Emit an Event, executing all subscribed Callbacks. + + Parameters: + event_type: The Events.Type to emit. + args: Positional arguments to pass to callbacks. + kwargs: Keyword arguments to pass to callbacks. + """ + if event_type not in self.__subscriptions: + raise ValueError(f'Event type "{event_type}" is invalid') + + for callback in self.__subscriptions[event_type] + self.__ephemeral[event_type]: + callback(*args, **kwargs) + + self.__ephemeral[event_type].clear() + + +events = Events() diff --git a/packages/envied/src/envied/core/manifests/__init__.py b/packages/envied/src/envied/core/manifests/__init__.py new file mode 100644 index 0000000..713f2ac --- /dev/null +++ b/packages/envied/src/envied/core/manifests/__init__.py @@ -0,0 +1,5 @@ +from .dash import DASH +from .hls import HLS +from .ism import ISM + +__all__ = ("DASH", "HLS", "ISM") diff --git a/packages/envied/src/envied/core/manifests/dash.py b/packages/envied/src/envied/core/manifests/dash.py new file mode 100644 index 0000000..427eb12 --- /dev/null +++ b/packages/envied/src/envied/core/manifests/dash.py @@ -0,0 +1,800 @@ +from __future__ import annotations + +import base64 +import html +import logging +import math +import re +import sys +from copy import copy +from functools import partial +from pathlib import Path +from typing import Any, Callable, Optional, Union +from urllib.parse import urljoin, urlparse +from uuid import UUID +from zlib import crc32 + +import requests +from langcodes import Language, tag_is_valid +from lxml.etree import Element, ElementTree +from pyplayready.system.pssh import PSSH as PR_PSSH +from pywidevine.cdm import Cdm as WidevineCdm +from pywidevine.pssh import PSSH +from requests import Session + +from envied.core.constants import DOWNLOAD_CANCELLED, DOWNLOAD_LICENCE_ONLY, AnyTrack +from envied.core.downloaders import requests as requests_downloader +from envied.core.drm import DRM_T, PlayReady, Widevine +from envied.core.events import events +from envied.core.tracks import Audio, Subtitle, Tracks, Video +from envied.core.utilities import is_close_match, try_ensure_utf8 +from envied.core.utils.xml import load_xml + + +class DASH: + def __init__(self, manifest, url: str): + if manifest is None: + raise ValueError("DASH manifest must be provided.") + if manifest.tag != "MPD": + raise TypeError(f"Expected 'MPD' document, but received a '{manifest.tag}' document instead.") + + if not url: + raise requests.URLRequired("DASH manifest URL must be provided for relative path computations.") + if not isinstance(url, str): + raise TypeError(f"Expected url to be a {str}, not {url!r}") + + self.manifest = manifest + self.url = url + + @classmethod + def from_url(cls, url: str, session: Optional[Session] = None, **args: Any) -> DASH: + if not url: + raise requests.URLRequired("DASH manifest URL must be provided for relative path computations.") + if not isinstance(url, str): + raise TypeError(f"Expected url to be a {str}, not {url!r}") + + if not session: + session = Session() + elif not isinstance(session, Session): + raise TypeError(f"Expected session to be a {Session}, not {session!r}") + + res = session.get(url, **args) + if res.url != url: + url = res.url + + if not res.ok: + raise requests.ConnectionError("Failed to request the MPD document.", response=res) + + return DASH.from_text(res.text, url) + + @classmethod + def from_text(cls, text: str, url: str) -> DASH: + if not text: + raise ValueError("DASH manifest Text must be provided.") + if not isinstance(text, str): + raise TypeError(f"Expected text to be a {str}, not {text!r}") + + if not url: + raise requests.URLRequired("DASH manifest URL must be provided for relative path computations.") + if not isinstance(url, str): + raise TypeError(f"Expected url to be a {str}, not {url!r}") + + manifest = load_xml(text) + + return cls(manifest, url) + + def to_tracks( + self, language: Optional[Union[str, Language]] = None, period_filter: Optional[Callable] = None + ) -> Tracks: + """ + Convert an MPEG-DASH document to Video, Audio and Subtitle Track objects. + + Parameters: + language: The Title's Original Recorded Language. It will also be used as a fallback + track language value if the manifest does not list language information. + period_filter: Filter out period's within the manifest. + + All Track URLs will be a list of segment URLs. + """ + tracks = Tracks() + + for period in self.manifest.findall("Period"): + if callable(period_filter) and period_filter(period): + continue + if next(iter(period.xpath("SegmentType/@value")), "content") != "content": + continue + + for adaptation_set in period.findall("AdaptationSet"): + if self.is_trick_mode(adaptation_set): + # we don't want trick mode streams (they are only used for fast-forward/rewind) + continue + + for rep in adaptation_set.findall("Representation"): + get = partial(self._get, adaptation_set=adaptation_set, representation=rep) + findall = partial(self._findall, adaptation_set=adaptation_set, representation=rep, both=True) + segment_base = rep.find("SegmentBase") + + codecs = get("codecs") + content_type = get("contentType") + mime_type = get("mimeType") + + if not content_type and mime_type: + content_type = mime_type.split("/")[0] + if not content_type and not mime_type: + raise ValueError("Unable to determine the format of a Representation, cannot continue...") + + if mime_type == "application/mp4" or content_type == "application": + # likely mp4-boxed subtitles + # TODO: It may not actually be subtitles + try: + real_codec = Subtitle.Codec.from_mime(codecs) + content_type = "text" + mime_type = f"application/mp4; codecs='{real_codec.value.lower()}'" + except ValueError: + raise ValueError(f"Unsupported content type '{content_type}' with codecs of '{codecs}'") + + if content_type == "text" and mime_type and "/mp4" not in mime_type: + # mimeType likely specifies the subtitle codec better than `codecs` + codecs = mime_type.split("/")[1] + + if content_type == "video": + track_type = Video + track_codec = Video.Codec.from_codecs(codecs) + track_fps = get("frameRate") + if not track_fps and segment_base is not None: + track_fps = segment_base.get("timescale") + + track_args = dict( + range_=self.get_video_range( + codecs, findall("SupplementalProperty"), findall("EssentialProperty") + ), + bitrate=get("bandwidth") or None, + width=get("width") or 0, + height=get("height") or 0, + fps=track_fps or None, + ) + elif content_type == "audio": + track_type = Audio + track_codec = Audio.Codec.from_codecs(codecs) + track_args = dict( + bitrate=get("bandwidth") or None, + channels=next( + iter( + rep.xpath("AudioChannelConfiguration/@value") + or adaptation_set.xpath("AudioChannelConfiguration/@value") + ), + None, + ), + joc=self.get_ddp_complexity_index(adaptation_set, rep), + descriptive=self.is_descriptive(adaptation_set), + ) + elif content_type == "text": + track_type = Subtitle + track_codec = Subtitle.Codec.from_codecs(codecs or "vtt") + track_args = dict( + cc=self.is_closed_caption(adaptation_set), + sdh=self.is_sdh(adaptation_set), + forced=self.is_forced(adaptation_set), + ) + elif content_type == "image": + # we don't want what's likely thumbnails for the seekbar + continue + else: + raise ValueError(f"Unknown Track Type '{content_type}'") + + track_lang = self.get_language(adaptation_set, rep, fallback=language) + if not track_lang: + msg = "Language information could not be derived from a Representation." + if language is None: + msg += " No fallback language was provided when calling DASH.to_tracks()." + elif not tag_is_valid((str(language) or "").strip()) or str(language).startswith("und"): + msg += f" The fallback language provided is also invalid: {language}" + raise ValueError(msg) + + # for some reason it's incredibly common for services to not provide + # a good and actually unique track ID, sometimes because of the lang + # dialect not being represented in the id, or the bitrate, or such. + # this combines all of them as one and hashes it to keep it small(ish). + track_id = hex( + crc32( + "{codec}-{lang}-{bitrate}-{base_url}-{ids}-{track_args}".format( + codec=codecs, + lang=track_lang, + bitrate=get("bitrate"), + base_url=(rep.findtext("BaseURL") or "").split("?")[0], + ids=[get("audioTrackId"), get("id"), period.get("id")], + track_args=track_args, + ).encode() + ) + )[2:] + + tracks.add( + track_type( + id_=track_id, + url=self.url, + codec=track_codec, + language=track_lang, + is_original_lang=bool(language and is_close_match(track_lang, [language])), + descriptor=Video.Descriptor.DASH, + data={ + "dash": { + "manifest": self.manifest, + "period": period, + "adaptation_set": adaptation_set, + "representation": rep, + } + }, + **track_args, + ) + ) + + # only get tracks from the first main-content period + break + + return tracks + + @staticmethod + def download_track( + track: AnyTrack, + save_path: Path, + save_dir: Path, + progress: partial, + session: Optional[Session] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, + license_widevine: Optional[Callable] = None, + *, + cdm: Optional[object] = None, + ): + if not session: + session = Session() + elif not isinstance(session, Session): + raise TypeError(f"Expected session to be a {Session}, not {session!r}") + + if proxy: + session.proxies.update({"all": proxy}) + + log = logging.getLogger("DASH") + + manifest: ElementTree = track.data["dash"]["manifest"] + period: Element = track.data["dash"]["period"] + adaptation_set: Element = track.data["dash"]["adaptation_set"] + representation: Element = track.data["dash"]["representation"] + + # Preserve existing DRM if it was set by the service, especially when service set Widevine + # but manifest only contains PlayReady protection (common scenario for some services) + existing_drm = track.drm + manifest_drm = DASH.get_drm( + representation.findall("ContentProtection") + adaptation_set.findall("ContentProtection") + ) + + # Only override existing DRM if: + # 1. No existing DRM was set, OR + # 2. Existing DRM contains same type as manifest DRM, OR + # 3. Existing DRM is not Widevine (preserve Widevine when service explicitly set it) + should_override_drm = ( + not existing_drm + or ( + existing_drm + and manifest_drm + and any(isinstance(existing, type(manifest)) for existing in existing_drm for manifest in manifest_drm) + ) + or (existing_drm and not any(isinstance(drm, Widevine) for drm in existing_drm)) + ) + + if should_override_drm: + track.drm = manifest_drm + else: + track.drm = existing_drm + + manifest_base_url = manifest.findtext("BaseURL") + if not manifest_base_url: + manifest_base_url = track.url + elif not re.match("^https?://", manifest_base_url, re.IGNORECASE): + manifest_base_url = urljoin(track.url, f"./{manifest_base_url}") + period_base_url = urljoin(manifest_base_url, period.findtext("BaseURL")) + rep_base_url = urljoin(period_base_url, representation.findtext("BaseURL")) + + period_duration = period.get("duration") or manifest.get("mediaPresentationDuration") + init_data: Optional[bytes] = None + + segment_template = representation.find("SegmentTemplate") + if segment_template is None: + segment_template = adaptation_set.find("SegmentTemplate") + + segment_list = representation.find("SegmentList") + if segment_list is None: + segment_list = adaptation_set.find("SegmentList") + + segment_base = representation.find("SegmentBase") + if segment_base is None: + segment_base = adaptation_set.find("SegmentBase") + + segments: list[tuple[str, Optional[str]]] = [] + segment_timescale: float = 0 + segment_durations: list[int] = [] + track_kid: Optional[UUID] = None + + if segment_template is not None: + segment_template = copy(segment_template) + start_number = int(segment_template.get("startNumber") or 1) + end_number = int(segment_template.get("endNumber") or 0) or None + segment_timeline = segment_template.find("SegmentTimeline") + segment_timescale = float(segment_template.get("timescale") or 1) + + for item in ("initialization", "media"): + value = segment_template.get(item) + if not value: + continue + if not re.match("^https?://", value, re.IGNORECASE): + if not rep_base_url: + raise ValueError("Resolved Segment URL is not absolute, and no Base URL is available.") + value = urljoin(rep_base_url, value) + if not urlparse(value).query: + manifest_url_query = urlparse(track.url).query + if manifest_url_query: + value += f"?{manifest_url_query}" + segment_template.set(item, value) + + init_url = segment_template.get("initialization") + if init_url: + res = session.get( + DASH.replace_fields( + init_url, Bandwidth=representation.get("bandwidth"), RepresentationID=representation.get("id") + ) + ) + res.raise_for_status() + init_data = res.content + track_kid = track.get_key_id(init_data) + + if segment_timeline is not None: + current_time = 0 + for s in segment_timeline.findall("S"): + if s.get("t"): + current_time = int(s.get("t")) + for _ in range(1 + (int(s.get("r") or 0))): + segment_durations.append(current_time) + current_time += int(s.get("d")) + + if not end_number: + end_number = len(segment_durations) + + for t, n in zip(segment_durations, range(start_number, end_number + 1)): + segments.append( + ( + DASH.replace_fields( + segment_template.get("media"), + Bandwidth=representation.get("bandwidth"), + Number=n, + RepresentationID=representation.get("id"), + Time=t, + ), + None, + ) + ) + else: + if not period_duration: + raise ValueError("Duration of the Period was unable to be determined.") + period_duration = DASH.pt_to_sec(period_duration) + segment_duration = float(segment_template.get("duration")) or 1 + + if not end_number: + end_number = math.ceil(period_duration / (segment_duration / segment_timescale)) + + for s in range(start_number, end_number + 1): + segments.append( + ( + DASH.replace_fields( + segment_template.get("media"), + Bandwidth=representation.get("bandwidth"), + Number=s, + RepresentationID=representation.get("id"), + Time=s, + ), + None, + ) + ) + # TODO: Should we floor/ceil/round, or is int() ok? + segment_durations.append(int(segment_duration)) + elif segment_list is not None: + segment_timescale = float(segment_list.get("timescale") or 1) + + init_data = None + initialization = segment_list.find("Initialization") + if initialization is not None: + source_url = initialization.get("sourceURL") + if not source_url: + source_url = rep_base_url + elif not re.match("^https?://", source_url, re.IGNORECASE): + source_url = urljoin(rep_base_url, f"./{source_url}") + + if initialization.get("range"): + init_range_header = {"Range": f"bytes={initialization.get('range')}"} + else: + init_range_header = None + + res = session.get(url=source_url, headers=init_range_header) + res.raise_for_status() + init_data = res.content + track_kid = track.get_key_id(init_data) + + segment_urls = segment_list.findall("SegmentURL") + for segment_url in segment_urls: + media_url = segment_url.get("media") + if not media_url: + media_url = rep_base_url + elif not re.match("^https?://", media_url, re.IGNORECASE): + media_url = urljoin(rep_base_url, f"./{media_url}") + + segments.append((media_url, segment_url.get("mediaRange"))) + segment_durations.append(int(segment_url.get("duration") or 1)) + elif segment_base is not None: + media_range = None + init_data = None + initialization = segment_base.find("Initialization") + if initialization is not None: + if initialization.get("range"): + init_range_header = {"Range": f"bytes={initialization.get('range')}"} + else: + init_range_header = None + + res = session.get(url=rep_base_url, headers=init_range_header) + res.raise_for_status() + init_data = res.content + track_kid = track.get_key_id(init_data) + total_size = res.headers.get("Content-Range", "").split("/")[-1] + if total_size: + media_range = f"{len(init_data)}-{total_size}" + + segments.append((rep_base_url, media_range)) + elif rep_base_url: + segments.append((rep_base_url, None)) + else: + log.error("Could not find a way to get segments from this MPD manifest.") + log.debug(track.url) + sys.exit(1) + + # TODO: Should we floor/ceil/round, or is int() ok? + track.data["dash"]["timescale"] = int(segment_timescale) + track.data["dash"]["segment_durations"] = segment_durations + + if not track.drm and isinstance(track, (Video, Audio)): + try: + track.drm = [Widevine.from_init_data(init_data)] + except Widevine.Exceptions.PSSHNotFound: + # it might not have Widevine DRM, or might not have found the PSSH + log.warning("No Widevine PSSH was found for this track, is it DRM free?") + + if track.drm: + track_kid = track_kid or track.get_key_id(url=segments[0][0], session=session) + drm = track.get_drm_for_cdm(cdm) + if isinstance(drm, (Widevine, PlayReady)): + # license and grab content keys + try: + if not license_widevine: + raise ValueError("license_widevine func must be supplied to use DRM") + progress(downloaded="LICENSING") + license_widevine(drm, track_kid=track_kid) + progress(downloaded="[yellow]LICENSED") + except Exception: # noqa + DOWNLOAD_CANCELLED.set() # skip pending track downloads + progress(downloaded="[red]FAILED") + raise + else: + drm = None + + if DOWNLOAD_LICENCE_ONLY.is_set(): + progress(downloaded="[yellow]SKIPPED") + return + + progress(total=len(segments)) + + downloader = track.downloader + if downloader.__name__ == "aria2c" and any(bytes_range is not None for url, bytes_range in segments): + # aria2(c) is shit and doesn't support the Range header, fallback to the requests downloader + downloader = requests_downloader + log.warning("Falling back to the requests downloader as aria2(c) doesn't support the Range header") + + downloader_args = dict( + urls=[ + {"url": url, "headers": {"Range": f"bytes={bytes_range}"} if bytes_range else {}} + for url, bytes_range in segments + ], + output_dir=save_dir, + filename="{i:0%d}.mp4" % (len(str(len(segments)))), + headers=session.headers, + cookies=session.cookies, + proxy=proxy, + max_workers=max_workers, + ) + + if downloader.__name__ == "n_m3u8dl_re": + downloader_args.update({"filename": track.id, "track": track}) + + for status_update in downloader(**downloader_args): + file_downloaded = status_update.get("file_downloaded") + if file_downloaded: + events.emit(events.Types.SEGMENT_DOWNLOADED, track=track, segment=file_downloaded) + else: + downloaded = status_update.get("downloaded") + if downloaded and downloaded.endswith("/s"): + status_update["downloaded"] = f"DASH {downloaded}" + progress(**status_update) + + # see https://github.com/devine-dl/devine/issues/71 + for control_file in save_dir.glob("*.aria2__temp"): + control_file.unlink() + + segments_to_merge = [x for x in sorted(save_dir.iterdir()) if x.is_file()] + with open(save_path, "wb") as f: + if init_data: + f.write(init_data) + if len(segments_to_merge) > 1: + progress(downloaded="Merging", completed=0, total=len(segments_to_merge)) + for segment_file in segments_to_merge: + segment_data = segment_file.read_bytes() + # TODO: fix encoding after decryption? + if ( + not drm + and isinstance(track, Subtitle) + and track.codec not in (Subtitle.Codec.fVTT, Subtitle.Codec.fTTML) + ): + segment_data = try_ensure_utf8(segment_data) + segment_data = ( + segment_data.decode("utf8") + .replace("‎", html.unescape("‎")) + .replace("‏", html.unescape("‏")) + .encode("utf8") + ) + f.write(segment_data) + f.flush() + segment_file.unlink() + progress(advance=1) + + track.path = save_path + events.emit(events.Types.TRACK_DOWNLOADED, track=track) + + if drm: + progress(downloaded="Decrypting", completed=0, total=100) + drm.decrypt(save_path) + track.drm = None + events.emit(events.Types.TRACK_DECRYPTED, track=track, drm=drm, segment=None) + progress(downloaded="Decrypting", advance=100) + + save_dir.rmdir() + + progress(downloaded="Downloaded") + + @staticmethod + def _get(item: str, adaptation_set: Element, representation: Optional[Element] = None) -> Optional[Any]: + """Helper to get a requested item from the Representation, otherwise from the AdaptationSet.""" + adaptation_set_item = adaptation_set.get(item) + if representation is None: + return adaptation_set_item + + representation_item = representation.get(item) + if representation_item is not None: + return representation_item + + return adaptation_set_item + + @staticmethod + def _findall( + item: str, adaptation_set: Element, representation: Optional[Element] = None, both: bool = False + ) -> list[Any]: + """ + Helper to get all requested items from the Representation, otherwise from the AdaptationSet. + Optionally, you may pass both=True to keep both values (where available). + """ + adaptation_set_items = adaptation_set.findall(item) + if representation is None: + return adaptation_set_items + + representation_items = representation.findall(item) + + if both: + return representation_items + adaptation_set_items + + if representation_items: + return representation_items + + return adaptation_set_items + + @staticmethod + def get_language( + adaptation_set: Element, + representation: Optional[Element] = None, + fallback: Optional[Union[str, Language]] = None, + ) -> Optional[Language]: + """ + Get Language (if any) from the AdaptationSet or Representation. + + A fallback language may be provided if no language information could be + retrieved. + """ + options = [] + + if representation is not None: + options.append(representation.get("lang")) + # derive language from somewhat common id string format + # the format is typically "{rep_id}_{lang}={bitrate}" or similar + rep_id = representation.get("id") + if rep_id: + m = re.match(r"\w+_(\w+)=\d+", rep_id) + if m: + options.append(m.group(1)) + + options.append(adaptation_set.get("lang")) + + if fallback: + options.append(fallback) + + for option in options: + option = (str(option) or "").strip() + if not tag_is_valid(option) or option.startswith("und"): + continue + return Language.get(option) + + @staticmethod + def get_video_range( + codecs: str, all_supplemental_props: list[Element], all_essential_props: list[Element] + ) -> Video.Range: + if codecs.startswith(("dva1", "dvav", "dvhe", "dvh1")): + return Video.Range.DV + + return Video.Range.from_cicp( + primaries=next( + ( + int(x.get("value")) + for x in all_supplemental_props + all_essential_props + if x.get("schemeIdUri") == "urn:mpeg:mpegB:cicp:ColourPrimaries" + ), + 0, + ), + transfer=next( + ( + int(x.get("value")) + for x in all_supplemental_props + all_essential_props + if x.get("schemeIdUri") == "urn:mpeg:mpegB:cicp:TransferCharacteristics" + ), + 0, + ), + matrix=next( + ( + int(x.get("value")) + for x in all_supplemental_props + all_essential_props + if x.get("schemeIdUri") == "urn:mpeg:mpegB:cicp:MatrixCoefficients" + ), + 0, + ), + ) + + @staticmethod + def is_trick_mode(adaptation_set: Element) -> bool: + """Check if contents of Adaptation Set is a Trick-Mode stream.""" + essential_props = adaptation_set.findall("EssentialProperty") + supplemental_props = adaptation_set.findall("SupplementalProperty") + + return any( + prop.get("schemeIdUri") == "http://dashif.org/guidelines/trickmode" + for prop in essential_props + supplemental_props + ) + + @staticmethod + def is_descriptive(adaptation_set: Element) -> bool: + """Check if contents of Adaptation Set is Descriptive.""" + return any( + (x.get("schemeIdUri"), x.get("value")) + in (("urn:mpeg:dash:role:2011", "descriptive"), ("urn:tva:metadata:cs:AudioPurposeCS:2007", "1")) + for x in adaptation_set.findall("Accessibility") + ) + + @staticmethod + def is_forced(adaptation_set: Element) -> bool: + """Check if contents of Adaptation Set is a Forced Subtitle.""" + return any( + x.get("schemeIdUri") == "urn:mpeg:dash:role:2011" + and x.get("value") in ("forced-subtitle", "forced_subtitle") + for x in adaptation_set.findall("Role") + ) + + @staticmethod + def is_sdh(adaptation_set: Element) -> bool: + """Check if contents of Adaptation Set is for the Hearing Impaired.""" + return any( + (x.get("schemeIdUri"), x.get("value")) == ("urn:tva:metadata:cs:AudioPurposeCS:2007", "2") + for x in adaptation_set.findall("Accessibility") + ) + + @staticmethod + def is_closed_caption(adaptation_set: Element) -> bool: + """Check if contents of Adaptation Set is a Closed Caption Subtitle.""" + return any( + (x.get("schemeIdUri"), x.get("value")) == ("urn:mpeg:dash:role:2011", "caption") + for x in adaptation_set.findall("Role") + ) + + @staticmethod + def get_ddp_complexity_index(adaptation_set: Element, representation: Optional[Element]) -> Optional[int]: + """Get the DD+ Complexity Index (if any) from the AdaptationSet or Representation.""" + return next( + ( + int(x.get("value")) + for x in DASH._findall("SupplementalProperty", adaptation_set, representation, both=True) + if x.get("schemeIdUri") == "tag:dolby.com,2018:dash:EC3_ExtensionComplexityIndex:2018" + ), + None, + ) + + @staticmethod + def get_drm(protections: list[Element]) -> list[DRM_T]: + drm: list[DRM_T] = [] + + for protection in protections: + urn = (protection.get("schemeIdUri") or "").lower() + + if urn == WidevineCdm.urn: + pssh_text = protection.findtext("pssh") + if not pssh_text: + continue + pssh = PSSH(pssh_text) + + kid = protection.get("kid") + if kid: + kid = UUID(bytes=base64.b64decode(kid)) + + default_kid = protection.get("default_KID") + if default_kid: + kid = UUID(default_kid) + + if not pssh.key_ids and not kid: + kid = next((UUID(p.get("default_KID")) for p in protections if p.get("default_KID")), None) + + drm.append(Widevine(pssh=pssh, kid=kid)) + + elif urn in ("urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95", "urn:microsoft:playready"): + pr_pssh_b64 = ( + protection.findtext("pssh") + or protection.findtext("pro") + or protection.findtext("{urn:microsoft:playready}pro") + ) + if not pr_pssh_b64: + continue + pr_pssh = PR_PSSH(pr_pssh_b64) + kid_b64 = protection.findtext("kid") + kid = None + if kid_b64: + try: + kid = UUID(bytes=base64.b64decode(kid_b64)) + except Exception: + kid = None + + drm.append(PlayReady(pssh=pr_pssh, kid=kid, pssh_b64=pr_pssh_b64)) + + return drm + + @staticmethod + def pt_to_sec(d: Union[str, float]) -> float: + if isinstance(d, float): + return d + has_ymd = d[0:8] == "P0Y0M0DT" + if d[0:2] != "PT" and not has_ymd: + raise ValueError("Input data is not a valid time string.") + if has_ymd: + d = d[6:].upper() # skip `P0Y0M0DT` + else: + d = d[2:].upper() # skip `PT` + m = re.findall(r"([\d.]+.)", d) + return sum(float(x[0:-1]) * {"H": 60 * 60, "M": 60, "S": 1}[x[-1].upper()] for x in m) + + @staticmethod + def replace_fields(url: str, **kwargs: Any) -> str: + for field, value in kwargs.items(): + url = url.replace(f"${field}$", str(value)) + m = re.search(rf"\${re.escape(field)}%([a-z0-9]+)\$", url, flags=re.I) + if m: + url = url.replace(m.group(), f"{value:{m.group(1)}}") + return url + + +__all__ = ("DASH",) diff --git a/packages/envied/src/envied/core/manifests/hls.py b/packages/envied/src/envied/core/manifests/hls.py new file mode 100644 index 0000000..974c344 --- /dev/null +++ b/packages/envied/src/envied/core/manifests/hls.py @@ -0,0 +1,888 @@ +from __future__ import annotations + +import base64 +import html +import json +import logging +import os +import shutil +import subprocess +import sys +from functools import partial +from pathlib import Path +from typing import Any, Callable, Optional, Union +from urllib.parse import urljoin +from zlib import crc32 + +import httpx +import m3u8 +import requests +from langcodes import Language, tag_is_valid +from m3u8 import M3U8 +from pyplayready.cdm import Cdm as PlayReadyCdm +from pyplayready.system.pssh import PSSH as PR_PSSH +from pywidevine.cdm import Cdm as WidevineCdm +from pywidevine.pssh import PSSH as WV_PSSH +from requests import Session + +from envied.core import binaries +from envied.core.constants import DOWNLOAD_CANCELLED, DOWNLOAD_LICENCE_ONLY, AnyTrack +from envied.core.downloaders import requests as requests_downloader +from envied.core.drm import DRM_T, ClearKey, PlayReady, Widevine +from envied.core.events import events +from envied.core.tracks import Audio, Subtitle, Tracks, Video +from envied.core.utilities import get_extension, is_close_match, try_ensure_utf8 + + +class HLS: + def __init__(self, manifest: M3U8, session: Optional[Union[Session, httpx.Client]] = None): + if not manifest: + raise ValueError("HLS manifest must be provided.") + if not isinstance(manifest, M3U8): + raise TypeError(f"Expected manifest to be a {M3U8}, not {manifest!r}") + if not manifest.is_variant: + raise ValueError("Expected the M3U(8) manifest to be a Variant Playlist.") + + self.manifest = manifest + self.session = session or Session() + + @classmethod + def from_url(cls, url: str, session: Optional[Union[Session, httpx.Client]] = None, **args: Any) -> HLS: + if not url: + raise requests.URLRequired("HLS manifest URL must be provided.") + if not isinstance(url, str): + raise TypeError(f"Expected url to be a {str}, not {url!r}") + + if not session: + session = Session() + elif not isinstance(session, (Session, httpx.Client)): + raise TypeError(f"Expected session to be a {Session} or {httpx.Client}, not {session!r}") + + res = session.get(url, **args) + + # Handle both requests and httpx response objects + if isinstance(res, requests.Response): + if not res.ok: + raise requests.ConnectionError("Failed to request the M3U(8) document.", response=res) + content = res.text + elif isinstance(res, httpx.Response): + if res.status_code >= 400: + raise requests.ConnectionError("Failed to request the M3U(8) document.", response=res) + content = res.text + else: + raise TypeError(f"Expected response to be a requests.Response or httpx.Response, not {type(res)}") + + master = m3u8.loads(content, uri=url) + + return cls(master, session) + + @classmethod + def from_text(cls, text: str, url: str) -> HLS: + if not text: + raise ValueError("HLS manifest Text must be provided.") + if not isinstance(text, str): + raise TypeError(f"Expected text to be a {str}, not {text!r}") + + if not url: + raise requests.URLRequired("HLS manifest URL must be provided for relative path computations.") + if not isinstance(url, str): + raise TypeError(f"Expected url to be a {str}, not {url!r}") + + master = m3u8.loads(text, uri=url) + + return cls(master) + + def to_tracks(self, language: Union[str, Language]) -> Tracks: + """ + Convert a Variant Playlist M3U(8) document to Video, Audio and Subtitle Track objects. + + Parameters: + language: Language you expect the Primary Track to be in. + + All Track objects' URL will be to another M3U(8) document. However, these documents + will be Invariant Playlists and contain the list of segments URIs among other metadata. + """ + session_keys = list(self.manifest.session_keys or []) + if not session_keys: + session_keys = HLS.parse_session_data_keys(self.manifest, self.session) + + session_drm = HLS.get_all_drm(session_keys) + + audio_codecs_by_group_id: dict[str, Audio.Codec] = {} + tracks = Tracks() + + for playlist in self.manifest.playlists: + audio_group = playlist.stream_info.audio + if audio_group: + audio_codec = Audio.Codec.from_codecs(playlist.stream_info.codecs) + audio_codecs_by_group_id[audio_group] = audio_codec + + try: + # TODO: Any better way to figure out the primary track type? + if playlist.stream_info.codecs: + Video.Codec.from_codecs(playlist.stream_info.codecs) + except ValueError: + primary_track_type = Audio + else: + primary_track_type = Video + + tracks.add( + primary_track_type( + id_=hex(crc32(str(playlist).encode()))[2:], + url=urljoin(playlist.base_uri, playlist.uri), + codec=( + primary_track_type.Codec.from_codecs(playlist.stream_info.codecs) + if playlist.stream_info.codecs + else None + ), + language=language, # HLS manifests do not seem to have language info + is_original_lang=True, # TODO: All we can do is assume Yes + bitrate=playlist.stream_info.average_bandwidth or playlist.stream_info.bandwidth, + descriptor=Video.Descriptor.HLS, + drm=session_drm, + data={"hls": {"playlist": playlist}}, + # video track args + **( + dict( + range_=Video.Range.DV + if any( + codec.split(".")[0] in ("dva1", "dvav", "dvhe", "dvh1") + for codec in (playlist.stream_info.codecs or "").lower().split(",") + ) + else Video.Range.from_m3u_range_tag(playlist.stream_info.video_range), + width=playlist.stream_info.resolution[0] if playlist.stream_info.resolution else None, + height=playlist.stream_info.resolution[1] if playlist.stream_info.resolution else None, + fps=playlist.stream_info.frame_rate, + ) + if primary_track_type is Video + else {} + ), + ) + ) + + for media in self.manifest.media: + if not media.uri: + continue + + joc = 0 + if media.type == "AUDIO": + track_type = Audio + codec = audio_codecs_by_group_id.get(media.group_id) + if media.channels and media.channels.endswith("/JOC"): + joc = int(media.channels.split("/JOC")[0]) + media.channels = "5.1" + else: + track_type = Subtitle + codec = Subtitle.Codec.WebVTT # assuming WebVTT, codec info isn't shown + + track_lang = next( + ( + Language.get(option) + for x in (media.language, language) + for option in [(str(x) or "").strip()] + if tag_is_valid(option) and not option.startswith("und") + ), + None, + ) + if not track_lang: + msg = "Language information could not be derived for a media." + if language is None: + msg += " No fallback language was provided when calling HLS.to_tracks()." + elif not tag_is_valid((str(language) or "").strip()) or str(language).startswith("und"): + msg += f" The fallback language provided is also invalid: {language}" + raise ValueError(msg) + + tracks.add( + track_type( + id_=hex(crc32(str(media).encode()))[2:], + url=urljoin(media.base_uri, media.uri), + codec=codec, + language=track_lang, # HLS media may not have language info, fallback if needed + is_original_lang=bool(language and is_close_match(track_lang, [language])), + descriptor=Audio.Descriptor.HLS, + drm=session_drm if media.type == "AUDIO" else None, + data={"hls": {"media": media}}, + # audio track args + **( + dict( + bitrate=0, # TODO: M3U doesn't seem to state bitrate? + channels=media.channels, + joc=joc, + descriptive="public.accessibility.describes-video" in (media.characteristics or ""), + ) + if track_type is Audio + else dict( + forced=media.forced == "YES", + sdh="public.accessibility.describes-music-and-sound" in (media.characteristics or ""), + ) + if track_type is Subtitle + else {} + ), + ) + ) + + return tracks + + @staticmethod + def download_track( + track: AnyTrack, + save_path: Path, + save_dir: Path, + progress: partial, + session: Optional[Union[Session, httpx.Client]] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, + license_widevine: Optional[Callable] = None, + *, + cdm: Optional[object] = None, + ) -> None: + if not session: + session = Session() + elif not isinstance(session, (Session, httpx.Client)): + raise TypeError(f"Expected session to be a {Session} or {httpx.Client}, not {session!r}") + + if proxy: + # Handle proxies differently based on session type + if isinstance(session, Session): + session.proxies.update({"all": proxy}) + elif isinstance(session, httpx.Client): + session.proxies = {"http://": proxy, "https://": proxy} + + log = logging.getLogger("HLS") + + # Get the playlist text and handle both session types + response = session.get(track.url) + if isinstance(response, requests.Response): + if not response.ok: + log.error(f"Failed to request the invariant M3U8 playlist: {response.status_code}") + sys.exit(1) + playlist_text = response.text + elif isinstance(response, httpx.Response): + if response.status_code >= 400: + log.error(f"Failed to request the invariant M3U8 playlist: {response.status_code}") + sys.exit(1) + playlist_text = response.text + else: + raise TypeError(f"Expected response to be a requests.Response or httpx.Response, not {type(response)}") + + master = m3u8.loads(playlist_text, uri=track.url) + + if not master.segments: + log.error("Track's HLS playlist has no segments, expecting an invariant M3U8 playlist.") + sys.exit(1) + + if track.drm: + session_drm = track.get_drm_for_cdm(cdm) + if isinstance(session_drm, (Widevine, PlayReady)): + # license and grab content keys + try: + if not license_widevine: + raise ValueError("license_widevine func must be supplied to use DRM") + progress(downloaded="LICENSING") + license_widevine(session_drm) + progress(downloaded="[yellow]LICENSED") + except Exception: # noqa + DOWNLOAD_CANCELLED.set() # skip pending track downloads + progress(downloaded="[red]FAILED") + raise + else: + session_drm = None + + if DOWNLOAD_LICENCE_ONLY.is_set(): + progress(downloaded="[yellow]SKIPPED") + return + + unwanted_segments = [ + segment for segment in master.segments if callable(track.OnSegmentFilter) and track.OnSegmentFilter(segment) + ] + + total_segments = len(master.segments) - len(unwanted_segments) + progress(total=total_segments) + + downloader = track.downloader + if downloader.__name__ == "aria2c" and any(x.byterange for x in master.segments if x not in unwanted_segments): + downloader = requests_downloader + log.warning("Falling back to the requests downloader as aria2(c) doesn't support the Range header") + + urls: list[dict[str, Any]] = [] + segment_durations: list[int] = [] + + range_offset = 0 + for segment in master.segments: + if segment in unwanted_segments: + continue + + segment_durations.append(int(segment.duration)) + + if segment.byterange: + byte_range = HLS.calculate_byte_range(segment.byterange, range_offset) + range_offset = byte_range.split("-")[0] + else: + byte_range = None + + urls.append( + { + "url": urljoin(segment.base_uri, segment.uri), + "headers": {"Range": f"bytes={byte_range}"} if byte_range else {}, + } + ) + + track.data["hls"]["segment_durations"] = segment_durations + + segment_save_dir = save_dir / "segments" + + skip_merge = False + downloader_args = dict( + urls=urls, + output_dir=segment_save_dir, + filename="{i:0%d}{ext}" % len(str(len(urls))), + headers=session.headers, + cookies=session.cookies, + proxy=proxy, + max_workers=max_workers, + ) + + if downloader.__name__ == "n_m3u8dl_re": + skip_merge = True + downloader_args.update( + { + "output_dir": save_dir, + "filename": track.id, + "track": track, + "content_keys": session_drm.content_keys if session_drm else None, + } + ) + + for status_update in downloader(**downloader_args): + file_downloaded = status_update.get("file_downloaded") + if file_downloaded: + events.emit(events.Types.SEGMENT_DOWNLOADED, track=track, segment=file_downloaded) + else: + downloaded = status_update.get("downloaded") + if downloaded and downloaded.endswith("/s"): + status_update["downloaded"] = f"HLS {downloaded}" + progress(**status_update) + + # see https://github.com/devine-dl/devine/issues/71 + for control_file in segment_save_dir.glob("*.aria2__temp"): + control_file.unlink() + + if not skip_merge: + progress(total=total_segments, completed=0, downloaded="Merging") + + name_len = len(str(total_segments)) + discon_i = 0 + range_offset = 0 + map_data: Optional[tuple[m3u8.model.InitializationSection, bytes]] = None + if session_drm: + encryption_data: Optional[tuple[Optional[m3u8.Key], DRM_T]] = (None, session_drm) + else: + encryption_data: Optional[tuple[Optional[m3u8.Key], DRM_T]] = None + + i = -1 + for real_i, segment in enumerate(master.segments): + if segment not in unwanted_segments: + i += 1 + + is_last_segment = (real_i + 1) == len(master.segments) + + def merge(to: Path, via: list[Path], delete: bool = False, include_map_data: bool = False): + """ + Merge all files to a given path, optionally including map data. + + Parameters: + to: The output file with all merged data. + via: List of files to merge, in sequence. + delete: Delete the file once it's been merged. + include_map_data: Whether to include the init map data. + """ + with open(to, "wb") as x: + if include_map_data and map_data and map_data[1]: + x.write(map_data[1]) + for file in via: + x.write(file.read_bytes()) + x.flush() + if delete: + file.unlink() + + def decrypt(include_this_segment: bool) -> Path: + """ + Decrypt all segments that uses the currently set DRM. + + All segments that will be decrypted with this DRM will be merged together + in sequence, prefixed with the init data (if any), and then deleted. Once + merged they will be decrypted. The merged and decrypted file names state + the range of segments that were used. + + Parameters: + include_this_segment: Whether to include the current segment in the + list of segments to merge and decrypt. This should be False if + decrypting on EXT-X-KEY changes, or True when decrypting on the + last segment. + + Returns the decrypted path. + """ + drm = encryption_data[1] + first_segment_i = next( + int(file.stem) for file in sorted(segment_save_dir.iterdir()) if file.stem.isdigit() + ) + last_segment_i = max(0, i - int(not include_this_segment)) + range_len = (last_segment_i - first_segment_i) + 1 + + segment_range = f"{str(first_segment_i).zfill(name_len)}-{str(last_segment_i).zfill(name_len)}" + merged_path = ( + segment_save_dir / f"{segment_range}{get_extension(master.segments[last_segment_i].uri)}" + ) + decrypted_path = segment_save_dir / f"{merged_path.stem}_decrypted{merged_path.suffix}" + + files = [ + file + for file in sorted(segment_save_dir.iterdir()) + if file.stem.isdigit() and first_segment_i <= int(file.stem) <= last_segment_i + ] + if not files: + raise ValueError(f"None of the segment files for {segment_range} exist...") + elif len(files) != range_len: + raise ValueError(f"Missing {range_len - len(files)} segment files for {segment_range}...") + + if isinstance(drm, Widevine): + # with widevine we can merge all segments and decrypt once + merge(to=merged_path, via=files, delete=True, include_map_data=True) + drm.decrypt(merged_path) + merged_path.rename(decrypted_path) + else: + # with other drm we must decrypt separately and then merge them + # for aes this is because each segment likely has 16-byte padding + for file in files: + drm.decrypt(file) + merge(to=merged_path, via=files, delete=True, include_map_data=True) + + events.emit(events.Types.TRACK_DECRYPTED, track=track, drm=drm, segment=decrypted_path) + + return decrypted_path + + def merge_discontinuity(include_this_segment: bool, include_map_data: bool = True): + """ + Merge all segments of the discontinuity. + + All segment files for this discontinuity must already be downloaded and + already decrypted (if it needs to be decrypted). + + Parameters: + include_this_segment: Whether to include the current segment in the + list of segments to merge and decrypt. This should be False if + decrypting on EXT-X-KEY changes, or True when decrypting on the + last segment. + include_map_data: Whether to prepend the init map data before the + segment files when merging. + """ + last_segment_i = max(0, i - int(not include_this_segment)) + + files = [ + file + for file in sorted(segment_save_dir.iterdir()) + if int(file.stem.replace("_decrypted", "").split("-")[-1]) <= last_segment_i + ] + if files: + to_dir = segment_save_dir.parent + to_path = to_dir / f"{str(discon_i).zfill(name_len)}{files[-1].suffix}" + merge(to=to_path, via=files, delete=True, include_map_data=include_map_data) + + if segment not in unwanted_segments: + if isinstance(track, Subtitle): + segment_file_ext = get_extension(segment.uri) + segment_file_path = segment_save_dir / f"{str(i).zfill(name_len)}{segment_file_ext}" + segment_data = try_ensure_utf8(segment_file_path.read_bytes()) + if track.codec not in (Subtitle.Codec.fVTT, Subtitle.Codec.fTTML): + segment_data = ( + segment_data.decode("utf8") + .replace("‎", html.unescape("‎")) + .replace("‏", html.unescape("‏")) + .encode("utf8") + ) + segment_file_path.write_bytes(segment_data) + + if segment.discontinuity and i != 0: + if encryption_data: + decrypt(include_this_segment=False) + merge_discontinuity( + include_this_segment=False, include_map_data=not encryption_data or not encryption_data[1] + ) + + discon_i += 1 + range_offset = 0 # TODO: Should this be reset or not? + map_data = None + if encryption_data: + encryption_data = (encryption_data[0], encryption_data[1]) + + if segment.init_section and (not map_data or segment.init_section != map_data[0]): + if segment.init_section.byterange: + init_byte_range = HLS.calculate_byte_range(segment.init_section.byterange, range_offset) + range_offset = init_byte_range.split("-")[0] + init_range_header = {"Range": f"bytes={init_byte_range}"} + else: + init_range_header = {} + + # Handle both session types for init section request + res = session.get( + url=urljoin(segment.init_section.base_uri, segment.init_section.uri), + headers=init_range_header, + ) + + # Check response based on session type + if isinstance(res, requests.Response): + res.raise_for_status() + init_content = res.content + elif isinstance(res, httpx.Response): + if res.status_code >= 400: + raise requests.HTTPError(f"HTTP Error: {res.status_code}", response=res) + init_content = res.content + else: + raise TypeError( + f"Expected response to be requests.Response or httpx.Response, not {type(res)}" + ) + + map_data = (segment.init_section, init_content) + + segment_keys = getattr(segment, "keys", None) + if segment_keys: + key = HLS.get_supported_key(segment_keys) + if encryption_data and encryption_data[0] != key and i != 0 and segment not in unwanted_segments: + decrypt(include_this_segment=False) + + if key is None: + encryption_data = None + elif not encryption_data or encryption_data[0] != key: + drm = HLS.get_drm(key, session) + if isinstance(drm, (Widevine, PlayReady)): + try: + if map_data: + track_kid = track.get_key_id(map_data[1]) + else: + track_kid = None + progress(downloaded="LICENSING") + license_widevine(drm, track_kid=track_kid) + progress(downloaded="[yellow]LICENSED") + except Exception: # noqa + DOWNLOAD_CANCELLED.set() # skip pending track downloads + progress(downloaded="[red]FAILED") + raise + encryption_data = (key, drm) + + if DOWNLOAD_LICENCE_ONLY.is_set(): + continue + + if is_last_segment: + # required as it won't end with EXT-X-DISCONTINUITY nor a new key + if encryption_data: + decrypt(include_this_segment=True) + merge_discontinuity( + include_this_segment=True, include_map_data=not encryption_data or not encryption_data[1] + ) + + progress(advance=1) + + if DOWNLOAD_LICENCE_ONLY.is_set(): + return + + def find_segments_recursively(directory: Path) -> list[Path]: + """Find all segment files recursively in any directory structure created by downloaders.""" + segments = [] + + # First check direct files in the directory + if directory.exists(): + segments.extend([x for x in directory.iterdir() if x.is_file()]) + + # If no direct files, recursively search subdirectories + if not segments: + for subdir in directory.iterdir(): + if subdir.is_dir(): + segments.extend(find_segments_recursively(subdir)) + + return sorted(segments) + + # finally merge all the discontinuity save files together to the final path + segments_to_merge = find_segments_recursively(save_dir) + if len(segments_to_merge) == 1: + shutil.move(segments_to_merge[0], save_path) + else: + progress(downloaded="Merging") + if isinstance(track, (Video, Audio)): + HLS.merge_segments(segments=segments_to_merge, save_path=save_path) + else: + with open(save_path, "wb") as f: + for discontinuity_file in segments_to_merge: + discontinuity_data = discontinuity_file.read_bytes() + f.write(discontinuity_data) + f.flush() + os.fsync(f.fileno()) + discontinuity_file.unlink() + + # Clean up empty segment directory + if save_dir.exists() and save_dir.name.endswith("_segments"): + try: + save_dir.rmdir() + except OSError: + # Directory might not be empty, try removing recursively + shutil.rmtree(save_dir, ignore_errors=True) + + progress(downloaded="Downloaded") + + track.path = save_path + events.emit(events.Types.TRACK_DOWNLOADED, track=track) + + @staticmethod + def merge_segments(segments: list[Path], save_path: Path) -> int: + """ + Concatenate Segments using FFmpeg concat with binary fallback. + + Returns the file size of the merged file. + """ + # Track segment directories for cleanup + segment_dirs = set() + for segment in segments: + # Track all parent directories that contain segments + current_dir = segment.parent + while current_dir.name and "_segments" in str(current_dir): + segment_dirs.add(current_dir) + current_dir = current_dir.parent + + def cleanup_segments_and_dirs(): + """Clean up segments and directories after successful merge.""" + for segment in segments: + segment.unlink(missing_ok=True) + for segment_dir in segment_dirs: + if segment_dir.exists(): + try: + shutil.rmtree(segment_dir) + except OSError: + pass # Directory cleanup failed, but merge succeeded + + # Try FFmpeg concat first (preferred method) + if binaries.FFMPEG: + try: + demuxer_file = save_path.parent / f"ffmpeg_concat_demuxer_{save_path.stem}.txt" + demuxer_file.write_text("\n".join([f"file '{segment.absolute()}'" for segment in segments])) + + subprocess.check_call( + [ + binaries.FFMPEG, + "-hide_banner", + "-loglevel", + "error", + "-f", + "concat", + "-safe", + "0", + "-i", + demuxer_file, + "-map", + "0", + "-c", + "copy", + save_path, + ], + timeout=300, # 5 minute timeout + ) + demuxer_file.unlink(missing_ok=True) + cleanup_segments_and_dirs() + return save_path.stat().st_size + + except (subprocess.CalledProcessError, subprocess.TimeoutExpired, OSError) as e: + # FFmpeg failed, clean up demuxer file and fall back to binary concat + logging.getLogger("HLS").debug(f"FFmpeg concat failed ({e}), falling back to binary concatenation") + demuxer_file.unlink(missing_ok=True) + # Remove partial output file if it exists + save_path.unlink(missing_ok=True) + + # Fallback: Binary concatenation + logging.getLogger("HLS").debug(f"Using binary concatenation for {len(segments)} segments") + with open(save_path, "wb") as output_file: + for segment in segments: + with open(segment, "rb") as segment_file: + output_file.write(segment_file.read()) + + cleanup_segments_and_dirs() + return save_path.stat().st_size + + @staticmethod + def parse_session_data_keys( + manifest: M3U8, session: Optional[Union[Session, httpx.Client]] = None + ) -> list[m3u8.model.Key]: + """Parse `com.apple.hls.keys` session data and return Key objects.""" + keys: list[m3u8.model.Key] = [] + + for data in getattr(manifest, "session_data", []) or []: + if getattr(data, "data_id", None) != "com.apple.hls.keys": + continue + + value = getattr(data, "value", None) + if not value and data.uri: + if not session: + session = Session() + res = session.get(urljoin(manifest.base_uri or "", data.uri)) + value = res.text + + if not value: + continue + + try: + decoded = base64.b64decode(value).decode() + except Exception: + decoded = value + + try: + items = json.loads(decoded) + except Exception: + continue + + for item in items if isinstance(items, list) else []: + if not isinstance(item, dict): + continue + key = m3u8.model.Key( + method=item.get("method"), + base_uri=manifest.base_uri or "", + uri=item.get("uri"), + keyformat=item.get("keyformat"), + keyformatversions=",".join(item.get("keyformatversion") or item.get("keyformatversions") or []), + ) + if key.method in {"AES-128", "ISO-23001-7"} or ( + key.keyformat + and key.keyformat.lower() + in { + WidevineCdm.urn, + PlayReadyCdm, + "com.microsoft.playready", + } + ): + keys.append(key) + + return keys + + @staticmethod + def get_supported_key(keys: list[Union[m3u8.model.SessionKey, m3u8.model.Key]]) -> Optional[m3u8.Key]: + """ + Get a support Key System from a list of Key systems. + + Note that the key systems are chosen in an opinionated order. + + Returns None if one of the key systems is method=NONE, which means all segments + from hence forth should be treated as plain text until another key system is + encountered, unless it's also method=NONE. + + Raises NotImplementedError if none of the key systems are supported. + """ + if any(key.method == "NONE" for key in keys): + return None + + unsupported_systems = [] + for key in keys: + if not key: + continue + # TODO: Add a way to specify which supported key system to use + # TODO: Add support for 'SAMPLE-AES', 'AES-CTR', 'AES-CBC', 'ClearKey' + elif key.method == "AES-128": + return key + elif key.method == "ISO-23001-7": + return key + elif key.keyformat and key.keyformat.lower() == WidevineCdm.urn: + return key + elif key.keyformat and ( + key.keyformat.lower() == PlayReadyCdm or "com.microsoft.playready" in key.keyformat.lower() + ): + return key + else: + unsupported_systems.append(key.method + (f" ({key.keyformat})" if key.keyformat else "")) + else: + raise NotImplementedError(f"None of the key systems are supported: {', '.join(unsupported_systems)}") + + @staticmethod + def get_drm( + key: Union[m3u8.model.SessionKey, m3u8.model.Key], session: Optional[Union[Session, httpx.Client]] = None + ) -> DRM_T: + """ + Convert HLS EXT-X-KEY data to an initialized DRM object. + + Parameters: + key: m3u8 key system (EXT-X-KEY) object. + session: Optional session used to request AES-128 URIs. + Useful to set headers, proxies, cookies, and so forth. + + Raises a NotImplementedError if the key system is not supported. + """ + if not isinstance(session, (Session, httpx.Client, type(None))): + raise TypeError(f"Expected session to be a {Session} or {httpx.Client}, not {type(session)}") + if not session: + session = Session() + + # TODO: Add support for 'SAMPLE-AES', 'AES-CTR', 'AES-CBC', 'ClearKey' + if key.method == "AES-128": + drm = ClearKey.from_m3u_key(key, session) + elif key.method == "ISO-23001-7": + drm = Widevine(pssh=WV_PSSH.new(key_ids=[key.uri.split(",")[-1]], system_id=WV_PSSH.SystemId.Widevine)) + elif key.keyformat and key.keyformat.lower() == WidevineCdm.urn: + drm = Widevine( + pssh=WV_PSSH(key.uri.split(",")[-1]), + **key._extra_params, # noqa + ) + elif key.keyformat and ( + key.keyformat.lower() == PlayReadyCdm or "com.microsoft.playready" in key.keyformat.lower() + ): + drm = PlayReady( + pssh=PR_PSSH(key.uri.split(",")[-1]), + pssh_b64=key.uri.split(",")[-1], + ) + else: + raise NotImplementedError(f"The key system is not supported: {key}") + + return drm + + @staticmethod + def get_all_drm( + keys: list[Union[m3u8.model.SessionKey, m3u8.model.Key]], proxy: Optional[str] = None + ) -> list[DRM_T]: + """ + Convert HLS EXT-X-KEY data to initialized DRM objects. + + Parameters: + keys: m3u8 key system (EXT-X-KEY) objects. + proxy: Optional proxy string used for requesting AES-128 URIs. + + Raises a NotImplementedError if none of the key systems are supported. + """ + unsupported_keys: list[m3u8.Key] = [] + drm_objects: list[DRM_T] = [] + + if any(key.method == "NONE" for key in keys): + return [] + + for key in keys: + try: + drm = HLS.get_drm(key, proxy) + drm_objects.append(drm) + except NotImplementedError: + unsupported_keys.append(key) + + if not drm_objects and unsupported_keys: + logging.debug( + "Ignoring unsupported key systems: %s", + ", ".join([str(k.keyformat or k.method) for k in unsupported_keys]), + ) + return [] + + return drm_objects + + @staticmethod + def calculate_byte_range(m3u_range: str, fallback_offset: int = 0) -> str: + """ + Convert a HLS EXT-X-BYTERANGE value to a more traditional range value. + E.g., '1433@0' -> '0-1432', '357392@1433' -> '1433-358824'. + """ + parts = [int(x) for x in m3u_range.split("@")] + if len(parts) != 2: + parts.append(fallback_offset) + length, offset = parts + return f"{offset}-{offset + length - 1}" + + +__all__ = ("HLS",) diff --git a/packages/envied/src/envied/core/manifests/ism.py b/packages/envied/src/envied/core/manifests/ism.py new file mode 100644 index 0000000..cc42571 --- /dev/null +++ b/packages/envied/src/envied/core/manifests/ism.py @@ -0,0 +1,335 @@ +from __future__ import annotations + +import base64 +import hashlib +import html +import shutil +import urllib.parse +from functools import partial +from pathlib import Path +from typing import Any, Callable, Optional, Union + +import requests +from langcodes import Language, tag_is_valid +from lxml.etree import Element +from pyplayready.system.pssh import PSSH as PR_PSSH +from pywidevine.pssh import PSSH +from requests import Session + +from envied.core.constants import DOWNLOAD_CANCELLED, DOWNLOAD_LICENCE_ONLY, AnyTrack +from envied.core.drm import DRM_T, PlayReady, Widevine +from envied.core.events import events +from envied.core.tracks import Audio, Subtitle, Track, Tracks, Video +from envied.core.utilities import try_ensure_utf8 +from envied.core.utils.xml import load_xml + + +class ISM: + def __init__(self, manifest: Element, url: str) -> None: + if manifest.tag != "SmoothStreamingMedia": + raise TypeError(f"Expected 'SmoothStreamingMedia' document, got '{manifest.tag}'") + if not url: + raise requests.URLRequired("ISM manifest URL must be provided for relative paths") + self.manifest = manifest + self.url = url + + @classmethod + def from_url(cls, url: str, session: Optional[Session] = None, **kwargs: Any) -> "ISM": + if not url: + raise requests.URLRequired("ISM manifest URL must be provided") + if not session: + session = Session() + res = session.get(url, **kwargs) + if res.url != url: + url = res.url + res.raise_for_status() + return cls(load_xml(res.content), url) + + @classmethod + def from_text(cls, text: str, url: str) -> "ISM": + if not text: + raise ValueError("ISM manifest text must be provided") + if not url: + raise requests.URLRequired("ISM manifest URL must be provided for relative paths") + return cls(load_xml(text), url) + + @staticmethod + def _get_drm(headers: list[Element]) -> list[DRM_T]: + drm: list[DRM_T] = [] + for header in headers: + system_id = (header.get("SystemID") or header.get("SystemId") or "").lower() + data = "".join(header.itertext()).strip() + if not data: + continue + if system_id == "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed": + try: + pssh = PSSH(base64.b64decode(data)) + except Exception: + continue + kid = next(iter(pssh.key_ids), None) + drm.append(Widevine(pssh=pssh, kid=kid)) + elif system_id == "9a04f079-9840-4286-ab92-e65be0885f95": + try: + pr_pssh = PR_PSSH(data) + except Exception: + continue + drm.append(PlayReady(pssh=pr_pssh, pssh_b64=data)) + return drm + + def to_tracks(self, language: Optional[Union[str, Language]] = None) -> Tracks: + tracks = Tracks() + base_url = self.url + duration = int(self.manifest.get("Duration") or 0) + drm = self._get_drm(self.manifest.xpath(".//ProtectionHeader")) + + for stream_index in self.manifest.findall("StreamIndex"): + content_type = stream_index.get("Type") + if not content_type: + raise ValueError("No content type value could be found") + for ql in stream_index.findall("QualityLevel"): + codec = ql.get("FourCC") + if codec == "TTML": + codec = "STPP" + track_lang = None + lang = (stream_index.get("Language") or "").strip() + if lang and tag_is_valid(lang) and not lang.startswith("und"): + track_lang = Language.get(lang) + + track_urls: list[str] = [] + fragment_time = 0 + fragments = stream_index.findall("c") + # Some manifests omit the first fragment in the list but + # still expect a request for start time 0 which contains the + # initialization segment. If the first declared fragment is not + # at time 0, prepend the missing initialization URL. + if fragments: + first_time = int(fragments[0].get("t") or 0) + if first_time != 0: + track_urls.append( + urllib.parse.urljoin( + base_url, + stream_index.get("Url").format_map( + { + "bitrate": ql.get("Bitrate"), + "start time": "0", + } + ), + ) + ) + + for idx, frag in enumerate(fragments): + fragment_time = int(frag.get("t", fragment_time)) + repeat = int(frag.get("r", 1)) + duration_frag = int(frag.get("d") or 0) + if not duration_frag: + try: + next_time = int(fragments[idx + 1].get("t")) + except (IndexError, AttributeError): + next_time = duration + duration_frag = (next_time - fragment_time) / repeat + for _ in range(repeat): + track_urls.append( + urllib.parse.urljoin( + base_url, + stream_index.get("Url").format_map( + { + "bitrate": ql.get("Bitrate"), + "start time": str(fragment_time), + } + ), + ) + ) + fragment_time += duration_frag + + track_id = hashlib.md5( + f"{codec}-{track_lang}-{ql.get('Bitrate') or 0}-{ql.get('Index') or 0}".encode() + ).hexdigest() + + data = { + "ism": { + "manifest": self.manifest, + "stream_index": stream_index, + "quality_level": ql, + "segments": track_urls, + } + } + + if content_type == "video": + try: + vcodec = Video.Codec.from_mime(codec) if codec else None + except ValueError: + vcodec = None + tracks.add( + Video( + id_=track_id, + url=self.url, + codec=vcodec, + language=track_lang or language, + is_original_lang=bool(language and track_lang and str(track_lang) == str(language)), + bitrate=ql.get("Bitrate"), + width=int(ql.get("MaxWidth") or 0) or int(stream_index.get("MaxWidth") or 0), + height=int(ql.get("MaxHeight") or 0) or int(stream_index.get("MaxHeight") or 0), + descriptor=Video.Descriptor.ISM, + drm=drm, + data=data, + ) + ) + elif content_type == "audio": + try: + acodec = Audio.Codec.from_mime(codec) if codec else None + except ValueError: + acodec = None + tracks.add( + Audio( + id_=track_id, + url=self.url, + codec=acodec, + language=track_lang or language, + is_original_lang=bool(language and track_lang and str(track_lang) == str(language)), + bitrate=ql.get("Bitrate"), + channels=ql.get("Channels"), + descriptor=Track.Descriptor.ISM, + drm=drm, + data=data, + ) + ) + else: + try: + scodec = Subtitle.Codec.from_mime(codec) if codec else None + except ValueError: + scodec = None + tracks.add( + Subtitle( + id_=track_id, + url=self.url, + codec=scodec, + language=track_lang or language, + is_original_lang=bool(language and track_lang and str(track_lang) == str(language)), + descriptor=Track.Descriptor.ISM, + drm=drm, + data=data, + ) + ) + return tracks + + @staticmethod + def download_track( + track: AnyTrack, + save_path: Path, + save_dir: Path, + progress: partial, + session: Optional[Session] = None, + proxy: Optional[str] = None, + max_workers: Optional[int] = None, + license_widevine: Optional[Callable] = None, + *, + cdm: Optional[object] = None, + ) -> None: + if not session: + session = Session() + elif not isinstance(session, Session): + raise TypeError(f"Expected session to be a {Session}, not {session!r}") + + if proxy: + session.proxies.update({"all": proxy}) + + segments: list[str] = track.data["ism"]["segments"] + + session_drm = None + if track.drm: + # Mirror HLS.download_track: pick the DRM matching the provided CDM + # (or the first available) and license it if supported. + session_drm = track.get_drm_for_cdm(cdm) + if isinstance(session_drm, (Widevine, PlayReady)): + try: + if not license_widevine: + raise ValueError("license_widevine func must be supplied to use DRM") + progress(downloaded="LICENSING") + license_widevine(session_drm) + progress(downloaded="[yellow]LICENSED") + except Exception: + DOWNLOAD_CANCELLED.set() + progress(downloaded="[red]FAILED") + raise + + if DOWNLOAD_LICENCE_ONLY.is_set(): + progress(downloaded="[yellow]SKIPPED") + return + + progress(total=len(segments)) + + downloader = track.downloader + skip_merge = False + downloader_args = dict( + urls=[{"url": url} for url in segments], + output_dir=save_dir, + filename="{i:0%d}.mp4" % len(str(len(segments))), + headers=session.headers, + cookies=session.cookies, + proxy=proxy, + max_workers=max_workers, + ) + + if downloader.__name__ == "n_m3u8dl_re": + skip_merge = True + downloader_args.update( + { + "filename": track.id, + "track": track, + "content_keys": session_drm.content_keys if session_drm else None, + } + ) + + for status_update in downloader(**downloader_args): + file_downloaded = status_update.get("file_downloaded") + if file_downloaded: + events.emit(events.Types.SEGMENT_DOWNLOADED, track=track, segment=file_downloaded) + else: + downloaded = status_update.get("downloaded") + if downloaded and downloaded.endswith("/s"): + status_update["downloaded"] = f"ISM {downloaded}" + progress(**status_update) + + for control_file in save_dir.glob("*.aria2__temp"): + control_file.unlink() + + segments_to_merge = [x for x in sorted(save_dir.iterdir()) if x.is_file()] + + if skip_merge: + shutil.move(segments_to_merge[0], save_path) + else: + with open(save_path, "wb") as f: + for segment_file in segments_to_merge: + segment_data = segment_file.read_bytes() + if ( + not session_drm + and isinstance(track, Subtitle) + and track.codec not in (Subtitle.Codec.fVTT, Subtitle.Codec.fTTML) + ): + segment_data = try_ensure_utf8(segment_data) + segment_data = ( + segment_data.decode("utf8") + .replace("‎", html.unescape("‎")) + .replace("‏", html.unescape("‏")) + .encode("utf8") + ) + f.write(segment_data) + f.flush() + segment_file.unlink() + progress(advance=1) + + track.path = save_path + events.emit(events.Types.TRACK_DOWNLOADED, track=track) + + if not skip_merge and session_drm: + progress(downloaded="Decrypting", completed=0, total=100) + session_drm.decrypt(save_path) + track.drm = None + events.emit(events.Types.TRACK_DECRYPTED, track=track, drm=session_drm, segment=None) + progress(downloaded="Decrypting", advance=100) + + save_dir.rmdir() + progress(downloaded="Downloaded") + + +__all__ = ("ISM",) diff --git a/packages/envied/src/envied/core/manifests/m3u8.py b/packages/envied/src/envied/core/manifests/m3u8.py new file mode 100644 index 0000000..9e1ed31 --- /dev/null +++ b/packages/envied/src/envied/core/manifests/m3u8.py @@ -0,0 +1,76 @@ +"""Utility functions for parsing M3U8 playlists.""" + +from __future__ import annotations + +from typing import Optional, Union + +import httpx +import m3u8 +from pyplayready.cdm import Cdm as PlayReadyCdm +from pyplayready.system.pssh import PSSH as PR_PSSH +from pywidevine.cdm import Cdm as WidevineCdm +from pywidevine.pssh import PSSH as WV_PSSH +from requests import Session + +from envied.core.drm import PlayReady, Widevine +from envied.core.manifests.hls import HLS +from envied.core.tracks import Tracks + + +def parse( + master: m3u8.M3U8, + language: str, + *, + session: Optional[Union[Session, httpx.Client]] = None, +) -> Tracks: + """Parse a variant playlist to ``Tracks`` with DRM information.""" + tracks = HLS(master, session=session).to_tracks(language) + + need_wv = not any(isinstance(d, Widevine) for t in tracks for d in (t.drm or [])) + need_pr = not any(isinstance(d, PlayReady) for t in tracks for d in (t.drm or [])) + + if (need_wv or need_pr) and tracks.videos: + if not session: + session = Session() + + session_keys = list(master.session_keys or []) + session_keys.extend(HLS.parse_session_data_keys(master, session)) + + for drm_obj in HLS.get_all_drm(session_keys): + if need_wv and isinstance(drm_obj, Widevine): + for t in tracks.videos + tracks.audio: + t.drm = [d for d in (t.drm or []) if not isinstance(d, Widevine)] + [drm_obj] + need_wv = False + elif need_pr and isinstance(drm_obj, PlayReady): + for t in tracks.videos + tracks.audio: + t.drm = [d for d in (t.drm or []) if not isinstance(d, PlayReady)] + [drm_obj] + need_pr = False + if not need_wv and not need_pr: + break + + if (need_wv or need_pr) and tracks.videos: + first_video = tracks.videos[0] + playlist = m3u8.load(first_video.url) + for key in playlist.keys or []: + if not key or not key.keyformat: + continue + fmt = key.keyformat.lower() + if need_wv and fmt == WidevineCdm.urn: + pssh_b64 = key.uri.split(",")[-1] + drm = Widevine(pssh=WV_PSSH(pssh_b64)) + for t in tracks.videos + tracks.audio: + t.drm = [d for d in (t.drm or []) if not isinstance(d, Widevine)] + [drm] + need_wv = False + elif need_pr and (fmt == PlayReadyCdm or "com.microsoft.playready" in fmt): + pssh_b64 = key.uri.split(",")[-1] + drm = PlayReady(pssh=PR_PSSH(pssh_b64), pssh_b64=pssh_b64) + for t in tracks.videos + tracks.audio: + t.drm = [d for d in (t.drm or []) if not isinstance(d, PlayReady)] + [drm] + need_pr = False + if not need_wv and not need_pr: + break + + return tracks + + +__all__ = ["parse"] diff --git a/packages/envied/src/envied/core/proxies/__init__.py b/packages/envied/src/envied/core/proxies/__init__.py new file mode 100644 index 0000000..10008c1 --- /dev/null +++ b/packages/envied/src/envied/core/proxies/__init__.py @@ -0,0 +1,6 @@ +from .basic import Basic +from .hola import Hola +from .nordvpn import NordVPN +from .surfsharkvpn import SurfsharkVPN + +__all__ = ("Basic", "Hola", "NordVPN", "SurfsharkVPN") diff --git a/packages/envied/src/envied/core/proxies/basic.py b/packages/envied/src/envied/core/proxies/basic.py new file mode 100644 index 0000000..3502c89 --- /dev/null +++ b/packages/envied/src/envied/core/proxies/basic.py @@ -0,0 +1,54 @@ +import random +import re +from typing import Optional, Union + +from requests.utils import prepend_scheme_if_needed +from urllib3.util import parse_url + +from envied.core.proxies.proxy import Proxy + + +class Basic(Proxy): + def __init__(self, **countries: dict[str, Union[str, list[str]]]): + """Basic Proxy Service using Proxies specified in the config.""" + self.countries = {k.lower(): v for k, v in countries.items()} + + def __repr__(self) -> str: + countries = len(self.countries) + servers = len(self.countries.values()) + + return f"{countries} Countr{['ies', 'y'][countries == 1]} ({servers} Server{['s', ''][servers == 1]})" + + def get_proxy(self, query: str) -> Optional[str]: + """Get a proxy URI from the config.""" + query = query.lower() + + match = re.match(r"^([a-z]{2})(\d+)?$", query, re.IGNORECASE) + if not match: + raise ValueError(f'The query "{query}" was not recognized...') + + country_code = match.group(1) + entry = match.group(2) + + servers: Optional[Union[str, list[str]]] = self.countries.get(country_code) + if not servers: + return None + + if isinstance(servers, str): + proxy = servers + elif entry: + try: + proxy = servers[int(entry) - 1] + except IndexError: + raise ValueError( + f'There\'s only {len(servers)} prox{"y" if len(servers) == 1 else "ies"} for "{country_code}"...' + ) + else: + proxy = random.choice(servers) + + proxy = prepend_scheme_if_needed(proxy, "http") + parsed_proxy = parse_url(proxy) + if not parsed_proxy.host: + raise ValueError(f"The proxy '{proxy}' is not a valid proxy URI supported by Python-Requests.") + + return proxy diff --git a/packages/envied/src/envied/core/proxies/hola.py b/packages/envied/src/envied/core/proxies/hola.py new file mode 100644 index 0000000..ac50d5d --- /dev/null +++ b/packages/envied/src/envied/core/proxies/hola.py @@ -0,0 +1,60 @@ +import random +import re +import subprocess +from typing import Optional + +from envied.core import binaries +from envied.core.proxies.proxy import Proxy + + +class Hola(Proxy): + def __init__(self): + """ + Proxy Service using Hola's direct connections via the hola-proxy project. + https://github.com/Snawoot/hola-proxy + """ + self.binary = binaries.HolaProxy + if not self.binary: + raise EnvironmentError("hola-proxy executable not found but is required for the Hola proxy provider.") + + self.countries = self.get_countries() + + def __repr__(self) -> str: + countries = len(self.countries) + + return f"{countries} Countr{['ies', 'y'][countries == 1]}" + + def get_proxy(self, query: str) -> Optional[str]: + """ + Get an HTTP proxy URI for a Datacenter ('direct') or Residential ('lum') Hola server. + + TODO: - Add ability to select 'lum' proxies (residential proxies). + - Return and use Proxy Authorization + """ + query = query.lower() + + p = subprocess.check_output( + [self.binary, "-country", query, "-list-proxies"], stderr=subprocess.STDOUT + ).decode() + + if "Transaction error: temporary ban detected." in p: + raise ConnectionError("Hola banned your IP temporarily from it's services. Try change your IP.") + + username, password, proxy_authorization = re.search( + r"Login: (.*)\nPassword: (.*)\nProxy-Authorization: (.*)", p + ).groups() + + servers = re.findall(r"(zagent.*)", p) + proxies = [] + for server in servers: + host, ip_address, direct, peer, hola, trial, trial_peer, vendor = server.split(",") + proxies.append(f"http://{username}:{password}@{ip_address}:{peer}") + + proxy = random.choice(proxies) + return proxy + + def get_countries(self) -> list[dict[str, str]]: + """Get a list of available Countries.""" + p = subprocess.check_output([self.binary, "-list-countries"]).decode("utf8") + + return [{code: name} for country in p.splitlines() for (code, name) in [country.split(" - ", maxsplit=1)]] diff --git a/packages/envied/src/envied/core/proxies/nordvpn.py b/packages/envied/src/envied/core/proxies/nordvpn.py new file mode 100644 index 0000000..ea0f0f1 --- /dev/null +++ b/packages/envied/src/envied/core/proxies/nordvpn.py @@ -0,0 +1,128 @@ +import json +import re +from typing import Optional + +import requests + +from envied.core.proxies.proxy import Proxy + + +class NordVPN(Proxy): + def __init__(self, username: str, password: str, server_map: Optional[dict[str, int]] = None): + """ + Proxy Service using NordVPN Service Credentials. + + A username and password must be provided. These are Service Credentials, not your Login Credentials. + The Service Credentials can be found here: https://my.nordaccount.com/dashboard/nordvpn/ + """ + if not username: + raise ValueError("No Username was provided to the NordVPN Proxy Service.") + if not password: + raise ValueError("No Password was provided to the NordVPN Proxy Service.") + if not re.match(r"^[a-z0-9]{48}$", username + password, re.IGNORECASE) or "@" in username: + raise ValueError( + "The Username and Password must be NordVPN Service Credentials, not your Login Credentials. " + "The Service Credentials can be found here: https://my.nordaccount.com/dashboard/nordvpn/" + ) + + if server_map is not None and not isinstance(server_map, dict): + raise TypeError(f"Expected server_map to be a dict mapping a region to a server ID, not '{server_map!r}'.") + + self.username = username + self.password = password + self.server_map = server_map or {} + + self.countries = self.get_countries() + + def __repr__(self) -> str: + countries = len(self.countries) + servers = sum(x["serverCount"] for x in self.countries) + + return f"{countries} Countr{['ies', 'y'][countries == 1]} ({servers} Server{['s', ''][servers == 1]})" + + def get_proxy(self, query: str) -> Optional[str]: + """ + Get an HTTP(SSL) proxy URI for a NordVPN server. + + HTTP proxies under port 80 were disabled on the 15th of Feb, 2021: + https://nordvpn.com/blog/removing-http-proxies + """ + query = query.lower() + if re.match(r"^[a-z]{2}\d+$", query): + # country and nordvpn server id, e.g., us1, fr1234 + hostname = f"{query}.nordvpn.com" + else: + if query.isdigit(): + # country id + country = self.get_country(by_id=int(query)) + elif re.match(r"^[a-z]+$", query): + # country code + country = self.get_country(by_code=query) + else: + raise ValueError(f"The query provided is unsupported and unrecognized: {query}") + if not country: + # NordVPN doesnt have servers in this region + return + + server_mapping = self.server_map.get(country["code"].lower()) + if server_mapping: + # country was set to a specific server ID in config + hostname = f"{country['code'].lower()}{server_mapping}.nordvpn.com" + else: + # get the recommended server ID + recommended_servers = self.get_recommended_servers(country["id"]) + if not recommended_servers: + raise ValueError( + f"The NordVPN Country {query} currently has no recommended servers. " + "Try again later. If the issue persists, double-check the query." + ) + hostname = recommended_servers[0]["hostname"] + + if hostname.startswith("gb"): + # NordVPN uses the alpha2 of 'GB' in API responses, but 'UK' in the hostname + hostname = f"gb{hostname[2:]}" + + return f"https://{self.username}:{self.password}@{hostname}:89" + + def get_country(self, by_id: Optional[int] = None, by_code: Optional[str] = None) -> Optional[dict]: + """Search for a Country and it's metadata.""" + if all(x is None for x in (by_id, by_code)): + raise ValueError("At least one search query must be made.") + + for country in self.countries: + if all( + [by_id is None or country["id"] == int(by_id), by_code is None or country["code"] == by_code.upper()] + ): + return country + + @staticmethod + def get_recommended_servers(country_id: int) -> list[dict]: + """ + Get the list of recommended Servers for a Country. + + Note: There may not always be more than one recommended server. + """ + res = requests.get( + url="https://api.nordvpn.com/v1/servers/recommendations", params={"filters[country_id]": country_id} + ) + if not res.ok: + raise ValueError(f"Failed to get a list of NordVPN countries [{res.status_code}]") + + try: + return res.json() + except json.JSONDecodeError: + raise ValueError("Could not decode list of NordVPN countries, not JSON data.") + + @staticmethod + def get_countries() -> list[dict]: + """Get a list of available Countries and their metadata.""" + res = requests.get( + url="https://api.nordvpn.com/v1/servers/countries", + ) + if not res.ok: + raise ValueError(f"Failed to get a list of NordVPN countries [{res.status_code}]") + + try: + return res.json() + except json.JSONDecodeError: + raise ValueError("Could not decode list of NordVPN countries, not JSON data.") diff --git a/packages/envied/src/envied/core/proxies/proxy.py b/packages/envied/src/envied/core/proxies/proxy.py new file mode 100644 index 0000000..10e044a --- /dev/null +++ b/packages/envied/src/envied/core/proxies/proxy.py @@ -0,0 +1,31 @@ +from abc import abstractmethod +from typing import Optional + + +class Proxy: + @abstractmethod + def __init__(self, **kwargs): + """ + The constructor initializes the Service using passed configuration data. + + Any authorization or pre-fetching of data should be done here. + """ + + @abstractmethod + def __repr__(self) -> str: + """Return a string denoting a list of Countries and Servers (if possible).""" + countries = ... + servers = ... + return f"{countries} Countr{['ies', 'y'][countries == 1]} ({servers} Server{['s', ''][servers == 1]})" + + @abstractmethod + def get_proxy(self, query: str) -> Optional[str]: + """ + Get a Proxy URI from the Proxy Service. + + Only return None if the query was accepted, but no proxy could be returned. + Otherwise, please use exceptions to denote any errors with the call or query. + + The returned Proxy URI must be a string supported by Python-Requests: + '{scheme}://[{user}:{pass}@]{host}:{port}' + """ diff --git a/packages/envied/src/envied/core/proxies/surfsharkvpn.py b/packages/envied/src/envied/core/proxies/surfsharkvpn.py new file mode 100644 index 0000000..458dbc7 --- /dev/null +++ b/packages/envied/src/envied/core/proxies/surfsharkvpn.py @@ -0,0 +1,124 @@ +import json +import random +import re +from typing import Optional + +import requests + +from envied.core.proxies.proxy import Proxy + + +class SurfsharkVPN(Proxy): + def __init__(self, username: str, password: str, server_map: Optional[dict[str, int]] = None): + """ + Proxy Service using SurfsharkVPN Service Credentials. + + A username and password must be provided. These are Service Credentials, not your Login Credentials. + The Service Credentials can be found here: https://my.surfshark.com/vpn/manual-setup/main/openvpn + """ + if not username: + raise ValueError("No Username was provided to the SurfsharkVPN Proxy Service.") + if not password: + raise ValueError("No Password was provided to the SurfsharkVPN Proxy Service.") + if not re.match(r"^[a-z0-9]{48}$", username + password, re.IGNORECASE) or "@" in username: + raise ValueError( + "The Username and Password must be SurfsharkVPN Service Credentials, not your Login Credentials. " + "The Service Credentials can be found here: https://my.surfshark.com/vpn/manual-setup/main/openvpn" + ) + + if server_map is not None and not isinstance(server_map, dict): + raise TypeError(f"Expected server_map to be a dict mapping a region to a server ID, not '{server_map!r}'.") + + self.username = username + self.password = password + self.server_map = server_map or {} + + self.countries = self.get_countries() + + def __repr__(self) -> str: + countries = len(set(x.get("country") for x in self.countries if x.get("country"))) + servers = sum(1 for x in self.countries if x.get("connectionName")) + + return f"{countries} Countr{['ies', 'y'][countries == 1]} ({servers} Server{['s', ''][servers == 1]})" + + def get_proxy(self, query: str) -> Optional[str]: + """ + Get an HTTP(SSL) proxy URI for a SurfsharkVPN server. + """ + query = query.lower() + if re.match(r"^[a-z]{2}\d+$", query): + # country and surfsharkvpn server id, e.g., au-per, be-anr, us-bos + hostname = f"{query}.prod.surfshark.com" + else: + if query.isdigit(): + # country id + country = self.get_country(by_id=int(query)) + elif re.match(r"^[a-z]+$", query): + # country code + country = self.get_country(by_code=query) + else: + raise ValueError(f"The query provided is unsupported and unrecognized: {query}") + if not country: + # SurfsharkVPN doesnt have servers in this region + return + + server_mapping = self.server_map.get(country["countryCode"].lower()) + if server_mapping: + # country was set to a specific server ID in config + hostname = f"{country['code'].lower()}{server_mapping}.prod.surfshark.com" + else: + # get the random server ID + random_server = self.get_random_server(country["countryCode"]) + if not random_server: + raise ValueError( + f"The SurfsharkVPN Country {query} currently has no random servers. " + "Try again later. If the issue persists, double-check the query." + ) + hostname = random_server + + return f"https://{self.username}:{self.password}@{hostname}:443" + + def get_country(self, by_id: Optional[int] = None, by_code: Optional[str] = None) -> Optional[dict]: + """Search for a Country and it's metadata.""" + if all(x is None for x in (by_id, by_code)): + raise ValueError("At least one search query must be made.") + + for country in self.countries: + if all( + [ + by_id is None or country["id"] == int(by_id), + by_code is None or country["countryCode"] == by_code.upper(), + ] + ): + return country + + def get_random_server(self, country_id: str): + """ + Get the list of random Server for a Country. + + Note: There may not always be more than one recommended server. + """ + country = [x["connectionName"] for x in self.countries if x["countryCode"].lower() == country_id.lower()] + try: + country = random.choice(country) + return country + except Exception: + raise ValueError("Could not get random countrycode from the countries list.") + + @staticmethod + def get_countries() -> list[dict]: + """Get a list of available Countries and their metadata.""" + res = requests.get( + url="https://api.surfshark.com/v3/server/clusters/all", + headers={ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36", + "Content-Type": "application/json", + }, + ) + if not res.ok: + raise ValueError(f"Failed to get a list of SurfsharkVPN countries [{res.status_code}]") + + try: + return res.json() + except json.JSONDecodeError: + raise ValueError("Could not decode list of SurfsharkVPN countries, not JSON data.") diff --git a/packages/envied/src/envied/core/search_result.py b/packages/envied/src/envied/core/search_result.py new file mode 100644 index 0000000..c902995 --- /dev/null +++ b/packages/envied/src/envied/core/search_result.py @@ -0,0 +1,44 @@ +from typing import Optional, Union + + +class SearchResult: + def __init__( + self, + id_: Union[str, int], + title: str, + description: Optional[str] = None, + label: Optional[str] = None, + url: Optional[str] = None, + ): + """ + A Search Result for any support Title Type. + + Parameters: + id_: The search result's Title ID. + title: The primary display text, e.g., the Title's Name. + description: The secondary display text, e.g., the Title's Description or + further title information. + label: The tertiary display text. This will typically be used to display + an informative label or tag to the result. E.g., "unavailable", the + title's price tag, region, etc. + url: A hyperlink to the search result or title's page. + """ + if not isinstance(id_, (str, int)): + raise TypeError(f"Expected id_ to be a {str} or {int}, not {type(id_)}") + if not isinstance(title, str): + raise TypeError(f"Expected title to be a {str}, not {type(title)}") + if not isinstance(description, (str, type(None))): + raise TypeError(f"Expected description to be a {str}, not {type(description)}") + if not isinstance(label, (str, type(None))): + raise TypeError(f"Expected label to be a {str}, not {type(label)}") + if not isinstance(url, (str, type(None))): + raise TypeError(f"Expected url to be a {str}, not {type(url)}") + + self.id = id_ + self.title = title + self.description = description + self.label = label + self.url = url + + +__all__ = ("SearchResult",) diff --git a/packages/envied/src/envied/core/service.py b/packages/envied/src/envied/core/service.py new file mode 100644 index 0000000..62f1c2f --- /dev/null +++ b/packages/envied/src/envied/core/service.py @@ -0,0 +1,368 @@ +import base64 +import logging +from abc import ABCMeta, abstractmethod +from collections.abc import Generator +from http.cookiejar import CookieJar +from pathlib import Path +from typing import Optional, Union +from urllib.parse import urlparse + +import click +import m3u8 +import requests +from requests.adapters import HTTPAdapter, Retry +from rich.padding import Padding +from rich.rule import Rule + +from envied.core.cacher import Cacher +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import AnyTrack +from envied.core.credential import Credential +from envied.core.drm import DRM_T +from envied.core.search_result import SearchResult +from envied.core.title_cacher import TitleCacher, get_account_hash, get_region_from_proxy +from envied.core.titles import Title_T, Titles_T +from envied.core.tracks import Chapters, Tracks +from envied.core.utilities import get_cached_ip_info, get_ip_info + + +class Service(metaclass=ABCMeta): + """The Service Base Class.""" + + # Abstract class variables + ALIASES: tuple[str, ...] = () # list of aliases for the service; alternatives to the service tag. + GEOFENCE: tuple[str, ...] = () # list of ip regions required to use the service. empty list == no specific region. + + def __init__(self, ctx: click.Context): + console.print(Padding(Rule(f"[rule.text]Service: {self.__class__.__name__}"), (1, 2))) + + self.config = ctx.obj.config + + self.log = logging.getLogger(self.__class__.__name__) + + self.session = self.get_session() + self.cache = Cacher(self.__class__.__name__) + self.title_cache = TitleCacher(self.__class__.__name__) + + # Store context for cache control flags and credential + self.ctx = ctx + self.credential = None # Will be set in authenticate() + self.current_region = None # Will be set based on proxy/geolocation + + if not ctx.parent or not ctx.parent.params.get("no_proxy"): + if ctx.parent: + proxy = ctx.parent.params["proxy"] + else: + proxy = None + + if not proxy: + # don't override the explicit proxy set by the user, even if they may be geoblocked + with console.status("Checking if current region is Geoblocked...", spinner="dots"): + if self.GEOFENCE: + # Service has geofence - need fresh IP check to determine if proxy needed + try: + current_region = get_ip_info(self.session)["country"].lower() + if any(x.lower() == current_region for x in self.GEOFENCE): + self.log.info("Service is not Geoblocked in your region") + else: + requested_proxy = self.GEOFENCE[0] # first is likely main region + self.log.info( + f"Service is Geoblocked in your region, getting a Proxy to {requested_proxy}" + ) + for proxy_provider in ctx.obj.proxy_providers: + proxy = proxy_provider.get_proxy(requested_proxy) + if proxy: + self.log.info(f"Got Proxy from {proxy_provider.__class__.__name__}") + break + except Exception as e: + self.log.warning(f"Failed to check geofence: {e}") + current_region = None + else: + self.log.info("Service has no Geofence") + + if proxy: + self.session.proxies.update({"all": proxy}) + proxy_parse = urlparse(proxy) + if proxy_parse.username and proxy_parse.password: + self.session.headers.update( + { + "Proxy-Authorization": base64.b64encode( + f"{proxy_parse.username}:{proxy_parse.password}".encode("utf8") + ).decode() + } + ) + # Always verify proxy IP - proxies can change exit nodes + try: + proxy_ip_info = get_ip_info(self.session) + self.current_region = proxy_ip_info.get("country", "").lower() if proxy_ip_info else None + except Exception as e: + self.log.warning(f"Failed to verify proxy IP: {e}") + # Fallback to extracting region from proxy config + self.current_region = get_region_from_proxy(proxy) + else: + # No proxy, use cached IP info for title caching (non-critical) + try: + ip_info = get_cached_ip_info(self.session) + self.current_region = ip_info.get("country", "").lower() if ip_info else None + except Exception as e: + self.log.debug(f"Failed to get cached IP info: {e}") + self.current_region = None + + # Optional Abstract functions + # The following functions may be implemented by the Service. + # Otherwise, the base service code (if any) of the function will be executed on call. + # The functions will be executed in shown order. + + @staticmethod + def get_session() -> requests.Session: + """ + Creates a Python-requests Session, adds common headers + from config, cookies, retry handler, and a proxy if available. + :returns: Prepared Python-requests Session + """ + session = requests.Session() + session.headers.update(config.headers) + session.mount( + "https://", + HTTPAdapter( + max_retries=Retry(total=15, backoff_factor=0.2, status_forcelist=[429, 500, 502, 503, 504]), + pool_block=True, + ), + ) + session.mount("http://", session.adapters["https://"]) + return session + + def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None: + """ + Authenticate the Service with Cookies and/or Credentials (Email/Username and Password). + + This is effectively a login() function. Any API calls or object initializations + needing to be made, should be made here. This will be run before any of the + following abstract functions. + + You should avoid storing or using the Credential outside this function. + Make any calls you need for any Cookies, Tokens, or such, then use those. + + The Cookie jar should also not be stored outside this function. However, you may load + the Cookie jar into the service session. + """ + if cookies is not None: + if not isinstance(cookies, CookieJar): + raise TypeError(f"Expected cookies to be a {CookieJar}, not {cookies!r}.") + self.session.cookies.update(cookies) + + # Store credential for cache key generation + self.credential = credential + + def search(self) -> Generator[SearchResult, None, None]: + """ + Search by query for titles from the Service. + + The query must be taken as a CLI argument by the Service class. + Ideally just re-use the title ID argument (i.e. self.title). + + Search results will be displayed in the order yielded. + """ + raise NotImplementedError(f"Search functionality has not been implemented by {self.__class__.__name__}") + + def get_widevine_service_certificate( + self, *, challenge: bytes, title: Title_T, track: AnyTrack + ) -> Union[bytes, str]: + """ + Get the Widevine Service Certificate used for Privacy Mode. + + :param challenge: The service challenge, providing this to a License endpoint should return the + privacy certificate that the service uses. + :param title: The current `Title` from get_titles that is being executed. This is provided in + case it has data needed to be used, e.g. for a HTTP request. + :param track: The current `Track` needing decryption. Provided for same reason as `title`. + :return: The Service Privacy Certificate as Bytes or a Base64 string. Don't Base64 Encode or + Decode the data, return as is to reduce unnecessary computations. + """ + + def get_widevine_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[Union[bytes, str]]: + """ + Get a Widevine License message by sending a License Request (challenge). + + This License message contains the encrypted Content Decryption Keys and will be + read by the Cdm and decrypted. + + This is a very important request to get correct. A bad, unexpected, or missing + value in the request can cause your key to be detected and promptly banned, + revoked, disabled, or downgraded. + + :param challenge: The license challenge from the Widevine CDM. + :param title: The current `Title` from get_titles that is being executed. This is provided in + case it has data needed to be used, e.g. for a HTTP request. + :param track: The current `Track` needing decryption. Provided for same reason as `title`. + :return: The License response as Bytes or a Base64 string. Don't Base64 Encode or + Decode the data, return as is to reduce unnecessary computations. + """ + + # Required Abstract functions + # The following functions *must* be implemented by the Service. + # The functions will be executed in shown order. + + @abstractmethod + def get_titles(self) -> Titles_T: + """ + Get Titles for the provided title ID. + + Return a Movies, Series, or Album objects containing Movie, Episode, or Song title objects respectively. + The returned data must be for the given title ID, or a spawn of the title ID. + + At least one object is expected to be returned, or it will presume an invalid Title ID was + provided. + + You can use the `data` dictionary class instance attribute of each Title to store data you may need later on. + This can be useful to store information on each title that will be required like any sub-asset IDs, or such. + """ + + def get_titles_cached(self, title_id: str = None) -> Titles_T: + """ + Cached wrapper around get_titles() to reduce redundant API calls. + + This method checks the cache before calling get_titles() and handles + fallback to cached data when API calls fail. + + Args: + title_id: Optional title ID for cache key generation. + If not provided, will try to extract from service instance. + + Returns: + Titles object (Movies, Series, or Album) + """ + # Try to get title_id from service instance if not provided + if title_id is None: + # Different services store the title ID in different attributes + if hasattr(self, "title"): + title_id = self.title + elif hasattr(self, "title_id"): + title_id = self.title_id + else: + # If we can't determine title_id, just call get_titles directly + self.log.debug("Cannot determine title_id for caching, bypassing cache") + return self.get_titles() + + # Get cache control flags from context + no_cache = False + reset_cache = False + if self.ctx and self.ctx.parent: + no_cache = self.ctx.parent.params.get("no_cache", False) + reset_cache = self.ctx.parent.params.get("reset_cache", False) + + # Get account hash for cache key + account_hash = get_account_hash(self.credential) + + # Use title cache to get titles with fallback support + return self.title_cache.get_cached_titles( + title_id=str(title_id), + fetch_function=self.get_titles, + region=self.current_region, + account_hash=account_hash, + no_cache=no_cache, + reset_cache=reset_cache, + ) + + @abstractmethod + def get_tracks(self, title: Title_T) -> Tracks: + """ + Get Track objects of the Title. + + Return a Tracks object, which itself can contain Video, Audio, Subtitle or even Chapters. + Tracks.videos, Tracks.audio, Tracks.subtitles, and Track.chapters should be a List of Track objects. + + Each Track in the Tracks should represent a Video/Audio Stream/Representation/Adaptation or + a Subtitle file. + + While one Track should only hold information for one stream/downloadable, try to get as many + unique Track objects per stream type so Stream selection by the root code can give you more + options in terms of Resolution, Bitrate, Codecs, Language, e.t.c. + + No decision making or filtering of which Tracks get returned should happen here. It can be + considered an error to filter for e.g. resolution, codec, and such. All filtering based on + arguments will be done by the root code automatically when needed. + + Make sure you correctly mark which Tracks are encrypted or not, and by which DRM System + via its `drm` property. + + If you are able to obtain the Track's KID (Key ID) as a 32 char (16 bit) HEX string, provide + it to the Track's `kid` variable as it will speed up the decryption process later on. It may + or may not be needed, that depends on the service. Generally if you can provide it, without + downloading any of the Track's stream data, then do. + + :param title: The current `Title` from get_titles that is being executed. + :return: Tracks object containing Video, Audio, Subtitles, and Chapters, if available. + """ + + @abstractmethod + def get_chapters(self, title: Title_T) -> Chapters: + """ + Get Chapters for the Title. + + Parameters: + title: The current Title from `get_titles` that is being processed. + + You must return a Chapters object containing 0 or more Chapter objects. + + You do not need to set a Chapter number or sort/order the chapters in any way as + the Chapters class automatically handles all of that for you. If there's no + descriptive name for a Chapter then do not set a name at all. + + You must not set Chapter names to "Chapter {n}" or such. If you (or the user) + wants "Chapter {n}" style Chapter names (or similar) then they can use the config + option `chapter_fallback_name`. For example, `"Chapter {i:02}"` for "Chapter 01". + """ + + # Optional Event methods + + def on_segment_downloaded(self, track: AnyTrack, segment: Path) -> None: + """ + Called when one of a Track's Segments has finished downloading. + + Parameters: + track: The Track object that had a Segment downloaded. + segment: The Path to the Segment that was downloaded. + """ + + def on_track_downloaded(self, track: AnyTrack) -> None: + """ + Called when a Track has finished downloading. + + Parameters: + track: The Track object that was downloaded. + """ + + def on_track_decrypted(self, track: AnyTrack, drm: DRM_T, segment: Optional[m3u8.Segment] = None) -> None: + """ + Called when a Track has finished decrypting. + + Parameters: + track: The Track object that was decrypted. + drm: The DRM object it decrypted with. + segment: The HLS segment information that was decrypted. + """ + + def on_track_repacked(self, track: AnyTrack) -> None: + """ + Called when a Track has finished repacking. + + Parameters: + track: The Track object that was repacked. + """ + + def on_track_multiplex(self, track: AnyTrack) -> None: + """ + Called when a Track is about to be Multiplexed into a Container. + + Note: Right now only MKV containers are multiplexed but in the future + this may also be called when multiplexing to other containers like + MP4 via ffmpeg/mp4box. + + Parameters: + track: The Track object that was repacked. + """ + + +__all__ = ("Service",) diff --git a/packages/envied/src/envied/core/services.py b/packages/envied/src/envied/core/services.py new file mode 100644 index 0000000..bd7ddd5 --- /dev/null +++ b/packages/envied/src/envied/core/services.py @@ -0,0 +1,90 @@ +from pathlib import Path + +import click + +from envied.core.config import config +from envied.core.service import Service +from envied.core.utilities import import_module_by_path + +_service_dirs = config.directories.services +if not isinstance(_service_dirs, list): + _service_dirs = [_service_dirs] + +_SERVICES = sorted( + (path for service_dir in _service_dirs for path in service_dir.glob("*/__init__.py")), + key=lambda x: x.parent.stem, +) + +_MODULES = {path.parent.stem: getattr(import_module_by_path(path), path.parent.stem) for path in _SERVICES} + +_ALIASES = {tag: getattr(module, "ALIASES") for tag, module in _MODULES.items()} + + +class Services(click.MultiCommand): + """Lazy-loaded command group of project services.""" + + # Click-specific methods + + def list_commands(self, ctx: click.Context) -> list[str]: + """Returns a list of all available Services as command names for Click.""" + return Services.get_tags() + + def get_command(self, ctx: click.Context, name: str) -> click.Command: + """Load the Service and return the Click CLI method.""" + tag = Services.get_tag(name) + try: + service = Services.load(tag) + except KeyError as e: + available_services = self.list_commands(ctx) + if not available_services: + raise click.ClickException( + f"There are no Services added yet, therefore the '{name}' Service could not be found." + ) + raise click.ClickException(f"{e}. Available Services: {', '.join(available_services)}") + + if hasattr(service, "cli"): + return service.cli + + raise click.ClickException(f"Service '{tag}' has no 'cli' method configured.") + + # Methods intended to be used anywhere + + @staticmethod + def get_tags() -> list[str]: + """Returns a list of service tags from all available Services.""" + return [x.parent.stem for x in _SERVICES] + + @staticmethod + def get_path(name: str) -> Path: + """Get the directory path of a command.""" + tag = Services.get_tag(name) + for service in _SERVICES: + if service.parent.stem == tag: + return service.parent + raise KeyError(f"There is no Service added by the Tag '{name}'") + + @staticmethod + def get_tag(value: str) -> str: + """ + Get the Service Tag (e.g. DSNP, not DisneyPlus/Disney+, etc.) by an Alias. + Input value can be of any case-sensitivity. + Original input value is returned if it did not match a service tag. + """ + original_value = value + value = value.lower() + for path in _SERVICES: + tag = path.parent.stem + if value in (tag.lower(), *_ALIASES.get(tag, [])): + return tag + return original_value + + @staticmethod + def load(tag: str) -> Service: + """Load a Service module by Service tag.""" + module = _MODULES.get(tag) + if not module: + raise KeyError(f"There is no Service added by the Tag '{tag}'") + return module + + +__all__ = ("Services",) diff --git a/packages/envied/src/envied/core/title_cacher.py b/packages/envied/src/envied/core/title_cacher.py new file mode 100644 index 0000000..f4f1b86 --- /dev/null +++ b/packages/envied/src/envied/core/title_cacher.py @@ -0,0 +1,240 @@ +from __future__ import annotations + +import hashlib +import logging +from datetime import datetime, timedelta +from typing import Optional + +from envied.core.cacher import Cacher +from envied.core.config import config +from envied.core.titles import Titles_T + + +class TitleCacher: + """ + Handles caching of Title objects to reduce redundant API calls. + + This wrapper provides: + - Region-aware caching to handle geo-restricted content + - Automatic fallback to cached data when API calls fail + - Cache lifetime extension during failures + - Cache hit/miss statistics for debugging + """ + + def __init__(self, service_name: str): + self.service_name = service_name + self.log = logging.getLogger(f"{service_name}.TitleCache") + self.cacher = Cacher(service_name) + self.stats = {"hits": 0, "misses": 0, "fallbacks": 0} + + def _generate_cache_key( + self, title_id: str, region: Optional[str] = None, account_hash: Optional[str] = None + ) -> str: + """ + Generate a unique cache key for title data. + + Args: + title_id: The title identifier + region: The region/proxy identifier + account_hash: Hash of account credentials (if applicable) + + Returns: + A unique cache key string + """ + # Hash the title_id to handle complex IDs (URLs, dots, special chars) + # This ensures consistent length and filesystem-safe keys + title_hash = hashlib.sha256(title_id.encode()).hexdigest()[:16] + + # Start with base key using hash + key_parts = ["titles", title_hash] + + # Add region if available + if region: + key_parts.append(region.lower()) + + # Add account hash if available + if account_hash: + key_parts.append(account_hash[:8]) # Use first 8 chars of hash + + # Join with underscores + cache_key = "_".join(key_parts) + + # Log the mapping for debugging + self.log.debug(f"Cache key mapping: {title_id} -> {cache_key}") + + return cache_key + + def get_cached_titles( + self, + title_id: str, + fetch_function, + region: Optional[str] = None, + account_hash: Optional[str] = None, + no_cache: bool = False, + reset_cache: bool = False, + ) -> Optional[Titles_T]: + """ + Get titles from cache or fetch from API with fallback support. + + Args: + title_id: The title identifier + fetch_function: Function to call to fetch fresh titles + region: The region/proxy identifier + account_hash: Hash of account credentials + no_cache: Bypass cache completely + reset_cache: Clear cache before fetching + + Returns: + Titles object (Movies, Series, or Album) + """ + # If caching is globally disabled or no_cache flag is set + if not config.title_cache_enabled or no_cache: + self.log.debug("Cache bypassed, fetching fresh titles") + return fetch_function() + + # Generate cache key + cache_key = self._generate_cache_key(title_id, region, account_hash) + + # If reset_cache flag is set, clear the cache entry + if reset_cache: + self.log.info(f"Clearing cache for {cache_key}") + cache_path = (config.directories.cache / self.service_name / cache_key).with_suffix(".json") + if cache_path.exists(): + cache_path.unlink() + + # Try to get from cache + cache = self.cacher.get(cache_key, version=1) + + # Check if we have valid cached data + if cache and not cache.expired: + self.stats["hits"] += 1 + self.log.debug(f"Cache hit for {title_id} (hits: {self.stats['hits']}, misses: {self.stats['misses']})") + return cache.data + + # Cache miss or expired, try to fetch fresh data + self.stats["misses"] += 1 + self.log.debug(f"Cache miss for {title_id}, fetching fresh data") + + try: + # Attempt to fetch fresh titles + titles = fetch_function() + + if titles: + # Successfully fetched, update cache + self.log.debug(f"Successfully fetched titles for {title_id}, updating cache") + cache = self.cacher.get(cache_key, version=1) + cache.set(titles, expiration=datetime.now() + timedelta(seconds=config.title_cache_time)) + + return titles + + except Exception as e: + # API call failed, check if we have fallback cached data + if cache and cache.data: + # We have expired cached data, use it as fallback + current_time = datetime.now() + max_retention_time = cache.expiration + timedelta( + seconds=config.title_cache_max_retention - config.title_cache_time + ) + + if current_time < max_retention_time: + self.stats["fallbacks"] += 1 + self.log.warning( + f"API call failed for {title_id}, using cached data as fallback " + f"(fallbacks: {self.stats['fallbacks']})" + ) + self.log.debug(f"Error was: {e}") + + # Extend cache lifetime + extended_expiration = current_time + timedelta(minutes=5) + if extended_expiration < max_retention_time: + cache.expiration = extended_expiration + cache.set(cache.data, expiration=extended_expiration) + + return cache.data + else: + self.log.error(f"API call failed and cached data for {title_id} exceeded maximum retention time") + + # Re-raise the exception if no fallback available + raise + + def clear_all_title_cache(self): + """Clear all title caches for this service.""" + cache_dir = config.directories.cache / self.service_name + if cache_dir.exists(): + for cache_file in cache_dir.glob("titles_*.json"): + cache_file.unlink() + self.log.info(f"Cleared cache file: {cache_file.name}") + + def get_cache_stats(self) -> dict: + """Get cache statistics.""" + total = sum(self.stats.values()) + if total > 0: + hit_rate = (self.stats["hits"] / total) * 100 + else: + hit_rate = 0 + + return { + "hits": self.stats["hits"], + "misses": self.stats["misses"], + "fallbacks": self.stats["fallbacks"], + "hit_rate": f"{hit_rate:.1f}%", + } + + +def get_region_from_proxy(proxy_url: Optional[str]) -> Optional[str]: + """ + Extract region identifier from proxy URL. + + Args: + proxy_url: The proxy URL string + + Returns: + Region identifier or None + """ + if not proxy_url: + return None + + # Try to extract region from common proxy patterns + # e.g., "us123.nordvpn.com", "gb-proxy.example.com" + import re + + # Pattern for NordVPN style + nord_match = re.search(r"([a-z]{2})\d+\.nordvpn", proxy_url.lower()) + if nord_match: + return nord_match.group(1) + + # Pattern for country code at start + cc_match = re.search(r"([a-z]{2})[-_]", proxy_url.lower()) + if cc_match: + return cc_match.group(1) + + # Pattern for country code subdomain + subdomain_match = re.search(r"://([a-z]{2})\.", proxy_url.lower()) + if subdomain_match: + return subdomain_match.group(1) + + return None + + +def get_account_hash(credential) -> Optional[str]: + """ + Generate a hash for account identification. + + Args: + credential: Credential object + + Returns: + SHA1 hash of the credential or None + """ + if not credential: + return None + + # Use existing sha1 property if available + if hasattr(credential, "sha1"): + return credential.sha1 + + # Otherwise generate hash from username + if hasattr(credential, "username"): + return hashlib.sha1(credential.username.encode()).hexdigest() + + return None diff --git a/packages/envied/src/envied/core/titles/__init__.py b/packages/envied/src/envied/core/titles/__init__.py new file mode 100644 index 0000000..304a8f1 --- /dev/null +++ b/packages/envied/src/envied/core/titles/__init__.py @@ -0,0 +1,11 @@ +from typing import Union + +from .episode import Episode, Series +from .movie import Movie, Movies +from .song import Album, Song + +Title_T = Union[Movie, Episode, Song] +Titles_T = Union[Movies, Series, Album] + + +__all__ = ("Episode", "Series", "Movie", "Movies", "Album", "Song", "Title_T", "Titles_T") diff --git a/packages/envied/src/envied/core/titles/episode.py b/packages/envied/src/envied/core/titles/episode.py new file mode 100644 index 0000000..058f23e --- /dev/null +++ b/packages/envied/src/envied/core/titles/episode.py @@ -0,0 +1,230 @@ +import re +from abc import ABC +from collections import Counter +from typing import Any, Iterable, Optional, Union + +from langcodes import Language +from pymediainfo import MediaInfo +from rich.tree import Tree +from sortedcontainers import SortedKeyList + +from envied.core.config import config +from envied.core.constants import AUDIO_CODEC_MAP, DYNAMIC_RANGE_MAP, VIDEO_CODEC_MAP +from envied.core.titles.title import Title +from envied.core.utilities import sanitize_filename + + +class Episode(Title): + def __init__( + self, + id_: Any, + service: type, + title: str, + season: Union[int, str], + number: Union[int, str], + name: Optional[str] = None, + year: Optional[Union[int, str]] = None, + language: Optional[Union[str, Language]] = None, + data: Optional[Any] = None, + description: Optional[str] = None, + ) -> None: + super().__init__(id_, service, language, data) + + if not title: + raise ValueError("Episode title must be provided") + if not isinstance(title, str): + raise TypeError(f"Expected title to be a str, not {title!r}") + + if season != 0 and not season: + raise ValueError("Episode season must be provided") + if isinstance(season, str) and season.isdigit(): + season = int(season) + elif not isinstance(season, int): + raise TypeError(f"Expected season to be an int, not {season!r}") + + if number != 0 and not number: + raise ValueError("Episode number must be provided") + if isinstance(number, str) and number.isdigit(): + number = int(number) + elif not isinstance(number, int): + raise TypeError(f"Expected number to be an int, not {number!r}") + + if name is not None and not isinstance(name, str): + raise TypeError(f"Expected name to be a str, not {name!r}") + + if year is not None: + if isinstance(year, str) and year.isdigit(): + year = int(year) + elif not isinstance(year, int): + raise TypeError(f"Expected year to be an int, not {year!r}") + + title = title.strip() + + if name is not None: + name = name.strip() + # ignore episode names that are the episode number or title name + if re.match(r"Episode ?#?\d+", name, re.IGNORECASE): + name = None + elif name.lower() == title.lower(): + name = None + + if year is not None and year <= 0: + raise ValueError(f"Episode year cannot be {year}") + + self.title = title + self.season = season + self.number = number + self.name = name + self.year = year + self.description = description + + def __str__(self) -> str: + return "{title}{year} S{season:02}E{number:02} {name}".format( + title=self.title, + year=f" {self.year}" if self.year and config.series_year else "", + season=self.season, + number=self.number, + name=self.name or "", + ).strip() + + def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: + primary_video_track = next(iter(media_info.video_tracks), None) + primary_audio_track = next(iter(media_info.audio_tracks), None) + unique_audio_languages = len({x.language.split("-")[0] for x in media_info.audio_tracks if x.language}) + + # Title [Year] SXXEXX Name (or Title [Year] SXX if folder) + if folder: + name = f"{self.title}" + if self.year and config.series_year: + name += f" {self.year}" + name += f" S{self.season:02}" + else: + name = "{title}{year} S{season:02}E{number:02} {name}".format( + title=self.title.replace("$", "S"), # e.g., Arli$$ + year=f" {self.year}" if self.year and config.series_year else "", + season=self.season, + number=self.number, + name=self.name or "", + ).strip() + + if config.scene_naming: + # Resolution + if primary_video_track: + resolution = primary_video_track.height + aspect_ratio = [ + int(float(plane)) for plane in primary_video_track.other_display_aspect_ratio[0].split(":") + ] + if len(aspect_ratio) == 1: + # e.g., aspect ratio of 2 (2.00:1) would end up as `(2.0,)`, add 1 + aspect_ratio.append(1) + if aspect_ratio[0] / aspect_ratio[1] not in (16 / 9, 4 / 3): + # We want the resolution represented in a 4:3 or 16:9 canvas. + # If it's not 4:3 or 16:9, calculate as if it's inside a 16:9 canvas, + # otherwise the track's height value is fine. + # We are assuming this title is some weird aspect ratio so most + # likely a movie or HD source, so it's most likely widescreen so + # 16:9 canvas makes the most sense. + resolution = int(primary_video_track.width * (9 / 16)) + name += f" {resolution}p" + + # Service + if show_service: + name += f" {self.service.__name__}" + + # 'WEB-DL' + name += " WEB-DL" + + # DUAL + if unique_audio_languages == 2: + name += " DUAL" + + # MULTi + if unique_audio_languages > 2: + name += " MULTi" + + # Audio Codec + Channels (+ feature) + if primary_audio_track: + codec = primary_audio_track.format + channel_layout = primary_audio_track.channel_layout or primary_audio_track.channellayout_original + if channel_layout: + channels = float( + sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" ")) + ) + else: + channel_count = primary_audio_track.channel_s or primary_audio_track.channels or 0 + channels = float(channel_count) + + features = primary_audio_track.format_additionalfeatures or "" + name += f" {AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}" + if "JOC" in features or primary_audio_track.joc: + name += " Atmos" + + # Video (dynamic range + hfr +) Codec + if primary_video_track: + codec = primary_video_track.format + hdr_format = primary_video_track.hdr_format_commercial + trc = ( + primary_video_track.transfer_characteristics + or primary_video_track.transfer_characteristics_original + ) + frame_rate = float(primary_video_track.frame_rate) + if hdr_format: + if (primary_video_track.hdr_format or "").startswith("Dolby Vision"): + name += " DV" + if DYNAMIC_RANGE_MAP.get(hdr_format) and DYNAMIC_RANGE_MAP.get(hdr_format) != "DV": + name += " HDR" + else: + name += f" {DYNAMIC_RANGE_MAP.get(hdr_format)} " + elif trc and "HLG" in trc: + name += " HLG" + if frame_rate > 30: + name += " HFR" + name += f" {VIDEO_CODEC_MAP.get(codec, codec)}" + + if config.tag: + name += f"-{config.tag}" + + return sanitize_filename(name) + else: + # Simple naming style without technical details - use spaces instead of dots + return sanitize_filename(name, " ") + + +class Series(SortedKeyList, ABC): + def __init__(self, iterable: Optional[Iterable] = None): + super().__init__(iterable, key=lambda x: (x.season, x.number, x.year or 0)) + + def __str__(self) -> str: + if not self: + return super().__str__() + return self[0].title + (f" ({self[0].year})" if self[0].year and config.series_year else "") + + def tree(self, verbose: bool = False) -> Tree: + seasons = Counter(x.season for x in self) + num_seasons = len(seasons) + sum(seasons.values()) + season_breakdown = ", ".join(f"S{season}({count})" for season, count in sorted(seasons.items())) + tree = Tree( + f"{num_seasons} seasons, {season_breakdown}", + guide_style="bright_black", + ) + if verbose: + for season, episodes in seasons.items(): + season_tree = tree.add( + f"[bold]Season {str(season).zfill(len(str(num_seasons)))}[/]: [bright_black]{episodes} episodes", + guide_style="bright_black", + ) + for episode in self: + if episode.season == season: + if episode.name: + season_tree.add( + f"[bold]{str(episode.number).zfill(len(str(episodes)))}.[/] " + f"[bright_black]{episode.name}" + ) + else: + season_tree.add(f"[bright_black]Episode {str(episode.number).zfill(len(str(episodes)))}") + + return tree + + +__all__ = ("Episode", "Series") diff --git a/packages/envied/src/envied/core/titles/movie.py b/packages/envied/src/envied/core/titles/movie.py new file mode 100644 index 0000000..fc9acd0 --- /dev/null +++ b/packages/envied/src/envied/core/titles/movie.py @@ -0,0 +1,164 @@ +from abc import ABC +from typing import Any, Iterable, Optional, Union + +from langcodes import Language +from pymediainfo import MediaInfo +from rich.tree import Tree +from sortedcontainers import SortedKeyList + +from envied.core.config import config +from envied.core.constants import AUDIO_CODEC_MAP, DYNAMIC_RANGE_MAP, VIDEO_CODEC_MAP +from envied.core.titles.title import Title +from envied.core.utilities import sanitize_filename + + +class Movie(Title): + def __init__( + self, + id_: Any, + service: type, + name: str, + year: Optional[Union[int, str]] = None, + language: Optional[Union[str, Language]] = None, + data: Optional[Any] = None, + description: Optional[str] = None, + ) -> None: + super().__init__(id_, service, language, data) + + if not name: + raise ValueError("Movie name must be provided") + if not isinstance(name, str): + raise TypeError(f"Expected name to be a str, not {name!r}") + + if year is not None: + if isinstance(year, str) and year.isdigit(): + year = int(year) + elif not isinstance(year, int): + raise TypeError(f"Expected year to be an int, not {year!r}") + + name = name.strip() + + if year is not None and year <= 0: + raise ValueError(f"Movie year cannot be {year}") + + self.name = name + self.year = year + self.description = description + + def __str__(self) -> str: + if self.year: + return f"{self.name} ({self.year})" + return self.name + + def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: + primary_video_track = next(iter(media_info.video_tracks), None) + primary_audio_track = next(iter(media_info.audio_tracks), None) + unique_audio_languages = len({x.language.split("-")[0] for x in media_info.audio_tracks if x.language}) + + # Name (Year) + name = str(self).replace("$", "S") # e.g., Arli$$ + + if config.scene_naming: + # Resolution + if primary_video_track: + resolution = primary_video_track.height + aspect_ratio = [ + int(float(plane)) for plane in primary_video_track.other_display_aspect_ratio[0].split(":") + ] + if len(aspect_ratio) == 1: + # e.g., aspect ratio of 2 (2.00:1) would end up as `(2.0,)`, add 1 + aspect_ratio.append(1) + if aspect_ratio[0] / aspect_ratio[1] not in (16 / 9, 4 / 3): + # We want the resolution represented in a 4:3 or 16:9 canvas. + # If it's not 4:3 or 16:9, calculate as if it's inside a 16:9 canvas, + # otherwise the track's height value is fine. + # We are assuming this title is some weird aspect ratio so most + # likely a movie or HD source, so it's most likely widescreen so + # 16:9 canvas makes the most sense. + resolution = int(primary_video_track.width * (9 / 16)) + name += f" {resolution}p" + + # Service + if show_service: + name += f" {self.service.__name__}" + + # 'WEB-DL' + name += " WEB-DL" + + # DUAL + if unique_audio_languages == 2: + name += " DUAL" + + # MULTi + if unique_audio_languages > 2: + name += " MULTi" + + # Audio Codec + Channels (+ feature) + if primary_audio_track: + codec = primary_audio_track.format + channel_layout = primary_audio_track.channel_layout or primary_audio_track.channellayout_original + if channel_layout: + channels = float( + sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" ")) + ) + else: + channel_count = primary_audio_track.channel_s or primary_audio_track.channels or 0 + channels = float(channel_count) + + features = primary_audio_track.format_additionalfeatures or "" + name += f" {AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}" + if "JOC" in features or primary_audio_track.joc: + name += " Atmos" + + # Video (dynamic range + hfr +) Codec + if primary_video_track: + codec = primary_video_track.format + hdr_format = primary_video_track.hdr_format_commercial + trc = ( + primary_video_track.transfer_characteristics + or primary_video_track.transfer_characteristics_original + ) + frame_rate = float(primary_video_track.frame_rate) + if hdr_format: + if (primary_video_track.hdr_format or "").startswith("Dolby Vision"): + name += " DV" + if DYNAMIC_RANGE_MAP.get(hdr_format) and DYNAMIC_RANGE_MAP.get(hdr_format) != "DV": + name += " HDR" + else: + name += f" {DYNAMIC_RANGE_MAP.get(hdr_format)} " + elif trc and "HLG" in trc: + name += " HLG" + if frame_rate > 30: + name += " HFR" + name += f" {VIDEO_CODEC_MAP.get(codec, codec)}" + + if config.tag: + name += f"-{config.tag}" + + return sanitize_filename(name) + else: + # Simple naming style without technical details - use spaces instead of dots + return sanitize_filename(name, " ") + + +class Movies(SortedKeyList, ABC): + def __init__(self, iterable: Optional[Iterable] = None): + super().__init__(iterable, key=lambda x: x.year or 0) + + def __str__(self) -> str: + if not self: + return super().__str__() + # TODO: Assumes there's only one movie + return self[0].name + (f" ({self[0].year})" if self[0].year else "") + + def tree(self, verbose: bool = False) -> Tree: + num_movies = len(self) + tree = Tree(f"{num_movies} Movie{['s', ''][num_movies == 1]}", guide_style="bright_black") + if verbose: + for movie in self: + tree.add(f"[bold]{movie.name}[/] [bright_black]({movie.year or '?'})", guide_style="bright_black") + + return tree + + +__all__ = ("Movie", "Movies") diff --git a/packages/envied/src/envied/core/titles/song.py b/packages/envied/src/envied/core/titles/song.py new file mode 100644 index 0000000..81c047c --- /dev/null +++ b/packages/envied/src/envied/core/titles/song.py @@ -0,0 +1,144 @@ +from abc import ABC +from typing import Any, Iterable, Optional, Union + +from langcodes import Language +from pymediainfo import MediaInfo +from rich.tree import Tree +from sortedcontainers import SortedKeyList + +from envied.core.config import config +from envied.core.constants import AUDIO_CODEC_MAP +from envied.core.titles.title import Title +from envied.core.utilities import sanitize_filename + + +class Song(Title): + def __init__( + self, + id_: Any, + service: type, + name: str, + artist: str, + album: str, + track: int, + disc: int, + year: int, + language: Optional[Union[str, Language]] = None, + data: Optional[Any] = None, + ) -> None: + super().__init__(id_, service, language, data) + + if not name: + raise ValueError("Song name must be provided") + if not isinstance(name, str): + raise TypeError(f"Expected name to be a str, not {name!r}") + + if not artist: + raise ValueError("Song artist must be provided") + if not isinstance(artist, str): + raise TypeError(f"Expected artist to be a str, not {artist!r}") + + if not album: + raise ValueError("Song album must be provided") + if not isinstance(album, str): + raise TypeError(f"Expected album to be a str, not {name!r}") + + if not track: + raise ValueError("Song track must be provided") + if not isinstance(track, int): + raise TypeError(f"Expected track to be an int, not {track!r}") + + if not disc: + raise ValueError("Song disc must be provided") + if not isinstance(disc, int): + raise TypeError(f"Expected disc to be an int, not {disc!r}") + + if not year: + raise ValueError("Song year must be provided") + if not isinstance(year, int): + raise TypeError(f"Expected year to be an int, not {year!r}") + + name = name.strip() + artist = artist.strip() + album = album.strip() + + if track <= 0: + raise ValueError(f"Song track cannot be {track}") + if disc <= 0: + raise ValueError(f"Song disc cannot be {disc}") + if year <= 0: + raise ValueError(f"Song year cannot be {year}") + + self.name = name + self.artist = artist + self.album = album + self.track = track + self.disc = disc + self.year = year + + def __str__(self) -> str: + return "{artist} - {album} ({year}) / {track:02}. {name}".format( + artist=self.artist, album=self.album, year=self.year, track=self.track, name=self.name + ).strip() + + def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: + audio_track = next(iter(media_info.audio_tracks), None) + codec = audio_track.format + channel_layout = audio_track.channel_layout or audio_track.channellayout_original + if channel_layout: + channels = float(sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" "))) + else: + channel_count = audio_track.channel_s or audio_track.channels or 0 + channels = float(channel_count) + + features = audio_track.format_additionalfeatures or "" + + if folder: + # Artist - Album (Year) + name = str(self).split(" / ")[0] + else: + # NN. Song Name + name = str(self).split(" / ")[1] + + if config.scene_naming: + # Service + if show_service: + name += f" {self.service.__name__}" + + # 'WEB-DL' + name += " WEB-DL" + + # Audio Codec + Channels (+ feature) + name += f" {AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}" + if "JOC" in features or audio_track.joc: + name += " Atmos" + + if config.tag: + name += f"-{config.tag}" + + return sanitize_filename(name, " ") + else: + # Simple naming style without technical details + return sanitize_filename(name, " ") + + +class Album(SortedKeyList, ABC): + def __init__(self, iterable: Optional[Iterable] = None): + super().__init__(iterable, key=lambda x: (x.album, x.disc, x.track, x.year or 0)) + + def __str__(self) -> str: + if not self: + return super().__str__() + return f"{self[0].artist} - {self[0].album} ({self[0].year or '?'})" + + def tree(self, verbose: bool = False) -> Tree: + num_songs = len(self) + tree = Tree(f"{num_songs} Song{['s', ''][num_songs == 1]}", guide_style="bright_black") + if verbose: + for song in self: + tree.add(f"[bold]Track {song.track:02}.[/] [bright_black]({song.name})", guide_style="bright_black") + + return tree + + +__all__ = ("Song", "Album") diff --git a/packages/envied/src/envied/core/titles/title.py b/packages/envied/src/envied/core/titles/title.py new file mode 100644 index 0000000..3729f25 --- /dev/null +++ b/packages/envied/src/envied/core/titles/title.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from abc import abstractmethod +from typing import Any, Optional, Union + +from langcodes import Language +from pymediainfo import MediaInfo + +from envied.core.tracks import Tracks + + +class Title: + def __init__( + self, id_: Any, service: type, language: Optional[Union[str, Language]] = None, data: Optional[Any] = None + ) -> None: + """ + Media Title from a Service. + + Parameters: + id_: An identifier for this specific title. It must be unique. Can be of any + value. + service: Service class that this title is from. + language: The original recorded language for the title. If that information + is not available, this should not be set to anything. + data: Arbitrary storage for the title. Often used to store extra metadata + information, IDs, URIs, and so on. + """ + if not id_: # includes 0, false, and similar values, this is intended + raise ValueError("A unique ID must be provided") + if hasattr(id_, "__len__") and len(id_) < 4: + raise ValueError("The unique ID is not large enough, clash likely.") + + if not service: + raise ValueError("Service class must be provided") + if not isinstance(service, type): + raise TypeError(f"Expected service to be a Class (type), not {service!r}") + + if language is not None: + if isinstance(language, str): + language = Language.get(language) + elif not isinstance(language, Language): + raise TypeError(f"Expected language to be a {Language} or str, not {language!r}") + + self.id = id_ + self.service = service + self.language = language + self.data = data + + self.tracks = Tracks() + + def __eq__(self, other: Title) -> bool: + return self.id == other.id + + @abstractmethod + def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: + """ + Get a Filename for this Title with the provided Media Info. + All filenames should be sanitized with the sanitize_filename() utility function. + + Parameters: + media_info: MediaInfo object of the file this name will be used for. + folder: This filename will be used as a folder name. Some changes may want to + be made if this is the case. + show_service: Show the service tag (e.g., iT, NF) in the filename. + """ + + +__all__ = ("Title",) diff --git a/packages/envied/src/envied/core/tracks/__init__.py b/packages/envied/src/envied/core/tracks/__init__.py new file mode 100644 index 0000000..37aca7f --- /dev/null +++ b/packages/envied/src/envied/core/tracks/__init__.py @@ -0,0 +1,11 @@ +from .attachment import Attachment +from .audio import Audio +from .chapter import Chapter +from .chapters import Chapters +from .hybrid import Hybrid +from .subtitle import Subtitle +from .track import Track +from .tracks import Tracks +from .video import Video + +__all__ = ("Audio", "Attachment", "Chapter", "Chapters", "Hybrid", "Subtitle", "Track", "Tracks", "Video") diff --git a/packages/envied/src/envied/core/tracks/attachment.py b/packages/envied/src/envied/core/tracks/attachment.py new file mode 100644 index 0000000..ec62f09 --- /dev/null +++ b/packages/envied/src/envied/core/tracks/attachment.py @@ -0,0 +1,147 @@ +from __future__ import annotations + +import mimetypes +import os +from pathlib import Path +from typing import Optional, Union +from urllib.parse import urlparse +from zlib import crc32 + +import requests + +from envied.core.config import config + + +class Attachment: + def __init__( + self, + path: Union[Path, str, None] = None, + url: Optional[str] = None, + name: Optional[str] = None, + mime_type: Optional[str] = None, + description: Optional[str] = None, + session: Optional[requests.Session] = None, + ): + """ + Create a new Attachment. + + If providing a path, the file must already exist. + If providing a URL, the file will be downloaded to the temp directory. + Either path or url must be provided. + + If name is not provided it will use the file name (without extension). + If mime_type is not provided, it will try to guess it. + + Args: + path: Path to an existing file. + url: URL to download the attachment from. + name: Name of the attachment. + mime_type: MIME type of the attachment. + description: Description of the attachment. + session: Optional requests session to use for downloading. + """ + if path is None and url is None: + raise ValueError("Either path or url must be provided.") + + if url: + if not isinstance(url, str): + raise ValueError("The attachment URL must be a string.") + + # If a URL is provided, download the file to the temp directory + parsed_url = urlparse(url) + file_name = os.path.basename(parsed_url.path) or "attachment" + + # Use provided name for the file if available + if name: + file_name = f"{name.replace(' ', '_')}{os.path.splitext(file_name)[1]}" + + download_path = config.directories.temp / file_name + + # Download the file + try: + session = session or requests.Session() + response = session.get(url, stream=True) + response.raise_for_status() + config.directories.temp.mkdir(parents=True, exist_ok=True) + download_path.parent.mkdir(parents=True, exist_ok=True) + + with open(download_path, "wb") as f: + for chunk in response.iter_content(chunk_size=8192): + f.write(chunk) + + path = download_path + except Exception as e: + raise ValueError(f"Failed to download attachment from URL: {e}") + + if not isinstance(path, (str, Path)): + raise ValueError("The attachment path must be provided.") + + path = Path(path) + if not path.exists(): + raise ValueError("The attachment file does not exist.") + + name = (name or path.stem).strip() + mime_type = (mime_type or "").strip() or None + description = (description or "").strip() or None + + if not mime_type: + mime_type = { + ".ttf": "application/x-truetype-font", + ".otf": "application/vnd.ms-opentype", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".png": "image/png", + }.get(path.suffix.lower(), mimetypes.guess_type(path)[0]) + if not mime_type: + raise ValueError("The attachment mime-type could not be automatically detected.") + + self.path = path + self.name = name + self.mime_type = mime_type + self.description = description + + def __repr__(self) -> str: + return "{name}({items})".format( + name=self.__class__.__name__, items=", ".join([f"{k}={repr(v)}" for k, v in self.__dict__.items()]) + ) + + def __str__(self) -> str: + return " | ".join(filter(bool, ["ATT", self.name, self.mime_type, self.description])) + + @property + def id(self) -> str: + """Compute an ID from the attachment data.""" + checksum = crc32(self.path.read_bytes()) + return hex(checksum) + + def delete(self) -> None: + if self.path: + self.path.unlink() + self.path = None + + @classmethod + def from_url( + cls, + url: str, + name: Optional[str] = None, + mime_type: Optional[str] = None, + description: Optional[str] = None, + session: Optional[requests.Session] = None, + ) -> "Attachment": + """ + Create an attachment from a URL. + + Args: + url: URL to download the attachment from. + name: Name of the attachment. + mime_type: MIME type of the attachment. + description: Description of the attachment. + session: Optional requests session to use for downloading. + + Returns: + Attachment: A new attachment instance. + """ + return cls(url=url, name=name, mime_type=mime_type, description=description, session=session) + + +__all__ = ("Attachment",) diff --git a/packages/envied/src/envied/core/tracks/audio.py b/packages/envied/src/envied/core/tracks/audio.py new file mode 100644 index 0000000..bc5aedd --- /dev/null +++ b/packages/envied/src/envied/core/tracks/audio.py @@ -0,0 +1,188 @@ +from __future__ import annotations + +import math +from enum import Enum +from typing import Any, Optional, Union + +from envied.core.tracks.track import Track + + +class Audio(Track): + class Codec(str, Enum): + AAC = "AAC" # https://wikipedia.org/wiki/Advanced_Audio_Coding + AC3 = "DD" # https://wikipedia.org/wiki/Dolby_Digital + EC3 = "DD+" # https://wikipedia.org/wiki/Dolby_Digital_Plus + OPUS = "OPUS" # https://wikipedia.org/wiki/Opus_(audio_format) + OGG = "VORB" # https://wikipedia.org/wiki/Vorbis + DTS = "DTS" # https://en.wikipedia.org/wiki/DTS_(company)#DTS_Digital_Surround + ALAC = "ALAC" # https://en.wikipedia.org/wiki/Apple_Lossless_Audio_Codec + FLAC = "FLAC" # https://en.wikipedia.org/wiki/FLAC + + @property + def extension(self) -> str: + return self.name.lower() + + @staticmethod + def from_mime(mime: str) -> Audio.Codec: + mime = mime.lower().strip().split(".")[0] + if mime == "mp4a": + return Audio.Codec.AAC + if mime == "ac-3": + return Audio.Codec.AC3 + if mime == "ec-3": + return Audio.Codec.EC3 + if mime == "opus": + return Audio.Codec.OPUS + if mime == "dtsc": + return Audio.Codec.DTS + if mime == "alac": + return Audio.Codec.ALAC + if mime == "flac": + return Audio.Codec.FLAC + raise ValueError(f"The MIME '{mime}' is not a supported Audio Codec") + + @staticmethod + def from_codecs(codecs: str) -> Audio.Codec: + for codec in codecs.lower().split(","): + mime = codec.strip().split(".")[0] + try: + return Audio.Codec.from_mime(mime) + except ValueError: + pass + raise ValueError(f"No MIME types matched any supported Audio Codecs in '{codecs}'") + + @staticmethod + def from_netflix_profile(profile: str) -> Audio.Codec: + profile = profile.lower().strip() + if profile.startswith("heaac"): + return Audio.Codec.AAC + if profile.startswith("dd-"): + return Audio.Codec.AC3 + if profile.startswith("ddplus"): + return Audio.Codec.EC3 + if profile.startswith("playready-oggvorbis"): + return Audio.Codec.OGG + raise ValueError(f"The Content Profile '{profile}' is not a supported Audio Codec") + + def __init__( + self, + *args: Any, + codec: Optional[Audio.Codec] = None, + bitrate: Optional[Union[str, int, float]] = None, + channels: Optional[Union[str, int, float]] = None, + joc: Optional[int] = None, + descriptive: Union[bool, int] = False, + **kwargs: Any, + ): + """ + Create a new Audio track object. + + Parameters: + codec: An Audio.Codec enum representing the audio codec. + If not specified, MediaInfo will be used to retrieve the codec + once the track has been downloaded. + bitrate: A number or float representing the average bandwidth in bytes/s. + Float values are rounded up to the nearest integer. + channels: A number, float, or string representing the number of audio channels. + Strings may represent numbers or floats. Expanded layouts like 7.1.1 is + not supported. All numbers and strings will be cast to float. + joc: The number of Joint-Object-Coding Channels/Objects in the audio stream. + descriptive: Mark this audio as being descriptive audio for the blind. + + Note: If codec, bitrate, channels, or joc is not specified some checks may be + skipped or assume a value. Specifying as much information as possible is highly + recommended. + """ + super().__init__(*args, **kwargs) + + if not isinstance(codec, (Audio.Codec, type(None))): + raise TypeError(f"Expected codec to be a {Audio.Codec}, not {codec!r}") + if not isinstance(bitrate, (str, int, float, type(None))): + raise TypeError(f"Expected bitrate to be a {str}, {int}, or {float}, not {bitrate!r}") + if not isinstance(channels, (str, int, float, type(None))): + raise TypeError(f"Expected channels to be a {str}, {int}, or {float}, not {channels!r}") + if not isinstance(joc, (int, type(None))): + raise TypeError(f"Expected joc to be a {int}, not {joc!r}") + if not isinstance(descriptive, (bool, int)) or (isinstance(descriptive, int) and descriptive not in (0, 1)): + raise TypeError(f"Expected descriptive to be a {bool} or bool-like {int}, not {descriptive!r}") + + self.codec = codec + + try: + self.bitrate = int(math.ceil(float(bitrate))) if bitrate else None + except (ValueError, TypeError) as e: + raise ValueError(f"Expected bitrate to be a number or float, {e}") + + try: + self.channels = self.parse_channels(channels) if channels else None + except (ValueError, NotImplementedError) as e: + raise ValueError(f"Expected channels to be a number, float, or a string, {e}") + + self.joc = joc + self.descriptive = bool(descriptive) + + @property + def atmos(self) -> bool: + """Return True if the audio track contains Dolby Atmos.""" + return bool(self.joc) + + def __str__(self) -> str: + return " | ".join( + filter( + bool, + [ + "AUD", + f"[{self.codec.value}]" if self.codec else None, + str(self.language), + ", ".join( + filter( + bool, + [ + str(self.channels) if self.channels else None, + "Atmos" if self.atmos else None, + f"JOC {self.joc}" if self.joc else None, + ], + ) + ), + f"{self.bitrate // 1000} kb/s" if self.bitrate else None, + self.get_track_name(), + self.edition, + ], + ) + ) + + @staticmethod + def parse_channels(channels: Union[str, int, float]) -> float: + """ + Converts a Channel string to a float representing audio channel count and layout. + E.g. "3" -> "3.0", "2.1" -> "2.1", ".1" -> "0.1". + + This does not validate channel strings as genuine channel counts or valid layouts. + It does not convert the value to assume a sub speaker channel layout, e.g. 5.1->6.0. + It also does not support expanded surround sound channel layout strings like 7.1.2. + """ + if isinstance(channels, str): + # TODO: Support all possible DASH channel configurations (https://datatracker.ietf.org/doc/html/rfc8216) + if channels.upper() == "A000": + return 2.0 + elif channels.upper() == "F801": + return 5.1 + elif channels.replace("ch", "").replace(".", "", 1).isdigit(): + # e.g., '2ch', '2', '2.0', '5.1ch', '5.1' + return float(channels.replace("ch", "")) + raise NotImplementedError(f"Unsupported Channels string value, '{channels}'") + + return float(channels) + + def get_track_name(self) -> Optional[str]: + """Return the base Track Name.""" + track_name = super().get_track_name() or "" + flag = self.descriptive and "Descriptive" + if flag: + if track_name: + flag = f" ({flag})" + track_name += flag + return track_name or None + + +__all__ = ("Audio",) diff --git a/packages/envied/src/envied/core/tracks/chapter.py b/packages/envied/src/envied/core/tracks/chapter.py new file mode 100644 index 0000000..b02c8ca --- /dev/null +++ b/packages/envied/src/envied/core/tracks/chapter.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +import re +from typing import Optional, Union +from zlib import crc32 + +TIMESTAMP_FORMAT = re.compile(r"^(?P\d{2}):(?P\d{2}):(?P\d{2})(?P.\d{3}|)$") + + +class Chapter: + def __init__(self, timestamp: Union[str, int, float], name: Optional[str] = None): + """ + Create a new Chapter with a Timestamp and optional name. + + The timestamp may be in the following formats: + - "HH:MM:SS" string, e.g., `25:05:23`. + - "HH:MM:SS.mss" string, e.g., `25:05:23.120`. + - a timecode integer in milliseconds, e.g., `90323120` is `25:05:23.120`. + - a timecode float in seconds, e.g., `90323.12` is `25:05:23.120`. + + If you have a timecode integer in seconds, just multiply it by 1000. + If you have a timecode float in milliseconds (no decimal value), just convert + it to an integer. + """ + if timestamp is None: + raise ValueError("The timestamp must be provided.") + + if not isinstance(timestamp, (str, int, float)): + raise TypeError(f"Expected timestamp to be {str}, {int} or {float}, not {type(timestamp)}") + if not isinstance(name, (str, type(None))): + raise TypeError(f"Expected name to be {str}, not {type(name)}") + + if not isinstance(timestamp, str): + if isinstance(timestamp, int): # ms + hours, remainder = divmod(timestamp, 1000 * 60 * 60) + minutes, remainder = divmod(remainder, 1000 * 60) + seconds, ms = divmod(remainder, 1000) + elif isinstance(timestamp, float): # seconds.ms + hours, remainder = divmod(timestamp, 60 * 60) + minutes, remainder = divmod(remainder, 60) + seconds, ms = divmod(int(remainder * 1000), 1000) + else: + raise TypeError + timestamp = f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}.{str(ms).zfill(3)[:3]}" + + timestamp_m = TIMESTAMP_FORMAT.match(timestamp) + if not timestamp_m: + raise ValueError(f"The timestamp format is invalid: {timestamp}") + + hour, minute, second, ms = timestamp_m.groups() + if not ms: + timestamp += ".000" + + self.timestamp = timestamp + self.name = name + + def __repr__(self) -> str: + return "{name}({items})".format( + name=self.__class__.__name__, items=", ".join([f"{k}={repr(v)}" for k, v in self.__dict__.items()]) + ) + + def __str__(self) -> str: + return " | ".join(filter(bool, ["CHP", self.timestamp, self.name])) + + @property + def id(self) -> str: + """Compute an ID from the Chapter data.""" + checksum = crc32(str(self).encode("utf8")) + return hex(checksum) + + @property + def named(self) -> bool: + """Check if Chapter is named.""" + return bool(self.name) + + +__all__ = ("Chapter",) diff --git a/packages/envied/src/envied/core/tracks/chapters.py b/packages/envied/src/envied/core/tracks/chapters.py new file mode 100644 index 0000000..08ba0bf --- /dev/null +++ b/packages/envied/src/envied/core/tracks/chapters.py @@ -0,0 +1,144 @@ +from __future__ import annotations + +import re +from abc import ABC +from pathlib import Path +from typing import Any, Iterable, Optional, Union +from zlib import crc32 + +from sortedcontainers import SortedKeyList + +from envied.core.tracks import Chapter + +OGM_SIMPLE_LINE_1_FORMAT = re.compile(r"^CHAPTER(?P\d+)=(?P\d{2,}:\d{2}:\d{2}\.\d{3})$") +OGM_SIMPLE_LINE_2_FORMAT = re.compile(r"^CHAPTER(?P\d+)NAME=(?P.*)$") + + +class Chapters(SortedKeyList, ABC): + def __init__(self, iterable: Optional[Iterable[Chapter]] = None): + super().__init__(key=lambda x: x.timestamp or 0) + for chapter in iterable or []: + self.add(chapter) + + def __repr__(self) -> str: + return "{name}({items})".format( + name=self.__class__.__name__, items=", ".join([f"{k}={repr(v)}" for k, v in self.__dict__.items()]) + ) + + def __str__(self) -> str: + return "\n".join( + [ + " | ".join(filter(bool, ["CHP", f"[{i:02}]", chapter.timestamp, chapter.name])) + for i, chapter in enumerate(self, start=1) + ] + ) + + @classmethod + def loads(cls, data: str) -> Chapters: + """Load chapter data from a string.""" + lines = [line.strip() for line in data.strip().splitlines(keepends=False)] + + if len(lines) % 2 != 0: + raise ValueError("The number of chapter lines must be even.") + + chapters = [] + + for line_1, line_2 in zip(lines[::2], lines[1::2]): + line_1_match = OGM_SIMPLE_LINE_1_FORMAT.match(line_1) + if not line_1_match: + raise SyntaxError(f"An unexpected syntax error occurred on: {line_1}") + line_2_match = OGM_SIMPLE_LINE_2_FORMAT.match(line_2) + if not line_2_match: + raise SyntaxError(f"An unexpected syntax error occurred on: {line_2}") + + line_1_number, timestamp = line_1_match.groups() + line_2_number, name = line_2_match.groups() + + if line_1_number != line_2_number: + raise SyntaxError( + f"The chapter numbers {line_1_number} and {line_2_number} do not match on:\n{line_1}\n{line_2}" + ) + + if not timestamp: + raise SyntaxError(f"The timestamp is missing on: {line_1}") + + chapters.append(Chapter(timestamp, name)) + + return cls(chapters) + + @classmethod + def load(cls, path: Union[Path, str]) -> Chapters: + """Load chapter data from a file.""" + if isinstance(path, str): + path = Path(path) + return cls.loads(path.read_text(encoding="utf8")) + + def dumps(self, fallback_name: str = "") -> str: + """ + Return chapter data in OGM-based Simple Chapter format. + https://mkvtoolnix.download/doc/mkvmerge.html#mkvmerge.chapters.simple + + Parameters: + fallback_name: Name used for Chapters without a Name set. + + The fallback name can use the following variables in f-string style: + + - {i}: The Chapter number starting at 1. + E.g., `"Chapter {i}"`: "Chapter 1", "Intro", "Chapter 3". + - {j}: A number starting at 1 that increments any time a Chapter has no name. + E.g., `"Chapter {j}"`: "Chapter 1", "Intro", "Chapter 2". + + These are formatted with f-strings, directives are supported. + For example, `"Chapter {i:02}"` will result in `"Chapter 01"`. + """ + chapters = [] + j = 0 + + for i, chapter in enumerate(self, start=1): + if not chapter.name: + j += 1 + chapters.append( + "CHAPTER{num}={time}\nCHAPTER{num}NAME={name}".format( + num=f"{i:02}", time=chapter.timestamp, name=chapter.name or fallback_name.format(i=i, j=j) + ) + ) + + return "\n".join(chapters) + + def dump(self, path: Union[Path, str], *args: Any, **kwargs: Any) -> int: + """ + Write chapter data in OGM-based Simple Chapter format to a file. + + Parameters: + path: The file path to write the Chapter data to, overwriting + any existing data. + + See `Chapters.dumps` for more parameter documentation. + """ + if isinstance(path, str): + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + + ogm_text = self.dumps(*args, **kwargs) + return path.write_text(ogm_text, encoding="utf8") + + def add(self, value: Chapter) -> None: + if not isinstance(value, Chapter): + raise TypeError(f"Can only add {Chapter} objects, not {type(value)}") + + if any(chapter.timestamp == value.timestamp for chapter in self): + raise ValueError(f"A Chapter with the Timestamp {value.timestamp} already exists") + + super().add(value) + + if not any(chapter.timestamp == "00:00:00.000" for chapter in self): + self.add(Chapter(0)) + + @property + def id(self) -> str: + """Compute an ID from the Chapter data.""" + checksum = crc32("\n".join([chapter.id for chapter in self]).encode("utf8")) + return hex(checksum) + + +__all__ = ("Chapters", "Chapter") diff --git a/packages/envied/src/envied/core/tracks/hybrid.py b/packages/envied/src/envied/core/tracks/hybrid.py new file mode 100644 index 0000000..ec43c10 --- /dev/null +++ b/packages/envied/src/envied/core/tracks/hybrid.py @@ -0,0 +1,327 @@ +import json +import logging +import os +import subprocess +import sys +from pathlib import Path + +from rich.padding import Padding +from rich.rule import Rule + +from envied.core.binaries import DoviTool, HDR10PlusTool +from envied.core.config import config +from envied.core.console import console + + +class Hybrid: + def __init__(self, videos, source) -> None: + self.log = logging.getLogger("hybrid") + + """ + Takes the Dolby Vision and HDR10(+) streams out of the VideoTracks. + It will then attempt to inject the Dolby Vision metadata layer to the HDR10(+) stream. + If no DV track is available but HDR10+ is present, it will convert HDR10+ to DV. + """ + global directories + from envied.core.tracks import Video + + self.videos = videos + self.source = source + self.rpu_file = "RPU.bin" + self.hdr_type = "HDR10" + self.hevc_file = f"{self.hdr_type}-DV.hevc" + self.hdr10plus_to_dv = False + self.hdr10plus_file = "HDR10Plus.json" + + # Get resolution info from HDR10 track for display + hdr10_track = next((v for v in videos if v.range == Video.Range.HDR10), None) + hdr10p_track = next((v for v in videos if v.range == Video.Range.HDR10P), None) + track_for_res = hdr10_track or hdr10p_track + self.resolution = f"{track_for_res.height}p" if track_for_res and track_for_res.height else "Unknown" + + console.print(Padding(Rule(f"[rule.text]HDR10+DV Hybrid ({self.resolution})"), (1, 2))) + + for video in self.videos: + if not video.path or not os.path.exists(video.path): + raise ValueError(f"Video track {video.id} was not downloaded before injection.") + + # Check if we have DV track available + has_dv = any(video.range == Video.Range.DV for video in self.videos) + has_hdr10 = any(video.range == Video.Range.HDR10 for video in self.videos) + has_hdr10p = any(video.range == Video.Range.HDR10P for video in self.videos) + + if not has_hdr10: + raise ValueError("No HDR10 track available for hybrid processing.") + + # If we have HDR10+ but no DV, we can convert HDR10+ to DV + if not has_dv and has_hdr10p: + self.log.info("✓ No DV track found, but HDR10+ is available. Will convert HDR10+ to DV.") + self.hdr10plus_to_dv = True + elif not has_dv: + raise ValueError("No DV track available and no HDR10+ to convert.") + + if os.path.isfile(config.directories.temp / self.hevc_file): + self.log.info("✓ Already Injected") + return + + for video in videos: + # Use the actual path from the video track + save_path = video.path + if not save_path or not os.path.exists(save_path): + raise ValueError(f"Video track {video.id} was not downloaded or path not found: {save_path}") + + if video.range == Video.Range.HDR10: + self.extract_stream(save_path, "HDR10") + elif video.range == Video.Range.HDR10P: + self.extract_stream(save_path, "HDR10") + self.hdr_type = "HDR10+" + elif video.range == Video.Range.DV: + self.extract_stream(save_path, "DV") + + if self.hdr10plus_to_dv: + # Extract HDR10+ metadata and convert to DV + hdr10p_video = next(v for v in videos if v.range == Video.Range.HDR10P) + self.extract_hdr10plus(hdr10p_video) + self.convert_hdr10plus_to_dv() + else: + # Regular DV extraction + dv_video = next(v for v in videos if v.range == Video.Range.DV) + self.extract_rpu(dv_video) + if os.path.isfile(config.directories.temp / "RPU_UNT.bin"): + self.rpu_file = "RPU_UNT.bin" + self.level_6() + # Mode 3 conversion already done during extraction when not untouched + elif os.path.isfile(config.directories.temp / "RPU.bin"): + # RPU already extracted with mode 3 + pass + + self.injecting() + + self.log.info("✓ Injection Completed") + if self.source == ("itunes" or "appletvplus"): + Path.unlink(config.directories.temp / "hdr10.mkv") + Path.unlink(config.directories.temp / "dv.mkv") + Path.unlink(config.directories.temp / "HDR10.hevc", missing_ok=True) + Path.unlink(config.directories.temp / "DV.hevc", missing_ok=True) + Path.unlink(config.directories.temp / f"{self.rpu_file}", missing_ok=True) + + def ffmpeg_simple(self, save_path, output): + """Simple ffmpeg execution without progress tracking""" + p = subprocess.run( + [ + "ffmpeg", + "-nostdin", + "-i", + str(save_path), + "-c:v", + "copy", + str(output), + "-y", # overwrite output + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + return p.returncode + + def extract_stream(self, save_path, type_): + output = Path(config.directories.temp / f"{type_}.hevc") + + with console.status(f"Extracting {type_} stream...", spinner="dots"): + returncode = self.ffmpeg_simple(save_path, output) + + if returncode: + output.unlink(missing_ok=True) + self.log.error(f"x Failed extracting {type_} stream") + sys.exit(1) + + self.log.info(f"Extracted {type_} stream") + + def extract_rpu(self, video, untouched=False): + if os.path.isfile(config.directories.temp / "RPU.bin") or os.path.isfile( + config.directories.temp / "RPU_UNT.bin" + ): + return + + with console.status( + f"Extracting{' untouched ' if untouched else ' '}RPU from Dolby Vision stream...", spinner="dots" + ): + extraction_args = [str(DoviTool)] + if not untouched: + extraction_args += ["-m", "3"] + extraction_args += [ + "extract-rpu", + config.directories.temp / "DV.hevc", + "-o", + config.directories.temp / f"{'RPU' if not untouched else 'RPU_UNT'}.bin", + ] + + rpu_extraction = subprocess.run( + extraction_args, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if rpu_extraction.returncode: + Path.unlink(config.directories.temp / f"{'RPU' if not untouched else 'RPU_UNT'}.bin") + if b"MAX_PQ_LUMINANCE" in rpu_extraction.stderr: + self.extract_rpu(video, untouched=True) + elif b"Invalid PPS index" in rpu_extraction.stderr: + raise ValueError("Dolby Vision VideoTrack seems to be corrupt") + else: + raise ValueError(f"Failed extracting{' untouched ' if untouched else ' '}RPU from Dolby Vision stream") + + self.log.info(f"Extracted{' untouched ' if untouched else ' '}RPU from Dolby Vision stream") + + def level_6(self): + """Edit RPU Level 6 values""" + with open(config.directories.temp / "L6.json", "w+") as level6_file: + level6 = { + "cm_version": "V29", + "length": 0, + "level6": { + "max_display_mastering_luminance": 1000, + "min_display_mastering_luminance": 1, + "max_content_light_level": 0, + "max_frame_average_light_level": 0, + }, + } + + json.dump(level6, level6_file, indent=3) + + if not os.path.isfile(config.directories.temp / "RPU_L6.bin"): + with console.status("Editing RPU Level 6 values...", spinner="dots"): + level6 = subprocess.run( + [ + str(DoviTool), + "editor", + "-i", + config.directories.temp / self.rpu_file, + "-j", + config.directories.temp / "L6.json", + "-o", + config.directories.temp / "RPU_L6.bin", + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if level6.returncode: + Path.unlink(config.directories.temp / "RPU_L6.bin") + raise ValueError("Failed editing RPU Level 6 values") + + self.log.info("Edited RPU Level 6 values") + + # Update rpu_file to use the edited version + self.rpu_file = "RPU_L6.bin" + + def injecting(self): + if os.path.isfile(config.directories.temp / self.hevc_file): + return + + with console.status(f"Injecting Dolby Vision metadata into {self.hdr_type} stream...", spinner="dots"): + inject_cmd = [ + str(DoviTool), + "inject-rpu", + "-i", + config.directories.temp / "HDR10.hevc", + "--rpu-in", + config.directories.temp / self.rpu_file, + ] + + # If we converted from HDR10+, optionally remove HDR10+ metadata during injection + # Default to removing HDR10+ metadata since we're converting to DV + if self.hdr10plus_to_dv: + inject_cmd.append("--drop-hdr10plus") + self.log.info(" - Removing HDR10+ metadata during injection") + + inject_cmd.extend(["-o", config.directories.temp / self.hevc_file]) + + inject = subprocess.run( + inject_cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if inject.returncode: + Path.unlink(config.directories.temp / self.hevc_file) + raise ValueError("Failed injecting Dolby Vision metadata into HDR10 stream") + + self.log.info(f"Injected Dolby Vision metadata into {self.hdr_type} stream") + + def extract_hdr10plus(self, _video): + """Extract HDR10+ metadata from the video stream""" + if os.path.isfile(config.directories.temp / self.hdr10plus_file): + return + + if not HDR10PlusTool: + raise ValueError("HDR10Plus_tool not found. Please install it to use HDR10+ to DV conversion.") + + with console.status("Extracting HDR10+ metadata...", spinner="dots"): + # HDR10Plus_tool needs raw HEVC stream + extraction = subprocess.run( + [ + str(HDR10PlusTool), + "extract", + str(config.directories.temp / "HDR10.hevc"), + "-o", + str(config.directories.temp / self.hdr10plus_file), + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if extraction.returncode: + raise ValueError("Failed extracting HDR10+ metadata") + + # Check if the extracted file has content + if os.path.getsize(config.directories.temp / self.hdr10plus_file) == 0: + raise ValueError("No HDR10+ metadata found in the stream") + + self.log.info("Extracted HDR10+ metadata") + + def convert_hdr10plus_to_dv(self): + """Convert HDR10+ metadata to Dolby Vision RPU""" + if os.path.isfile(config.directories.temp / "RPU.bin"): + return + + with console.status("Converting HDR10+ metadata to Dolby Vision...", spinner="dots"): + # First create the extra metadata JSON for dovi_tool + extra_metadata = { + "cm_version": "V29", + "length": 0, # dovi_tool will figure this out + "level6": { + "max_display_mastering_luminance": 1000, + "min_display_mastering_luminance": 1, + "max_content_light_level": 0, + "max_frame_average_light_level": 0, + }, + } + + with open(config.directories.temp / "extra.json", "w") as f: + json.dump(extra_metadata, f, indent=2) + + # Generate DV RPU from HDR10+ metadata + conversion = subprocess.run( + [ + str(DoviTool), + "generate", + "-j", + str(config.directories.temp / "extra.json"), + "--hdr10plus-json", + str(config.directories.temp / self.hdr10plus_file), + "-o", + str(config.directories.temp / "RPU.bin"), + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if conversion.returncode: + raise ValueError("Failed converting HDR10+ to Dolby Vision") + + self.log.info("Converted HDR10+ metadata to Dolby Vision") + self.log.info("✓ HDR10+ successfully converted to Dolby Vision Profile 8") + + # Clean up temporary files + Path.unlink(config.directories.temp / "extra.json") + Path.unlink(config.directories.temp / self.hdr10plus_file) diff --git a/packages/envied/src/envied/core/tracks/subtitle.py b/packages/envied/src/envied/core/tracks/subtitle.py new file mode 100644 index 0000000..086a4c8 --- /dev/null +++ b/packages/envied/src/envied/core/tracks/subtitle.py @@ -0,0 +1,967 @@ +from __future__ import annotations + +import re +import subprocess +from collections import defaultdict +from enum import Enum +from functools import partial +from io import BytesIO +from pathlib import Path +from typing import Any, Callable, Iterable, Optional, Union + +import pycaption +import requests +from construct import Container +from pycaption import Caption, CaptionList, CaptionNode, WebVTTReader +from pycaption.geometry import Layout +from pymp4.parser import MP4 +from subby import CommonIssuesFixer, SAMIConverter, SDHStripper, WebVTTConverter +from subtitle_filter import Subtitles + +from envied.core import binaries +from envied.core.config import config +from envied.core.tracks.track import Track +from envied.core.utilities import try_ensure_utf8 +from envied.core.utils.webvtt import merge_segmented_webvtt + + +class Subtitle(Track): + class Codec(str, Enum): + SubRip = "SRT" # https://wikipedia.org/wiki/SubRip + SubStationAlpha = "SSA" # https://wikipedia.org/wiki/SubStation_Alpha + SubStationAlphav4 = "ASS" # https://wikipedia.org/wiki/SubStation_Alpha#Advanced_SubStation_Alpha= + TimedTextMarkupLang = "TTML" # https://wikipedia.org/wiki/Timed_Text_Markup_Language + WebVTT = "VTT" # https://wikipedia.org/wiki/WebVTT + SAMI = "SMI" # https://wikipedia.org/wiki/SAMI + # MPEG-DASH box-encapsulated subtitle formats + fTTML = "STPP" # https://www.w3.org/TR/2018/REC-ttml-imsc1.0.1-20180424 + fVTT = "WVTT" # https://www.w3.org/TR/webvtt1 + + @property + def extension(self) -> str: + return self.value.lower() + + @staticmethod + def from_mime(mime: str) -> Subtitle.Codec: + mime = mime.lower().strip().split(".")[0] + if mime == "srt": + return Subtitle.Codec.SubRip + elif mime == "ssa": + return Subtitle.Codec.SubStationAlpha + elif mime == "ass": + return Subtitle.Codec.SubStationAlphav4 + elif mime == "ttml": + return Subtitle.Codec.TimedTextMarkupLang + elif mime == "vtt": + return Subtitle.Codec.WebVTT + elif mime in ("smi", "sami"): + return Subtitle.Codec.SAMI + elif mime == "stpp": + return Subtitle.Codec.fTTML + elif mime == "wvtt": + return Subtitle.Codec.fVTT + raise ValueError(f"The MIME '{mime}' is not a supported Subtitle Codec") + + @staticmethod + def from_codecs(codecs: str) -> Subtitle.Codec: + for codec in codecs.lower().split(","): + mime = codec.strip().split(".")[0] + try: + return Subtitle.Codec.from_mime(mime) + except ValueError: + pass + raise ValueError(f"No MIME types matched any supported Subtitle Codecs in '{codecs}'") + + @staticmethod + def from_netflix_profile(profile: str) -> Subtitle.Codec: + profile = profile.lower().strip() + if profile.startswith("webvtt"): + return Subtitle.Codec.WebVTT + if profile.startswith("dfxp"): + return Subtitle.Codec.TimedTextMarkupLang + raise ValueError(f"The Content Profile '{profile}' is not a supported Subtitle Codec") + + def __init__( + self, + *args: Any, + codec: Optional[Subtitle.Codec] = None, + cc: bool = False, + sdh: bool = False, + forced: bool = False, + **kwargs: Any, + ): + """ + Create a new Subtitle track object. + + Parameters: + codec: A Subtitle.Codec enum representing the subtitle format. + If not specified, MediaInfo will be used to retrieve the format + once the track has been downloaded. + cc: Closed Caption. + - Intended as if you couldn't hear the audio at all. + - Can have Sound as well as Dialogue, but doesn't have to. + - Original source would be from an EIA-CC encoded stream. Typically all + upper-case characters. + Indicators of it being CC without knowing original source: + - Extracted with CCExtractor, or + - >>> (or similar) being used at the start of some or all lines, or + - All text is uppercase or at least the majority, or + - Subtitles are Scrolling-text style (one line appears, oldest line + then disappears). + Just because you downloaded it as a SRT or VTT or such, doesn't mean it + isn't from an EIA-CC stream. And I wouldn't take the streaming services + (CC) as gospel either as they tend to get it wrong too. + sdh: Deaf or Hard-of-Hearing. Also known as HOH in the UK (EU?). + - Intended as if you couldn't hear the audio at all. + - MUST have Sound as well as Dialogue to be considered SDH. + - It has no "syntax" or "format" but is not transmitted using archaic + forms like EIA-CC streams, would be intended for transmission via + SubRip (SRT), WebVTT (VTT), TTML, etc. + If you can see important audio/sound transcriptions and not just dialogue + and it doesn't have the indicators of CC, then it's most likely SDH. + If it doesn't have important audio/sounds transcriptions it might just be + regular subtitling (you wouldn't mark as CC or SDH). This would be the + case for most translation subtitles. Like Anime for example. + forced: Typically used if there's important information at some point in time + like watching Dubbed content and an important Sign or Letter is shown + or someone talking in a different language. + Forced tracks are recommended by the Matroska Spec to be played if + the player's current playback audio language matches a subtitle + marked as "forced". + However, that doesn't mean every player works like this but there is + no other way to reliably work with Forced subtitles where multiple + forced subtitles may be in the output file. Just know what to expect + with "forced" subtitles. + + Note: If codec is not specified some checks may be skipped or assume a value. + Specifying as much information as possible is highly recommended. + + Information on Subtitle Types: + https://bit.ly/2Oe4fLC (3PlayMedia Blog on SUB vs CC vs SDH). + However, I wouldn't pay much attention to the claims about SDH needing to + be in the original source language. It's logically not true. + + CC == Closed Captions. Source: Basically every site. + SDH = Subtitles for the Deaf or Hard-of-Hearing. Source: Basically every site. + HOH = Exact same as SDH. Is a term used in the UK. Source: https://bit.ly/2PGJatz (ICO UK) + + More in-depth information, examples, and stuff to look for can be found in the Parameter + explanation list above. + """ + super().__init__(*args, **kwargs) + + if not isinstance(codec, (Subtitle.Codec, type(None))): + raise TypeError(f"Expected codec to be a {Subtitle.Codec}, not {codec!r}") + if not isinstance(cc, (bool, int)) or (isinstance(cc, int) and cc not in (0, 1)): + raise TypeError(f"Expected cc to be a {bool} or bool-like {int}, not {cc!r}") + if not isinstance(sdh, (bool, int)) or (isinstance(sdh, int) and sdh not in (0, 1)): + raise TypeError(f"Expected sdh to be a {bool} or bool-like {int}, not {sdh!r}") + if not isinstance(forced, (bool, int)) or (isinstance(forced, int) and forced not in (0, 1)): + raise TypeError(f"Expected forced to be a {bool} or bool-like {int}, not {forced!r}") + + self.codec = codec + + self.cc = bool(cc) + self.sdh = bool(sdh) + self.forced = bool(forced) + + if self.cc and self.sdh: + raise ValueError("A text track cannot be both CC and SDH.") + + if self.forced and (self.cc or self.sdh): + raise ValueError("A text track cannot be CC/SDH as well as Forced.") + + # TODO: Migrate to new event observer system + # Called after Track has been converted to another format + self.OnConverted: Optional[Callable[[Subtitle.Codec], None]] = None + + def __str__(self) -> str: + return " | ".join( + filter( + bool, + ["SUB", f"[{self.codec.value}]" if self.codec else None, str(self.language), self.get_track_name()], + ) + ) + + def get_track_name(self) -> Optional[str]: + """Return the base Track Name.""" + track_name = super().get_track_name() or "" + flag = self.cc and "CC" or self.sdh and "SDH" or self.forced and "Forced" + if flag: + if track_name: + flag = f" ({flag})" + track_name += flag + return track_name or None + + def download( + self, + session: requests.Session, + prepare_drm: partial, + max_workers: Optional[int] = None, + progress: Optional[partial] = None, + *, + cdm: Optional[object] = None, + ): + super().download(session, prepare_drm, max_workers, progress, cdm=cdm) + if not self.path: + return + + if self.codec == Subtitle.Codec.fTTML: + self.convert(Subtitle.Codec.TimedTextMarkupLang) + elif self.codec == Subtitle.Codec.fVTT: + self.convert(Subtitle.Codec.WebVTT) + elif self.codec == Subtitle.Codec.WebVTT: + text = self.path.read_text("utf8") + if self.descriptor == Track.Descriptor.DASH: + if len(self.data["dash"]["segment_durations"]) > 1: + text = merge_segmented_webvtt( + text, + segment_durations=self.data["dash"]["segment_durations"], + timescale=self.data["dash"]["timescale"], + ) + elif self.descriptor == Track.Descriptor.HLS: + if len(self.data["hls"]["segment_durations"]) > 1: + text = merge_segmented_webvtt( + text, + segment_durations=self.data["hls"]["segment_durations"], + timescale=1, # ? + ) + + # Sanitize WebVTT timestamps before parsing + text = Subtitle.sanitize_webvtt_timestamps(text) + + try: + caption_set = pycaption.WebVTTReader().read(text) + Subtitle.merge_same_cues(caption_set) + Subtitle.filter_unwanted_cues(caption_set) + subtitle_text = pycaption.WebVTTWriter().write(caption_set) + self.path.write_text(subtitle_text, encoding="utf8") + except pycaption.exceptions.CaptionReadSyntaxError: + # If first attempt fails, try more aggressive sanitization + text = Subtitle.sanitize_webvtt(text) + try: + caption_set = pycaption.WebVTTReader().read(text) + Subtitle.merge_same_cues(caption_set) + Subtitle.filter_unwanted_cues(caption_set) + subtitle_text = pycaption.WebVTTWriter().write(caption_set) + self.path.write_text(subtitle_text, encoding="utf8") + except Exception: + # Keep the sanitized version even if parsing failed + self.path.write_text(text, encoding="utf8") + + @staticmethod + def sanitize_webvtt_timestamps(text: str) -> str: + """ + Fix invalid timestamps in WebVTT files, particularly negative timestamps. + + Parameters: + text: The WebVTT content as string + + Returns: + Sanitized WebVTT content + """ + # Replace negative timestamps with 00:00:00.000 + return re.sub(r"(-\d+:\d+:\d+\.\d+)", "00:00:00.000", text) + + @staticmethod + def sanitize_webvtt(text: str) -> str: + """ + More thorough sanitization of WebVTT files to handle multiple potential issues. + + Parameters: + text: The WebVTT content as string + + Returns: + Sanitized WebVTT content + """ + # Make sure we have a proper WEBVTT header + if not text.strip().startswith("WEBVTT"): + text = "WEBVTT\n\n" + text + + lines = text.split("\n") + sanitized_lines = [] + timestamp_pattern = re.compile(r"^((?:\d+:)?\d+:\d+\.\d+)\s+-->\s+((?:\d+:)?\d+:\d+\.\d+)") + + # Skip invalid headers - keep only WEBVTT + header_done = False + for line in lines: + if not header_done: + if line.startswith("WEBVTT"): + sanitized_lines.append("WEBVTT") + header_done = True + continue + + # Replace negative timestamps + if "-" in line and "-->" in line: + line = re.sub(r"(-\d+:\d+:\d+\.\d+)", "00:00:00.000", line) + + # Validate timestamp format + match = timestamp_pattern.match(line) + if match: + start_time = match.group(1) + end_time = match.group(2) + + # Ensure proper format with hours if missing + if start_time.count(":") == 1: + start_time = f"00:{start_time}" + if end_time.count(":") == 1: + end_time = f"00:{end_time}" + + line = f"{start_time} --> {end_time}" + + sanitized_lines.append(line) + + return "\n".join(sanitized_lines) + + def convert_with_subby(self, codec: Subtitle.Codec) -> Path: + """ + Convert subtitle using subby library for better format support and processing. + + This method leverages subby's advanced subtitle processing capabilities + including better WebVTT handling, SDH stripping, and common issue fixing. + """ + + if not self.path or not self.path.exists(): + raise ValueError("You must download the subtitle track first.") + + if self.codec == codec: + return self.path + + output_path = self.path.with_suffix(f".{codec.value.lower()}") + original_path = self.path + + try: + # Convert to SRT using subby first + srt_subtitles = None + + if self.codec == Subtitle.Codec.WebVTT: + converter = WebVTTConverter() + srt_subtitles = converter.from_file(str(self.path)) + elif self.codec == Subtitle.Codec.SAMI: + converter = SAMIConverter() + srt_subtitles = converter.from_file(str(self.path)) + + if srt_subtitles is not None: + # Apply common fixes + fixer = CommonIssuesFixer() + fixed_srt, _ = fixer.from_srt(srt_subtitles) + + # If target is SRT, we're done + if codec == Subtitle.Codec.SubRip: + output_path.write_text(str(fixed_srt), encoding="utf8") + else: + # Convert from SRT to target format using existing pycaption logic + temp_srt_path = self.path.with_suffix(".temp.srt") + temp_srt_path.write_text(str(fixed_srt), encoding="utf8") + + # Parse the SRT and convert to target format + caption_set = self.parse(temp_srt_path.read_bytes(), Subtitle.Codec.SubRip) + self.merge_same_cues(caption_set) + + writer = { + Subtitle.Codec.TimedTextMarkupLang: pycaption.DFXPWriter, + Subtitle.Codec.WebVTT: pycaption.WebVTTWriter, + }.get(codec) + + if writer: + subtitle_text = writer().write(caption_set) + output_path.write_text(subtitle_text, encoding="utf8") + else: + # Fall back to existing conversion method + temp_srt_path.unlink() + return self._convert_standard(codec) + + temp_srt_path.unlink() + + if original_path.exists() and original_path != output_path: + original_path.unlink() + + self.path = output_path + self.codec = codec + + if callable(self.OnConverted): + self.OnConverted(codec) + + return output_path + else: + # Fall back to existing conversion method + return self._convert_standard(codec) + + except Exception: + # Fall back to existing conversion method on any error + return self._convert_standard(codec) + + def convert(self, codec: Subtitle.Codec) -> Path: + """ + Convert this Subtitle to another Format. + + The conversion method is determined by the 'conversion_method' setting in config: + - 'auto' (default): Uses subby for WebVTT/SAMI, standard for others + - 'subby': Always uses subby with CommonIssuesFixer + - 'subtitleedit': Uses SubtitleEdit when available, falls back to pycaption + - 'pycaption': Uses only pycaption library + """ + # Check configuration for conversion method + conversion_method = config.subtitle.get("conversion_method", "auto") + + if conversion_method == "subby": + return self.convert_with_subby(codec) + elif conversion_method == "subtitleedit": + return self._convert_standard(codec) # SubtitleEdit is used in standard conversion + elif conversion_method == "pycaption": + return self._convert_pycaption_only(codec) + elif conversion_method == "auto": + # Use subby for formats it handles better + if self.codec in (Subtitle.Codec.WebVTT, Subtitle.Codec.SAMI): + return self.convert_with_subby(codec) + else: + return self._convert_standard(codec) + else: + return self._convert_standard(codec) + + def _convert_pycaption_only(self, codec: Subtitle.Codec) -> Path: + """ + Convert subtitle using only pycaption library (no SubtitleEdit, no subby). + + This is the original conversion method that only uses pycaption. + """ + if not self.path or not self.path.exists(): + raise ValueError("You must download the subtitle track first.") + + if self.codec == codec: + return self.path + + output_path = self.path.with_suffix(f".{codec.value.lower()}") + original_path = self.path + + # Use only pycaption for conversion + writer = { + Subtitle.Codec.SubRip: pycaption.SRTWriter, + Subtitle.Codec.TimedTextMarkupLang: pycaption.DFXPWriter, + Subtitle.Codec.WebVTT: pycaption.WebVTTWriter, + }.get(codec) + + if writer is None: + raise NotImplementedError(f"Cannot convert {self.codec.name} to {codec.name} using pycaption only.") + + caption_set = self.parse(self.path.read_bytes(), self.codec) + Subtitle.merge_same_cues(caption_set) + if codec == Subtitle.Codec.WebVTT: + Subtitle.filter_unwanted_cues(caption_set) + subtitle_text = writer().write(caption_set) + + output_path.write_text(subtitle_text, encoding="utf8") + + if original_path.exists() and original_path != output_path: + original_path.unlink() + + self.path = output_path + self.codec = codec + + if callable(self.OnConverted): + self.OnConverted(codec) + + return output_path + + def _convert_standard(self, codec: Subtitle.Codec) -> Path: + """ + Convert this Subtitle to another Format. + + The file path location of the Subtitle data will be kept at the same + location but the file extension will be changed appropriately. + + Supported formats: + - SubRip - SubtitleEdit or pycaption.SRTWriter + - TimedTextMarkupLang - SubtitleEdit or pycaption.DFXPWriter + - WebVTT - SubtitleEdit or pycaption.WebVTTWriter + - SubStationAlphav4 - SubtitleEdit + - SAMI - subby.SAMIConverter (when available) + - fTTML* - custom code using some pycaption functions + - fVTT* - custom code using some pycaption functions + *: Can read from format, but cannot convert to format + + Note: It currently prioritizes using SubtitleEdit over PyCaption as + I have personally noticed more oddities with PyCaption parsing over + SubtitleEdit. Especially when working with TTML/DFXP where it would + often have timecodes and stuff mixed in/duplicated. + + Returns the new file path of the Subtitle. + """ + if not self.path or not self.path.exists(): + raise ValueError("You must download the subtitle track first.") + + if self.codec == codec: + return self.path + + output_path = self.path.with_suffix(f".{codec.value.lower()}") + original_path = self.path + + if binaries.SubtitleEdit and self.codec not in (Subtitle.Codec.fTTML, Subtitle.Codec.fVTT): + sub_edit_format = { + Subtitle.Codec.SubStationAlphav4: "AdvancedSubStationAlpha", + Subtitle.Codec.TimedTextMarkupLang: "TimedText1.0", + }.get(codec, codec.name) + sub_edit_args = [ + binaries.SubtitleEdit, + "/Convert", + self.path, + sub_edit_format, + f"/outputfilename:{output_path.name}", + "/encoding:utf8", + ] + if codec == Subtitle.Codec.SubRip: + sub_edit_args.append("/ConvertColorsToDialog") + subprocess.run(sub_edit_args, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + else: + writer = { + # pycaption generally only supports these subtitle formats + Subtitle.Codec.SubRip: pycaption.SRTWriter, + Subtitle.Codec.TimedTextMarkupLang: pycaption.DFXPWriter, + Subtitle.Codec.WebVTT: pycaption.WebVTTWriter, + }.get(codec) + if writer is None: + raise NotImplementedError(f"Cannot yet convert {self.codec.name} to {codec.name}.") + + caption_set = self.parse(self.path.read_bytes(), self.codec) + Subtitle.merge_same_cues(caption_set) + if codec == Subtitle.Codec.WebVTT: + Subtitle.filter_unwanted_cues(caption_set) + subtitle_text = writer().write(caption_set) + + output_path.write_text(subtitle_text, encoding="utf8") + + if original_path.exists() and original_path != output_path: + original_path.unlink() + + self.path = output_path + self.codec = codec + + if callable(self.OnConverted): + self.OnConverted(codec) + + return output_path + + @staticmethod + def parse(data: bytes, codec: Subtitle.Codec) -> pycaption.CaptionSet: + if not isinstance(data, bytes): + raise ValueError(f"Subtitle data must be parsed as bytes data, not {type(data).__name__}") + + try: + if codec == Subtitle.Codec.SubRip: + text = try_ensure_utf8(data).decode("utf8") + caption_set = pycaption.SRTReader().read(text) + elif codec == Subtitle.Codec.fTTML: + caption_lists: dict[str, pycaption.CaptionList] = defaultdict(pycaption.CaptionList) + for segment in ( + Subtitle.parse(box.data, Subtitle.Codec.TimedTextMarkupLang) + for box in MP4.parse_stream(BytesIO(data)) + if box.type == b"mdat" + ): + for lang in segment.get_languages(): + caption_lists[lang].extend(segment.get_captions(lang)) + caption_set: pycaption.CaptionSet = pycaption.CaptionSet(caption_lists) + elif codec == Subtitle.Codec.TimedTextMarkupLang: + text = try_ensure_utf8(data).decode("utf8") + text = text.replace("tt:", "") + # negative size values aren't allowed in TTML/DFXP spec, replace with 0 + text = re.sub(r'"(-\d+(\.\d+)?(px|em|%|c|pt))"', '"0"', text) + caption_set = pycaption.DFXPReader().read(text) + elif codec == Subtitle.Codec.fVTT: + caption_lists: dict[str, pycaption.CaptionList] = defaultdict(pycaption.CaptionList) + caption_list, language = Subtitle.merge_segmented_wvtt(data) + caption_lists[language] = caption_list + caption_set: pycaption.CaptionSet = pycaption.CaptionSet(caption_lists) + elif codec == Subtitle.Codec.WebVTT: + text = try_ensure_utf8(data).decode("utf8") + text = Subtitle.sanitize_broken_webvtt(text) + text = Subtitle.space_webvtt_headers(text) + caption_set = pycaption.WebVTTReader().read(text) + elif codec == Subtitle.Codec.SAMI: + # Use subby for SAMI parsing + converter = SAMIConverter() + srt_subtitles = converter.from_bytes(data) + # Convert SRT back to CaptionSet for compatibility + srt_text = str(srt_subtitles).encode("utf8") + caption_set = Subtitle.parse(srt_text, Subtitle.Codec.SubRip) + else: + raise ValueError(f'Unknown Subtitle format "{codec}"...') + except pycaption.exceptions.CaptionReadSyntaxError as e: + raise SyntaxError(f'A syntax error has occurred when reading the "{codec}" subtitle: {e}') + except pycaption.exceptions.CaptionReadNoCaptions: + return pycaption.CaptionSet({"en": []}) + + # remove empty caption lists or some code breaks, especially if it's the first list + for language in caption_set.get_languages(): + if not caption_set.get_captions(language): + # noinspection PyProtectedMember + del caption_set._captions[language] + + return caption_set + + @staticmethod + def sanitize_broken_webvtt(text: str) -> str: + """ + Remove or fix corrupted WebVTT lines, particularly those with invalid timestamps. + + Parameters: + text: The WebVTT content as string + + Returns: + Sanitized WebVTT content with corrupted lines removed + """ + lines = text.splitlines() + sanitized_lines = [] + + i = 0 + while i < len(lines): + # Skip empty lines + if not lines[i].strip(): + sanitized_lines.append(lines[i]) + i += 1 + continue + + # Check for timestamp lines + if "-->" in lines[i]: + # Validate timestamp format + timestamp_parts = lines[i].split("-->") + if len(timestamp_parts) != 2 or not timestamp_parts[1].strip() or timestamp_parts[1].strip() == "0": + # Skip this timestamp and its content until next timestamp or end + j = i + 1 + while j < len(lines) and "-->" not in lines[j] and lines[j].strip(): + j += 1 + i = j + continue + + # Add valid timestamp line + sanitized_lines.append(lines[i]) + else: + # Add non-timestamp line + sanitized_lines.append(lines[i]) + + i += 1 + + return "\n".join(sanitized_lines) + + @staticmethod + def space_webvtt_headers(data: Union[str, bytes]): + """ + Space out the WEBVTT Headers from Captions. + + Segmented VTT when merged may have the WEBVTT headers part of the next caption + as they were not separated far enough from the previous caption and ended up + being considered as caption text rather than the header for the next segment. + """ + if isinstance(data, bytes): + data = try_ensure_utf8(data).decode("utf8") + elif not isinstance(data, str): + raise ValueError(f"Expecting data to be a str, not {data!r}") + + text = ( + data.replace("WEBVTT", "\n\nWEBVTT").replace("\r", "").replace("\n\n\n", "\n \n\n").replace("\n\n<", "\n<") + ) + + return text + + @staticmethod + def merge_same_cues(caption_set: pycaption.CaptionSet): + """Merge captions with the same timecodes and text as one in-place.""" + for lang in caption_set.get_languages(): + captions = caption_set.get_captions(lang) + last_caption = None + concurrent_captions = pycaption.CaptionList() + merged_captions = pycaption.CaptionList() + for caption in captions: + if last_caption: + if (caption.start, caption.end) == (last_caption.start, last_caption.end): + if caption.get_text() != last_caption.get_text(): + concurrent_captions.append(caption) + last_caption = caption + continue + else: + merged_captions.append(pycaption.base.merge(concurrent_captions)) + concurrent_captions = [caption] + last_caption = caption + + if concurrent_captions: + merged_captions.append(pycaption.base.merge(concurrent_captions)) + if merged_captions: + caption_set.set_captions(lang, merged_captions) + + @staticmethod + def filter_unwanted_cues(caption_set: pycaption.CaptionSet): + """ + Filter out subtitle cues containing only   or whitespace. + """ + for lang in caption_set.get_languages(): + captions = caption_set.get_captions(lang) + filtered_captions = pycaption.CaptionList() + + for caption in captions: + text = caption.get_text().strip() + if not text or text == " " or all(c in " \t\n\r\xa0" for c in text.replace(" ", "\xa0")): + continue + + filtered_captions.append(caption) + + caption_set.set_captions(lang, filtered_captions) + + @staticmethod + def merge_segmented_wvtt(data: bytes, period_start: float = 0.0) -> tuple[CaptionList, Optional[str]]: + """ + Convert Segmented DASH WebVTT cues into a pycaption Caption List. + Also returns an ISO 639-2 alpha-3 language code if available. + + Code ported originally by xhlove to Python from shaka-player. + Has since been improved upon by rlaphoenix using pymp4 and + pycaption functions. + """ + captions = CaptionList() + + # init: + saw_wvtt_box = False + timescale = None + language = None + + # media: + # > tfhd + default_duration = None + # > tfdt + saw_tfdt_box = False + base_time = 0 + # > trun + saw_trun_box = False + samples = [] + + def flatten_boxes(box: Container) -> Iterable[Container]: + for child in box: + if hasattr(child, "children"): + yield from flatten_boxes(child.children) + del child["children"] + if hasattr(child, "entries"): + yield from flatten_boxes(child.entries) + del child["entries"] + # some boxes (mainly within 'entries') uses format not type + child["type"] = child.get("type") or child.get("format") + yield child + + for box in flatten_boxes(MP4.parse_stream(BytesIO(data))): + # init + if box.type == b"mdhd": + timescale = box.timescale + language = box.language + + if box.type == b"wvtt": + saw_wvtt_box = True + + # media + if box.type == b"styp": + # essentially the start of each segment + # media var resets + # > tfhd + default_duration = None + # > tfdt + saw_tfdt_box = False + base_time = 0 + # > trun + saw_trun_box = False + samples = [] + + if box.type == b"tfhd": + if box.flags.default_sample_duration_present: + default_duration = box.default_sample_duration + + if box.type == b"tfdt": + saw_tfdt_box = True + base_time = box.baseMediaDecodeTime + + if box.type == b"trun": + saw_trun_box = True + samples = box.sample_info + + if box.type == b"mdat": + if not timescale: + raise ValueError("Timescale was not found in the Segmented WebVTT.") + if not saw_wvtt_box: + raise ValueError("The WVTT box was not found in the Segmented WebVTT.") + if not saw_tfdt_box: + raise ValueError("The TFDT box was not found in the Segmented WebVTT.") + if not saw_trun_box: + raise ValueError("The TRUN box was not found in the Segmented WebVTT.") + + vttc_boxes = MP4.parse_stream(BytesIO(box.data)) + current_time = base_time + period_start + + for sample, vttc_box in zip(samples, vttc_boxes): + duration = sample.sample_duration or default_duration + if sample.sample_composition_time_offsets: + current_time += sample.sample_composition_time_offsets + + start_time = current_time + end_time = current_time + (duration or 0) + current_time = end_time + + if vttc_box.type == b"vtte": + # vtte is a vttc that's empty, skip + continue + + layout: Optional[Layout] = None + nodes: list[CaptionNode] = [] + + for cue_box in vttc_box.children: + if cue_box.type == b"vsid": + # this is a V(?) Source ID box, we don't care + continue + if cue_box.type == b"sttg": + layout = Layout(webvtt_positioning=cue_box.settings) + elif cue_box.type == b"payl": + nodes.extend( + [ + node + for line in cue_box.cue_text.split("\n") + for node in [ + CaptionNode.create_text(WebVTTReader()._decode(line)), + CaptionNode.create_break(), + ] + ] + ) + nodes.pop() + + if nodes: + caption = Caption( + start=start_time * timescale, # as microseconds + end=end_time * timescale, + nodes=nodes, + layout_info=layout, + ) + p_caption = captions[-1] if captions else None + if p_caption and caption.start == p_caption.end and str(caption.nodes) == str(p_caption.nodes): + # it's a duplicate, but lets take its end time + p_caption.end = caption.end + continue + captions.append(caption) + + return captions, language + + def strip_hearing_impaired(self) -> None: + """ + Strip captions for hearing impaired (SDH). + + The SDH stripping method is determined by the 'sdh_method' setting in config: + - 'auto' (default): Tries subby first, then SubtitleEdit, then filter-subs + - 'subby': Uses subby's SDHStripper + - 'subtitleedit': Uses SubtitleEdit when available + - 'filter-subs': Uses subtitle-filter library + """ + if not self.path or not self.path.exists(): + raise ValueError("You must download the subtitle track first.") + + # Check configuration for SDH stripping method + sdh_method = config.subtitle.get("sdh_method", "auto") + + if sdh_method == "subby" and self.codec == Subtitle.Codec.SubRip: + # Use subby's SDHStripper directly on the file + stripper = SDHStripper() + stripped_srt, _ = stripper.from_file(str(self.path)) + self.path.write_text(str(stripped_srt), encoding="utf8") + return + elif sdh_method == "subtitleedit" and binaries.SubtitleEdit: + # Force use of SubtitleEdit + pass # Continue to SubtitleEdit section below + elif sdh_method == "filter-subs": + # Force use of filter-subs + sub = Subtitles(self.path) + try: + sub.filter(rm_fonts=True, rm_ast=True, rm_music=True, rm_effects=True, rm_names=True, rm_author=True) + except ValueError as e: + if "too many values to unpack" in str(e): + # Retry without name removal if the error is due to multiple colons in time references + # This can happen with lines like "at 10:00 and 2:00" + sub = Subtitles(self.path) + sub.filter( + rm_fonts=True, rm_ast=True, rm_music=True, rm_effects=True, rm_names=False, rm_author=True + ) + else: + raise + sub.save() + return + elif sdh_method == "auto": + # Try subby first for SRT files, then fall back + if self.codec == Subtitle.Codec.SubRip: + try: + stripper = SDHStripper() + stripped_srt, _ = stripper.from_file(str(self.path)) + self.path.write_text(str(stripped_srt), encoding="utf8") + return + except Exception: + pass # Fall through to other methods + + if binaries.SubtitleEdit: + if self.codec == Subtitle.Codec.SubStationAlphav4: + output_format = "AdvancedSubStationAlpha" + elif self.codec == Subtitle.Codec.TimedTextMarkupLang: + output_format = "TimedText1.0" + else: + output_format = self.codec.name + subprocess.run( + [ + binaries.SubtitleEdit, + "/Convert", + self.path, + output_format, + "/encoding:utf8", + "/overwrite", + "/RemoveTextForHI", + ], + check=True, + stdout=subprocess.DEVNULL, + ) + else: + sub = Subtitles(self.path) + try: + sub.filter(rm_fonts=True, rm_ast=True, rm_music=True, rm_effects=True, rm_names=True, rm_author=True) + except ValueError as e: + if "too many values to unpack" in str(e): + # Retry without name removal if the error is due to multiple colons in time references + # This can happen with lines like "at 10:00 and 2:00" + sub = Subtitles(self.path) + sub.filter( + rm_fonts=True, rm_ast=True, rm_music=True, rm_effects=True, rm_names=False, rm_author=True + ) + else: + raise + sub.save() + + def reverse_rtl(self) -> None: + """ + Reverse RTL (Right to Left) Start/End on Captions. + This can be used to fix the positioning of sentence-ending characters. + """ + if not self.path or not self.path.exists(): + raise ValueError("You must download the subtitle track first.") + + if not binaries.SubtitleEdit: + raise EnvironmentError("SubtitleEdit executable not found...") + + if self.codec == Subtitle.Codec.SubStationAlphav4: + output_format = "AdvancedSubStationAlpha" + elif self.codec == Subtitle.Codec.TimedTextMarkupLang: + output_format = "TimedText1.0" + else: + output_format = self.codec.name + + subprocess.run( + [ + binaries.SubtitleEdit, + "/Convert", + self.path, + output_format, + "/ReverseRtlStartEnd", + "/encoding:utf8", + "/overwrite", + ], + check=True, + stdout=subprocess.DEVNULL, + ) + + +__all__ = ("Subtitle",) diff --git a/packages/envied/src/envied/core/tracks/track.py b/packages/envied/src/envied/core/tracks/track.py new file mode 100644 index 0000000..c12323e --- /dev/null +++ b/packages/envied/src/envied/core/tracks/track.py @@ -0,0 +1,597 @@ +import base64 +import html +import logging +import re +import shutil +import subprocess +from collections import defaultdict +from copy import copy +from enum import Enum +from functools import partial +from pathlib import Path +from typing import Any, Callable, Iterable, Optional, Union +from uuid import UUID +from zlib import crc32 + +from langcodes import Language +from pyplayready.cdm import Cdm as PlayReadyCdm +from pywidevine.cdm import Cdm as WidevineCdm +from requests import Session + +from envied.core import binaries +from envied.core.config import config +from envied.core.constants import DOWNLOAD_CANCELLED, DOWNLOAD_LICENCE_ONLY +from envied.core.downloaders import aria2c, curl_impersonate, n_m3u8dl_re, requests +from envied.core.drm import DRM_T, PlayReady, Widevine +from envied.core.events import events +from envied.core.utilities import get_boxes, try_ensure_utf8 +from envied.core.utils.subprocess import ffprobe + + +class Track: + class Descriptor(Enum): + URL = 1 # Direct URL, nothing fancy + HLS = 2 # https://en.wikipedia.org/wiki/HTTP_Live_Streaming + DASH = 3 # https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP + ISM = 4 # https://learn.microsoft.com/en-us/silverlight/smooth-streaming + + def __init__( + self, + url: Union[str, list[str]], + language: Union[Language, str], + is_original_lang: bool = False, + descriptor: Descriptor = Descriptor.URL, + needs_repack: bool = False, + name: Optional[str] = None, + drm: Optional[Iterable[DRM_T]] = None, + edition: Optional[str] = None, + downloader: Optional[Callable] = None, + data: Optional[Union[dict, defaultdict]] = None, + id_: Optional[str] = None, + extra: Optional[Any] = None, + ) -> None: + if not isinstance(url, (str, list)): + raise TypeError(f"Expected url to be a {str}, or list of {str}, not {type(url)}") + if not isinstance(language, (Language, str)): + raise TypeError(f"Expected language to be a {Language} or {str}, not {type(language)}") + if not isinstance(is_original_lang, bool): + raise TypeError(f"Expected is_original_lang to be a {bool}, not {type(is_original_lang)}") + if not isinstance(descriptor, Track.Descriptor): + raise TypeError(f"Expected descriptor to be a {Track.Descriptor}, not {type(descriptor)}") + if not isinstance(needs_repack, bool): + raise TypeError(f"Expected needs_repack to be a {bool}, not {type(needs_repack)}") + if not isinstance(name, (str, type(None))): + raise TypeError(f"Expected name to be a {str}, not {type(name)}") + if not isinstance(id_, (str, type(None))): + raise TypeError(f"Expected id_ to be a {str}, not {type(id_)}") + if not isinstance(edition, (str, type(None))): + raise TypeError(f"Expected edition to be a {str}, not {type(edition)}") + if not isinstance(downloader, (Callable, type(None))): + raise TypeError(f"Expected downloader to be a {Callable}, not {type(downloader)}") + if not isinstance(data, (dict, defaultdict, type(None))): + raise TypeError(f"Expected data to be a {dict} or {defaultdict}, not {type(data)}") + + invalid_urls = ", ".join(set(type(x) for x in url if not isinstance(x, str))) + if invalid_urls: + raise TypeError(f"Expected all items in url to be a {str}, but found {invalid_urls}") + + if drm is not None: + try: + iter(drm) + except TypeError: + raise TypeError(f"Expected drm to be an iterable, not {type(drm)}") + + if downloader is None: + downloader = { + "aria2c": aria2c, + "curl_impersonate": curl_impersonate, + "requests": requests, + "n_m3u8dl_re": n_m3u8dl_re, + }[config.downloader] + + self.path: Optional[Path] = None + self.url = url + self.language = Language.get(language) + self.is_original_lang = is_original_lang + self.descriptor = descriptor + self.needs_repack = needs_repack + self.name = name + self.drm = drm + self.edition: str = edition + self.downloader = downloader + self._data: defaultdict[Any, Any] = defaultdict(dict) + self.data = data or {} + self.extra: Any = extra or {} # allow anything for extra, but default to a dict + + if self.name is None: + lang = Language.get(self.language) + if (lang.language or "").lower() == (lang.territory or "").lower(): + lang.territory = None # e.g. en-en, de-DE + reduced = lang.simplify_script() + extra_parts = [] + if reduced.script is not None: + script = reduced.script_name(max_distance=25) + if script and script != "Zzzz": + extra_parts.append(script) + if reduced.territory is not None: + territory = reduced.territory_name(max_distance=25) + if territory and territory != "ZZ": + territory = territory.removesuffix(" SAR China") + extra_parts.append(territory) + self.name = ", ".join(extra_parts) or None + + if not id_: + this = copy(self) + this.url = self.url.rsplit("?", maxsplit=1)[0] + checksum = crc32(repr(this).encode("utf8")) + id_ = hex(checksum)[2:] + + self.id = id_ + + # TODO: Currently using OnFoo event naming, change to just segment_filter + self.OnSegmentFilter: Optional[Callable] = None + + def __repr__(self) -> str: + return "{name}({items})".format( + name=self.__class__.__name__, items=", ".join([f"{k}={repr(v)}" for k, v in self.__dict__.items()]) + ) + + def __eq__(self, other: Any) -> bool: + return isinstance(other, Track) and self.id == other.id + + @property + def data(self) -> defaultdict[Any, Any]: + """ + Arbitrary track data dictionary. + + A defaultdict is used with a dict as the factory for easier + nested saving and safer exists-checks. + + Reserved keys: + + - "hls" used by the HLS class. + - playlist: m3u8.model.Playlist - The primary track information. + - media: m3u8.model.Media - The audio/subtitle track information. + - segment_durations: list[int] - A list of each segment's duration. + - "dash" used by the DASH class. + - manifest: lxml.ElementTree - DASH MPD manifest. + - period: lxml.Element - The period of this track. + - adaptation_set: lxml.Element - The adaptation set of this track. + - representation: lxml.Element - The representation of this track. + - timescale: int - The timescale of the track's segments. + - segment_durations: list[int] - A list of each segment's duration. + + You should not add, change, or remove any data within reserved keys. + You may use their data but do note that the values of them may change + or be removed at any point. + """ + return self._data + + @data.setter + def data(self, value: Union[dict, defaultdict]) -> None: + if not isinstance(value, (dict, defaultdict)): + raise TypeError(f"Expected data to be a {dict} or {defaultdict}, not {type(value)}") + if isinstance(value, dict): + value = defaultdict(dict, **value) + self._data = value + + def download( + self, + session: Session, + prepare_drm: partial, + max_workers: Optional[int] = None, + progress: Optional[partial] = None, + *, + cdm: Optional[object] = None, + ): + """Download and optionally Decrypt this Track.""" + from envied.core.manifests import DASH, HLS, ISM + + if DOWNLOAD_LICENCE_ONLY.is_set(): + progress(downloaded="[yellow]SKIPPING") + + if DOWNLOAD_CANCELLED.is_set(): + progress(downloaded="[yellow]SKIPPED") + return + + log = logging.getLogger("track") + + proxy = next(iter(session.proxies.values()), None) + + track_type = self.__class__.__name__ + save_path = config.directories.temp / f"{track_type}_{self.id}.mp4" + if track_type == "Subtitle": + save_path = save_path.with_suffix(f".{self.codec.extension}") + if self.downloader.__name__ == "n_m3u8dl_re": + self.downloader = requests + + if self.descriptor != self.Descriptor.URL: + save_dir = save_path.with_name(save_path.name + "_segments") + else: + save_dir = save_path.parent + + def cleanup(): + # track file (e.g., "foo.mp4") + save_path.unlink(missing_ok=True) + # aria2c control file (e.g., "foo.mp4.aria2" or "foo.mp4.aria2__temp") + save_path.with_suffix(f"{save_path.suffix}.aria2").unlink(missing_ok=True) + save_path.with_suffix(f"{save_path.suffix}.aria2__temp").unlink(missing_ok=True) + if save_dir.exists() and save_dir.name.endswith("_segments"): + shutil.rmtree(save_dir) + + if not DOWNLOAD_LICENCE_ONLY.is_set(): + if config.directories.temp.is_file(): + raise ValueError(f"Temp Directory '{config.directories.temp}' must be a Directory, not a file") + + config.directories.temp.mkdir(parents=True, exist_ok=True) + + # Delete any pre-existing temp files matching this track. + # We can't re-use or continue downloading these tracks as they do not use a + # lock file. Or at least the majority don't. Even if they did I've encountered + # corruptions caused by sudden interruptions to the lock file. + cleanup() + + try: + if self.descriptor == self.Descriptor.HLS: + HLS.download_track( + track=self, + save_path=save_path, + save_dir=save_dir, + progress=progress, + session=session, + proxy=proxy, + max_workers=max_workers, + license_widevine=prepare_drm, + cdm=cdm, + ) + elif self.descriptor == self.Descriptor.DASH: + DASH.download_track( + track=self, + save_path=save_path, + save_dir=save_dir, + progress=progress, + session=session, + proxy=proxy, + max_workers=max_workers, + license_widevine=prepare_drm, + cdm=cdm, + ) + elif self.descriptor == self.Descriptor.ISM: + ISM.download_track( + track=self, + save_path=save_path, + save_dir=save_dir, + progress=progress, + session=session, + proxy=proxy, + max_workers=max_workers, + license_widevine=prepare_drm, + cdm=cdm, + ) + elif self.descriptor == self.Descriptor.URL: + try: + if not self.drm and track_type in ("Video", "Audio"): + # the service might not have explicitly defined the `drm` property + # try find widevine DRM information from the init data of URL + try: + self.drm = [Widevine.from_track(self, session)] + except Widevine.Exceptions.PSSHNotFound: + # it might not have Widevine DRM, or might not have found the PSSH + log.warning("No Widevine PSSH was found for this track, is it DRM free?") + + if self.drm: + track_kid = self.get_key_id(session=session) + drm = self.get_drm_for_cdm(cdm) + if isinstance(drm, Widevine): + # license and grab content keys + if not prepare_drm: + raise ValueError("prepare_drm func must be supplied to use Widevine DRM") + progress(downloaded="LICENSING") + prepare_drm(drm, track_kid=track_kid) + progress(downloaded="[yellow]LICENSED") + elif isinstance(drm, PlayReady): + # license and grab content keys + if not prepare_drm: + raise ValueError("prepare_drm func must be supplied to use PlayReady DRM") + progress(downloaded="LICENSING") + prepare_drm(drm, track_kid=track_kid) + progress(downloaded="[yellow]LICENSED") + else: + drm = None + + if DOWNLOAD_LICENCE_ONLY.is_set(): + progress(downloaded="[yellow]SKIPPED") + elif track_type != "Subtitle" and self.downloader.__name__ == "n_m3u8dl_re": + progress(downloaded="[red]FAILED") + error = f"[N_m3u8DL-RE]: {self.descriptor} is currently not supported" + raise ValueError(error) + else: + for status_update in self.downloader( + urls=self.url, + output_dir=save_path.parent, + filename=save_path.name, + headers=session.headers, + cookies=session.cookies, + proxy=proxy, + max_workers=max_workers, + ): + file_downloaded = status_update.get("file_downloaded") + if not file_downloaded: + progress(**status_update) + + # see https://github.com/devine-dl/devine/issues/71 + save_path.with_suffix(f"{save_path.suffix}.aria2__temp").unlink(missing_ok=True) + + self.path = save_path + events.emit(events.Types.TRACK_DOWNLOADED, track=self) + + if drm: + progress(downloaded="Decrypting", completed=0, total=100) + drm.decrypt(save_path) + self.drm = None + events.emit(events.Types.TRACK_DECRYPTED, track=self, drm=drm, segment=None) + progress(downloaded="Decrypted", completed=100) + + if track_type == "Subtitle" and self.codec.name not in ("fVTT", "fTTML"): + track_data = self.path.read_bytes() + track_data = try_ensure_utf8(track_data) + track_data = ( + track_data.decode("utf8") + .replace("‎", html.unescape("‎")) + .replace("‏", html.unescape("‏")) + .encode("utf8") + ) + self.path.write_bytes(track_data) + + progress(downloaded="Downloaded") + except KeyboardInterrupt: + DOWNLOAD_CANCELLED.set() + progress(downloaded="[yellow]CANCELLED") + raise + except Exception: + DOWNLOAD_CANCELLED.set() + progress(downloaded="[red]FAILED") + raise + except (Exception, KeyboardInterrupt): + if not DOWNLOAD_LICENCE_ONLY.is_set(): + cleanup() + raise + + if DOWNLOAD_CANCELLED.is_set(): + # we stopped during the download, let's exit + return + + if not DOWNLOAD_LICENCE_ONLY.is_set(): + if self.path.stat().st_size <= 3: # Empty UTF-8 BOM == 3 bytes + raise IOError("Download failed, the downloaded file is empty.") + + events.emit(events.Types.TRACK_DOWNLOADED, track=self) + + def delete(self) -> None: + if self.path: + self.path.unlink() + self.path = None + + def move(self, target: Union[Path, str]) -> Path: + """ + Move the Track's file from current location, to target location. + This will overwrite anything at the target path. + + Raises: + TypeError: If the target argument is not the expected type. + ValueError: If track has no file to move, or the target does not exist. + OSError: If the file somehow failed to move. + + Returns the new location of the track. + """ + if not isinstance(target, (str, Path)): + raise TypeError(f"Expected {target} to be a {Path} or {str}, not {type(target)}") + + if not self.path: + raise ValueError("Track has no file to move") + + if not isinstance(target, Path): + target = Path(target) + + if not target.exists(): + raise ValueError(f"Target file {repr(target)} does not exist") + + moved_to = Path(shutil.move(self.path, target)) + if moved_to.resolve() != target.resolve(): + raise OSError(f"Failed to move {self.path} to {target}") + + self.path = target + return target + + def get_track_name(self) -> Optional[str]: + """Get the Track Name.""" + return self.name + + def get_drm_for_cdm(self, cdm: Optional[object]) -> Optional[DRM_T]: + """Return the DRM matching the provided CDM, if available.""" + if not self.drm: + return None + + if isinstance(cdm, WidevineCdm): + for drm in self.drm: + if isinstance(drm, Widevine): + return drm + elif isinstance(cdm, PlayReadyCdm): + for drm in self.drm: + if isinstance(drm, PlayReady): + return drm + + return self.drm[0] + + def get_key_id(self, init_data: Optional[bytes] = None, *args, **kwargs) -> Optional[UUID]: + """ + Probe the DRM encryption Key ID (KID) for this specific track. + + It currently supports finding the Key ID by probing the track's stream + with ffprobe for `enc_key_id` data, as well as for mp4 `tenc` (Track + Encryption) boxes. + + It explicitly ignores PSSH information like the `PSSH` box, as the box + is likely to contain multiple Key IDs that may or may not be for this + specific track. + + To retrieve the initialization segment, this method calls :meth:`get_init_segment` + with the positional and keyword arguments. The return value of `get_init_segment` + is then used to determine the Key ID. + + Returns: + The Key ID as a UUID object, or None if the Key ID could not be determined. + """ + if not init_data: + init_data = self.get_init_segment(*args, **kwargs) + if not isinstance(init_data, bytes): + raise TypeError(f"Expected init_data to be bytes, not {init_data!r}") + + probe = ffprobe(init_data) + if probe: + for stream in probe.get("streams") or []: + enc_key_id = stream.get("tags", {}).get("enc_key_id") + if enc_key_id: + return UUID(bytes=base64.b64decode(enc_key_id)) + + for tenc in get_boxes(init_data, b"tenc"): + if tenc.key_ID.int != 0: + return tenc.key_ID + + for uuid_box in get_boxes(init_data, b"uuid"): + if uuid_box.extended_type == UUID("8974dbce-7be7-4c51-84f9-7148f9882554"): # tenc + tenc = uuid_box.data + if tenc.key_ID.int != 0: + return tenc.key_ID + + def get_init_segment( + self, + maximum_size: int = 20000, + url: Optional[str] = None, + byte_range: Optional[str] = None, + session: Optional[Session] = None, + ) -> bytes: + """ + Get the Track's Initial Segment Data Stream. + + HLS and DASH tracks must explicitly provide a URL to the init segment or file. + Providing the byte-range for the init segment is recommended where possible. + + If `byte_range` is not set, it will make a HEAD request and check the size of + the file. If the size could not be determined, it will download up to the first + 20KB only, which should contain the entirety of the init segment. You may + override this by changing the `maximum_size`. + + The default maximum_size of 20000 (20KB) is a tried-and-tested value that + seems to work well across the board. + + Parameters: + maximum_size: Size to assume as the content length if byte-range is not + used, the content size could not be determined, or the content size + is larger than it. A value of 20000 (20KB) or higher is recommended. + url: Explicit init map or file URL to probe from. + byte_range: Range of bytes to download from the explicit or implicit URL. + session: Session context, e.g., authorization and headers. + """ + if not isinstance(maximum_size, int): + raise TypeError(f"Expected maximum_size to be an {int}, not {type(maximum_size)}") + if not isinstance(url, (str, type(None))): + raise TypeError(f"Expected url to be a {str}, not {type(url)}") + if not isinstance(byte_range, (str, type(None))): + raise TypeError(f"Expected byte_range to be a {str}, not {type(byte_range)}") + if not isinstance(session, (Session, type(None))): + raise TypeError(f"Expected session to be a {Session}, not {type(session)}") + + if not url: + if self.descriptor != self.Descriptor.URL: + raise ValueError(f"An explicit URL must be provided for {self.descriptor.name} tracks") + if not self.url: + raise ValueError("An explicit URL must be provided as the track has no URL") + url = self.url + + if not session: + session = Session() + + content_length = maximum_size + + if byte_range: + if not isinstance(byte_range, str): + raise TypeError(f"Expected byte_range to be a str, not {byte_range!r}") + if not re.match(r"^\d+-\d+$", byte_range): + raise ValueError(f"The value of byte_range is unrecognized: '{byte_range}'") + start, end = byte_range.split("-") + if start > end: + raise ValueError(f"The start range cannot be greater than the end range: {start}>{end}") + else: + size_test = session.head(url) + if "Content-Length" in size_test.headers: + content_length_header = int(size_test.headers["Content-Length"]) + if content_length_header > 0: + content_length = min(content_length_header, maximum_size) + range_test = session.head(url, headers={"Range": "bytes=0-1"}) + if range_test.status_code == 206: + byte_range = f"0-{content_length - 1}" + + if byte_range: + res = session.get(url=url, headers={"Range": f"bytes={byte_range}"}) + res.raise_for_status() + init_data = res.content + else: + init_data = None + with session.get(url, stream=True) as s: + for chunk in s.iter_content(content_length): + init_data = chunk + break + if not init_data: + raise ValueError(f"Failed to read {content_length} bytes from the track URI.") + + return init_data + + def repackage(self) -> None: + if not self.path or not self.path.exists(): + raise ValueError("Cannot repackage a Track that has not been downloaded.") + + if not binaries.FFMPEG: + raise EnvironmentError('FFmpeg executable "ffmpeg" was not found but is required for this call.') + + original_path = self.path + output_path = original_path.with_stem(f"{original_path.stem}_repack") + + def _ffmpeg(extra_args: list[str] = None): + subprocess.run( + [ + binaries.FFMPEG, + "-hide_banner", + "-loglevel", + "error", + "-i", + original_path, + *(extra_args or []), + # Following are very important! + "-map_metadata", + "-1", # don't transfer metadata to output file + "-fflags", + "bitexact", # only have minimal tag data, reproducible mux + "-codec", + "copy", + str(output_path), + ], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + try: + _ffmpeg() + except subprocess.CalledProcessError as e: + if b"Malformed AAC bitstream detected" in e.stderr: + # e.g., TruTV's dodgy encodes + _ffmpeg(["-y", "-bsf:a", "aac_adtstoasc"]) + else: + raise + + original_path.unlink() + self.path = output_path + + +__all__ = ("Track",) diff --git a/packages/envied/src/envied/core/tracks/tracks.py b/packages/envied/src/envied/core/tracks/tracks.py new file mode 100644 index 0000000..5f7e211 --- /dev/null +++ b/packages/envied/src/envied/core/tracks/tracks.py @@ -0,0 +1,481 @@ +from __future__ import annotations + +import logging +import subprocess +from functools import partial +from pathlib import Path +from typing import Callable, Iterator, Optional, Sequence, Union + +from langcodes import Language, closest_supported_match +from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn, TimeRemainingColumn +from rich.table import Table +from rich.tree import Tree + +from envied.core import binaries +from envied.core.config import config +from envied.core.console import console +from envied.core.constants import LANGUAGE_MAX_DISTANCE, AnyTrack, TrackT +from envied.core.events import events +from envied.core.tracks.attachment import Attachment +from envied.core.tracks.audio import Audio +from envied.core.tracks.chapters import Chapter, Chapters +from envied.core.tracks.subtitle import Subtitle +from envied.core.tracks.track import Track +from envied.core.tracks.video import Video +from envied.core.utilities import is_close_match, sanitize_filename +from envied.core.utils.collections import as_list, flatten + + +class Tracks: + """ + Video, Audio, Subtitle, Chapter, and Attachment Track Store. + It provides convenience functions for listing, sorting, and selecting tracks. + """ + + TRACK_ORDER_MAP = {Video: 0, Audio: 1, Subtitle: 2, Chapter: 3, Attachment: 4} + + def __init__( + self, + *args: Union[ + Tracks, Sequence[Union[AnyTrack, Chapter, Chapters, Attachment]], Track, Chapter, Chapters, Attachment + ], + ): + self.videos: list[Video] = [] + self.audio: list[Audio] = [] + self.subtitles: list[Subtitle] = [] + self.chapters = Chapters() + self.attachments: list[Attachment] = [] + + if args: + self.add(args) + + def __iter__(self) -> Iterator[AnyTrack]: + return iter(as_list(self.videos, self.audio, self.subtitles)) + + def __len__(self) -> int: + return len(self.videos) + len(self.audio) + len(self.subtitles) + + def __add__( + self, + other: Union[ + Tracks, Sequence[Union[AnyTrack, Chapter, Chapters, Attachment]], Track, Chapter, Chapters, Attachment + ], + ) -> Tracks: + self.add(other) + return self + + def __repr__(self) -> str: + return "{name}({items})".format( + name=self.__class__.__name__, items=", ".join([f"{k}={repr(v)}" for k, v in self.__dict__.items()]) + ) + + def __str__(self) -> str: + rep = {Video: [], Audio: [], Subtitle: [], Chapter: [], Attachment: []} + tracks = [*list(self), *self.chapters] + + for track in sorted(tracks, key=lambda t: self.TRACK_ORDER_MAP[type(t)]): + if not rep[type(track)]: + count = sum(type(x) is type(track) for x in tracks) + rep[type(track)].append( + "{count} {type} Track{plural}{colon}".format( + count=count, + type=track.__class__.__name__, + plural="s" if count != 1 else "", + colon=":" if count > 0 else "", + ) + ) + rep[type(track)].append(str(track)) + + for type_ in list(rep): + if not rep[type_]: + del rep[type_] + continue + rep[type_] = "\n".join([rep[type_][0]] + [f"├─ {x}" for x in rep[type_][1:-1]] + [f"└─ {rep[type_][-1]}"]) + rep = "\n".join(list(rep.values())) + + return rep + + def tree(self, add_progress: bool = False) -> tuple[Tree, list[partial]]: + all_tracks = [*list(self), *self.chapters, *self.attachments] + + progress_callables = [] + + tree = Tree("", hide_root=True) + for track_type in self.TRACK_ORDER_MAP: + tracks = list(x for x in all_tracks if isinstance(x, track_type)) + if not tracks: + continue + num_tracks = len(tracks) + track_type_plural = track_type.__name__ + ("s" if track_type != Audio and num_tracks != 1 else "") + tracks_tree = tree.add(f"[repr.number]{num_tracks}[/] {track_type_plural}") + for track in tracks: + if add_progress and track_type not in (Chapter, Attachment): + progress = Progress( + SpinnerColumn(finished_text=""), + BarColumn(), + "•", + TimeRemainingColumn(compact=True, elapsed_when_finished=True), + "•", + TextColumn("[progress.data.speed]{task.fields[downloaded]}"), + console=console, + speed_estimate_period=10, + ) + task = progress.add_task("", downloaded="-") + progress_callables.append(partial(progress.update, task_id=task)) + track_table = Table.grid() + track_table.add_row(str(track)[6:], style="text2") + track_table.add_row(progress) + tracks_tree.add(track_table) + else: + tracks_tree.add(str(track)[6:], style="text2") + + return tree, progress_callables + + def exists(self, by_id: Optional[str] = None, by_url: Optional[Union[str, list[str]]] = None) -> bool: + """Check if a track already exists by various methods.""" + if by_id: # recommended + return any(x.id == by_id for x in self) + if by_url: + return any(x.url == by_url for x in self) + return False + + def add( + self, + tracks: Union[ + Tracks, Sequence[Union[AnyTrack, Chapter, Chapters, Attachment]], Track, Chapter, Chapters, Attachment + ], + warn_only: bool = False, + ) -> None: + """Add a provided track to its appropriate array and ensuring it's not a duplicate.""" + if isinstance(tracks, Tracks): + tracks = [*list(tracks), *tracks.chapters, *tracks.attachments] + + duplicates = 0 + for track in flatten(tracks): + if self.exists(by_id=track.id): + if not warn_only: + raise ValueError( + "One or more of the provided Tracks is a duplicate. " + "Track IDs must be unique but accurate using static values. The " + "value should stay the same no matter when you request the same " + "content. Use a value that has relation to the track content " + "itself and is static or permanent and not random/RNG data that " + "wont change each refresh or conflict in edge cases." + ) + duplicates += 1 + continue + + if isinstance(track, Video): + self.videos.append(track) + elif isinstance(track, Audio): + self.audio.append(track) + elif isinstance(track, Subtitle): + self.subtitles.append(track) + elif isinstance(track, Chapter): + self.chapters.add(track) + elif isinstance(track, Attachment): + self.attachments.append(track) + else: + raise ValueError("Track type was not set or is invalid.") + + log = logging.getLogger("Tracks") + + if duplicates: + log.warning(f" - Found and skipped {duplicates} duplicate tracks...") + + def sort_videos(self, by_language: Optional[Sequence[Union[str, Language]]] = None) -> None: + """Sort video tracks by bitrate, and optionally language.""" + if not self.videos: + return + # bitrate + self.videos.sort(key=lambda x: float(x.bitrate or 0.0), reverse=True) + # language + for language in reversed(by_language or []): + if str(language) in ("all", "best"): + language = next((x.language for x in self.videos if x.is_original_lang), "") + if not language: + continue + self.videos.sort(key=lambda x: str(x.language)) + self.videos.sort(key=lambda x: not is_close_match(language, [x.language])) + + def sort_audio(self, by_language: Optional[Sequence[Union[str, Language]]] = None) -> None: + """Sort audio tracks by bitrate, descriptive, and optionally language.""" + if not self.audio: + return + # bitrate + self.audio.sort(key=lambda x: float(x.bitrate or 0.0), reverse=True) + # descriptive + self.audio.sort(key=lambda x: str(x.language) if x.descriptive else "") + # language + for language in reversed(by_language or []): + if str(language) in ("all", "best"): + language = next((x.language for x in self.audio if x.is_original_lang), "") + if not language: + continue + self.audio.sort(key=lambda x: str(x.language)) + self.audio.sort(key=lambda x: not is_close_match(language, [x.language])) + + def sort_subtitles(self, by_language: Optional[Sequence[Union[str, Language]]] = None) -> None: + """ + Sort subtitle tracks by various track attributes to a common P2P standard. + You may optionally provide a sequence of languages to prioritize to the top. + + Section Order: + - by_language groups prioritized to top, and ascending alphabetically + - then rest ascending alphabetically after the prioritized groups + (Each section ascending alphabetically, but separated) + + Language Group Order: + - Forced + - Normal + - Hard of Hearing (SDH/CC) + (Least to most captions expected in the subtitle) + """ + if not self.subtitles: + return + # language groups + self.subtitles.sort(key=lambda x: str(x.language)) + self.subtitles.sort(key=lambda x: x.sdh or x.cc) + self.subtitles.sort(key=lambda x: x.forced, reverse=True) + # sections + for language in reversed(by_language or []): + if str(language) == "all": + language = next((x.language for x in self.subtitles if x.is_original_lang), "") + if not language: + continue + self.subtitles.sort(key=lambda x: is_close_match(language, [x.language]), reverse=True) + + def select_video(self, x: Callable[[Video], bool]) -> None: + self.videos = list(filter(x, self.videos)) + + def select_audio(self, x: Callable[[Audio], bool]) -> None: + self.audio = list(filter(x, self.audio)) + + def select_subtitles(self, x: Callable[[Subtitle], bool]) -> None: + self.subtitles = list(filter(x, self.subtitles)) + + def select_hybrid(self, tracks, quality): + hdr10_tracks = [ + v + for v in tracks + if v.range == Video.Range.HDR10 and (v.height in quality or int(v.width * 9 / 16) in quality) + ] + hdr10 = [] + for res in quality: + candidates = [v for v in hdr10_tracks if v.height == res or int(v.width * 9 / 16) == res] + if candidates: + best = max(candidates, key=lambda v: v.bitrate) # assumes .bitrate exists + hdr10.append(best) + + dv_tracks = [v for v in tracks if v.range == Video.Range.DV] + lowest_dv = min(dv_tracks, key=lambda v: v.height) if dv_tracks else None + + def select(x): + if x in hdr10: + return True + if lowest_dv and x is lowest_dv: + return True + return False + + return select + + def by_resolutions(self, resolutions: list[int], per_resolution: int = 0) -> None: + # Note: Do not merge these list comprehensions. They must be done separately so the results + # from the 16:9 canvas check is only used if there's no exact height resolution match. + selected = [] + for resolution in resolutions: + matches = [ # exact matches + x for x in self.videos if x.height == resolution + ] + if not matches: + matches = [ # 16:9 canvas matches + x for x in self.videos if int(x.width * (9 / 16)) == resolution + ] + selected.extend(matches[: per_resolution or None]) + self.videos = selected + + @staticmethod + def by_language(tracks: list[TrackT], languages: list[str], per_language: int = 0) -> list[TrackT]: + selected = [] + for language in languages: + selected.extend( + [x for x in tracks if closest_supported_match(x.language, [language], LANGUAGE_MAX_DISTANCE)][ + : per_language or None + ] + ) + return selected + + def mux(self, title: str, delete: bool = True, progress: Optional[partial] = None) -> tuple[Path, int, list[str]]: + """ + Multiplex all the Tracks into a Matroska Container file. + + Parameters: + title: Set the Matroska Container file title. Usually displayed in players + instead of the filename if set. + delete: Delete all track files after multiplexing. + progress: Update a rich progress bar via `completed=...`. This must be the + progress object's update() func, pre-set with task id via functools.partial. + """ + if not binaries.MKVToolNix: + raise RuntimeError("MKVToolNix (mkvmerge) is required for muxing but was not found") + + cl = [ + str(binaries.MKVToolNix), + "--no-date", # remove dates from the output for security + ] + + if config.muxing.get("set_title", True): + cl.extend(["--title", title]) + + for i, vt in enumerate(self.videos): + if not vt.path or not vt.path.exists(): + raise ValueError("Video Track must be downloaded before muxing...") + events.emit(events.Types.TRACK_MULTIPLEX, track=vt) + + # Prepare base arguments + video_args = [ + "--language", + f"0:{vt.language}", + "--default-track", + f"0:{i == 0}", + "--original-flag", + f"0:{vt.is_original_lang}", + "--compression", + "0:none", # disable extra compression + ] + + # Add FPS fix if needed (typically for hybrid mode to prevent sync issues) + if hasattr(vt, "needs_duration_fix") and vt.needs_duration_fix and vt.fps: + video_args.extend( + [ + "--default-duration", + f"0:{vt.fps}fps" if isinstance(vt.fps, str) else f"0:{vt.fps:.3f}fps", + "--fix-bitstream-timing-information", + "0:1", + ] + ) + + if hasattr(vt, "range") and vt.range == Video.Range.HLG: + video_args.extend( + [ + "--color-transfer-characteristics", + "0:18", # ARIB STD-B67 (HLG) + ] + ) + + cl.extend(video_args + ["(", str(vt.path), ")"]) + + for i, at in enumerate(self.audio): + if not at.path or not at.path.exists(): + raise ValueError("Audio Track must be downloaded before muxing...") + events.emit(events.Types.TRACK_MULTIPLEX, track=at) + cl.extend( + [ + "--track-name", + f"0:{at.get_track_name() or ''}", + "--language", + f"0:{at.language}", + "--default-track", + f"0:{at.is_original_lang}", + "--visual-impaired-flag", + f"0:{at.descriptive}", + "--original-flag", + f"0:{at.is_original_lang}", + "--compression", + "0:none", # disable extra compression + "(", + str(at.path), + ")", + ] + ) + + for st in self.subtitles: + if not st.path or not st.path.exists(): + raise ValueError("Text Track must be downloaded before muxing...") + events.emit(events.Types.TRACK_MULTIPLEX, track=st) + default = bool(self.audio and is_close_match(st.language, [self.audio[0].language]) and st.forced) + cl.extend( + [ + "--track-name", + f"0:{st.get_track_name() or ''}", + "--language", + f"0:{st.language}", + "--sub-charset", + "0:UTF-8", + "--forced-track", + f"0:{st.forced}", + "--default-track", + f"0:{default}", + "--hearing-impaired-flag", + f"0:{st.sdh}", + "--original-flag", + f"0:{st.is_original_lang}", + "--compression", + "0:none", # disable extra compression (probably zlib) + "(", + str(st.path), + ")", + ] + ) + + if self.chapters: + chapters_path = config.directories.temp / config.filenames.chapters.format( + title=sanitize_filename(title), random=self.chapters.id + ) + self.chapters.dump(chapters_path, fallback_name=config.chapter_fallback_name) + cl.extend(["--chapter-charset", "UTF-8", "--chapters", str(chapters_path)]) + else: + chapters_path = None + + for attachment in self.attachments: + if not attachment.path or not attachment.path.exists(): + raise ValueError("Attachment File was not found...") + cl.extend( + [ + "--attachment-description", + attachment.description or "", + "--attachment-mime-type", + attachment.mime_type, + "--attachment-name", + attachment.name, + "--attach-file", + str(attachment.path.resolve()), + ] + ) + + output_path = ( + self.videos[0].path.with_suffix(".muxed.mkv") + if self.videos + else self.audio[0].path.with_suffix(".muxed.mka") + if self.audio + else self.subtitles[0].path.with_suffix(".muxed.mks") + if self.subtitles + else chapters_path.with_suffix(".muxed.mkv") + if self.chapters + else None + ) + if not output_path: + raise ValueError("No tracks provided, at least one track must be provided.") + + # let potential failures go to caller, caller should handle + try: + errors = [] + p = subprocess.Popen([*cl, "--output", str(output_path), "--gui-mode"], text=True, stdout=subprocess.PIPE) + for line in iter(p.stdout.readline, ""): + if line.startswith("#GUI#error") or line.startswith("#GUI#warning"): + errors.append(line) + if "progress" in line: + progress(total=100, completed=int(line.strip()[14:-1])) + return output_path, p.wait(), errors + finally: + if chapters_path: + chapters_path.unlink() + if delete: + for track in self: + track.delete() + for attachment in self.attachments: + if attachment.path and attachment.path.exists(): + attachment.path.unlink() + + +__all__ = ("Tracks",) diff --git a/packages/envied/src/envied/core/tracks/video.py b/packages/envied/src/envied/core/tracks/video.py new file mode 100644 index 0000000..00981f9 --- /dev/null +++ b/packages/envied/src/envied/core/tracks/video.py @@ -0,0 +1,455 @@ +from __future__ import annotations + +import logging +import math +import re +import subprocess +from enum import Enum +from pathlib import Path +from typing import Any, Optional, Union + +from langcodes import Language + +from envied.core import binaries +from envied.core.config import config +from envied.core.tracks.subtitle import Subtitle +from envied.core.tracks.track import Track +from envied.core.utilities import FPS, get_boxes + + +class Video(Track): + class Codec(str, Enum): + AVC = "H.264" + HEVC = "H.265" + VC1 = "VC-1" + VP8 = "VP8" + VP9 = "VP9" + AV1 = "AV1" + + @property + def extension(self) -> str: + return self.value.lower().replace(".", "").replace("-", "") + + @staticmethod + def from_mime(mime: str) -> Video.Codec: + mime = mime.lower().strip().split(".")[0] + if mime in ( + "avc1", + "avc2", + "avc3", + "dva1", + "dvav", # Dolby Vision + ): + return Video.Codec.AVC + if mime in ( + "hev1", + "hev2", + "hev3", + "hvc1", + "hvc2", + "hvc3", + "dvh1", + "dvhe", # Dolby Vision + "lhv1", + "lhe1", # Layered + ): + return Video.Codec.HEVC + if mime == "vc-1": + return Video.Codec.VC1 + if mime in ("vp08", "vp8"): + return Video.Codec.VP8 + if mime in ("vp09", "vp9"): + return Video.Codec.VP9 + if mime == "av01": + return Video.Codec.AV1 + raise ValueError(f"The MIME '{mime}' is not a supported Video Codec") + + @staticmethod + def from_codecs(codecs: str) -> Video.Codec: + for codec in codecs.lower().split(","): + codec = codec.strip() + mime = codec.split(".")[0] + try: + return Video.Codec.from_mime(mime) + except ValueError: + pass + raise ValueError(f"No MIME types matched any supported Video Codecs in '{codecs}'") + + @staticmethod + def from_netflix_profile(profile: str) -> Video.Codec: + profile = profile.lower().strip() + if profile.startswith(("h264", "playready-h264")): + return Video.Codec.AVC + if profile.startswith("hevc"): + return Video.Codec.HEVC + if profile.startswith("vp9"): + return Video.Codec.VP9 + if profile.startswith("av1"): + return Video.Codec.AV1 + raise ValueError(f"The Content Profile '{profile}' is not a supported Video Codec") + + class Range(str, Enum): + SDR = "SDR" # No Dynamic Range + HLG = "HLG" # https://en.wikipedia.org/wiki/Hybrid_log%E2%80%93gamma + HDR10 = "HDR10" # https://en.wikipedia.org/wiki/HDR10 + HDR10P = "HDR10+" # https://en.wikipedia.org/wiki/HDR10%2B + DV = "DV" # https://en.wikipedia.org/wiki/Dolby_Vision + HYBRID = "HYBRID" # Selects both HDR10 and DV tracks for hybrid processing with DoviTool + + @staticmethod + def from_cicp(primaries: int, transfer: int, matrix: int) -> Video.Range: + """ + ISO/IEC 23001-8 Coding-independent code points to Video Range. + + Sources: + https://www.itu.int/rec/T-REC-H.Sup19-202104-I + """ + + class Primaries(Enum): + Unspecified = 0 + BT_709 = 1 + BT_601_625 = 5 + BT_601_525 = 6 + BT_2020_and_2100 = 9 + SMPTE_ST_2113_and_EG_4321 = 12 # P3D65 + + class Transfer(Enum): + Unspecified = 0 + BT_709 = 1 + Unspecified_Image = 2 + BT_601 = 6 + BT_2020 = 14 + BT_2100 = 15 + BT_2100_PQ = 16 + BT_2100_HLG = 18 + + class Matrix(Enum): + RGB = 0 + YCbCr_BT_709 = 1 + YCbCr_BT_601_625 = 5 + YCbCr_BT_601_525 = 6 + YCbCr_BT_2020_and_2100 = 9 # YCbCr BT.2100 shares the same CP + ICtCp_BT_2100 = 14 + + if transfer == 5: + # While not part of any standard, it is typically used as a PAL variant of Transfer.BT_601=6. + # i.e. where Transfer 6 would be for BT.601-NTSC and Transfer 5 would be for BT.601-PAL. + # The codebase is currently agnostic to either, so a manual conversion to 6 is done. + transfer = 6 + + primaries = Primaries(primaries) + transfer = Transfer(transfer) + matrix = Matrix(matrix) + + # primaries and matrix does not strictly correlate to a range + + if (primaries, transfer, matrix) == (0, 0, 0): + return Video.Range.SDR + elif primaries in (Primaries.BT_601_625, Primaries.BT_601_525): + return Video.Range.SDR + elif transfer == Transfer.BT_2100_PQ: + return Video.Range.HDR10 + elif transfer == Transfer.BT_2100_HLG: + return Video.Range.HLG + else: + return Video.Range.SDR + + @staticmethod + def from_m3u_range_tag(tag: str) -> Optional[Video.Range]: + tag = (tag or "").upper().replace('"', "").strip() + if not tag: + return None + if tag == "SDR": + return Video.Range.SDR + elif tag == "PQ": + return Video.Range.HDR10 # technically could be any PQ-transfer range + elif tag == "HLG": + return Video.Range.HLG + # for some reason there's no Dolby Vision info tag + raise ValueError(f"The M3U Range Tag '{tag}' is not a supported Video Range") + + def __init__( + self, + *args: Any, + codec: Optional[Video.Codec] = None, + range_: Optional[Video.Range] = None, + bitrate: Optional[Union[str, int, float]] = None, + width: Optional[int] = None, + height: Optional[int] = None, + fps: Optional[Union[str, int, float]] = None, + **kwargs: Any, + ) -> None: + """ + Create a new Video track object. + + Parameters: + codec: A Video.Codec enum representing the video codec. + If not specified, MediaInfo will be used to retrieve the codec + once the track has been downloaded. + range_: A Video.Range enum representing the video color range. + Defaults to SDR if not specified. + bitrate: A number or float representing the average bandwidth in bytes/s. + Float values are rounded up to the nearest integer. + width: The horizontal resolution of the video. + height: The vertical resolution of the video. + fps: A number, float, or string representing the frames/s of the video. + Strings may represent numbers, floats, or a fraction (num/den). + All strings will be cast to either a number or float. + + Note: If codec, bitrate, width, height, or fps is not specified some checks + may be skipped or assume a value. Specifying as much information as possible + is highly recommended. + """ + super().__init__(*args, **kwargs) + + if not isinstance(codec, (Video.Codec, type(None))): + raise TypeError(f"Expected codec to be a {Video.Codec}, not {codec!r}") + if not isinstance(range_, (Video.Range, type(None))): + raise TypeError(f"Expected range_ to be a {Video.Range}, not {range_!r}") + if not isinstance(bitrate, (str, int, float, type(None))): + raise TypeError(f"Expected bitrate to be a {str}, {int}, or {float}, not {bitrate!r}") + if not isinstance(width, (int, str, type(None))): + raise TypeError(f"Expected width to be a {int}, not {width!r}") + if not isinstance(height, (int, str, type(None))): + raise TypeError(f"Expected height to be a {int}, not {height!r}") + if not isinstance(fps, (str, int, float, type(None))): + raise TypeError(f"Expected fps to be a {str}, {int}, or {float}, not {fps!r}") + + self.codec = codec + self.range = range_ or Video.Range.SDR + + try: + self.bitrate = int(math.ceil(float(bitrate))) if bitrate else None + except (ValueError, TypeError) as e: + raise ValueError(f"Expected bitrate to be a number or float, {e}") + + try: + self.width = int(width or 0) or None + except ValueError as e: + raise ValueError(f"Expected width to be a number, not {width!r}, {e}") + + try: + self.height = int(height or 0) or None + except ValueError as e: + raise ValueError(f"Expected height to be a number, not {height!r}, {e}") + + try: + self.fps = (FPS.parse(str(fps)) or None) if fps else None + except Exception as e: + raise ValueError("Expected fps to be a number, float, or a string as numerator/denominator form, " + str(e)) + + self.needs_duration_fix = False + + def __str__(self) -> str: + return " | ".join( + filter( + bool, + [ + "VID", + "[" + (", ".join(filter(bool, [self.codec.value if self.codec else None, self.range.name]))) + "]", + str(self.language), + ", ".join( + filter( + bool, + [ + " @ ".join( + filter( + bool, + [ + f"{self.width}x{self.height}" if self.width and self.height else None, + f"{self.bitrate // 1000} kb/s" if self.bitrate else None, + ], + ) + ), + f"{self.fps:.3f} FPS" if self.fps else None, + ], + ) + ), + self.edition, + ], + ) + ) + + def change_color_range(self, range_: int) -> None: + """Change the Video's Color Range to Limited (0) or Full (1).""" + if not self.path or not self.path.exists(): + raise ValueError("Cannot change the color range flag on a Video that has not been downloaded.") + if not self.codec: + raise ValueError("Cannot change the color range flag on a Video that has no codec specified.") + if self.codec not in (Video.Codec.AVC, Video.Codec.HEVC): + raise NotImplementedError( + "Cannot change the color range flag on this Video as " + f"it's codec, {self.codec.value}, is not yet supported." + ) + + if not binaries.FFMPEG: + raise EnvironmentError('FFmpeg executable "ffmpeg" was not found but is required for this call.') + + filter_key = {Video.Codec.AVC: "h264_metadata", Video.Codec.HEVC: "hevc_metadata"}[self.codec] + + original_path = self.path + output_path = original_path.with_stem(f"{original_path.stem}_{['limited', 'full'][range_]}_range") + + subprocess.run( + [ + binaries.FFMPEG, + "-hide_banner", + "-loglevel", + "panic", + "-i", + original_path, + "-codec", + "copy", + "-bsf:v", + f"{filter_key}=video_full_range_flag={range_}", + str(output_path), + ], + check=True, + ) + + self.path = output_path + original_path.unlink() + + def ccextractor( + self, track_id: Any, out_path: Union[Path, str], language: Language, original: bool = False + ) -> Optional[Subtitle]: + """Return a TextTrack object representing CC track extracted by CCExtractor.""" + if not self.path: + raise ValueError("You must download the track first.") + + if not binaries.CCExtractor: + raise EnvironmentError("ccextractor executable was not found.") + + # ccextractor often fails in weird ways unless we repack + self.repackage() + + out_path = Path(out_path) + + try: + subprocess.run( + [binaries.CCExtractor, "-trim", "-nobom", "-noru", "-ru1", "-o", out_path, self.path], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + except subprocess.CalledProcessError as e: + out_path.unlink(missing_ok=True) + if not e.returncode == 10: # No captions found + raise + + if out_path.exists(): + cc_track = Subtitle( + id_=track_id, + url="", # doesn't need to be downloaded + codec=Subtitle.Codec.SubRip, + language=language, + is_original_lang=original, + cc=True, + ) + cc_track.path = out_path + return cc_track + + return None + + def extract_c608(self) -> list[Subtitle]: + """ + Extract Apple-Style c608 box (CEA-608) subtitle using ccextractor. + + This isn't much more than a wrapper to the track.ccextractor function. + All this does, is actually check if a c608 box exists and only if so + does it actually call ccextractor. + + Even though there is a possibility of more than one c608 box, only one + can actually be extracted. Not only that but it's very possible this + needs to be done before any decryption as the decryption may destroy + some of the metadata. + + TODO: Need a test file with more than one c608 box to add support for + more than one CEA-608 extraction. + """ + if not self.path: + raise ValueError("You must download the track first.") + with self.path.open("rb") as f: + # assuming 20KB is enough to contain the c608 box. + # ffprobe will fail, so a c608 box check must be done. + c608_count = len(list(get_boxes(f.read(20000), b"c608"))) + if c608_count > 0: + # TODO: Figure out the real language, it might be different + # CEA-608 boxes doesnt seem to carry language information :( + # TODO: Figure out if the CC language is original lang or not. + # Will need to figure out above first to do so. + track_id = f"ccextractor-{self.id}" + cc_lang = self.language + cc_track = self.ccextractor( + track_id=track_id, + out_path=config.directories.temp / config.filenames.subtitle.format(id=track_id, language=cc_lang), + language=cc_lang, + original=False, + ) + if not cc_track: + return [] + return [cc_track] + return [] + + def remove_eia_cc(self) -> bool: + """ + Remove EIA-CC data from Bitstream while keeping SEI data. + + This works by removing all NAL Unit's with the Type of 6 from the bistream + and then re-adding SEI data (effectively a new NAL Unit with just the SEI data). + Only bitstreams with x264 encoding information is currently supported due to the + obscurity on the MDAT mp4 box structure. Therefore, we need to use hacky regex. + """ + if not self.path or not self.path.exists(): + raise ValueError("Cannot clean a Track that has not been downloaded.") + + if not binaries.FFMPEG: + raise EnvironmentError('FFmpeg executable "ffmpeg" was not found but is required for this call.') + + log = logging.getLogger("x264-clean") + log.info("Removing EIA-CC from Video Track with FFMPEG") + + with open(self.path, "rb") as f: + file = f.read(60000) + + x264 = re.search(rb"(.{16})(x264)", file) + if not x264: + log.info(" - No x264 encode settings were found, unsupported...") + return False + + uuid = x264.group(1).hex() + i = file.index(b"x264") + encoding_settings = file[i : i + file[i:].index(b"\x00")].replace(b":", rb"\\:").replace(b",", rb"\,").decode() + + original_path = self.path + cleaned_path = original_path.with_suffix(f".cleaned{original_path.suffix}") + subprocess.run( + [ + binaries.FFMPEG, + "-hide_banner", + "-loglevel", + "panic", + "-i", + original_path, + "-map_metadata", + "-1", + "-fflags", + "bitexact", + "-bsf:v", + f"filter_units=remove_types=6,h264_metadata=sei_user_data={uuid}+{encoding_settings}", + "-codec", + "copy", + str(cleaned_path), + ], + check=True, + ) + + log.info(" + Removed") + + self.path = cleaned_path + original_path.unlink() + + return True + + +__all__ = ("Video",) diff --git a/packages/envied/src/envied/core/update_checker.py b/packages/envied/src/envied/core/update_checker.py new file mode 100644 index 0000000..8fb1370 --- /dev/null +++ b/packages/envied/src/envied/core/update_checker.py @@ -0,0 +1,276 @@ +from __future__ import annotations + +import asyncio +import json +import time +from pathlib import Path +from typing import Optional + +import requests + + +class UpdateChecker: + """ + Check for available updates from the GitHub repository. + + This class provides functionality to check for newer versions of the application + by querying the GitHub releases API. It includes rate limiting, caching, and + both synchronous and asynchronous interfaces. + + Attributes: + REPO_URL: GitHub API URL for latest release + TIMEOUT: Request timeout in seconds + DEFAULT_CHECK_INTERVAL: Default time between checks in seconds (24 hours) + """ + + REPO_URL = "https://api.github.com/repos/envied-dl/envied/releases/latest" + TIMEOUT = 5 + DEFAULT_CHECK_INTERVAL = 24 * 60 * 60 + + @classmethod + def _get_cache_file(cls) -> Path: + """Get the path to the update check cache file.""" + from envied.core.config import config + + return config.directories.cache / "update_check.json" + + @classmethod + def _load_cache_data(cls) -> dict: + """ + Load cache data from file. + + Returns: + Cache data dictionary or empty dict if loading fails + """ + cache_file = cls._get_cache_file() + + if not cache_file.exists(): + return {} + + try: + with open(cache_file, "r") as f: + return json.load(f) + except (json.JSONDecodeError, OSError): + return {} + + @staticmethod + def _parse_version(version_string: str) -> str: + """ + Parse and normalize version string by removing 'v' prefix. + + Args: + version_string: Raw version string from API + + Returns: + Cleaned version string + """ + return version_string.lstrip("v") + + @staticmethod + def _is_valid_version(version: str) -> bool: + """ + Validate version string format. + + Args: + version: Version string to validate + + Returns: + True if version string is valid semantic version, False otherwise + """ + if not version or not isinstance(version, str): + return False + + try: + parts = version.split(".") + if len(parts) < 2: + return False + + for part in parts: + int(part) + + return True + except (ValueError, AttributeError): + return False + + @classmethod + def _fetch_latest_version(cls) -> Optional[str]: + """ + Fetch the latest version from GitHub API. + + Returns: + Latest version string if successful, None otherwise + """ + try: + response = requests.get(cls.REPO_URL, timeout=cls.TIMEOUT) + + if response.status_code != 200: + return None + + data = response.json() + latest_version = cls._parse_version(data.get("tag_name", "")) + + return latest_version if cls._is_valid_version(latest_version) else None + + except Exception: + return None + + @classmethod + def _should_check_for_updates(cls, check_interval: int = DEFAULT_CHECK_INTERVAL) -> bool: + """ + Check if enough time has passed since the last update check. + + Args: + check_interval: Time in seconds between checks (default: 24 hours) + + Returns: + True if we should check for updates, False otherwise + """ + cache_data = cls._load_cache_data() + + if not cache_data: + return True + + last_check = cache_data.get("last_check", 0) + current_time = time.time() + + return (current_time - last_check) >= check_interval + + @classmethod + def _update_cache(cls, latest_version: Optional[str] = None, current_version: Optional[str] = None) -> None: + """ + Update the cache file with the current timestamp and version info. + + Args: + latest_version: The latest version found, if any + current_version: The current version being used + """ + cache_file = cls._get_cache_file() + + try: + cache_file.parent.mkdir(parents=True, exist_ok=True) + + cache_data = { + "last_check": time.time(), + "latest_version": latest_version, + "current_version": current_version, + } + + with open(cache_file, "w") as f: + json.dump(cache_data, f, indent=2) + + except (OSError, json.JSONEncodeError): + pass + + @staticmethod + def _compare_versions(current: str, latest: str) -> bool: + """ + Simple semantic version comparison. + + Args: + current: Current version string (e.g., "1.1.0") + latest: Latest version string (e.g., "1.2.0") + + Returns: + True if latest > current, False otherwise + """ + if not UpdateChecker._is_valid_version(current) or not UpdateChecker._is_valid_version(latest): + return False + + try: + current_parts = [int(x) for x in current.split(".")] + latest_parts = [int(x) for x in latest.split(".")] + + max_length = max(len(current_parts), len(latest_parts)) + current_parts.extend([0] * (max_length - len(current_parts))) + latest_parts.extend([0] * (max_length - len(latest_parts))) + + for current_part, latest_part in zip(current_parts, latest_parts): + if latest_part > current_part: + return True + elif latest_part < current_part: + return False + + return False + except (ValueError, AttributeError): + return False + + @classmethod + async def check_for_updates(cls, current_version: str) -> Optional[str]: + """ + Check if there's a newer version available on GitHub. + + Args: + current_version: The current version string (e.g., "1.1.0") + + Returns: + The latest version string if an update is available, None otherwise + """ + if not cls._is_valid_version(current_version): + return None + + try: + loop = asyncio.get_event_loop() + latest_version = await loop.run_in_executor(None, cls._fetch_latest_version) + + if latest_version and cls._compare_versions(current_version, latest_version): + return latest_version + + except Exception: + pass + + return None + + @classmethod + def _get_cached_update_info(cls, current_version: str) -> Optional[str]: + """ + Check if there's a cached update available for the current version. + + Args: + current_version: The current version string + + Returns: + The latest version string if an update is available from cache, None otherwise + """ + cache_data = cls._load_cache_data() + + if not cache_data: + return None + + cached_current = cache_data.get("current_version") + cached_latest = cache_data.get("latest_version") + + if cached_current == current_version and cached_latest: + if cls._compare_versions(current_version, cached_latest): + return cached_latest + + return None + + @classmethod + def check_for_updates_sync(cls, current_version: str, check_interval: Optional[int] = None) -> Optional[str]: + """ + Synchronous version of update check with rate limiting. + + Args: + current_version: The current version string (e.g., "1.1.0") + check_interval: Time in seconds between checks (default: from config) + + Returns: + The latest version string if an update is available, None otherwise + """ + if not cls._is_valid_version(current_version): + return None + + if check_interval is None: + from envied.core.config import config + + check_interval = config.update_check_interval * 60 * 60 + + if not cls._should_check_for_updates(check_interval): + return cls._get_cached_update_info(current_version) + + latest_version = cls._fetch_latest_version() + cls._update_cache(latest_version, current_version) + if latest_version and cls._compare_versions(current_version, latest_version): + return latest_version + + return None diff --git a/packages/envied/src/envied/core/utilities.py b/packages/envied/src/envied/core/utilities.py new file mode 100644 index 0000000..f0b1cb0 --- /dev/null +++ b/packages/envied/src/envied/core/utilities.py @@ -0,0 +1,451 @@ +import ast +import contextlib +import importlib.util +import logging +import os +import re +import socket +import sys +import time +import unicodedata +from collections import defaultdict +from datetime import datetime +from pathlib import Path +from types import ModuleType +from typing import Optional, Sequence, Union +from urllib.parse import ParseResult, urlparse + +import chardet +import requests +from construct import ValidationError +from langcodes import Language, closest_match +from pymp4.parser import Box +from unidecode import unidecode + +from .cacher import Cacher +from .config import config +from .constants import LANGUAGE_MAX_DISTANCE + + +def rotate_log_file(log_path: Path, keep: int = 20) -> Path: + """ + Update Log Filename and delete old log files. + It keeps only the 20 newest logs by default. + """ + if not log_path: + raise ValueError("A log path must be provided") + + try: + log_path.relative_to(Path("")) # file name only + except ValueError: + pass + else: + log_path = config.directories.logs / log_path + + log_path = log_path.parent / log_path.name.format_map( + defaultdict(str, name="root", time=datetime.now().strftime("%Y%m%d-%H%M%S")) + ) + + if log_path.parent.exists(): + log_files = [x for x in log_path.parent.iterdir() if x.suffix == log_path.suffix] + for log_file in log_files[::-1][keep - 1 :]: + # keep n newest files and delete the rest + log_file.unlink() + + log_path.parent.mkdir(parents=True, exist_ok=True) + return log_path + + +def import_module_by_path(path: Path) -> ModuleType: + """Import a Python file by Path as a Module.""" + if not path: + raise ValueError("Path must be provided") + if not isinstance(path, Path): + raise TypeError(f"Expected path to be a {Path}, not {path!r}") + if not path.exists(): + raise ValueError("Path does not exist") + + # compute package hierarchy for relative import support + if path.is_relative_to(config.directories.core_dir): + name = [] + _path = path.parent + while _path.stem != config.directories.core_dir.stem: + name.append(_path.stem) + _path = _path.parent + name = ".".join([config.directories.core_dir.stem] + name[::-1]) + else: + # is outside the src package + if str(path.parent.parent) not in sys.path: + sys.path.insert(1, str(path.parent.parent)) + name = path.parent.stem + + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + return module + + +def sanitize_filename(filename: str, spacer: str = ".") -> str: + """ + Sanitize a string to be filename safe. + + The spacer is safer to be a '.' for older DDL and p2p sharing spaces. + This includes web-served content via direct links and such. + """ + # replace all non-ASCII characters with ASCII equivalents + filename = unidecode(filename) + + # remove or replace further characters as needed + filename = "".join(c for c in filename if unicodedata.category(c) != "Mn") # hidden characters + filename = filename.replace("/", " & ").replace(";", " & ") # e.g. multi-episode filenames + filename = re.sub(r"[:; ]", spacer, filename) # structural chars to (spacer) + filename = re.sub(r"[\\*!?¿,'\"" "()<>|$#~]", "", filename) # not filename safe chars + filename = re.sub(rf"[{spacer}]{{2,}}", spacer, filename) # remove extra neighbouring (spacer)s + + return filename + + +def is_close_match(language: Union[str, Language], languages: Sequence[Union[str, Language, None]]) -> bool: + """Check if a language is a close match to any of the provided languages.""" + languages = [x for x in languages if x] + if not languages: + return False + return closest_match(language, list(map(str, languages)))[1] <= LANGUAGE_MAX_DISTANCE + + +def get_boxes(data: bytes, box_type: bytes, as_bytes: bool = False) -> Box: + """ + Scan a byte array for a wanted MP4/ISOBMFF box, then parse and yield each find. + + This function searches through binary MP4 data to find and parse specific box types. + The MP4/ISOBMFF box format consists of: + - 4 bytes: size of the box (including size and type fields) + - 4 bytes: box type identifier (e.g., 'moov', 'trak', 'pssh') + - Remaining bytes: box data + + The function uses slicing to directly locate the requested box type in the data + rather than recursively traversing the box hierarchy. This is efficient when + looking for specific box types regardless of their position in the hierarchy. + + Parameters: + data: Binary data containing MP4/ISOBMFF boxes + box_type: 4-byte identifier of the box type to find (e.g., b'pssh') + as_bytes: If True, returns the box as bytes, otherwise returns parsed box object + + Yields: + Box objects of the requested type found in the data + + Notes: + - For each box found, the function updates the search offset to skip past + the current box to avoid finding the same box multiple times + - The function handles validation errors for certain box types (e.g., tenc) + - The size field is located 4 bytes before the box type identifier + """ + # using slicing to get to the wanted box is done because parsing the entire box and recursively + # scanning through each box and its children often wouldn't scan far enough to reach the wanted box. + # since it doesn't care what child box the wanted box is from, this works fine. + if not isinstance(data, (bytes, bytearray)): + raise ValueError("data must be bytes") + + offset = 0 + while offset < len(data): + try: + index = data[offset:].index(box_type) + except ValueError: + break + + pos = offset + index + + if pos < 4: + offset = pos + len(box_type) + continue + + box_start = pos - 4 + + try: + box = Box.parse(data[box_start:]) + if as_bytes: + box = Box.build(box) + + yield box + + box_size = len(Box.build(box)) + offset = box_start + box_size + + except IOError: + break + except ValidationError as e: + if box_type == b"tenc": + offset = pos + len(box_type) + continue + raise e + + +def ap_case(text: str, keep_spaces: bool = False, stop_words: tuple[str] = None) -> str: + """ + Convert a string to title case using AP/APA style. + Based on https://github.com/words/ap-style-title-case + + Parameters: + text: The text string to title case with AP/APA style. + keep_spaces: To keep the original whitespace, or to just use a normal space. + This would only be needed if you have special whitespace between words. + stop_words: Override the default stop words with your own ones. + """ + if not text: + return "" + + if not stop_words: + stop_words = ( + "a", + "an", + "and", + "at", + "but", + "by", + "for", + "in", + "nor", + "of", + "on", + "or", + "so", + "the", + "to", + "up", + "yet", + ) + + splitter = re.compile(r"(\s+|[-‑–—])") + words = splitter.split(text) + + return "".join( + [ + [" ", word][keep_spaces] + if re.match(r"\s+", word) + else word + if splitter.match(word) + else word.lower() + if i != 0 and i != len(words) - 1 and word.lower() in stop_words + else word.capitalize() + for i, word in enumerate(words) + ] + ) + + +def get_ip_info(session: Optional[requests.Session] = None) -> dict: + """ + Use ipinfo.io to get IP location information. + + If you provide a Requests Session with a Proxy, that proxies IP information + is what will be returned. + """ + return (session or requests.Session()).get("https://ipinfo.io/json").json() + + +def get_cached_ip_info(session: Optional[requests.Session] = None) -> Optional[dict]: + """ + Get IP location information with 24-hour caching and fallback providers. + + This function uses a global cache to avoid repeated API calls when the IP + hasn't changed. Should only be used for local IP checks, not for proxy verification. + Implements smart provider rotation to handle rate limiting (429 errors). + + Args: + session: Optional requests session (usually without proxy for local IP) + + Returns: + Dict with IP info including 'country' key, or None if all providers fail + """ + + log = logging.getLogger("get_cached_ip_info") + cache = Cacher("global").get("ip_info") + + if cache and not cache.expired: + return cache.data + + provider_state_cache = Cacher("global").get("ip_provider_state") + provider_state = provider_state_cache.data if provider_state_cache and not provider_state_cache.expired else {} + + providers = { + "ipinfo": "https://ipinfo.io/json", + "ipapi": "https://ipapi.co/json", + } + + session = session or requests.Session() + provider_order = ["ipinfo", "ipapi"] + + current_time = time.time() + for provider_name in list(provider_order): + if provider_name in provider_state: + rate_limit_info = provider_state[provider_name] + if (current_time - rate_limit_info.get("rate_limited_at", 0)) < 300: + log.debug(f"Provider {provider_name} was rate limited recently, trying other provider first") + provider_order.remove(provider_name) + provider_order.append(provider_name) + break + + for provider_name in provider_order: + provider_url = providers[provider_name] + try: + log.debug(f"Trying IP provider: {provider_name}") + response = session.get(provider_url, timeout=10) + + if response.status_code == 429: + log.warning(f"Provider {provider_name} returned 429 (rate limited), trying next provider") + if provider_name not in provider_state: + provider_state[provider_name] = {} + provider_state[provider_name]["rate_limited_at"] = current_time + provider_state[provider_name]["rate_limit_count"] = ( + provider_state[provider_name].get("rate_limit_count", 0) + 1 + ) + + provider_state_cache.set(provider_state, expiration=300) + continue + + elif response.status_code == 200: + data = response.json() + normalized_data = {} + + if "country" in data: + normalized_data = data + elif "country_code" in data: + normalized_data = { + "country": data.get("country_code", "").lower(), + "region": data.get("region", ""), + "city": data.get("city", ""), + "ip": data.get("ip", ""), + } + + if normalized_data and "country" in normalized_data: + log.debug(f"Successfully got IP info from provider: {provider_name}") + + if provider_name in provider_state: + provider_state[provider_name].pop("rate_limited_at", None) + provider_state_cache.set(provider_state, expiration=300) + + normalized_data["_provider"] = provider_name + cache.set(normalized_data, expiration=86400) + return normalized_data + else: + log.debug(f"Provider {provider_name} returned status {response.status_code}") + + except Exception as e: + log.debug(f"Provider {provider_name} failed with exception: {e}") + continue + + log.warning("All IP geolocation providers failed") + return None + + +def time_elapsed_since(start: float) -> str: + """ + Get time elapsed since a timestamp as a string. + E.g., `1h56m2s`, `15m12s`, `0m55s`, e.t.c. + """ + elapsed = int(time.time() - start) + + minutes, seconds = divmod(elapsed, 60) + hours, minutes = divmod(minutes, 60) + + time_string = f"{minutes:d}m{seconds:d}s" + if hours: + time_string = f"{hours:d}h{time_string}" + + return time_string + + +def try_ensure_utf8(data: bytes) -> bytes: + """ + Try to ensure that the given data is encoded in UTF-8. + + Parameters: + data: Input data that may or may not yet be UTF-8 or another encoding. + + Returns the input data encoded in UTF-8 if successful. If unable to detect the + encoding of the input data, then the original data is returned as-received. + """ + try: + data.decode("utf8") + return data + except UnicodeDecodeError: + try: + # CP-1252 is a superset of latin1 but has gaps. Replace unknown + # characters instead of failing on them. + return data.decode("cp1252", errors="replace").encode("utf8") + except UnicodeDecodeError: + try: + # last ditch effort to detect encoding + detection_result = chardet.detect(data) + if not detection_result["encoding"]: + return data + return data.decode(detection_result["encoding"]).encode("utf8") + except UnicodeDecodeError: + return data + + +def get_free_port() -> int: + """ + Get an available port to use between a-b (inclusive). + + The port is freed as soon as this has returned, therefore, it + is possible for the port to be taken before you try to use it. + """ + with contextlib.closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: + s.bind(("", 0)) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + return s.getsockname()[1] + + +def get_extension(value: Union[str, Path, ParseResult]) -> Optional[str]: + """ + Get a URL or Path file extension/suffix. + + Note: The returned value will begin with `.`. + """ + if isinstance(value, ParseResult): + value_parsed = value + elif isinstance(value, (str, Path)): + value_parsed = urlparse(str(value)) + else: + raise TypeError(f"Expected {str}, {Path}, or {ParseResult}, got {type(value)}") + + if value_parsed.path: + ext = os.path.splitext(value_parsed.path)[1] + if ext and ext != ".": + return ext + + +def get_system_fonts() -> dict[str, Path]: + if sys.platform == "win32": + import winreg + + with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as reg: + key = winreg.OpenKey(reg, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", 0, winreg.KEY_READ) + total_fonts = winreg.QueryInfoKey(key)[1] + return { + name.replace(" (TrueType)", ""): Path(r"C:\Windows\Fonts", filename) + for n in range(0, total_fonts) + for name, filename, _ in [winreg.EnumValue(key, n)] + } + else: + # TODO: Get System Fonts for Linux and mac OS + return {} + + +class FPS(ast.NodeVisitor): + def visit_BinOp(self, node: ast.BinOp) -> float: + if isinstance(node.op, ast.Div): + return self.visit(node.left) / self.visit(node.right) + raise ValueError(f"Invalid operation: {node.op}") + + def visit_Num(self, node: ast.Num) -> complex: + return node.n + + def visit_Expr(self, node: ast.Expr) -> float: + return self.visit(node.value) + + @classmethod + def parse(cls, expr: str) -> float: + return cls().visit(ast.parse(expr).body[0]) diff --git a/packages/envied/src/envied/core/utils/__init__.py b/packages/envied/src/envied/core/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/packages/envied/src/envied/core/utils/click_types.py b/packages/envied/src/envied/core/utils/click_types.py new file mode 100644 index 0000000..8707732 --- /dev/null +++ b/packages/envied/src/envied/core/utils/click_types.py @@ -0,0 +1,292 @@ +import re +from typing import Any, Optional, Union + +import click +from click.shell_completion import CompletionItem +from pywidevine.cdm import Cdm as WidevineCdm + + +class VideoCodecChoice(click.Choice): + """ + A custom Choice type for video codecs that accepts both enum names and values. + + Accepts both: + - Enum names: avc, hevc, vc1, vp8, vp9, av1 + - Enum values: H.264, H.265, VC-1, VP8, VP9, AV1 + """ + + def __init__(self, codec_enum): + self.codec_enum = codec_enum + # Build choices from both enum names and values + choices = [] + for codec in codec_enum: + choices.append(codec.name.lower()) # e.g., "avc", "hevc" + choices.append(codec.value) # e.g., "H.264", "H.265" + super().__init__(choices, case_sensitive=False) + + def convert(self, value: Any, param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None): + if not value: + return None + + # First try to convert using the parent class + converted_value = super().convert(value, param, ctx) + + # Now map the converted value back to the enum + for codec in self.codec_enum: + if converted_value.lower() == codec.name.lower(): + return codec + if converted_value == codec.value: + return codec + + # This shouldn't happen if the parent conversion worked + self.fail(f"'{value}' is not a valid video codec", param, ctx) + + +class SubtitleCodecChoice(click.Choice): + """ + A custom Choice type for subtitle codecs that accepts both enum names, values, and common aliases. + + Accepts: + - Enum names: subrip, substationalpha, substationalphav4, timedtextmarkuplang, webvtt, ftml, fvtt + - Enum values: SRT, SSA, ASS, TTML, VTT, STPP, WVTT + - Common aliases: srt (for SubRip) + """ + + def __init__(self, codec_enum): + self.codec_enum = codec_enum + # Build choices from enum names, values, and common aliases + choices = [] + aliases = {} + + for codec in codec_enum: + choices.append(codec.name.lower()) # e.g., "subrip", "webvtt" + + # Only add the value if it's different from common aliases + value_lower = codec.value.lower() + + # Add common aliases and track them + if codec.name == "SubRip": + if "srt" not in choices: + choices.append("srt") + aliases["srt"] = codec + elif codec.name == "WebVTT": + if "vtt" not in choices: + choices.append("vtt") + aliases["vtt"] = codec + # Also add the enum value if different + if value_lower != "vtt" and value_lower not in choices: + choices.append(value_lower) + elif codec.name == "SubStationAlpha": + if "ssa" not in choices: + choices.append("ssa") + aliases["ssa"] = codec + # Also add the enum value if different + if value_lower != "ssa" and value_lower not in choices: + choices.append(value_lower) + elif codec.name == "SubStationAlphav4": + if "ass" not in choices: + choices.append("ass") + aliases["ass"] = codec + # Also add the enum value if different + if value_lower != "ass" and value_lower not in choices: + choices.append(value_lower) + elif codec.name == "TimedTextMarkupLang": + if "ttml" not in choices: + choices.append("ttml") + aliases["ttml"] = codec + # Also add the enum value if different + if value_lower != "ttml" and value_lower not in choices: + choices.append(value_lower) + else: + # For other codecs, just add the enum value + if value_lower not in choices: + choices.append(value_lower) + + self.aliases = aliases + super().__init__(choices, case_sensitive=False) + + def convert(self, value: Any, param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None): + if not value: + return None + + # First try to convert using the parent class + converted_value = super().convert(value, param, ctx) + + # Check aliases first + if converted_value.lower() in self.aliases: + return self.aliases[converted_value.lower()] + + # Now map the converted value back to the enum + for codec in self.codec_enum: + if converted_value.lower() == codec.name.lower(): + return codec + if converted_value.lower() == codec.value.lower(): + return codec + + # This shouldn't happen if the parent conversion worked + self.fail(f"'{value}' is not a valid subtitle codec", param, ctx) + + +class ContextData: + def __init__(self, config: dict, cdm: WidevineCdm, proxy_providers: list, profile: Optional[str] = None): + self.config = config + self.cdm = cdm + self.proxy_providers = proxy_providers + self.profile = profile + + +class SeasonRange(click.ParamType): + name = "ep_range" + + MIN_EPISODE = 0 + MAX_EPISODE = 999 + + def parse_tokens(self, *tokens: str) -> list[str]: + """ + Parse multiple tokens or ranged tokens as '{s}x{e}' strings. + + Supports exclusioning by putting a `-` before the token. + + Example: + >>> sr = SeasonRange() + >>> sr.parse_tokens("S01E01") + ["1x1"] + >>> sr.parse_tokens("S02E01", "S02E03-S02E05") + ["2x1", "2x3", "2x4", "2x5"] + >>> sr.parse_tokens("S01-S05", "-S03", "-S02E01") + ["1x0", "1x1", ..., "2x0", (...), "2x2", (...), "4x0", ..., "5x0", ...] + """ + if len(tokens) == 0: + return [] + computed: list = [] + exclusions: list = [] + for token in tokens: + exclude = token.startswith("-") + if exclude: + token = token[1:] + parsed = [ + re.match(r"^S(?P\d+)(E(?P\d+))?$", x, re.IGNORECASE) for x in re.split(r"[:-]", token) + ] + if len(parsed) > 2: + self.fail(f"Invalid token, only a left and right range is acceptable: {token}") + if len(parsed) == 1: + parsed.append(parsed[0]) + if any(x is None for x in parsed): + self.fail(f"Invalid token, syntax error occurred: {token}") + from_season, from_episode = [ + int(v) if v is not None else self.MIN_EPISODE + for k, v in parsed[0].groupdict().items() + if parsed[0] # type: ignore[union-attr] + ] + to_season, to_episode = [ + int(v) if v is not None else self.MAX_EPISODE + for k, v in parsed[1].groupdict().items() + if parsed[1] # type: ignore[union-attr] + ] + if from_season > to_season: + self.fail(f"Invalid range, left side season cannot be bigger than right side season: {token}") + if from_season == to_season and from_episode > to_episode: + self.fail(f"Invalid range, left side episode cannot be bigger than right side episode: {token}") + for s in range(from_season, to_season + 1): + for e in range( + from_episode if s == from_season else 0, (self.MAX_EPISODE if s < to_season else to_episode) + 1 + ): + (computed if not exclude else exclusions).append(f"{s}x{e}") + for exclusion in exclusions: + if exclusion in computed: + computed.remove(exclusion) + return list(set(computed)) + + def convert( + self, value: str, param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None + ) -> list[str]: + return self.parse_tokens(*re.split(r"\s*[,;]\s*", value)) + + +class LanguageRange(click.ParamType): + name = "lang_range" + + def convert( + self, value: Union[str, list], param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None + ) -> list[str]: + if isinstance(value, list): + return value + if not value: + return [] + return re.split(r"\s*[,;]\s*", value) + + +class QualityList(click.ParamType): + name = "quality_list" + + def convert( + self, value: Union[str, list[str]], param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None + ) -> list[int]: + if not value: + return [] + if not isinstance(value, list): + value = value.split(",") + resolutions = [] + for resolution in value: + try: + resolutions.append(int(resolution.lower().rstrip("p"))) + except TypeError: + self.fail( + f"Expected string for int() conversion, got {resolution!r} of type {type(resolution).__name__}", + param, + ctx, + ) + except ValueError: + self.fail(f"{resolution!r} is not a valid integer", param, ctx) + return sorted(resolutions, reverse=True) + + +class MultipleChoice(click.Choice): + """ + The multiple choice type allows multiple values to be checked against + a fixed set of supported values. + + It internally uses and is based off of click.Choice. + """ + + name = "multiple_choice" + + def __repr__(self) -> str: + return f"MultipleChoice({list(self.choices)})" + + def convert( + self, value: Any, param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None + ) -> list[Any]: + if not value: + return [] + if isinstance(value, str): + values = value.split(",") + elif isinstance(value, list): + values = value + else: + self.fail(f"{value!r} is not a supported value.", param, ctx) + + chosen_values: list[Any] = [] + for value in values: + chosen_values.append(super().convert(value, param, ctx)) + + return chosen_values + + def shell_complete(self, ctx: click.Context, param: click.Parameter, incomplete: str) -> list[CompletionItem]: + """ + Complete choices that start with the incomplete value. + + Parameters: + ctx: Invocation context for this command. + param: The parameter that is requesting completion. + incomplete: Value being completed. May be empty. + """ + incomplete = incomplete.rsplit(",")[-1] + return super(self).shell_complete(ctx, param, incomplete) + + +SEASON_RANGE = SeasonRange() +LANGUAGE_RANGE = LanguageRange() +QUALITY_LIST = QualityList() + +# VIDEO_CODEC_CHOICE will be created dynamically when imported diff --git a/packages/envied/src/envied/core/utils/collections.py b/packages/envied/src/envied/core/utils/collections.py new file mode 100644 index 0000000..ae01bb2 --- /dev/null +++ b/packages/envied/src/envied/core/utils/collections.py @@ -0,0 +1,51 @@ +import itertools +from typing import Any, Iterable, Iterator, Sequence, Tuple, Type, Union + + +def as_lists(*args: Any) -> Iterator[Any]: + """Converts any input objects to list objects.""" + for item in args: + yield item if isinstance(item, list) else [item] + + +def as_list(*args: Any) -> list: + """ + Convert any input objects to a single merged list object. + + Example: + >>> as_list('foo', ['buzz', 'bizz'], 'bazz', 'bozz', ['bar'], ['bur']) + ['foo', 'buzz', 'bizz', 'bazz', 'bozz', 'bar', 'bur'] + """ + return list(itertools.chain.from_iterable(as_lists(*args))) + + +def flatten(items: Any, ignore_types: Union[Type, Tuple[Type, ...]] = str) -> Iterator: + """ + Flattens items recursively. + + Example: + >>> list(flatten(["foo", [["bar", ["buzz", [""]], "bee"]]])) + ['foo', 'bar', 'buzz', '', 'bee'] + >>> list(flatten("foo")) + ['foo'] + >>> list(flatten({1}, set)) + [{1}] + """ + if isinstance(items, (Iterable, Sequence)) and not isinstance(items, ignore_types): + for i in items: + yield from flatten(i, ignore_types) + else: + yield items + + +def merge_dict(source: dict, destination: dict) -> None: + """Recursively merge Source into Destination in-place.""" + if not source: + return + for key, value in source.items(): + if isinstance(value, dict): + # get node or create one + node = destination.setdefault(key, {}) + merge_dict(value, node) + else: + destination[key] = value diff --git a/packages/envied/src/envied/core/utils/gen_esn.py b/packages/envied/src/envied/core/utils/gen_esn.py new file mode 100644 index 0000000..e58c4a3 --- /dev/null +++ b/packages/envied/src/envied/core/utils/gen_esn.py @@ -0,0 +1,30 @@ +import logging +import os +import random +from datetime import datetime, timedelta + +log = logging.getLogger("NF-ESN") + + +def chrome_esn_generator(): + ESN_GEN = "".join(random.choice("0123456789ABCDEF") for _ in range(30)) + esn_file = ".esn" + + def gen_file(): + with open(esn_file, "w") as file: + file.write(f"NFCDIE-03-{ESN_GEN}") + + if not os.path.isfile(esn_file): + log.warning("Generating a new Chrome ESN") + gen_file() + + file_datetime = datetime.fromtimestamp(os.path.getmtime(esn_file)) + time_diff = datetime.now() - file_datetime + if time_diff > timedelta(hours=6): + log.warning("Old ESN detected, Generating a new Chrome ESN") + gen_file() + + with open(esn_file, "r") as f: + esn = f.read() + + return esn diff --git a/packages/envied/src/envied/core/utils/osenvironment.py b/packages/envied/src/envied/core/utils/osenvironment.py new file mode 100644 index 0000000..40b3ecc --- /dev/null +++ b/packages/envied/src/envied/core/utils/osenvironment.py @@ -0,0 +1,24 @@ +import platform + + +def get_os_arch(name: str) -> str: + """Builds a name-os-arch based on the input name, system, architecture.""" + os_name = platform.system().lower() + os_arch = platform.machine().lower() + + # Map platform.system() output to desired OS name + if os_name == "windows": + os_name = "win" + elif os_name == "darwin": + os_name = "osx" + else: + os_name = "linux" + + # Map platform.machine() output to desired architecture + if os_arch in ["x86_64", "amd64"]: + os_arch = "x64" + elif os_arch == "arm64": + os_arch = "arm64" + + # Construct the dependency name in the desired format using the input name + return f"{name}-{os_name}-{os_arch}" diff --git a/packages/envied/src/envied/core/utils/sslciphers.py b/packages/envied/src/envied/core/utils/sslciphers.py new file mode 100644 index 0000000..e3eb210 --- /dev/null +++ b/packages/envied/src/envied/core/utils/sslciphers.py @@ -0,0 +1,77 @@ +import ssl +from typing import Optional + +from requests.adapters import HTTPAdapter + + +class SSLCiphers(HTTPAdapter): + """ + Custom HTTP Adapter to change the TLS Cipher set and security requirements. + + Security Level may optionally be provided. A level above 0 must be used at all times. + A list of Security Levels and their security is listed below. Usually 2 is used by default. + Do not set the Security level via @SECLEVEL in the cipher list. + + Level 0: + Everything is permitted. This retains compatibility with previous versions of OpenSSL. + + Level 1: + The security level corresponds to a minimum of 80 bits of security. Any parameters + offering below 80 bits of security are excluded. As a result RSA, DSA and DH keys + shorter than 1024 bits and ECC keys shorter than 160 bits are prohibited. All export + cipher suites are prohibited since they all offer less than 80 bits of security. SSL + version 2 is prohibited. Any cipher suite using MD5 for the MAC is also prohibited. + + Level 2: + Security level set to 112 bits of security. As a result RSA, DSA and DH keys shorter + than 2048 bits and ECC keys shorter than 224 bits are prohibited. In addition to the + level 1 exclusions any cipher suite using RC4 is also prohibited. SSL version 3 is + also not allowed. Compression is disabled. + + Level 3: + Security level set to 128 bits of security. As a result RSA, DSA and DH keys shorter + than 3072 bits and ECC keys shorter than 256 bits are prohibited. In addition to the + level 2 exclusions cipher suites not offering forward secrecy are prohibited. TLS + versions below 1.1 are not permitted. Session tickets are disabled. + + Level 4: + Security level set to 192 bits of security. As a result RSA, DSA and DH keys shorter + than 7680 bits and ECC keys shorter than 384 bits are prohibited. Cipher suites using + SHA1 for the MAC are prohibited. TLS versions below 1.2 are not permitted. + + Level 5: + Security level set to 256 bits of security. As a result RSA, DSA and DH keys shorter + than 15360 bits and ECC keys shorter than 512 bits are prohibited. + """ + + def __init__(self, cipher_list: Optional[str] = None, security_level: int = 0, *args, **kwargs): + if cipher_list: + if not isinstance(cipher_list, str): + raise TypeError(f"Expected cipher_list to be a str, not {cipher_list!r}") + if "@SECLEVEL" in cipher_list: + raise ValueError("You must not specify the Security Level manually in the cipher list.") + if not isinstance(security_level, int): + raise TypeError(f"Expected security_level to be an int, not {security_level!r}") + if security_level not in range(6): + raise ValueError(f"The security_level must be a value between 0 and 5, not {security_level}") + + if not cipher_list: + # cpython's default cipher list differs to Python-requests cipher list + cipher_list = "DEFAULT" + + cipher_list += f":@SECLEVEL={security_level}" + + ctx = ssl.create_default_context() + ctx.check_hostname = False # For some reason this is needed to avoid a verification error + ctx.set_ciphers(cipher_list) + + self._ssl_context = ctx + super().__init__(*args, **kwargs) + + def init_poolmanager(self, *args, **kwargs): + kwargs["ssl_context"] = self._ssl_context + return super().init_poolmanager(*args, **kwargs) + + def proxy_manager_for(self, *args, **kwargs): + kwargs["ssl_context"] = self._ssl_context + return super().proxy_manager_for(*args, **kwargs) diff --git a/packages/envied/src/envied/core/utils/subprocess.py b/packages/envied/src/envied/core/utils/subprocess.py new file mode 100644 index 0000000..68e4354 --- /dev/null +++ b/packages/envied/src/envied/core/utils/subprocess.py @@ -0,0 +1,25 @@ +import json +import subprocess +from pathlib import Path +from typing import Union + +from envied.core import binaries + + +def ffprobe(uri: Union[bytes, Path]) -> dict: + """Use ffprobe on the provided data to get stream information.""" + if not binaries.FFProbe: + raise EnvironmentError('FFProbe executable "ffprobe" not found but is required.') + + args = [binaries.FFProbe, "-v", "quiet", "-of", "json", "-show_streams"] + if isinstance(uri, Path): + args.extend( + ["-f", "lavfi", "-i", "movie={}[out+subcc]".format(str(uri).replace("\\", "/").replace(":", "\\\\:"))] + ) + elif isinstance(uri, bytes): + args.append("pipe:") + try: + ff = subprocess.run(args, input=uri if isinstance(uri, bytes) else None, check=True, capture_output=True) + except subprocess.CalledProcessError: + return {} + return json.loads(ff.stdout.decode("utf8")) diff --git a/packages/envied/src/envied/core/utils/tags.py b/packages/envied/src/envied/core/utils/tags.py new file mode 100644 index 0000000..2ba2705 --- /dev/null +++ b/packages/envied/src/envied/core/utils/tags.py @@ -0,0 +1,410 @@ +from __future__ import annotations + +import logging +import os +import re +import subprocess +import tempfile +from difflib import SequenceMatcher +from pathlib import Path +from typing import Optional, Tuple + +import requests +from requests.adapters import HTTPAdapter, Retry + +from envied.core import binaries +from envied.core.config import config +from envied.core.titles.episode import Episode +from envied.core.titles.movie import Movie +from envied.core.titles.title import Title + +STRIP_RE = re.compile(r"[^a-z0-9]+", re.I) +YEAR_RE = re.compile(r"\s*\(?[12][0-9]{3}\)?$") +HEADERS = {"User-Agent": "envied-tags/1.0"} + + +log = logging.getLogger("TAGS") + + +def _get_session() -> requests.Session: + """Create a requests session with retry logic for network failures.""" + session = requests.Session() + session.headers.update(HEADERS) + + retry = Retry( + total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET", "POST"] + ) + + adapter = HTTPAdapter(max_retries=retry) + session.mount("https://", adapter) + session.mount("http://", adapter) + + return session + + +def _api_key() -> Optional[str]: + return config.tmdb_api_key or os.getenv("TMDB_API_KEY") + + +def _clean(s: str) -> str: + return STRIP_RE.sub("", s).lower() + + +def _strip_year(s: str) -> str: + return YEAR_RE.sub("", s).strip() + + +def fuzzy_match(a: str, b: str, threshold: float = 0.8) -> bool: + """Return True if ``a`` and ``b`` are a close match.""" + + ratio = SequenceMatcher(None, _clean(a), _clean(b)).ratio() + return ratio >= threshold + + +def search_simkl(title: str, year: Optional[int], kind: str) -> Tuple[Optional[dict], Optional[str], Optional[int]]: + """Search Simkl API for show information by filename (no auth required).""" + log.debug("Searching Simkl for %r (%s, %s)", title, kind, year) + + # Construct appropriate filename based on type + filename = f"{title}" + if year: + filename = f"{title} {year}" + + if kind == "tv": + filename += " S01E01.mkv" + else: # movie + filename += " 2160p.mkv" + + try: + session = _get_session() + resp = session.post("https://api.simkl.com/search/file", json={"file": filename}, timeout=30) + resp.raise_for_status() + data = resp.json() + log.debug("Simkl API response received") + + # Handle case where SIMKL returns empty list (no results) + if isinstance(data, list): + log.debug("Simkl returned list (no matches) for %r", filename) + return None, None, None + + # Handle TV show responses + if data.get("type") == "episode" and "show" in data: + show_info = data["show"] + show_title = show_info.get("title") + show_year = show_info.get("year") + + # Verify title matches and year if provided + if not fuzzy_match(show_title, title): + log.debug("Simkl title mismatch: searched %r, got %r", title, show_title) + return None, None, None + if year and show_year and abs(year - show_year) > 1: # Allow 1 year difference + log.debug("Simkl year mismatch: searched %d, got %d", year, show_year) + return None, None, None + + tmdb_id = show_info.get("ids", {}).get("tmdbtv") + if tmdb_id: + tmdb_id = int(tmdb_id) + log.debug("Simkl -> %s (TMDB ID %s)", show_title, tmdb_id) + return data, show_title, tmdb_id + + # Handle movie responses + elif data.get("type") == "movie" and "movie" in data: + movie_info = data["movie"] + movie_title = movie_info.get("title") + movie_year = movie_info.get("year") + + # Verify title matches and year if provided + if not fuzzy_match(movie_title, title): + log.debug("Simkl title mismatch: searched %r, got %r", title, movie_title) + return None, None, None + if year and movie_year and abs(year - movie_year) > 1: # Allow 1 year difference + log.debug("Simkl year mismatch: searched %d, got %d", year, movie_year) + return None, None, None + + ids = movie_info.get("ids", {}) + tmdb_id = ids.get("tmdb") or ids.get("moviedb") + if tmdb_id: + tmdb_id = int(tmdb_id) + log.debug("Simkl -> %s (TMDB ID %s)", movie_title, tmdb_id) + return data, movie_title, tmdb_id + + except (requests.RequestException, ValueError, KeyError) as exc: + log.debug("Simkl search failed: %s", exc) + + return None, None, None + + +def search_show_info(title: str, year: Optional[int], kind: str) -> Tuple[Optional[int], Optional[str], Optional[str]]: + """Search for show information, trying Simkl first, then TMDB fallback. Returns (tmdb_id, title, source).""" + simkl_data, simkl_title, simkl_tmdb_id = search_simkl(title, year, kind) + + if simkl_data and simkl_title and fuzzy_match(simkl_title, title): + return simkl_tmdb_id, simkl_title, "simkl" + + tmdb_id, tmdb_title = search_tmdb(title, year, kind) + return tmdb_id, tmdb_title, "tmdb" + + +def search_tmdb(title: str, year: Optional[int], kind: str) -> Tuple[Optional[int], Optional[str]]: + api_key = _api_key() + if not api_key: + return None, None + + search_title = _strip_year(title) + log.debug("Searching TMDB for %r (%s, %s)", search_title, kind, year) + + params = {"api_key": api_key, "query": search_title} + if year is not None: + params["year" if kind == "movie" else "first_air_date_year"] = year + + try: + session = _get_session() + r = session.get( + f"https://api.themoviedb.org/3/search/{kind}", + params=params, + timeout=30, + ) + r.raise_for_status() + js = r.json() + results = js.get("results") or [] + log.debug("TMDB returned %d results", len(results)) + if not results: + return None, None + except requests.RequestException as exc: + log.warning("Failed to search TMDB for %s: %s", title, exc) + return None, None + + best_ratio = 0.0 + best_id: Optional[int] = None + best_title: Optional[str] = None + for result in results: + candidates = [ + result.get("title"), + result.get("name"), + result.get("original_title"), + result.get("original_name"), + ] + candidates = [c for c in candidates if c] # Filter out None/empty values + + if not candidates: + continue + + # Find the best matching candidate from all available titles + for candidate in candidates: + ratio = SequenceMatcher(None, _clean(search_title), _clean(candidate)).ratio() + if ratio > best_ratio: + best_ratio = ratio + best_id = result.get("id") + best_title = candidate + log.debug( + "Best candidate ratio %.2f for %r (ID %s)", + best_ratio, + best_title, + best_id, + ) + + if best_id is not None: + return best_id, best_title + + first = results[0] + return first.get("id"), first.get("title") or first.get("name") + + +def get_title(tmdb_id: int, kind: str) -> Optional[str]: + """Fetch the name/title of a TMDB entry by ID.""" + + api_key = _api_key() + if not api_key: + return None + + try: + session = _get_session() + r = session.get( + f"https://api.themoviedb.org/3/{kind}/{tmdb_id}", + params={"api_key": api_key}, + timeout=30, + ) + r.raise_for_status() + except requests.RequestException as exc: + log.debug("Failed to fetch TMDB title: %s", exc) + return None + + js = r.json() + return js.get("title") or js.get("name") + + +def get_year(tmdb_id: int, kind: str) -> Optional[int]: + """Fetch the release year of a TMDB entry by ID.""" + + api_key = _api_key() + if not api_key: + return None + + try: + session = _get_session() + r = session.get( + f"https://api.themoviedb.org/3/{kind}/{tmdb_id}", + params={"api_key": api_key}, + timeout=30, + ) + r.raise_for_status() + except requests.RequestException as exc: + log.debug("Failed to fetch TMDB year: %s", exc) + return None + + js = r.json() + date = js.get("release_date") or js.get("first_air_date") + if date and len(date) >= 4 and date[:4].isdigit(): + return int(date[:4]) + return None + + +def external_ids(tmdb_id: int, kind: str) -> dict: + api_key = _api_key() + if not api_key: + return {} + url = f"https://api.themoviedb.org/3/{kind}/{tmdb_id}/external_ids" + log.debug("Fetching external IDs for %s %s", kind, tmdb_id) + + try: + session = _get_session() + r = session.get( + url, + params={"api_key": api_key}, + timeout=30, + ) + r.raise_for_status() + js = r.json() + log.debug("External IDs response: %s", js) + return js + except requests.RequestException as exc: + log.warning("Failed to fetch external IDs for %s %s: %s", kind, tmdb_id, exc) + return {} + + +def _apply_tags(path: Path, tags: dict[str, str]) -> None: + if not tags: + return + if not binaries.Mkvpropedit: + log.debug("mkvpropedit not found on PATH; skipping tags") + return + log.debug("Applying tags to %s: %s", path, tags) + xml_lines = ["", "", " ", " "] + for name, value in tags.items(): + xml_lines.append(f" {name}{value}") + xml_lines.extend([" ", ""]) + with tempfile.NamedTemporaryFile("w", suffix=".xml", delete=False) as f: + f.write("\n".join(xml_lines)) + tmp_path = Path(f.name) + try: + subprocess.run( + [str(binaries.Mkvpropedit), str(path), "--tags", f"global:{tmp_path}"], + check=False, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + log.debug("Tags applied via mkvpropedit") + finally: + tmp_path.unlink(missing_ok=True) + + +def tag_file(path: Path, title: Title, tmdb_id: Optional[int] | None = None) -> None: + log.debug("Tagging file %s with title %r", path, title) + standard_tags: dict[str, str] = {} + custom_tags: dict[str, str] = {} + + if config.tag and config.tag_group_name: + custom_tags["Group"] = config.tag + description = getattr(title, "description", None) + if description: + if len(description) > 255: + truncated = description[:255] + if " " in truncated: + truncated = truncated.rsplit(" ", 1)[0] + description = truncated + "..." + custom_tags["Description"] = description + + if isinstance(title, Movie): + kind = "movie" + name = title.name + year = title.year + elif isinstance(title, Episode): + kind = "tv" + name = title.title + year = title.year + else: + _apply_tags(path, custom_tags) + return + + if config.tag_imdb_tmdb: + # If tmdb_id is provided (via --tmdb), skip Simkl and use TMDB directly + if tmdb_id is not None: + log.debug("Using provided TMDB ID %s for tags", tmdb_id) + else: + # Try Simkl first for automatic lookup + simkl_data, simkl_title, simkl_tmdb_id = search_simkl(name, year, kind) + + if simkl_data and simkl_title and fuzzy_match(simkl_title, name): + log.debug("Using Simkl data for tags") + if simkl_tmdb_id: + tmdb_id = simkl_tmdb_id + + show_ids = simkl_data.get("show", {}).get("ids", {}) + if show_ids.get("imdb"): + standard_tags["IMDB"] = f"https://www.imdb.com/title/{show_ids['imdb']}" + if show_ids.get("tvdb"): + standard_tags["TVDB"] = f"https://thetvdb.com/dereferrer/series/{show_ids['tvdb']}" + if show_ids.get("tmdbtv"): + standard_tags["TMDB"] = f"https://www.themoviedb.org/tv/{show_ids['tmdbtv']}" + + # Use TMDB API for additional metadata (either from provided ID or Simkl lookup) + api_key = _api_key() + if not api_key: + log.debug("No TMDB API key set; applying basic tags only") + _apply_tags(path, custom_tags) + return + + tmdb_title: Optional[str] = None + if tmdb_id is None: + tmdb_id, tmdb_title = search_tmdb(name, year, kind) + log.debug("TMDB search result: %r (ID %s)", tmdb_title, tmdb_id) + if not tmdb_id or not tmdb_title or not fuzzy_match(tmdb_title, name): + log.debug("TMDB search did not match; skipping external ID lookup") + _apply_tags(path, custom_tags) + return + + tmdb_url = f"https://www.themoviedb.org/{'movie' if kind == 'movie' else 'tv'}/{tmdb_id}" + standard_tags["TMDB"] = tmdb_url + try: + ids = external_ids(tmdb_id, kind) + except requests.RequestException as exc: + log.debug("Failed to fetch external IDs: %s", exc) + ids = {} + else: + log.debug("External IDs found: %s", ids) + + imdb_id = ids.get("imdb_id") + if imdb_id: + standard_tags["IMDB"] = f"https://www.imdb.com/title/{imdb_id}" + tvdb_id = ids.get("tvdb_id") + if tvdb_id: + tvdb_prefix = "movies" if kind == "movie" else "series" + standard_tags["TVDB"] = f"https://thetvdb.com/dereferrer/{tvdb_prefix}/{tvdb_id}" + + merged_tags = { + **custom_tags, + **standard_tags, + } + _apply_tags(path, merged_tags) + + +__all__ = [ + "search_simkl", + "search_show_info", + "search_tmdb", + "get_title", + "get_year", + "external_ids", + "tag_file", + "fuzzy_match", +] diff --git a/packages/envied/src/envied/core/utils/webvtt.py b/packages/envied/src/envied/core/utils/webvtt.py new file mode 100644 index 0000000..76a8a36 --- /dev/null +++ b/packages/envied/src/envied/core/utils/webvtt.py @@ -0,0 +1,192 @@ +import re +import sys +import typing +from typing import Optional + +from pycaption import Caption, CaptionList, CaptionNode, CaptionReadError, WebVTTReader, WebVTTWriter + + +class CaptionListExt(CaptionList): + @typing.no_type_check + def __init__(self, iterable=None, layout_info=None): + self.first_segment_mpegts = 0 + super().__init__(iterable, layout_info) + + +class CaptionExt(Caption): + @typing.no_type_check + def __init__(self, start, end, nodes, style=None, layout_info=None, segment_index=0, mpegts=0, cue_time=0.0): + style = style or {} + self.segment_index: int = segment_index + self.mpegts: float = mpegts + self.cue_time: float = cue_time + super().__init__(start, end, nodes, style, layout_info) + + +class WebVTTReaderExt(WebVTTReader): + # HLS extension support + RE_TIMESTAMP_MAP = re.compile(r"X-TIMESTAMP-MAP.*") + RE_MPEGTS = re.compile(r"MPEGTS:(\d+)") + RE_LOCAL = re.compile(r"LOCAL:((?:(\d{1,}):)?(\d{2}):(\d{2})\.(\d{3}))") + + def _parse(self, lines: list[str]) -> CaptionList: + captions = CaptionListExt() + start = None + end = None + nodes: list[CaptionNode] = [] + layout_info = None + found_timing = False + segment_index = -1 + mpegts = 0 + cue_time = 0.0 + + # The first segment MPEGTS is needed to calculate the rest. It is possible that + # the first segment contains no cue and is ignored by pycaption, this acts as a fallback. + captions.first_segment_mpegts = 0 + + for i, line in enumerate(lines): + if "-->" in line: + found_timing = True + timing_line = i + last_start_time = captions[-1].start if captions else 0 + try: + start, end, layout_info = self._parse_timing_line(line, last_start_time) + except CaptionReadError as e: + new_msg = f"{e.args[0]} (line {timing_line})" + tb = sys.exc_info()[2] + raise type(e)(new_msg).with_traceback(tb) from None + + elif "" == line: + if found_timing and nodes: + found_timing = False + caption = CaptionExt( + start, + end, + nodes, + layout_info=layout_info, + segment_index=segment_index, + mpegts=mpegts, + cue_time=cue_time, + ) + captions.append(caption) + nodes = [] + + elif "WEBVTT" in line: + # Merged segmented VTT doesn't have index information, track manually. + segment_index += 1 + mpegts = 0 + cue_time = 0.0 + elif m := self.RE_TIMESTAMP_MAP.match(line): + if r := self.RE_MPEGTS.search(m.group()): + mpegts = int(r.group(1)) + + cue_time = self._parse_local(m.group()) + + # Early assignment in case the first segment contains no cue. + if segment_index == 0: + captions.first_segment_mpegts = mpegts + + else: + if found_timing: + if nodes: + nodes.append(CaptionNode.create_break()) + nodes.append(CaptionNode.create_text(self._decode(line))) + else: + # it's a comment or some metadata; ignore it + pass + + # Add a last caption if there are remaining nodes + if nodes: + caption = CaptionExt(start, end, nodes, layout_info=layout_info, segment_index=segment_index, mpegts=mpegts) + captions.append(caption) + + return captions + + @staticmethod + def _parse_local(string: str) -> float: + """ + Parse WebVTT LOCAL time and convert it to seconds. + """ + m = WebVTTReaderExt.RE_LOCAL.search(string) + if not m: + return 0 + + parsed = m.groups() + if not parsed: + return 0 + hours = int(parsed[1]) + minutes = int(parsed[2]) + seconds = int(parsed[3]) + milliseconds = int(parsed[4]) + return (milliseconds / 1000) + seconds + (minutes * 60) + (hours * 3600) + + +def merge_segmented_webvtt(vtt_raw: str, segment_durations: Optional[list[int]] = None, timescale: int = 1) -> str: + """ + Merge Segmented WebVTT data. + + Parameters: + vtt_raw: The concatenated WebVTT files to merge. All WebVTT headers must be + appropriately spaced apart, or it may produce unwanted effects like + considering headers as captions, timestamp lines, etc. + segment_durations: A list of each segment's duration. If not provided it will try + to get it from the X-TIMESTAMP-MAP headers, specifically the MPEGTS number. + timescale: The number of time units per second. + + This parses the X-TIMESTAMP-MAP data to compute new absolute timestamps, replacing + the old start and end timestamp values. All X-TIMESTAMP-MAP header information will + be removed from the output as they are no longer of concern. Consider this function + the opposite of a WebVTT Segmenter, a WebVTT Joiner of sorts. + + Algorithm borrowed from N_m3u8DL-RE and shaka-player. + """ + MPEG_TIMESCALE = 90_000 + + vtt = WebVTTReaderExt().read(vtt_raw) + for lang in vtt.get_languages(): + prev_caption = None + duplicate_index: list[int] = [] + captions = vtt.get_captions(lang) + + if captions[0].segment_index == 0: + first_segment_mpegts = captions[0].mpegts + else: + first_segment_mpegts = segment_durations[0] if segment_durations else captions.first_segment_mpegts + + caption: CaptionExt + for i, caption in enumerate(captions): + # DASH WebVTT doesn't have MPEGTS timestamp like HLS. Instead, + # calculate the timestamp from SegmentTemplate/SegmentList duration. + likely_dash = first_segment_mpegts == 0 and caption.mpegts == 0 + if likely_dash and segment_durations: + duration = segment_durations[caption.segment_index] + caption.mpegts = MPEG_TIMESCALE * (duration / timescale) + + if caption.mpegts == 0: + continue + + # Commeted to fix DSNP subs being out of sync and mistimed. + # seconds = (caption.mpegts - first_segment_mpegts) / MPEG_TIMESCALE - caption.cue_time + # offset = seconds * 1_000_000 # pycaption use microseconds + + # if caption.start < offset: + # caption.start += offset + # caption.end += offset + + # If the difference between current and previous captions is <=1ms + # and the payload is equal then splice. + if ( + prev_caption + and not caption.is_empty() + and (caption.start - prev_caption.end) <= 1000 # 1ms in microseconds + and caption.get_text() == prev_caption.get_text() + ): + prev_caption.end = caption.end + duplicate_index.append(i) + + prev_caption = caption + + # Remove duplicate + captions[:] = [c for c_index, c in enumerate(captions) if c_index not in set(duplicate_index)] + + return WebVTTWriter().write(vtt) diff --git a/packages/envied/src/envied/core/utils/xml.py b/packages/envied/src/envied/core/utils/xml.py new file mode 100644 index 0000000..30eb83d --- /dev/null +++ b/packages/envied/src/envied/core/utils/xml.py @@ -0,0 +1,24 @@ +from typing import Union + +from lxml import etree +from lxml.etree import ElementTree + + +def load_xml(xml: Union[str, bytes]) -> ElementTree: + """Safely parse XML data to an ElementTree, without namespaces in tags.""" + if not isinstance(xml, bytes): + xml = xml.encode("utf8") + root = etree.fromstring(xml) + for elem in root.getiterator(): + if not hasattr(elem.tag, "find"): + # e.g. comment elements + continue + elem.tag = etree.QName(elem).localname + for name, value in elem.attrib.items(): + local_name = etree.QName(name).localname + if local_name == name: + continue + del elem.attrib[name] + elem.attrib[local_name] = value + etree.cleanup_namespaces(root) + return root diff --git a/packages/envied/src/envied/core/vault.py b/packages/envied/src/envied/core/vault.py new file mode 100644 index 0000000..a5c8747 --- /dev/null +++ b/packages/envied/src/envied/core/vault.py @@ -0,0 +1,49 @@ +from abc import ABCMeta, abstractmethod +from typing import Iterator, Optional, Union +from uuid import UUID + + +class Vault(metaclass=ABCMeta): + def __init__(self, name: str, no_push: bool = False): + self.name = name + self.no_push = no_push + + def __str__(self) -> str: + return f"{self.name} {type(self).__name__}" + + @abstractmethod + def get_key(self, kid: Union[UUID, str], service: str) -> Optional[str]: + """ + Get Key from Vault by KID (Key ID) and Service. + + It does not get Key by PSSH as the PSSH can be different depending on it's implementation, + or even how it was crafted. Some PSSH values may also actually be a CENC Header rather + than a PSSH MP4 Box too, which makes the value even more confusingly different. + + However, the KID never changes unless the video file itself has changed too, meaning the + key for the presumed-matching KID wouldn't work, further proving matching by KID is + superior. + """ + + @abstractmethod + def get_keys(self, service: str) -> Iterator[tuple[str, str]]: + """Get All Keys from Vault by Service.""" + + @abstractmethod + def add_key(self, service: str, kid: Union[UUID, str], key: str) -> bool: + """Add KID:KEY to the Vault.""" + + @abstractmethod + def add_keys(self, service: str, kid_keys: dict[Union[UUID, str], str]) -> int: + """ + Add Multiple Content Keys with Key IDs for Service to the Vault. + Pre-existing Content Keys are ignored/skipped. + Raises PermissionError if the user has no permission to create the table. + """ + + @abstractmethod + def get_services(self) -> Iterator[str]: + """Get a list of Service Tags from Vault.""" + + +__all__ = ("Vault",) diff --git a/packages/envied/src/envied/core/vaults.py b/packages/envied/src/envied/core/vaults.py new file mode 100644 index 0000000..cc76a89 --- /dev/null +++ b/packages/envied/src/envied/core/vaults.py @@ -0,0 +1,83 @@ +from typing import Any, Iterator, Optional, Union +from uuid import UUID + +from envied.core.config import config +from envied.core.utilities import import_module_by_path +from envied.core.vault import Vault + +_VAULTS = sorted( + (path for path in config.directories.vaults.glob("*.py") if path.stem.lower() != "__init__"), key=lambda x: x.stem +) + +_MODULES = {path.stem: getattr(import_module_by_path(path), path.stem) for path in _VAULTS} + + +class Vaults: + """Keeps hold of Key Vaults with convenience functions, e.g. searching all vaults.""" + + def __init__(self, service: Optional[str] = None): + self.service = service or "" + self.vaults = [] + + def __iter__(self) -> Iterator[Vault]: + return iter(self.vaults) + + def __len__(self) -> int: + return len(self.vaults) + + def load(self, type_: str, **kwargs: Any) -> bool: + """Load a Vault into the vaults list. Returns True if successful, False otherwise.""" + module = _MODULES.get(type_) + if not module: + raise ValueError(f"Unable to find vault command by the name '{type_}'.") + try: + vault = module(**kwargs) + self.vaults.append(vault) + return True + except Exception: + return False + + def load_critical(self, type_: str, **kwargs: Any) -> None: + """Load a critical Vault that must succeed or raise an exception.""" + module = _MODULES.get(type_) + if not module: + raise ValueError(f"Unable to find vault command by the name '{type_}'.") + vault = module(**kwargs) + self.vaults.append(vault) + + def get_key(self, kid: Union[UUID, str]) -> tuple[Optional[str], Optional[Vault]]: + """Get Key from the first Vault it can by KID (Key ID) and Service.""" + for vault in self.vaults: + key = vault.get_key(kid, self.service) + if key and key.count("0") != len(key): + return key, vault + return None, None + + def add_key(self, kid: Union[UUID, str], key: str, excluding: Optional[Vault] = None) -> int: + """Add a KID:KEY to all Vaults, optionally with an exclusion.""" + success = 0 + for vault in self.vaults: + if vault != excluding and not vault.no_push: + try: + success += vault.add_key(self.service, kid, key) + except (PermissionError, NotImplementedError): + pass + return success + + def add_keys(self, kid_keys: dict[Union[UUID, str], str]) -> int: + """ + Add multiple KID:KEYs to all Vaults. Duplicate Content Keys are skipped. + PermissionErrors when the user cannot create Tables are absorbed and ignored. + Vaults with no_push=True are skipped. + """ + success = 0 + for vault in self.vaults: + if not vault.no_push: + try: + success += bool(vault.add_keys(self.service, kid_keys)) + except (PermissionError, NotImplementedError): + pass + return success + + +__all__ = ("Vaults",) diff --git a/packages/envied/src/envied/envied.yaml b/packages/envied/src/envied/envied.yaml new file mode 100644 index 0000000..ec5f166 --- /dev/null +++ b/packages/envied/src/envied/envied.yaml @@ -0,0 +1,150 @@ +# Group or Username to postfix to the end of all download fienames following a dash +#tag: '' + +# Set terminal background color (custom option not in CONFIG.md) +set_terminal_bg: false + +# Muxing configuration +muxing: + set_title: false + +# +decryption: mp4decrypt + +scene_naming: false +series_year: false + +# Login credentials for each Service +credentials: + ALL4: email:password + ROKU: email:password + TVNZ: email:password + TPTV: email:password + CBC: email:password +# Override default directories used across envied +directories: + cache: Cache + cookies: Cookies + dcsl: DCSL # Device Certificate Status List + downloads: Downloads + logs: Logs + temp: Temp + wvds: WVDs + prds: PRDs + # Additional directories that can be configured: + # commands: Commands + #services: + # - ./envied/services/ + vaults: vaults/ + # fonts: Fonts + +# Pre-define which Widevine or PlayReady device to use for each Serviceuv run envied +cdm: + default: device + +# Use pywidevine Serve-compliant Remote CDMs +# Currently not working! +remote_cdm: + - name: "CDRM_Project_API" + device_type: ANDROID + system_id: 22590 + security_level: 3 + host: "https://cdrm-project.com/remotecdm/widevine" + secret: "CDRM" + device_name: "public" + + +# Key Vaults store your obtained Content Encryption Keys (CEKs) +key_vaults: +#- type: SQLite +# name: Local vault +# path: key_store.db + +- type: HTTPAPI + name: drmlab + host: http://api.drmlab.io/vault/ + password: gEX75q7I5YVkvgF5SUkcNd41IbGrDtTT +- type: API + name: CDRM Vault + uri: https://cdrm-project.com/api/cache + token: CDRM + + +# Choose what software to use to download data +downloader: n_m3u8dl_re +# Options: requests | aria2c | curl_impersonate | n_m3u8dl_re +# Can also be a mapping: +# downloader: +# NF: requests +# AMZN: n_m3u8dl_re +# DSNP: n_m3u8dl_re +# default: requests + +# aria2c downloader configuration +aria2c: + max_concurrent_downloads: 4 + max_connection_per_server: 3 + split: 5 + file_allocation: falloc # none | prealloc | falloc | trunc + +# N_m3u8DL-RE downloader configuration +n_m3u8dl_re: + thread_count: 16 + ad_keyword: "advertisement" + use_proxy: true + +# curl_impersonate downloader configuration +curl_impersonate: + browser: chrome120 + +# Pre-define default options and switches of the dl command +dl: + best: true + sub_format: srt + downloads: 4 + workers: 16 + +# Chapter Name to use when exporting a Chapter without a Name +chapter_fallback_name: "Chapter {j:02}" + +# Case-Insensitive dictionary of headers for all Services +headers: + Accept-Language: "en-US,en;q=0.8" + User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" + +# Override default filenames used across envied +filenames: + log: "envied_{name}_{time}.log" + config: "config.yaml" + root_config: "envied.yaml" + chapters: "Chapters_{title}_{random}.txt" + subtitle: "Subtitle_{id}_{language}.srt" + +# API key for The Movie Database (TMDB) +tmdb_api_key: "" + +# conversion_method: +# - auto (default): Smart routing - subby for WebVTT/SAMI, standard for others +# - subby: Always use subby with advanced processing +# - pycaption: Use only pycaption library (no SubtitleEdit, no subby) +# - subtitleedit: Prefer SubtitleEdit when available, fall back to pycaption +subtitle: + conversion_method: auto + sdh_method: auto + + +# Configuration data for each Service +services: + # Service-specific configuration goes here + # EXAMPLE: + # api_key: "service_specific_key" + +# Legacy NordVPN configuration (use proxy_providers instead) +#proxy_providers: +# nordvpn: +# username: username +# password: password +# server_map: +# us: 6918 +# uk: 2613 +# nz: 100 diff --git a/packages/envied/src/envied/services/ALL4/__init__.py b/packages/envied/src/envied/services/ALL4/__init__.py new file mode 100644 index 0000000..67955dd --- /dev/null +++ b/packages/envied/src/envied/services/ALL4/__init__.py @@ -0,0 +1,416 @@ +from __future__ import annotations + +import base64 +import hashlib +import json +import sys +import re +from collections.abc import Generator +from datetime import datetime, timezone +from http.cookiejar import MozillaCookieJar +from typing import Any, Optional, Union + +import click +from click import Context +from Crypto.Util.Padding import unpad +from Cryptodome.Cipher import AES +from pywidevine.cdm import Cdm as WidevineCdm + +from envied.core.constants import AnyTrack +from envied.core.credential import Credential +from envied.core.manifests import DASH +from envied.core.search_result import SearchResult +from envied.core.service import Service +from envied.core.titles import Episode, Movie, Movies, Series, Title_T, Titles_T +from envied.core.tracks import Chapter, Subtitle, Tracks + + +class ALL4(Service): + """ + Service code for Channel 4's All4 streaming service (https://channel4.com). + + \b + Version: 1.0.0 + Author: stabbedbybrick + Authorization: Credentials + Robustness: + L3: 1080p, AAC2.0 + + \b + Tips: + - Use complete title URL or slug as input: + https://www.channel4.com/programmes/taskmaster OR taskmaster + - Use on demand URL for directly downloading episodes: + https://www.channel4.com/programmes/taskmaster/on-demand/75588-002 + - Both android and web/pc endpoints are checked for quality profiles. + If android is missing 1080p, it automatically falls back to web. + """ + + GEOFENCE = ("gb", "ie") + TITLE_RE = r"^(?:https?://(?:www\.)?channel4\.com/programmes/)?(?P[a-z0-9-]+)(?:/on-demand/(?P[0-9-]+))?" + + @staticmethod + @click.command(name="ALL4", short_help="https://channel4.com", help=__doc__) + @click.argument("title", type=str) + @click.pass_context + def cli(ctx: Context, **kwargs: Any) -> ALL4: + return ALL4(ctx, **kwargs) + + def __init__(self, ctx: Context, title: str): + self.title = title + super().__init__(ctx) + + self.authorization: str + self.asset_id: int + self.license_token: str + self.manifest: str + + self.session.headers.update( + { + "X-C4-Platform-Name": self.config["device"]["platform_name"], + "X-C4-Device-Type": self.config["device"]["device_type"], + "X-C4-Device-Name": self.config["device"]["device_name"], + "X-C4-App-Version": self.config["device"]["app_version"], + "X-C4-Optimizely-Datafile": self.config["device"]["optimizely_datafile"], + } + ) + + def authenticate(self, cookies: Optional[MozillaCookieJar] = None, credential: Optional[Credential] = None) -> None: + super().authenticate(cookies, credential) + if not credential: + raise EnvironmentError("Service requires Credentials for Authentication.") + + cache = self.cache.get(f"tokens_{credential.sha1}") + + if cache and not cache.expired: + # cached + self.log.info(" + Using cached Tokens...") + tokens = cache.data + elif cache and cache.expired: + # expired, refresh + self.log.info("Refreshing cached Tokens") + r = self.session.post( + self.config["endpoints"]["login"], + headers={"authorization": f"Basic {self.config['android']['auth']}"}, + data={ + "grant_type": "refresh_token", + "username": credential.username, + "password": credential.password, + "refresh_token": cache.data["refreshToken"], + }, + ) + try: + res = r.json() + except json.JSONDecodeError: + raise ValueError(f"Failed to refresh tokens: {r.text}") + + if "error" in res: + self.log.error(f"Failed to refresh tokens: {res['errorMessage']}") + sys.exit(1) + + tokens = res + self.log.info(" + Refreshed") + else: + # new + headers = {"authorization": f"Basic {self.config['android']['auth']}"} + data = { + "grant_type": "password", + "username": credential.username, + "password": credential.password, + } + r = self.session.post(self.config["endpoints"]["login"], headers=headers, data=data) + try: + res = r.json() + except json.JSONDecodeError: + raise ValueError(f"Failed to log in: {r.text}") + + if "error" in res: + self.log.error(f"Failed to log in: {res['errorMessage']}") + sys.exit(1) + + tokens = res + self.log.info(" + Acquired tokens...") + + cache.set(tokens, expiration=tokens["expiresIn"]) + + self.authorization = f"Bearer {tokens['accessToken']}" + + def search(self) -> Generator[SearchResult, None, None]: + params = { + "expand": "default", + "q": self.title, + "limit": "100", + "offset": "0", + } + + r = self.session.get(self.config["endpoints"]["search"], params=params) + r.raise_for_status() + + results = r.json() + if isinstance(results["results"], list): + for result in results["results"]: + yield SearchResult( + id_=result["brand"].get("websafeTitle"), + title=result["brand"].get("title"), + description=result["brand"].get("description"), + label=result.get("label"), + url=result["brand"].get("href"), + ) + + def get_titles(self) -> Union[Movies, Series]: + title, on_demand = (re.match(self.TITLE_RE, self.title).group(i) for i in ("id", "vid")) + + r = self.session.get( + self.config["endpoints"]["title"].format(title=title), + params={"client": "android-mod", "deviceGroup": "mobile", "include": "extended-restart"}, + headers={"Authorization": self.authorization}, + ) + if not r.ok: + self.log.error(r.text) + sys.exit(1) + + data = r.json() + + if on_demand is not None: + episodes = [ + Episode( + id_=episode["programmeId"], + service=self.__class__, + title=data["brand"]["title"], + season=episode["seriesNumber"], + number=episode["episodeNumber"], + name=episode["originalTitle"], + language="en", + data=episode["assetInfo"].get("streaming") or episode["assetInfo"].get("download"), + ) + for episode in data["brand"]["episodes"] + if episode.get("assetInfo") and episode["programmeId"] == on_demand + ] + if not episodes: + # Parse HTML of episode page to find title + data = self.get_html(self.title) + episodes = [ + Episode( + id_=data["selectedEpisode"]["programmeId"], + service=self.__class__, + title=data["brand"]["title"], + season=data["selectedEpisode"]["seriesNumber"] or 0, + number=data["selectedEpisode"]["episodeNumber"] or 0, + name=data["selectedEpisode"]["originalTitle"], + language="en", + data=data["selectedEpisode"], + ) + ] + + return Series(episodes) + + elif data["brand"]["programmeType"] == "FM": + return Movies( + [ + Movie( + id_=movie["programmeId"], + service=self.__class__, + name=data["brand"]["title"], + year=int(data["brand"]["summary"].split(" ")[0].strip().strip("()")), + language="en", + data=movie["assetInfo"].get("streaming") or movie["assetInfo"].get("download"), + ) + for movie in data["brand"]["episodes"] + ] + ) + else: + return Series( + [ + Episode( + id_=episode["programmeId"], + service=self.__class__, + title=data["brand"]["title"], + season=episode["seriesNumber"], + number=episode["episodeNumber"], + name=episode["originalTitle"], + language="en", + data=episode["assetInfo"].get("streaming") or episode["assetInfo"].get("download"), + ) + for episode in data["brand"]["episodes"] + if episode.get("assetInfo") + ] + ) + + def get_tracks(self, title: Union[Movie, Episode]) -> Tracks: + android_assets: tuple = self.android_playlist(title.id) + web_assets: tuple = self.web_playlist(title.id) + self.manifest, self.license_token, subtitle, data = self.sort_assets(title, android_assets, web_assets) + self.asset_id = int(title.data["assetId"]) + + tracks = DASH.from_url(self.manifest, self.session).to_tracks(title.language) + tracks.videos[0].data = data + + # manifest subtitles are sometimes empty even if they exist + # so we clear them and add the subtitles manually + tracks.subtitles.clear() + if subtitle is not None: + tracks.add( + Subtitle( + id_=hashlib.md5(subtitle.encode()).hexdigest()[0:6], + url=subtitle, + codec=Subtitle.Codec.from_mime(subtitle[-3:]), + language=title.language, + is_original_lang=True, + forced=False, + sdh=False, + ) + ) + else: + self.log.warning("- Subtitles are either missing or empty") + + return tracks + + def get_chapters(self, title: Union[Movie, Episode]) -> list[Chapter]: + track = title.tracks.videos[0] + + chapters = [ + Chapter( + name=f"Chapter {i + 1:02}", + timestamp=datetime.fromtimestamp((ms / 1000), tz=timezone.utc).strftime("%H:%M:%S.%f")[:-3], + ) + for i, ms in enumerate(x["breakOffset"] for x in track.data["adverts"]["breaks"]) + ] + + if track.data.get("endCredits", {}).get("squeezeIn"): + chapters.append( + Chapter( + name="Credits", + timestamp=datetime.fromtimestamp( + (track.data["endCredits"]["squeezeIn"] / 1000), tz=timezone.utc + ).strftime("%H:%M:%S.%f")[:-3], + ) + ) + + return chapters + + def get_widevine_service_certificate(self, **_: Any) -> str: + return WidevineCdm.common_privacy_cert + + def get_widevine_license(self, challenge: bytes, **_: Any) -> str: + payload = { + "message": base64.b64encode(challenge).decode("utf8"), + "token": self.license_token, + "request_id": self.asset_id, + "video": {"type": "ondemand", "url": self.manifest}, + } + + r = self.session.post(self.config["endpoints"]["license"], json=payload) + if not r.ok: + raise ConnectionError(f"License request failed: {r.json()['status']['type']}") + + return r.json()["license"] + + # Service specific functions + + def sort_assets(self, title: Union[Movie, Episode], android_assets: tuple, web_assets: tuple) -> tuple: + android_heights = None + web_heights = None + + if android_assets is not None: + try: + a_manifest, a_token, a_subtitle, data = android_assets + android_tracks = DASH.from_url(a_manifest, self.session).to_tracks(title.language) + android_heights = sorted([int(track.height) for track in android_tracks.videos], reverse=True) + except Exception: + android_heights = None + + if web_assets is not None: + try: + b_manifest, b_token, b_subtitle, data = web_assets + session = self.session + session.headers.update(self.config["headers"]) + web_tracks = DASH.from_url(b_manifest, session).to_tracks(title.language) + web_heights = sorted([int(track.height) for track in web_tracks.videos], reverse=True) + except Exception: + web_heights = None + + if not android_heights and not web_heights: + self.log.error("Failed to request manifest data. If you're behind a VPN/proxy, you might be blocked") + sys.exit(1) + + if not android_heights or android_heights[0] < 1080: + lic_token = self.decrypt_token(b_token, client="WEB") + return b_manifest, lic_token, b_subtitle, data + else: + lic_token = self.decrypt_token(a_token, client="ANDROID") + return a_manifest, lic_token, a_subtitle, data + + def android_playlist(self, video_id: str) -> tuple: + url = self.config["android"]["vod"].format(video_id=video_id) + headers = {"authorization": self.authorization} + + r = self.session.get(url=url, headers=headers) + if not r.ok: + self.log.warning("Request for Android endpoint returned %s", r) + return None + + data = json.loads(r.content) + manifest = data["videoProfiles"][0]["streams"][0]["uri"] + token = data["videoProfiles"][0]["streams"][0]["token"] + subtitle = next( + (x["url"] for x in data["subtitlesAssets"] if x["url"].endswith(".vtt")), + None, + ) + + return manifest, token, subtitle, data + + def web_playlist(self, video_id: str) -> tuple: + url = self.config["web"]["vod"].format(programmeId=video_id) + r = self.session.get(url, headers=self.config["headers"]) + if not r.ok: + self.log.warning("Request for WEB endpoint returned %s", r) + return None + + data = json.loads(r.content) + + for item in data["videoProfiles"]: + if item["name"] == "dashwv-dyn-stream-1": + token = item["streams"][0]["token"] + manifest = item["streams"][0]["uri"] + + subtitle = next( + (x["url"] for x in data["subtitlesAssets"] if x["url"].endswith(".vtt")), + None, + ) + + return manifest, token, subtitle, data + + def decrypt_token(self, token: str, client: str) -> tuple: + if client == "ANDROID": + key = self.config["android"]["key"] + iv = self.config["android"]["iv"] + + if client == "WEB": + key = self.config["web"]["key"] + iv = self.config["web"]["iv"] + + if isinstance(token, str): + token = base64.b64decode(token) + cipher = AES.new( + key=base64.b64decode(key), + iv=base64.b64decode(iv), + mode=AES.MODE_CBC, + ) + data = unpad(cipher.decrypt(token), AES.block_size) + dec_token = data.decode().split("|")[1] + return dec_token.strip() + + def get_html(self, url: str) -> dict: + r = self.session.get(url=url, headers=self.config["headers"]) + r.raise_for_status() + + init_data = re.search( + "", + "".join(r.content.decode().replace("\u200c", "").replace("\r\n", "").replace("undefined", "null")), + ) + try: + data = json.loads(init_data.group(1)) + return data["initialData"] + except Exception: + self.log.error(f"Failed to get episode for {url}") + sys.exit(1) diff --git a/packages/envied/src/envied/services/ALL4/config.yaml b/packages/envied/src/envied/services/ALL4/config.yaml new file mode 100644 index 0000000..1468e01 --- /dev/null +++ b/packages/envied/src/envied/services/ALL4/config.yaml @@ -0,0 +1,27 @@ +headers: + Accept-Language: en-US,en;q=0.8 + User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36 + +endpoints: + login: https://api.channel4.com/online/v2/auth/token + title: https://api.channel4.com/online/v1/views/content-hubs/{title}.json + license: https://c4.eme.lp.aws.redbeemedia.com/wvlicenceproxy-service/widevine/acquire + search: https://all4nav.channel4.com/v1/api/search + +android: + key: QVlESUQ4U0RGQlA0TThESA==" + iv: MURDRDAzODNES0RGU0w4Mg==" + auth: MzZVVUN0OThWTVF2QkFnUTI3QXU4ekdIbDMxTjlMUTE6Sllzd3lIdkdlNjJWbGlrVw== + vod: https://api.channel4.com/online/v1/vod/stream/{video_id}?client=android-mod + +web: + key: bjljTGllWWtxd3pOQ3F2aQ== + iv: b2R6Y1UzV2RVaVhMdWNWZA== + vod: https://www.channel4.com/vod/stream/{programmeId} + +device: + platform_name: android + device_type: mobile + device_name: "Sony C6903 (C6903)" + app_version: "android_app:9.4.2" + optimizely_datafile: "2908" diff --git a/packages/envied/src/envied/services/ARD/__init__.py b/packages/envied/src/envied/services/ARD/__init__.py new file mode 100644 index 0000000..a59587c --- /dev/null +++ b/packages/envied/src/envied/services/ARD/__init__.py @@ -0,0 +1,175 @@ +from __future__ import annotations + +from http.cookiejar import MozillaCookieJar +from typing import Any, Optional, Union +from functools import partial +from pathlib import Path +import sys +import re + +import click +import webvtt +import requests +from click import Context +from bs4 import BeautifulSoup + +from envied.core.credential import Credential +from envied.core.service import Service +from envied.core.titles import Movie, Movies, Episode, Series +from envied.core.tracks import Track, Chapter, Tracks, Video, Subtitle +from envied.core.manifests.hls import HLS +from envied.core.manifests.dash import DASH + + +class ARD(Service): + """ + Service code for ARD Mediathek (https://www.ardmediathek.de) + + \b + Version: 1.0.0 + Author: lambda + Authorization: None + Robustness: + Unencrypted: 2160p, AAC2.0 + """ + + GEOFENCE = ("de",) + TITLE_RE = r"^(https://www\.ardmediathek\.de/(?Pserie|video)/.+/)(?P[a-zA-Z0-9]{10,})(/[0-9]{1,3})?$" + EPISODE_NAME_RE = r"^(Folge [0-9]+:)?(?P[^\(]+) \(S(?P[0-9]+)/E(?P[0-9]+)\)$" + + @staticmethod + @click.command(name="ARD", short_help="https://www.ardmediathek.de", help=__doc__) + @click.argument("title", type=str) + @click.pass_context + def cli(ctx: Context, **kwargs: Any) -> ARD: + return ARD(ctx, **kwargs) + + def __init__(self, ctx: Context, title: str): + self.title = title + super().__init__(ctx) + + def authenticate(self, cookies: Optional[MozillaCookieJar] = None, credential: Optional[Credential] = None) -> None: + pass + + def get_titles(self) -> Union[Movies, Series]: + match = re.match(self.TITLE_RE, self.title) + if not match: + return + + item_id = match.group("item_id") + if match.group("item_type") == "video": + return self.load_player(item_id) + + r = self.session.get(self.config["endpoints"]["grouping"].format(item_id=item_id)) + item = r.json() + + for widget in item["widgets"]: + if widget["type"] == "gridlist" and widget.get("compilationType") == "itemsOfShow": + episodes = Series() + for teaser in widget["teasers"]: + if teaser["coreAssetType"] != "EPISODE": + continue + + if 'Hörfassung' in teaser['longTitle']: + continue + + episodes += self.load_player(teaser["id"]) + return episodes + + def get_tracks(self, title: Union[Episode, Movie]) -> Tracks: + if title.data["blockedByFsk"]: + self.log.error( + "This content is age-restricted and not currently available. " + "Try again after 10pm German time") + sys.exit(0) + + media_collection = title.data["mediaCollection"]["embedded"] + tracks = Tracks() + for stream_collection in media_collection["streams"]: + if stream_collection["kind"] != "main": + continue + + for stream in stream_collection["media"]: + if stream["mimeType"] == "application/vnd.apple.mpegurl": + tracks += Tracks(HLS.from_url(stream["url"]).to_tracks(stream["audios"][0]["languageCode"])) + break + + # Fetch tracks from HBBTV endpoint to check for potential H.265/2160p DASH + r = self.session.get(self.config["endpoints"]["hbbtv"].format(item_id=title.id)) + hbbtv = r.json() + for stream in hbbtv["video"]["streams"]: + for media in stream["media"]: + if media["mimeType"] == "application/dash+xml" and media["audios"][0]["kind"] == "standard": + tracks += Tracks(DASH.from_url(media["url"]).to_tracks(media["audios"][0]["languageCode"])) + break + + # for stream in title.data["video"]["streams"]: + # for media in stream["media"]: + # if media["mimeType"] != "video/mp4" or media["audios"][0]["kind"] != "standard": + # continue + + # tracks += Video( + # codec=Video.Codec.AVC, # Should check media["videoCodec"] + # range_=Video.Range.SDR, # Should check media["isHighDynamicRange"] + # width=media["maxHResolutionPx"], + # height=media["maxVResolutionPx"], + # url=media["url"], + # language=media["audios"][0]["languageCode"], + # fps=50, + # ) + + for sub in media_collection["subtitles"]: + for source in sub["sources"]: + if source["kind"] == "ebutt": + tracks.add(Subtitle( + codec=Subtitle.Codec.TimedTextMarkupLang, + language=sub["languageCode"], + url=source["url"] + )) + + return tracks + + def get_chapters(self, title: Union[Episode, Movie]) -> list[Chapter]: + return [] + + def load_player(self, item_id): + r = self.session.get(self.config["endpoints"]["item"].format(item_id=item_id)) + item = r.json() + + for widget in item["widgets"]: + if widget["type"] != "player_ondemand": + continue + + common_data = { + "id_": item_id, + "data": widget, + "service": self.__class__, + "language": "de", + "year": widget["broadcastedOn"][0:4], + } + + if widget["show"]["coreAssetType"] == "SINGLE" or not widget["show"].get("availableSeasons"): + return Movies([Movie( + name=widget["title"], + **common_data + )]) + else: + match = re.match(self.EPISODE_NAME_RE, widget["title"]) + if not match: + name = widget["title"] + season = 0 + episode = 0 + else: + name = match.group("name") + season = match.group("season") or 0 + episode = match.group("episode") or 0 + + return Series([Episode( + name=name, + title=widget["show"]["title"], + #season=widget["show"]["availableSeasons"][0], + season=season, + number=episode, + **common_data + )]) + diff --git a/packages/envied/src/envied/services/ARD/config.yaml b/packages/envied/src/envied/services/ARD/config.yaml new file mode 100644 index 0000000..e54c434 --- /dev/null +++ b/packages/envied/src/envied/services/ARD/config.yaml @@ -0,0 +1,8 @@ +headers: + Accept-Language: de-DE,de;q=0.8 + User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0 + +endpoints: + item: https://api.ardmediathek.de/page-gateway/pages/ard/item/{item_id}?embedded=true&mcV6=true + grouping: https://api.ardmediathek.de/page-gateway/pages/ard/grouping/{item_id}?seasoned=true&embedded=true + hbbtv: https://tv.ardmediathek.de/dyn/get?id=video:{item_id} diff --git a/packages/envied/src/envied/services/AUBC/__init__.py b/packages/envied/src/envied/services/AUBC/__init__.py new file mode 100644 index 0000000..c800079 --- /dev/null +++ b/packages/envied/src/envied/services/AUBC/__init__.py @@ -0,0 +1,251 @@ +from __future__ import annotations + +import hashlib +import json +import re +from collections.abc import Generator +from typing import Any, Optional, Union +from urllib.parse import urljoin + +import click +from click import Context + +from envied.core.constants import AnyTrack +from envied.core.credential import Credential +from envied.core.manifests import DASH +from envied.core.search_result import SearchResult +from envied.core.service import Service +from envied.core.titles import Episode, Movie, Movies, Series, Title_T, Titles_T +from envied.core.tracks import Chapter, Subtitle, Tracks +from requests import Request + + +class AUBC(Service): + """ + \b + Service code for ABC iView streaming service (https://iview.abc.net.au/). + + \b + Version: 1.0.1 + Author: stabbedbybrick + Authorization: None + Robustness: + L3: 1080p, AAC2.0 + + \b + Tips: + - Input should be complete URL: + SHOW: https://iview.abc.net.au/show/return-to-paradise + EPISODE: https://iview.abc.net.au/video/DR2314H001S00 + MOVIE: https://iview.abc.net.au/show/way-back / https://iview.abc.net.au/show/way-back/video/ZW3981A001S00 + + """ + + GEOFENCE = ("au",) + ALIASES = ("iview", "abciview", "iv",) + + @staticmethod + @click.command(name="AUBC", short_help="https://iview.abc.net.au/", help=__doc__) + @click.argument("title", type=str) + @click.pass_context + def cli(ctx: Context, **kwargs: Any) -> AUBC: + return AUBC(ctx, **kwargs) + + def __init__(self, ctx: Context, title: str): + self.title = title + super().__init__(ctx) + + self.session.headers.update(self.config["headers"]) + + def search(self) -> Generator[SearchResult, None, None]: + url = ( + "https://y63q32nvdl-1.algolianet.com/1/indexes/*/queries?x-algolia-agent=Algolia" + "%20for%20JavaScript%20(4.9.1)%3B%20Browser%20(lite)%3B%20react%20(17.0.2)%3B%20" + "react-instantsearch%20(6.30.2)%3B%20JS%20Helper%20(3.10.0)&x-" + "algolia-api-key=bcdf11ba901b780dc3c0a3ca677fbefc&x-algolia-application-id=Y63Q32NVDL" + ) + payload = { + "requests": [ + { + "indexName": "ABC_production_iview_web", + "params": f"query={self.title}&tagFilters=&userToken=anonymous-74be3cf1-1dc7-4fa1-9cff-19592162db1c", + } + ], + } + + results = self._request("POST", url, payload=payload)["results"] + hits = [x for x in results[0]["hits"] if x["docType"] == "Program"] + + for result in hits: + yield SearchResult( + id_="https://iview.abc.net.au/show/{}".format(result.get("slug")), + title=result.get("title"), + description=result.get("synopsis"), + label=result.get("subType"), + url="https://iview.abc.net.au/show/{}".format(result.get("slug")), + ) + + def get_titles(self) -> Union[Movies, Series]: + title_re = r"^(?:https?://(?:www.)?iview.abc.net.au/(?Pshow|video)/)?(?P[a-zA-Z0-9_-]+)" + try: + kind, title_id = (re.match(title_re, self.title).group(i) for i in ("type", "id")) + except Exception: + raise ValueError("- Could not parse ID from title") + + if kind == "show": + data = self._request("GET", "/v3/show/{}".format(title_id)) + label = data.get("type") + + if label.lower() in ("series", "program"): + episodes = self._series(title_id) + return Series(episodes) + + elif label.lower() in ("feature", "movie"): + movie = self._movie(data) + return Movies(movie) + + elif kind == "video": + episode = self._episode(title_id) + return Series([episode]) + + def get_tracks(self, title: Union[Movie, Episode]) -> Tracks: + video = self._request("GET", "/v3/video/{}".format(title.id)) + if not video.get("playable"): + raise ConnectionError(video.get("unavailableMessage")) + + playlist = video.get("_embedded", {}).get("playlist", {}) + if not playlist: + raise ConnectionError("Could not find a playlist for this title") + + streams = next(x["streams"]["mpegdash"] for x in playlist if x["type"] == "program") + captions = next((x.get("captions") for x in playlist if x["type"] == "program"), None) + title.data["protected"] = streams.get("protected", False) + + if "720" in streams: + streams["1080"] = streams["720"].replace("720", "1080") + + manifest = next( + (url for key in ["1080", "720", "sd", "sd-low"] if key in streams + for url in [streams[key]] + if self.session.head(url).status_code == 200), + None + ) + if not manifest: + raise ValueError("Could not find a manifest for this title") + + tracks = DASH.from_url(manifest, self.session).to_tracks(title.language) + + for track in tracks.audio: + role = track.data["dash"]["adaptation_set"].find("Role") + if role is not None and role.get("value") in ["description", "alternative", "alternate"]: + track.descriptive = True + + if captions: + subtitles = captions.get("src-vtt") + tracks.add( + Subtitle( + id_=hashlib.md5(subtitles.encode()).hexdigest()[0:6], + url=subtitles, + codec=Subtitle.Codec.from_mime(subtitles[-3:]), + language=title.language, + forced=False, + ) + ) + + return tracks + + def get_chapters(self, title: Union[Movie, Episode]) -> Chapters: + if not title.data.get("cuePoints"): + return Chapters() + + credits = next((x.get("start") for x in title.data["cuePoints"] if x["type"] == "end-credits"), None) + if credits: + return Chapters([Chapter(name="Credits", timestamp=credits * 1000)]) + + return Chapters() + + def get_widevine_service_certificate(self, **_: Any) -> str: + return None + + def get_widevine_license(self, *, challenge: bytes, title: Union[Movies, Series], track: AnyTrack) -> Optional[Union[bytes, str]]: + if not title.data.get("protected"): + return None + + customdata = self._license(title.id) + headers = {"customdata": customdata} + + r = self.session.post(self.config["endpoints"]["license"], headers=headers, data=challenge) + r.raise_for_status() + return r.content + + # Service specific + + def _series(self, title: str) -> Episode: + data = self._request("GET", "/v3/series/{}".format(title)) + + episodes = [ + self.create_episode(episode) + for season in data + for episode in reversed(season["_embedded"]["videoEpisodes"]["items"]) + if season.get("episodeCount") + ] + return Series(episodes) + + def _movie(self, data: dict) -> Movie: + return [ + Movie( + id_=data["_embedded"]["highlightVideo"]["id"], + service=self.__class__, + name=data.get("title"), + year=data.get("productionYear"), + data=data, + language=data.get("analytics", {}).get("dataLayer", {}).get("d_language", "en"), + ) + ] + + def _episode(self, video_id: str) -> Episode: + data = self._request("GET", "/v3/video/{}".format(video_id)) + return self.create_episode(data) + + def _license(self, video_id: str): + token = self._request("POST", "/v3/token/jwt", data={"clientId": self.config["client"]})["token"] + response = self._request("GET", "/v3/token/drm/{}".format(video_id), headers={"bearer": token}) + + return response["license"] + + def create_episode(self, episode: dict) -> Episode: + title = episode["showTitle"] + season = re.search(r"Series (\d+)", episode.get("title")) + number = re.search(r"Episode (\d+)", episode.get("title")) + names_a = re.search(r"Series \d+ Episode \d+ (.+)", episode.get("title")) + names_b = re.search(r"Series \d+ (.+)", episode.get("title")) + name = names_a.group(1) if names_a else names_b.group(1) if names_b else episode.get("displaySubtitle") + + language = episode.get("analytics", {}).get("dataLayer", {}).get("d_language", "en") + + return Episode( + id_=episode["id"], + service=self.__class__, + title=title, + season=int(season.group(1)) if season else 0, + number=int(number.group(1)) if number else 0, + name=name, + data=episode, + language=language, + ) + + def _request(self, method: str, api: str, **kwargs: Any) -> Any[dict | str]: + url = urljoin(self.config["endpoints"]["base_url"], api) + + prep = self.session.prepare_request(Request(method, url, **kwargs)) + + response = self.session.send(prep) + if response.status_code != 200: + raise ConnectionError(f"{response.text}") + + try: + return json.loads(response.content) + + except json.JSONDecodeError as e: + raise ValueError(f"Failed to parse JSON: {response.text}") from e + diff --git a/packages/envied/src/envied/services/AUBC/config.yaml b/packages/envied/src/envied/services/AUBC/config.yaml new file mode 100644 index 0000000..604b739 --- /dev/null +++ b/packages/envied/src/envied/services/AUBC/config.yaml @@ -0,0 +1,9 @@ +headers: + User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0 + accept-language: en-US,en;q=0.8 + +endpoints: + base_url: https://api.iview.abc.net.au + license: https://wv-keyos.licensekeyserver.com/ + +client: "1d4b5cba-42d2-403e-80e7-34565cdf772d" \ No newline at end of file diff --git a/packages/envied/src/envied/services/CBC/__init__.py b/packages/envied/src/envied/services/CBC/__init__.py new file mode 100644 index 0000000..3283f6c --- /dev/null +++ b/packages/envied/src/envied/services/CBC/__init__.py @@ -0,0 +1,319 @@ +from __future__ import annotations + +import json +import re +import sys +from collections.abc import Generator +from http.cookiejar import CookieJar +from typing import Any, Optional, Union +from urllib.parse import urljoin + +import click +from click import Context +from envied.core.constants import AnyTrack +from envied.core.credential import Credential +from envied.core.manifests import DASH, HLS +from envied.core.search_result import SearchResult +from envied.core.service import Service +from envied.core.titles import Episode, Movie, Movies, Series +from envied.core.tracks import Chapter, Chapters, Tracks +from requests import Request + + +class CBC(Service): + """ + \b + Service code for CBC Gem streaming service (https://gem.cbc.ca/). + + \b + Version: 1.0.0 + Author: stabbedbybrick + Authorization: Credentials + Robustness: + AES-128: 1080p, DDP5.1 + Widevine L3: 720p, DDP5.1 + + \b + Tips: + - Input can be complete title URL or just the slug: + SHOW: https://gem.cbc.ca/murdoch-mysteries OR murdoch-mysteries + MOVIE: https://gem.cbc.ca/the-babadook OR the-babadook + + \b + Notes: + - DRM encrypted titles max out at 720p. + - CCExtrator v0.94 will likely fail to extract subtitles. It's recommended to downgrade to v0.93. + - Some audio tracks contain invalid data, causing warning messages from mkvmerge during muxing + These can be ignored. + + """ + + GEOFENCE = ("ca",) + ALIASES = ("gem", "cbcgem",) + + @staticmethod + @click.command(name="CBC", short_help="https://gem.cbc.ca/", help=__doc__) + @click.argument("title", type=str) + @click.pass_context + def cli(ctx: Context, **kwargs: Any) -> CBC: + return CBC(ctx, **kwargs) + + def __init__(self, ctx: Context, title: str): + self.title: str = title + super().__init__(ctx) + + self.base_url: str = self.config["endpoints"]["base_url"] + + def search(self) -> Generator[SearchResult, None, None]: + params = { + "device": "web", + "pageNumber": "1", + "pageSize": "20", + "term": self.title, + } + response: dict = self._request("GET", "/ott/catalog/v1/gem/search", params=params) + + for result in response.get("result", []): + yield SearchResult( + id_="https://gem.cbc.ca/{}".format(result.get("url")), + title=result.get("title"), + description=result.get("synopsis"), + label=result.get("type"), + url="https://gem.cbc.ca/{}".format(result.get("url")), + ) + + def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None: + super().authenticate(cookies, credential) + if not credential: + raise EnvironmentError("Service requires Credentials for Authentication.") + + tokens: Optional[Any] = self.cache.get(f"tokens_{credential.sha1}") + + """ + All grant types for future reference: + PASSWORD("password"), + ACCESS_TOKEN("access_token"), + REFRESH_TOKEN("refresh_token"), + CLIENT_CREDENTIALS("client_credentials"), + AUTHORIZATION_CODE("authorization_code"), + CODE("code"); + """ + + if tokens and not tokens.expired: + # cached + self.log.info(" + Using cached tokens") + auth_token: str = tokens.data["access_token"] + + elif tokens and tokens.expired: + # expired, refresh + self.log.info("Refreshing cached tokens...") + auth_url, scopes = self.settings() + params = { + "client_id": self.config["client"]["id"], + "grant_type": "refresh_token", + "refresh_token": tokens.data["refresh_token"], + "scope": scopes, + } + + access: dict = self._request("POST", auth_url, params=params) + + # Shorten expiration by one hour to account for clock skew + tokens.set(access, expiration=int(access["expires_in"]) - 3600) + auth_token: str = access["access_token"] + + else: + # new + self.log.info("Requesting new tokens...") + auth_url, scopes = self.settings() + params = { + "client_id": self.config["client"]["id"], + "grant_type": "password", + "username": credential.username, + "password": credential.password, + "scope": scopes, + } + + access: dict = self._request("POST", auth_url, params=params) + + # Shorten expiration by one hour to account for clock skew + tokens.set(access, expiration=int(access["expires_in"]) - 3600) + auth_token: str = access["access_token"] + + claims_token: str = self.claims_token(auth_token) + self.session.headers.update({"x-claims-token": claims_token}) + + def get_titles(self) -> Union[Movies, Series]: + title_re: str = r"^(?:https?://(?:www.)?gem.cbc.ca/)?(?P[a-zA-Z0-9_-]+)" + try: + title_id: str = re.match(title_re, self.title).group("id") + except Exception: + raise ValueError("- Could not parse ID from title") + + params = {"device": "web"} + data: dict = self._request("GET", "/ott/catalog/v2/gem/show/{}".format(title_id), params=params) + label: str = data.get("contentType", "").lower() + + if label in ("film", "movie", "standalone"): + movies: list[Movie] = self._movie(data) + return Movies(movies) + + else: + episodes: list[Episode] = self._show(data) + return Series(episodes) + + def get_tracks(self, title: Union[Movie, Episode]) -> Tracks: + index: dict = self._request( + "GET", "/media/meta/v1/index.ashx", params={"appCode": "gem", "idMedia": title.id, "output": "jsonObject"} + ) + + title.data["extra"] = { + "chapters": index["Metas"].get("Chapitres"), + "credits": index["Metas"].get("CreditStartTime"), + } + + self.drm: bool = index["Metas"].get("isDrmActive") == "true" + if self.drm: + tech: str = next(tech["name"] for tech in index["availableTechs"] if "widevine" in tech["drm"]) + else: + tech: str = next(tech["name"] for tech in index["availableTechs"] if not tech["drm"]) + + response: dict = self._request( + "GET", self.config["endpoints"]["validation"].format("android", title.id, "smart-tv", tech) + ) + + manifest = response.get("url") + self.license = next((x["value"] for x in response["params"] if "widevineLicenseUrl" in x["name"]), None) + self.token = next((x["value"] for x in response["params"] if "widevineAuthToken" in x["name"]), None) + + stream_type: Union[HLS, DASH] = HLS if tech == "hls" else DASH + tracks: Tracks = stream_type.from_url(manifest, self.session).to_tracks(language=title.language) + + if stream_type == DASH: + for track in tracks.audio: + label = track.data["dash"]["adaptation_set"].find("Label") + if label is not None and "descriptive" in label.text.lower(): + track.descriptive = True + + for track in tracks: + track.language = title.language + + return tracks + + def get_chapters(self, title: Union[Movie, Episode]) -> Chapters: + extra: dict = title.data["extra"] + + chapters = [] + if extra.get("chapters"): + chapters = [Chapter(timestamp=x) for x in set(extra["chapters"].split(","))] + + if extra.get("credits"): + chapters.append(Chapter(name="Credits", timestamp=float(extra["credits"]))) + + return Chapters(chapters) + + def get_widevine_service_certificate(self, **_: Any) -> str: + return None + + def get_widevine_license( + self, *, challenge: bytes, title: Union[Movies, Series], track: AnyTrack + ) -> Optional[Union[bytes, str]]: + if not self.license or not self.token: + return None + + headers = {"x-dt-auth-token": self.token} + r = self.session.post(self.license, headers=headers, data=challenge) + r.raise_for_status() + return r.content + + # Service specific + + def _show(self, data: dict) -> list[Episode]: + lineups: list = next((x["lineups"] for x in data["content"] if x.get("title", "").lower() == "episodes"), None) + if not lineups: + self.log.warning("No episodes found for: {}".format(data.get("title"))) + return + + titles = [] + for season in lineups: + for episode in season["items"]: + if episode.get("mediaType", "").lower() == "episode": + parts = episode.get("title", "").split(".", 1) + episode_name = parts[1].strip() if len(parts) > 1 else parts[0].strip() + titles.append( + Episode( + id_=episode["idMedia"], + service=self.__class__, + title=data.get("title"), + season=int(season.get("seasonNumber", 0)), + number=int(episode.get("episodeNumber", 0)), + name=episode_name, + year=episode.get("metadata", {}).get("productionYear"), + language=data["structuredMetadata"].get("inLanguage", "en-CA"), + data=episode, + ) + ) + + return titles + + def _movie(self, data: dict) -> list[Movie]: + unwanted: tuple = ("episodes", "trailers", "extras") + lineups: list = next((x["lineups"] for x in data["content"] if x.get("title", "").lower() not in unwanted), None) + if not lineups: + self.log.warning("No movies found for: {}".format(data.get("title"))) + return + + titles = [] + for season in lineups: + for movie in season["items"]: + if movie.get("mediaType", "").lower() == "episode": + parts = movie.get("title", "").split(".", 1) + movie_name = parts[1].strip() if len(parts) > 1 else parts[0].strip() + titles.append( + Movie( + id_=movie.get("idMedia"), + service=self.__class__, + name=movie_name, + year=movie.get("metadata", {}).get("productionYear"), + language=data["structuredMetadata"].get("inLanguage", "en-CA"), + data=movie, + ) + ) + + return titles + + def settings(self) -> tuple: + settings = self._request("GET", "/ott/catalog/v1/gem/settings", params={"device": "web"}) + auth_url: str = settings["identityManagement"]["ropc"]["url"] + scopes: str = settings["identityManagement"]["ropc"]["scopes"] + return auth_url, scopes + + def claims_token(self, token: str) -> str: + headers = { + "Authorization": "Bearer " + token, + } + params = {"device": "web"} + response: dict = self._request( + "GET", "/ott/subscription/v2/gem/Subscriber/profile", headers=headers, params=params + ) + return response["claimsToken"] + + def _request(self, method: str, api: str, **kwargs: Any) -> Any[dict | str]: + url: str = urljoin(self.base_url, api) + + prep: Request = self.session.prepare_request(Request(method, url, **kwargs)) + response = self.session.send(prep) + if response.status_code not in (200, 426): + raise ConnectionError(f"{response.status_code} - {response.text}") + + try: + data = json.loads(response.content) + error_keys = ["errorMessage", "ErrorMessage", "ErrorCode", "errorCode", "error"] + error_message = next((data.get(key) for key in error_keys if key in data), None) + if error_message: + self.log.error(f"\n - Error: {error_message}\n") + sys.exit(1) + + return data + + except json.JSONDecodeError: + raise ConnectionError("Request for {} failed: {}".format(response.url, response.text)) diff --git a/packages/envied/src/envied/services/CBC/config.yaml b/packages/envied/src/envied/services/CBC/config.yaml new file mode 100644 index 0000000..31bd19a --- /dev/null +++ b/packages/envied/src/envied/services/CBC/config.yaml @@ -0,0 +1,7 @@ +endpoints: + base_url: "https://services.radio-canada.ca" + validation: "/media/validation/v2?appCode=gem&&deviceType={}&idMedia={}&manifestType={}&output=json&tech={}" + api_key: "3f4beddd-2061-49b0-ae80-6f1f2ed65b37" + +client: + id: "fc05b0ee-3865-4400-a3cc-3da82c330c23" \ No newline at end of file diff --git a/packages/envied/src/envied/services/CBS/__init__.py b/packages/envied/src/envied/services/CBS/__init__.py new file mode 100644 index 0000000..44b27f7 --- /dev/null +++ b/packages/envied/src/envied/services/CBS/__init__.py @@ -0,0 +1,242 @@ +from __future__ import annotations + +import json +import re +import sys +from collections.abc import Generator +from typing import Any, Optional, Union +from urllib.parse import urljoin + +import click +from envied.core.constants import AnyTrack +from envied.core.manifests import DASH +from envied.core.search_result import SearchResult +from envied.core.service import Service +from envied.core.titles import Episode, Series, Title_T, Titles_T +from envied.core.tracks import Chapter, Chapters, Tracks +from envied.core.utils.sslciphers import SSLCiphers +from envied.core.utils.xml import load_xml +from requests import Request + + +class CBS(Service): + """ + \b + Service code for CBS.com streaming service (https://cbs.com). + Credit to @srpen6 for the tip on anonymous session + + \b + Version: 1.0.0 + Author: stabbedbybrick + Authorization: None + Robustness: + Widevine: + L3: 2160p, DDP5.1 + + \b + Tips: + - Input should be complete URLs: + SERIES: https://www.cbs.com/shows/tracker/ + EPISODE: https://www.cbs.com/shows/video/E0wG_ovVMkLlHOzv7KDpUV9bjeKFFG2v/ + + \b + Common VPN/proxy errors: + - SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING]')) + - ConnectionError: 406 Not Acceptable, 403 Forbidden + + """ + + GEOFENCE = ("us",) + + @staticmethod + @click.command(name="CBS", short_help="https://cbs.com", help=__doc__) + @click.argument("title", type=str, required=False) + @click.pass_context + def cli(ctx, **kwargs) -> CBS: + return CBS(ctx, **kwargs) + + def __init__(self, ctx, title): + self.title = title + super().__init__(ctx) + + def search(self) -> Generator[SearchResult, None, None]: + params = { + "term": self.title, + "termCount": 50, + "showCanVids": "true", + } + results = self._request("GET", "/apps-api/v3.1/androidphone/contentsearch/search.json", params=params)["terms"] + + for result in results: + yield SearchResult( + id_=result.get("path"), + title=result.get("title"), + description=None, + label=result.get("term_type"), + url=result.get("path"), + ) + + def get_titles(self) -> Titles_T: + title_re = r"https://www\.cbs\.com/shows/(?P

[^"\n]+).+";', r.text, re.DOTALL) + self.session.headers.update({"Api-Auth": match.group('header')}) + + def get_titles(self) -> Union[Movies, Series]: + if match := re.match(self.SERIES_RE, self.title): + return self.handle_series_page(match.group('slug')) + + if match := re.match(self.VIDEO_RE, self.title): + r = self.session.post(self.config["endpoints"]["graphql"], json={ + "operationName": "VideoByCanonical", + "query": self.config["queries"]["VideoByCanonical"], + "variables": {"canonical": match.group('item_slug'), "first": 1}, + }, headers={"content-type": "application/json"}) + + video = r.json()["data"]["videoByCanonical"] + return self.parse_video_data(video) + + def get_tracks(self, title: Union[Episode, Movie]) -> Tracks: + tracks = Tracks() + for node in title.data["nodes"]: + if node["vodMediaType"] != "DEFAULT": + continue + + for player_type in self.config["meta"]["player_types"]: + ptmd_url = (self.config["endpoints"]["ptmd_base"] + + node["ptmdTemplate"].format(playerId=player_type)) + + r = self.session.get(ptmd_url) + ptmd = r.json() + + for pl in ptmd["priorityList"]: + for media_format in pl["formitaeten"]: + if "restriction_useragent" in media_format["facets"] or media_format["mimeType"] not in self.VIDEO_CODEC_MAP.keys(): + continue + + if 'hdr_hlg' in media_format["facets"]: + video_range = Video.Range.HLG + video_codec = Video.Codec.HEVC + else: + video_range = Video.Range.SDR + video_codec = self.VIDEO_CODEC_MAP[media_format["mimeType"]] + + for quality in media_format["qualities"]: + for track in quality["audio"]["tracks"]: + if track["class"] not in ("main", "ot"): + continue + + track_id = f'{video_codec}-{track["language"]}-{quality["highestVerticalResolution"]}' + if tracks.exists(by_id=track_id): + continue + + tracks.add(Video( + id_=track_id, + codec=video_codec, + range_=video_range, + width=quality["highestVerticalResolution"] // 9 * 16, + height=quality["highestVerticalResolution"], + url=track["uri"], + language=track["language"], + fps=50, + )) + + for subs in ptmd["captions"]: + if subs["format"] == "ebu-tt-d-basic-de": + track_id = f'subs-{subs["language"]}-{subs["class"]}' + if tracks.exists(by_id=track_id): + continue + + tracks.add(Subtitle( + id_=track_id, + codec=Subtitle.Codec.TimedTextMarkupLang, + language=subs["language"], + sdh=subs["class"] == "hoh", + url=subs["uri"] + )) + + return tracks + + def get_chapters(self, title: Union[Episode, Movie]) -> list[Chapter]: + for node in title.data["nodes"]: + si = node.get("skipIntro") + + if si and node["vodMediaType"] == "DEFAULT": + if si["startIntroTimeOffset"] and si["stopIntroTimeOffset"]: + intro_start = float(si["startIntroTimeOffset"]) + intro_stop = float(si["stopIntroTimeOffset"]) + chapters = [] + + if intro_start != 0: + chapters.append(Chapter(timestamp=0)) + + return chapters + [ + Chapter(timestamp=intro_start), + Chapter(timestamp=intro_stop), + ] + break + return [] + + def parse_video_data(self, video): + common_data = { + "id_": video["id"], + "service": self.__class__, + "year": video["editorialDate"][0:4], + "data": video["currentMedia"], + } + + meta = video["structuralMetadata"] + if "publicationFormInfo" in meta and meta["publicationFormInfo"]["original"] == "Film": + return Movies([Movie( + name=video["title"], + **common_data + )]) + else: + name = video["title"] + series_title = video["smartCollection"].get("title", "DUMMY") + + # Ignore fake episode names like "Episode 123" or "Series Name (1/8)" + if re.match(fr"^(Folge \d+|{series_title} \(\d+/\d+\))$", name): + name = None + + return Series([Episode( + **common_data, + name=name, + title=series_title, + season=video["episodeInfo"]["seasonNumber"], + number=video["episodeInfo"]["episodeNumber"], + )]) + + def handle_series_page(self, slug): + extensions = { + "persistedQuery": { + "version": 1, + "sha256Hash": "9412a0f4ac55dc37d46975d461ec64bfd14380d815df843a1492348f77b5c99a" + } + } + + variables = { + "seasonIndex": 0, + "episodesPageSize": 24, + "canonical": slug, + "sortBy": [ + { + "field": "EDITORIAL_DATE", + "direction": "ASC" + } + ] + } + + r = self.session.get(self.config["endpoints"]["graphql"], params={ + "extensions": json.dumps(extensions), + "variables": json.dumps(variables) + }, headers={"content-type": "application/json"}) + + data = r.json()["data"]["smartCollectionByCanonical"] + if not data: + return + + series = Series() + for season in data["seasons"]["nodes"]: + for video in season["episodes"]["nodes"]: + series += self.parse_video_data(video) + + return series diff --git a/packages/envied/src/envied/services/ZDF/config.yaml b/packages/envied/src/envied/services/ZDF/config.yaml new file mode 100644 index 0000000..34f41f0 --- /dev/null +++ b/packages/envied/src/envied/services/ZDF/config.yaml @@ -0,0 +1,117 @@ +headers: + Accept-Language: de-DE,de;q=0.8 + User-Agent: Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36 DMOST/2.0.0 (; LGE; webOSTV; WEBOS6.3.2 03.34.95; W6_lm21a;) + +endpoints: + graphql: https://api.zdf.de/graphql + ptmd_base: https://api.zdf.de + +meta: + # Known options: + # ngplayer_2_5 (Web player - H.264 1080p + VP9 1080p)) + # smarttv_6 (HBBTV - H.264 1080p + H.265 HLG 2160p) + # smarttv_7 (Unknown - same formats as smarttv_6) + # android_native_5 (Android - H.264 1080p + VP9 1080p + H.265 HLG 2160p) + player_types: + - android_native_5 + +queries: + VideoByCanonical: | + query VideoByCanonical($canonical: String!, $first: Int) { + videoByCanonical(canonical: $canonical) { + id + canonical + contentType + title + editorialDate + streamingOptions { + ad + ut + dgs + ov + ks + fsk + } + episodeInfo { + episodeNumber + seasonNumber + } + structuralMetadata { + isChildrenContent + publicationFormInfo { + original + transformed + } + visualDimension { + moods(first: $first) { + nodes { + mood + } + } + } + } + smartCollection { + id + canonical + title + collectionType + structuralMetadata { + contentFamily + publicationFormInfo { + original + transformed + } + } + } + seo { + title + } + availability { + fskBlocked + } + currentMediaType + subtitle + webUrl + publicationDate + currentMedia { + nodes { + ptmdTemplate + ... on VodMedia { + duration + aspectRatio + visible + geoLocation + highestVerticalResolution + streamAnchorTags { + nodes { + anchorOffset + anchorLabel + } + } + skipIntro { + startIntroTimeOffset + stopIntroTimeOffset + skipButtonDisplayTime + skipButtonLabel + } + vodMediaType + label + contentType + } + ... on LiveMedia { + geoLocation + tvService + title + start + stop + editorialStart + editorialStop + encryption + liveMediaType + label + } + id + } + } + } + } diff --git a/packages/envied/src/envied/services/iP/__init__.py b/packages/envied/src/envied/services/iP/__init__.py new file mode 100644 index 0000000..623ad1c --- /dev/null +++ b/packages/envied/src/envied/services/iP/__init__.py @@ -0,0 +1,450 @@ +from __future__ import annotations + +import base64 +import hashlib +import json +import re +import tempfile +import warnings +from collections.abc import Generator +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from typing import Any, Union + +import click +from bs4 import XMLParsedAsHTMLWarning +from click import Context +from envied.core.manifests import DASH, HLS +from envied.core.search_result import SearchResult +from envied.core.service import Service +from envied.core.titles import Episode, Movie, Movies, Series +from envied.core.tracks import Audio, Chapters, Subtitle, Tracks, Video +from envied.core.utils.collections import as_list +from envied.core.utils.sslciphers import SSLCiphers + +warnings.filterwarnings("ignore", category=XMLParsedAsHTMLWarning) + + +class iP(Service): + """ + \b + Service code for the BBC iPlayer streaming service (https://www.bbc.co.uk/iplayer). + + \b + Version: 1.0.1 + Author: stabbedbybrick + Authorization: None + Security: None + + \b + Tips: + - Use full title URL as input for best results. + - Use --list-titles before anything, iPlayer's listings are often messed up. + \b + - Use --range HLG to request H.265 UHD tracks + - See which titles are available in UHD: + https://www.bbc.co.uk/iplayer/help/questions/programme-availability/uhd-content + """ + + ALIASES = ("bbciplayer", "bbc", "iplayer") + GEOFENCE = ("gb",) + TITLE_RE = r"^(?:https?://(?:www\.)?bbc\.co\.uk/(?:iplayer/(?Pepisode|episodes)/|programmes/))?(?P[a-z0-9]+)(?:/.*)?$" + + @staticmethod + @click.command(name="iP", short_help="https://www.bbc.co.uk/iplayer", help=__doc__) + @click.argument("title", type=str) + @click.pass_context + def cli(ctx: Context, **kwargs: Any) -> "iP": + return iP(ctx, **kwargs) + + def __init__(self, ctx: Context, title: str): + super().__init__(ctx) + self.title = title + self.vcodec = ctx.parent.params.get("vcodec") + self.range = ctx.parent.params.get("range_") + + self.session.headers.update({"user-agent": "BBCiPlayer/5.17.2.32046"}) + + if self.range and self.range[0].name == "HLG": + if not self.config.get("certificate"): + raise CertificateMissingError("HLG/H.265 tracks cannot be requested without a TLS certificate.") + + self.session.headers.update({"user-agent": self.config["user_agent"]}) + self.vcodec = "H.265" + + def search(self) -> Generator[SearchResult, None, None]: + r = self.session.get(self.config["endpoints"]["search"], params={"q": self.title}) + r.raise_for_status() + + results = r.json().get("new_search", {}).get("results", []) + for result in results: + programme_type = result.get("type", "unknown") + category = result.get("labels", {}).get("category", "") + path = "episode" if programme_type == "episode" else "episodes" + yield SearchResult( + id_=result.get("id"), + title=result.get("title"), + description=result.get("synopses", {}).get("small"), + label=f"{programme_type} - {category}", + url=f"https://www.bbc.co.uk/iplayer/{path}/{result.get('id')}", + ) + + def get_titles(self) -> Union[Movies, Series]: + match = re.match(self.TITLE_RE, self.title) + if not match: + raise ValueError("Could not parse ID from title - is the URL/ID format correct?") + + groups = match.groupdict() + pid = groups.get("id") + kind = groups.get("kind") + + # Attempt to get brand/series data first + data = self.get_data(pid, slice_id=None) + + # Handle case where the input is a direct episode URL and get_data fails + if data is None and kind == "episode": + return Series([self.fetch_episode(pid)]) + + if data is None: + raise MetadataError(f"Metadata not found for '{pid}'. If it's an episode, use the full URL.") + + # If it's a "series" with only one item, it might be a movie. + if data.get("count", 0) < 2: + r = self.session.get(self.config["endpoints"]["episodes"].format(pid=pid)) + r.raise_for_status() + episodes_data = r.json() + if not episodes_data.get("episodes"): + raise MetadataError(f"Episode metadata not found for '{pid}'.") + + movie_data = episodes_data["episodes"][0] + return Movies( + [ + Movie( + id_=movie_data.get("id"), + name=movie_data.get("title"), + year=(movie_data.get("release_date_time", "") or "").split("-")[0], + service=self.__class__, + language="en", + data=data, + ) + ] + ) + + # It's a full series + seasons = [self.get_data(pid, x["id"]) for x in data.get("slices") or [{"id": None}]] + episode_ids = [ + episode.get("episode", {}).get("id") + for season in seasons + for episode in season.get("entities", {}).get("results", []) + if not episode.get("episode", {}).get("live") + and episode.get("episode", {}).get("id") + ] + + episodes = self.get_episodes(episode_ids) + return Series(episodes) + + def get_tracks(self, title: Union[Movie, Episode]) -> Tracks: + versions = self._get_available_versions(title.id) + if not versions: + raise NoStreamsAvailableError("No available versions for this title were found.") + + connections = [self.check_all_versions(version["pid"]) for version in versions] + connections = [c for c in connections if c] + if not connections: + if self.vcodec == "H.265": + raise NoStreamsAvailableError("Selection unavailable in UHD.") + raise NoStreamsAvailableError("Selection unavailable. Title may be missing or geo-blocked.") + + media = self._select_best_media(connections) + if not media: + raise NoStreamsAvailableError("Could not find a suitable media stream.") + + tracks = self._select_tracks(media, title.language) + + return tracks + + def get_chapters(self, title: Union[Movie, Episode]) -> Chapters: + return Chapters() + + def _get_available_versions(self, pid: str) -> list[dict]: + """Fetch all available versions for a programme ID.""" + r = self.session.get(url=self.config["endpoints"]["playlist"].format(pid=pid)) + r.raise_for_status() + playlist = r.json() + + versions = playlist.get("allAvailableVersions") + if versions: + return versions + + # Fallback to scraping webpage if API returns no versions + self.log.info("No versions in playlist API, falling back to webpage scrape.") + r = self.session.get(self.config["base_url"].format(type="episode", pid=pid)) + r.raise_for_status() + match = re.search(r"window\.__IPLAYER_REDUX_STATE__\s*=\s*(.*?);\s*", r.text) + if match: + redux_data = json.loads(match.group(1)) + # Filter out audio-described versions + return [ + {"pid": v.get("id")} + for v in redux_data.get("versions", {}).values() + if v.get("kind") != "audio-described" and v.get("id") + ] + + return [] + + def _select_best_media(self, connections: list[list[dict]]) -> list[dict]: + """Selects the media group corresponding to the highest available video quality.""" + heights = sorted( + { + int(c["height"]) + for media_list in connections + for c in media_list + if c.get("height", "").isdigit() + }, + reverse=True, + ) + + if not heights: + self.log.warning("No video streams with height information were found.") + # Fallback: return the first available media group if any exist. + return connections[0] if connections else None + + highest_height = heights[0] + self.log.debug(f"Available resolutions (p): {heights}. Selecting highest: {highest_height}p.") + + best_media_list = next( + ( + media_list + for media_list in connections + if any(conn.get("height") == str(highest_height) for conn in media_list) + ), + None, # Default to None if no matching group is found (should be impossible if heights is not empty) + ) + + return best_media_list + + def _select_tracks(self, media: list[dict], lang: str): + for video_stream_info in (m for m in media if m.get("kind") == "video"): + connections = sorted(video_stream_info["connection"], key=lambda x: x.get("priority", 99)) + + if self.vcodec == "H.265": + connection = connections[0] + else: + connection = next((c for c in connections if c["supplier"] == "mf_akamai" and c["transferFormat"] == "dash"), None) + + break + + if not self.vcodec == "H.265": + if connection["transferFormat"] == "dash": + connection["href"] = "/".join( + connection["href"] + .replace("dash", "hls") + .split("?")[0] + .split("/")[0:-1] + + ["hls", "master.m3u8"] + ) + connection["transferFormat"] = "hls" + elif connection["transferFormat"] == "hls": + connection["href"] = "/".join( + connection["href"] + .replace(".hlsv2.ism", "") + .split("?")[0] + .split("/")[0:-1] + + ["hls", "master.m3u8"] + ) + + if connection["transferFormat"] == "dash": + tracks = DASH.from_url(url=connection["href"], session=self.session).to_tracks(language=lang) + elif connection["transferFormat"] == "hls": + tracks = HLS.from_url(url=connection["href"], session=self.session).to_tracks(language=lang) + else: + raise ValueError(f"Unsupported transfer format: {connection['transferFormat']}") + + for video in tracks.videos: + # UHD DASH manifest has no range information, so we add it manually + if video.codec == Video.Codec.HEVC: + video.range = Video.Range.HLG + + if any(re.search(r"-audio_\w+=\d+", x) for x in as_list(video.url)): + # create audio stream from the video stream + audio_url = re.sub(r"-video=\d+", "", as_list(video.url)[0]) + audio = Audio( + # use audio_url not video url, as to ignore video bitrate in ID + id_=hashlib.md5(audio_url.encode()).hexdigest()[0:7], + url=audio_url, + codec=Audio.Codec.from_codecs(video.data["hls"]["playlist"].stream_info.codecs), + language=video.data["hls"]["playlist"].media[0].language, + bitrate=int(self.find(r"-audio_\w+=(\d+)", as_list(video.url)[0]) or 0), + channels=video.data["hls"]["playlist"].media[0].channels, + descriptive=False, # Not available + descriptor=Audio.Descriptor.HLS, + drm=video.drm, + data=video.data, + ) + if not tracks.exists(by_id=audio.id): + # some video streams use the same audio, so natural dupes exist + tracks.add(audio) + # remove audio from the video stream + video.url = [re.sub(r"-audio_\w+=\d+", "", x) for x in as_list(video.url)][0] + video.codec = Video.Codec.from_codecs(video.data["hls"]["playlist"].stream_info.codecs) + video.bitrate = int(self.find(r"-video=(\d+)", as_list(video.url)[0]) or 0) + + for caption in [x for x in media if x["kind"] == "captions"]: + connection = sorted(caption["connection"], key=lambda x: x["priority"])[0] + tracks.add( + Subtitle( + id_=hashlib.md5(connection["href"].encode()).hexdigest()[0:6], + url=connection["href"], + codec=Subtitle.Codec.from_codecs("ttml"), + language=lang, + is_original_lang=True, + forced=False, + sdh=True, + ) + ) + break + + return tracks + + def get_data(self, pid: str, slice_id: str) -> dict: + """Fetches programme metadata from the GraphQL-like endpoint.""" + json_data = { + "id": "9fd1636abe711717c2baf00cebb668de", + "variables": {"id": pid, "perPage": 200, "page": 1, "sliceId": slice_id}, + } + r = self.session.post(self.config["endpoints"]["metadata"], json=json_data) + r.raise_for_status() + return r.json().get("data", {}).get("programme") + + def check_all_versions(self, vpid: str) -> list: + """Checks media availability for a given version PID, trying multiple mediators.""" + session = self.session + cert_path = None + params = {} + + if self.vcodec == "H.265": + if not self.config.get("certificate"): + raise CertificateMissingError("TLS certificate not configured.") + + session.mount("https://", SSLCiphers()) + endpoint_template = self.config["endpoints"]["secure"] + mediators = ["securegate.iplayer.bbc.co.uk", "ipsecure.stage.bbc.co.uk"] + mediaset = "iptv-uhd" + + cert_binary = base64.b64decode(self.config["certificate"]) + with tempfile.NamedTemporaryFile(mode="w+b", delete=False, suffix=".pem") as cert_file: + cert_file.write(cert_binary) + cert_path = cert_file.name + + params["cert"] = cert_path + else: + endpoint_template = self.config["endpoints"]["open"] + mediators = ["open.live.bbc.co.uk", "open.stage.bbc.co.uk"] + mediaset = "iptv-all" + + for mediator in mediators: + if self.vcodec == "H.265": + url = endpoint_template.format(mediator, vpid, mediaset) + else: + url = endpoint_template.format(mediator, mediaset, vpid) + + try: + r = session.get(url, **params) + r.raise_for_status() + availability = r.json() + + if availability.get("media"): + return availability["media"] + if availability.get("result"): + self.log.warning( + f"Mediator '{mediator}' reported an error: {availability['result']}" + ) + + except Exception as e: + self.log.debug(f"Failed to check mediator '{mediator}': {e}") + + finally: + if cert_path is not None: + Path(cert_path).unlink(missing_ok=True) + + return None + + def fetch_episode(self, pid: str) -> Episode: + """Fetches and parses data for a single episode.""" + r = self.session.get(self.config["endpoints"]["episodes"].format(pid=pid)) + r.raise_for_status() + data = r.json() + + if not data.get("episodes"): + return None + + episode_data = data["episodes"][0] + subtitle = episode_data.get("subtitle", "") + year = (episode_data.get("release_date_time", "") or "").split("-")[0] + + series_match = next(re.finditer(r"Series (\d+).*?:|Season (\d+).*?:|(\d{4}/\d{2}): Episode \d+", subtitle), None) + season_num = 0 + if series_match: + season_str = next(g for g in series_match.groups() if g is not None) + season_num = int(season_str.replace("/", "")) + elif not data.get("slices"): # Fallback for single-season shows + season_num = 1 + + num_match = next(re.finditer(r"(\d+)\.|Episode (\d+)", subtitle), None) + number = 0 + if num_match: + number = int(next(g for g in num_match.groups() if g is not None)) + else: + number = episode_data.get("numeric_tleo_position", 0) + + name_match = re.search(r"\d+\. (.+)", subtitle) + name = "" + if name_match: + name = name_match.group(1) + elif not re.search(r"Series \d+: Episode \d+", subtitle): + name = subtitle + + return Episode( + id_=episode_data.get("id"), + service=self.__class__, + title=episode_data.get("title"), + season=season_num, + number=number, + name=name, + language="en", + year=year, + ) + + def get_episodes(self, episode_ids: list) -> list[Episode]: + """Fetches multiple episodes concurrently.""" + with ThreadPoolExecutor(max_workers=10) as executor: + tasks = executor.map(self.fetch_episode, episode_ids) + return [task for task in tasks if task is not None] + + def find(self, pattern, string, group=None): + if group: + m = re.search(pattern, string) + if m: + return m.group(group) + else: + return next(iter(re.findall(pattern, string)), None) + + +class iPlayerError(Exception): + """Base exception for this service.""" + pass + + +class CertificateMissingError(iPlayerError): + """Raised when an TLS certificate is required but not provided.""" + pass + + +class NoStreamsAvailableError(iPlayerError): + """Raised when no playable streams are found for a title.""" + pass + + +class MetadataError(iPlayerError): + """Raised when metadata for a title cannot be found.""" + pass \ No newline at end of file diff --git a/packages/envied/src/envied/services/iP/config.yaml b/packages/envied/src/envied/services/iP/config.yaml new file mode 100644 index 0000000..432fd85 --- /dev/null +++ b/packages/envied/src/envied/services/iP/config.yaml @@ -0,0 +1,56 @@ +base_url: https://www.bbc.co.uk/iplayer/{type}/{pid} +user_agent: smarttv_AFTMM_Build_0003255372676_Chromium_41.0.2250.2 +api_key: D2FgtcTxGqqIgLsfBWTJdrQh2tVdeaAp + +endpoints: + episodes: https://ibl.api.bbci.co.uk/ibl/v1/episodes/{pid}?rights=mobile&availability=available + metadata: https://graph.ibl.api.bbc.co.uk/ + playlist: https://www.bbc.co.uk/programmes/{pid}/playlist.json + open: https://{}/mediaselector/6/select/version/2.0/mediaset/{}/vpid/{}/ + secure: https://{}/mediaselector/6/select/version/2.0/vpid/{}/format/json/mediaset/{}/proto/https + search: https://ibl.api.bbc.co.uk/ibl/v1/new-search + +certificate: | + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlFT3pDQ0F5T2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURDQm96RU + xNQWtHQTFVRUJoTUNWVk14DQpFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RWpBUUJnTlZCQWNUQ1VOMWNHVnlkR2x1YnpFZU1C + d0dBMVVFDQpDeE1WVUhKdlpDQlNiMjkwSUVObGNuUnBabWxqWVhSbE1Sa3dGd1lEVlFRTEV4QkVhV2RwZEdGc0lGQnliMlIxDQpZM1 + J6TVE4d0RRWURWUVFLRXdaQmJXRjZiMjR4SHpBZEJnTlZCQU1URmtGdFlYcHZiaUJHYVhKbFZGWWdVbTl2DQpkRU5CTURFd0hoY05N + VFF4TURFMU1EQTFPREkyV2hjTk16UXhNREV3TURBMU9ESTJXakNCbVRFTE1Ba0dBMVVFDQpCaE1DVlZNeEV6QVJCZ05WQkFnVENrTm + hiR2xtYjNKdWFXRXhFakFRQmdOVkJBY1RDVU4xY0dWeWRHbHViekVkDQpNQnNHQTFVRUN4TVVSR1YySUZKdmIzUWdRMlZ5ZEdsbWFX + TmhkR1V4R1RBWEJnTlZCQXNURUVScFoybDBZV3dnDQpVSEp2WkhWamRITXhEekFOQmdOVkJBb1RCa0Z0WVhwdmJqRVdNQlFHQTFVRU + F4TU5SbWx5WlZSV1VISnZaREF3DQpNVENDQVNBd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFTkFEQ0NBUWdDZ2dFQkFNRFZTNUwwVUR4 + WnMwNkpGMld2DQpuZE1KajdIVGRlSlg5b0ltWWg3aytNY0VENXZ5OTA2M0p5c3FkS0tsbzVJZERvY2tuczg0VEhWNlNCVkFBaTBEDQ + p6cEI4dHRJNUFBM1l3djFZUDJiOThpQ3F2OWhQalZndE9nNHFvMXZkK0oxdFdISUh5ZkV6cWlPRXVXNTlVd2xoDQpVTmFvY3JtZGNx + bGcyWmIyZ1VybTZ2dlZqUThZcjQzY29MNnBBMk5ESXNyT0Z4c0ZZaXdaVk12cDZqMlk4dnFrDQpFOHJ2Tm04c3JkY0FhZjRXdHBuYW + gyZ3RBY3IrdTVYNExZdmEwTzZrNGhENEdnNHZQQ2xQZ0JXbDZFSHRBdnFDDQpGWm9KbDhMNTN2VVY1QWhMQjdKQk0wUTFXVERINWs4 + NWNYT2tFd042NDhuZ09hZUtPMGxqYndZVG52NHhDV2NlDQo2RXNDQVFPamdZTXdnWUF3SHdZRFZSMGpCQmd3Rm9BVVo2RFJJSlNLK2 + hmWCtHVnBycWlubGMraTVmZ3dIUVlEDQpWUjBPQkJZRUZOeUNPZkhja3Vpclp2QXF6TzBXbjZLTmtlR1BNQWtHQTFVZEV3UUNNQUF3 + RXdZRFZSMGxCQXd3DQpDZ1lJS3dZQkJRVUhBd0l3RVFZSllJWklBWWI0UWdFQkJBUURBZ2VBTUFzR0ExVWREd1FFQXdJSGdEQU5CZ2 + txDQpoa2lHOXcwQkFRVUZBQU9DQVFFQXZXUHd4b1VhV3IwV0tXRXhHdHpQOElGVUUrZis5SUZjSzNoWXl2QmxLOUxODQo3Ym9WZHhx + dWJGeEgzMFNmOC90VnNYMUpBOUM3bnMzZ09jV2Z0dTEzeUtzK0RnZGhqdG5GVkgraW4zNkVpZEZBDQpRRzM1UE1PU0ltNGNaVXkwME + 4xRXRwVGpGY2VBbmF1ZjVJTTZNZmRBWlQ0RXNsL09OUHp5VGJYdHRCVlpBQmsxDQpXV2VHMEcwNDdUVlV6M2Ira0dOVTNzZEs5Ri9o + NmRiS3c0azdlZWJMZi9KNjZKSnlkQUhybFhJdVd6R2tDbjFqDQozNWdHRHlQajd5MDZWNXV6MlUzYjlMZTdZWENnNkJCanBRN0wrRW + d3OVVsSmpoN1pRMXU2R2RCNUEwcGFWM0VQDQpQTk1KN2J6Rkl1cHozdklPdk5nUVV4ZWs1SUVIczZKeXdjNXByck5MS3c9PQ0KLS0t + LS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0KLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tDQpNSUlFdlFJQkFEQU5CZ2txaGtpRzl3ME + JBUUVGQUFTQ0JLY3dnZ1NqQWdFQUFvSUJBUURBMVV1UzlGQThXYk5PDQppUmRscjUzVENZK3gwM1hpVi9hQ0ptSWU1UGpIQkErYjh2 + ZE90eWNyS25TaXBhT1NIUTZISko3UE9FeDFla2dWDQpRQUl0QTg2UWZMYlNPUUFOMk1MOVdEOW0vZklncXIvWVQ0MVlMVG9PS3FOYj + NmaWRiVmh5QjhueE02b2poTGx1DQpmVk1KWVZEV3FISzVuWEtwWU5tVzlvRks1dXI3MVkwUEdLK04zS0MrcVFOalF5TEt6aGNiQldJ + c0dWVEw2ZW85DQptUEw2cEJQSzd6WnZMSzNYQUduK0ZyYVoyb2RvTFFISy9ydVYrQzJMMnREdXBPSVErQm9PTHp3cFQ0QVZwZWhCDQ + o3UUw2Z2hXYUNaZkMrZDcxRmVRSVN3ZXlRVE5FTlZrd3grWlBPWEZ6cEJNRGV1UEo0RG1uaWp0SlkyOEdFNTcrDQpNUWxuSHVoTEFn + RURBb0lCQVFDQWpqSmgrRFY5a1NJMFcyVHVkUlBpQmwvTDRrNlc1VThCYnV3VW1LWGFBclVTDQpvZm8wZWhvY3h2aHNibTBNRTE4RX + d4U0tKWWhPVVlWamdBRnpWOThLL2M4MjBLcXo1ZGRUa0NwRXFVd1Z4eXFRDQpOUWpsYzN3SmNjSTlQcVcrU09XaFdvYWd6UndYcmRE + MFU0eXc2NHM1eGFIUkU2SEdRSkVQVHdEY21mSDlOK0JXDQovdVU4YVc1QWZOcHhqRzduSGF0cmhJQjU1cDZuNHNFNUVoTjBnSk9WMD + lmMEdOb1pQUVhiT1VVcEJWOU1jQ2FsDQpsK1VTalpBRmRIbUlqWFBwR1FEelJJWTViY1hVQzBZYlRwaytRSmhrZ1RjSW1LRFJmd0FC + YXRIdnlMeDlpaVY1DQp0ZWZoV1hhaDE4STdkbUF3TmRTN0U4QlpoL3d5MlIwNXQ0RHppYjlyQW9HQkFPU25yZXAybk1VRVAyNXdSQW + RBDQozWDUxenYwOFNLWkh6b0VuNExRS1krLzg5VFRGOHZWS2wwQjZLWWlaYW14aWJqU1RtaDRCWHI4ZndRaytiazFCDQpReEZ3ZHVG + eTd1MU43d0hSNU45WEFpNEtuamgxQStHcW9SYjg4bk43b1htekM3cTZzdFZRUk9peDJlRVFJWTVvDQpiREZUellaRnloNGlMdkU0bj + V1WnVHL1JBb0dCQU5mazdHMDhvYlpacmsxSXJIVXZSQmVENzZRNDlzQ0lSMGRBDQpIU0hCZjBadFBEMjdGSEZtamFDN0YwWkM2QXdU + RnBNL0FNWDR4UlpqNnhGalltYnlENGN3MFpGZ08rb0pwZjFIDQpFajNHSHdMNHFZekJFUXdRTmswSk9GbE84cDdVMm1ZL2hEVXM3bG + JQQm82YUo4VVpJMGs3SHhSOVRWYVhud0h1DQovaXhnRjlsYkFvR0JBSmh2eVViNXZkaXRmNTcxZ3ErQWs2bWozMU45aGNRdjN3REZR + SGdHN1Vxb28zaUQ5MDR4DQp1aXI4RzdCbVJ2THNTWGhpWnI2cmxIOXFnTERVU1lqV0xMWksrZXVoOUo0ejlLdmhReitQVnNsY2FYcj + RyVUVjDQphMlNvb2FKU2E2WjNYU2NuSWVPSzJKc2hPK3RnRmw3d1NDRGlpUVF1aHI3QmRLRFFhbWU3MEVxTEFvR0JBSS90DQo4dk45 + d1NRN3lZamJIYU4wMkErdFNtMTdUeXNGaE5vcXZoYUEvNFJJMHRQU0RhRHZDUlhTRDRRc21ySzNaR0lxDQpBSVA3TGc3dFIyRHM3RV + NoWDY5MTRRdVZmVWF4R1ZPRXR0UFphZ0g3RzdNcllMSzFlWWl3MER1Sjl4U041dTdWDQpBczRkOURuZldiUm14UzRRd2pEU0ZMaFRp + T1JsRkt2MHFYTHF1cERuQW9HQWVFa3J4SjhJaXdhVEhnWXltM21TDQprU2h5anNWK01tVkJsVHNRK0ZabjFTM3k0YVdxbERhNUtMZF + QvWDEwQXg4NHNQTmVtQVFVMGV4YTN0OHM5bHdIDQorT3NEaktLb3hqQ1Q3S2wzckdQeUFISnJmVlZ5U2VFZVgrOERLZFZKcjByU1Bk + Qkk4Y2tFQ3kzQXpsVmphK3d3DQpST0N0emMxVHVyeG5OQTVxV0QzbjNmND0NCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0NCg== diff --git a/packages/envied/src/envied/unshackle-example.yaml b/packages/envied/src/envied/unshackle-example.yaml new file mode 100644 index 0000000..71a2dc0 --- /dev/null +++ b/packages/envied/src/envied/unshackle-example.yaml @@ -0,0 +1,260 @@ +# Group or Username to postfix to the end of all download filenames following a dash +tag: user_tag + +# Enable/disable tagging with group name (default: true) +tag_group_name: true + +# Enable/disable tagging with IMDB/TMDB/TVDB details (default: true) +tag_imdb_tmdb: true + +# Set terminal background color (custom option not in CONFIG.md) +set_terminal_bg: false + +# Set file naming convention +# true for style - Prime.Suspect.S07E01.The.Final.Act.Part.One.1080p.ITV.WEB-DL.AAC2.0.H.264 +# false for style - Prime Suspect S07E01 The Final Act - Part One +scene_naming: true + +# Whether to include the year in series names for episodes and folders (default: true) +# true for style - Show Name (2023) S01E01 Episode Name +# false for style - Show Name S01E01 Episode Name +series_year: true + +# Check for updates from GitHub repository on startup (default: true) +update_checks: true + +# How often to check for updates, in hours (default: 24) +update_check_interval: 24 + +# Title caching configuration +# Cache title metadata to reduce redundant API calls +title_cache_enabled: true # Enable/disable title caching globally (default: true) +title_cache_time: 1800 # Cache duration in seconds (default: 1800 = 30 minutes) +title_cache_max_retention: 86400 # Maximum cache retention for fallback when API fails (default: 86400 = 24 hours) + +# Muxing configuration +muxing: + set_title: false + +# Login credentials for each Service +credentials: + # Direct credentials (no profile support) + EXAMPLE: email@example.com:password + + # Per-profile credentials with default fallback + SERVICE_NAME: + default: default@email.com:password # Used when no -p/--profile is specified + profile1: user1@email.com:password1 + profile2: user2@email.com:password2 + + # Per-profile credentials without default (requires -p/--profile) + SERVICE_NAME2: + john: john@example.com:johnspassword + jane: jane@example.com:janespassword + + # You can also use list format for passwords with special characters + SERVICE_NAME3: + default: ["user@email.com", ":PasswordWith:Colons"] + +# Override default directories used across envied +directories: + cache: Cache + cookies: Cookies + dcsl: DCSL # Device Certificate Status List + downloads: Downloads + logs: Logs + temp: Temp + wvds: WVDs + prds: PRDs + # Additional directories that can be configured: + # commands: Commands + services: + - /path/to/services + - /other/path/to/services + # vaults: Vaults + # fonts: Fonts + +# Pre-define which Widevine or PlayReady device to use for each Service +cdm: + # Global default CDM device (fallback for all services/profiles) + default: WVD_1 + + # Direct service-specific CDM + DIFFERENT_EXAMPLE: PRD_1 + + # Per-profile CDM configuration + EXAMPLE: + john_sd: chromecdm_903_l3 # Profile 'john_sd' uses Chrome CDM L3 + jane_uhd: nexus_5_l1 # Profile 'jane_uhd' uses Nexus 5 L1 + default: generic_android_l3 # Default CDM for this service + +# Use pywidevine Serve-compliant Remote CDMs +remote_cdm: + - name: "chrome" + device_name: chrome + device_type: CHROME + system_id: 27175 + security_level: 3 + host: https://domain.com/api + secret: secret_key + - name: "chrome-2" + device_name: chrome + device_type: CHROME + system_id: 26830 + security_level: 3 + host: https://domain-2.com/api + secret: secret_key + +# Key Vaults store your obtained Content Encryption Keys (CEKs) +# Use 'no_push: true' to prevent a vault from receiving pushed keys +# while still allowing it to provide keys when requested +key_vaults: + - type: SQLite + name: Local + path: key_store.db + # Additional vault types: + # - type: API + # name: "Remote Vault" + # uri: "https://key-vault.example.com" + # token: "secret_token" + # no_push: true # This vault will only provide keys, not receive them + # - type: MySQL + # name: "MySQL Vault" + # host: "127.0.0.1" + # port: 3306 + # database: vault + # username: user + # password: pass + # no_push: false # Default behavior - vault both provides and receives keys + +# Choose what software to use to download data +downloader: aria2c +# Options: requests | aria2c | curl_impersonate | n_m3u8dl_re +# Can also be a mapping: +# downloader: +# NF: requests +# AMZN: n_m3u8dl_re +# DSNP: n_m3u8dl_re +# default: requests + +# aria2c downloader configuration +aria2c: + max_concurrent_downloads: 4 + max_connection_per_server: 3 + split: 5 + file_allocation: falloc # none | prealloc | falloc | trunc + +# N_m3u8DL-RE downloader configuration +n_m3u8dl_re: + thread_count: 16 + ad_keyword: "advertisement" + use_proxy: true + +# curl_impersonate downloader configuration +curl_impersonate: + browser: chrome120 + +# Pre-define default options and switches of the dl command +dl: + best: true + sub_format: srt + downloads: 4 + workers: 16 + lang: + - en + - fr + EXAMPLE: + bitrate: CBR + +# Chapter Name to use when exporting a Chapter without a Name +chapter_fallback_name: "Chapter {j:02}" + +# Case-Insensitive dictionary of headers for all Services +headers: + Accept-Language: "en-US,en;q=0.8" + User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" + +# Override default filenames used across envied +filenames: + log: "envied_{name}_{time}.log" + config: "config.yaml" + root_config: "envied.yaml" + chapters: "Chapters_{title}_{random}.txt" + subtitle: "Subtitle_{id}_{language}.srt" + +# API key for The Movie Database (TMDB) +tmdb_api_key: "" + +# conversion_method: +# - auto (default): Smart routing - subby for WebVTT/SAMI, standard for others +# - subby: Always use subby with advanced processing +# - pycaption: Use only pycaption library (no SubtitleEdit, no subby) +# - subtitleedit: Prefer SubtitleEdit when available, fall back to pycaption +subtitle: + conversion_method: auto + sdh_method: auto + +# Configuration for pywidevine's serve functionality +serve: + users: + secret_key_for_user: + devices: + - generic_nexus_4464_l3 + username: user + # devices: + # - '/path/to/device.wvd' + +# Configuration data for each Service +services: + # Service-specific configuration goes here + # Profile-specific configurations can be nested under service names + + # Example: with profile-specific device configs + EXAMPLE: + # Global service config + api_key: "service_api_key" + + # Profile-specific device configurations + profiles: + john_sd: + device: + app_name: "AIV" + device_model: "SHIELD Android TV" + jane_uhd: + device: + app_name: "AIV" + device_model: "Fire TV Stick 4K" + + # Example: Service with different regions per profile + SERVICE_NAME: + profiles: + us_account: + region: "US" + api_endpoint: "https://api.us.service.com" + uk_account: + region: "GB" + api_endpoint: "https://api.uk.service.com" + +# External proxy provider services +proxy_providers: + nordvpn: + username: username_from_service_credentials + password: password_from_service_credentials + server_map: + - us: 12 # force US server #12 for US proxies + surfsharkvpn: + username: your_surfshark_service_username # Service credentials from https://my.surfshark.com/vpn/manual-setup/main/openvpn + password: your_surfshark_service_password # Service credentials (not your login password) + server_map: + - us: 3844 # force US server #3844 for US proxies + - gb: 2697 # force GB server #2697 for GB proxies + - au: 4621 # force AU server #4621 for AU proxies + basic: + GB: + - "socks5://username:password@bhx.socks.ipvanish.com:1080" # 1 (Birmingham) + - "socks5://username:password@gla.socks.ipvanish.com:1080" # 2 (Glasgow) + AU: + - "socks5://username:password@syd.socks.ipvanish.com:1080" # 1 (Sydney) + - "https://username:password@au-syd.prod.surfshark.com" # 2 (Sydney) + - "https://username:password@au-bne.prod.surfshark.com" # 3 (Brisbane) + BG: "https://username:password@bg-sof.prod.surfshark.com" diff --git a/packages/envied/src/envied/utils/base62.py b/packages/envied/src/envied/utils/base62.py new file mode 100644 index 0000000..433b9c1 --- /dev/null +++ b/packages/envied/src/envied/utils/base62.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +""" +base62 +~~~~~~ + +Originated from http://blog.suminb.com/archives/558 +""" + +__title__ = "base62" +__author__ = "Sumin Byeon" +__email__ = "suminb@gmail.com" +__version__ = "1.0.0" + +BASE = 62 +CHARSET_DEFAULT = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +CHARSET_INVERTED = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + +def encode(n, charset=CHARSET_DEFAULT): + """Encodes a given integer ``n``.""" + + chs = [] + while n > 0: + n, r = divmod(n, BASE) + chs.insert(0, charset[r]) + + if not chs: + return "0" + + return "".join(chs) + + +def encodebytes(barray, charset=CHARSET_DEFAULT): + """Encodes a bytestring into a base62 string. + + :param barray: A byte array + :type barray: bytes + :rtype: str + """ + + _check_type(barray, bytes) + + # Count the number of leading zeros. + leading_zeros_count = 0 + for i in range(len(barray)): + if barray[i] != 0: + break + leading_zeros_count += 1 + + # Encode the leading zeros as "0" followed by a character indicating the count. + # This pattern may occur several times if there are many leading zeros. + n, r = divmod(leading_zeros_count, len(charset) - 1) + zero_padding = f"0{charset[-1]}" * n + if r: + zero_padding += f"0{charset[r]}" + + # Special case: the input is empty, or is entirely null bytes. + if leading_zeros_count == len(barray): + return zero_padding + + value = encode(int.from_bytes(barray, "big"), charset=charset) + return zero_padding + value + + +def decode(encoded, charset=CHARSET_DEFAULT): + """Decodes a base62 encoded value ``encoded``. + + :type encoded: str + :rtype: int + """ + _check_type(encoded, str) + + length, i, v = len(encoded), 0, 0 + for x in encoded: + v += _value(x, charset=charset) * (BASE ** (length - (i + 1))) + i += 1 + + return v + + +def decodebytes(encoded, charset=CHARSET_DEFAULT): + """Decodes a string of base62 data into a bytes object. + + :param encoded: A string to be decoded in base62 + :type encoded: str + :rtype: bytes + """ + + leading_null_bytes = b"" + while encoded.startswith("0") and len(encoded) >= 2: + leading_null_bytes += b"\x00" * _value(encoded[1], charset) + encoded = encoded[2:] + + decoded = decode(encoded, charset=charset) + buf = bytearray() + while decoded > 0: + buf.append(decoded & 0xFF) + decoded //= 256 + buf.reverse() + + return leading_null_bytes + bytes(buf) + + +def _value(ch, charset): + """Decodes an individual digit of a base62 encoded string.""" + + try: + return charset.index(ch) + except ValueError: + raise ValueError("base62: Invalid character (%s)" % ch) + + +def _check_type(value, expected_type): + """Checks if the input is in an appropriate type.""" + + if not isinstance(value, expected_type): + msg = "Expected {} object, not {}".format(expected_type, value.__class__.__name__) + raise TypeError(msg) diff --git a/packages/envied/src/envied/utils/osenvironment.py b/packages/envied/src/envied/utils/osenvironment.py new file mode 100644 index 0000000..40b3ecc --- /dev/null +++ b/packages/envied/src/envied/utils/osenvironment.py @@ -0,0 +1,24 @@ +import platform + + +def get_os_arch(name: str) -> str: + """Builds a name-os-arch based on the input name, system, architecture.""" + os_name = platform.system().lower() + os_arch = platform.machine().lower() + + # Map platform.system() output to desired OS name + if os_name == "windows": + os_name = "win" + elif os_name == "darwin": + os_name = "osx" + else: + os_name = "linux" + + # Map platform.machine() output to desired architecture + if os_arch in ["x86_64", "amd64"]: + os_arch = "x64" + elif os_arch == "arm64": + os_arch = "arm64" + + # Construct the dependency name in the desired format using the input name + return f"{name}-{os_name}-{os_arch}" diff --git a/packages/vinefeeder/README.md b/packages/vinefeeder/README.md new file mode 100644 index 0000000..d45f946 --- /dev/null +++ b/packages/vinefeeder/README.md @@ -0,0 +1,419 @@ +# VineFeeder + +VineFeeder is a dynamic Python-based application and **framework** that presents a graphical user interface (GUI) to act as a front-end for Devine (https://github.com/devine-dl/devine) or envied (https://github.com/envied-dl/envied) - each a video-downloader, envied being a fork of devine. + +Vinefeeder enables users to more easily interact with Devine's streaming services. The project allows users to browse and select media content from multiple services, each of which is dynamically loaded as a separate module. Each service has a configuration which will work out of the box, but Devine download options may be set on a service by service basis. + +Features: + +*Dynamic Service Loading*: Services are loaded dynamically from a predefined folder. + Each service has its own configuration and logic, allowing flexible media handling. + +*Service-Specific Parsing*: Each service can define its own method of parsing media + content, making the platform adaptable to different service architectures. + Additionally each service may store a string of download options for devine such as + video resolution or subtitle format. + +*Alphabetical Service Listing*: Services are displayed as clickable buttons in + alphabetical order, enhancing the user experience. + +*GUI Interface*: The interface is built using PyQt6, offering a user-friendly experience + for selecting media content. + +*Category Browsing*: Services support browsing by category, allowing users to explore + content within specific genres or collections. + +*Video Download*: Once media content is selected, videos can be downloaded directly + from the service using predefined tools (e.g., devine). + +*Ultra-High-definition*: Videos in UHD are automatically requested from sites that provide such quality. +hlg_status in config.yaml may be set to False to not do this. + +*Precision Episode Selection*: Vinefeeder handles the selection of episodes and 'feeds' + Devine one-by-one, making Devine's -w switch defunct. + + +**Installation** + +Requirements +**python 3.12** + + Python 3.12 or higher Note: PyQT6 needs PyQt6.QtWidgets + Required Python modules (install via pip): + beaupy + devine + httpx + jmespath + PyQt6 + PyQt6_sip + PyYAML + rich + Scrapy + +You can install the necessary VineFeeder packages with bash or a Window's Terminal. Make sure to install python modules to the same python environment (env) as Devine +First be sure to follow Devine or envied's install and set-up procedure and ensure it all works correctly to your liking. + +**If you have installed Devine using Poetry and you run Devine by 'poetry run devine' then install devine again using pip, keeping the poetry install for when you use the command line directly. The pip installed version is the developer's recommended way. If you go off-piste you may break something! Both versions sit happily together** + +**If you have installed Devine by any other way than via poetry or by 'pip install devine' then remove it and re-install using the correct method before running VineFeeder! The re-install should pick-up the last configuration. if not re-configure Devine. Make absolutely sure devine can be called from any folder on your system.** + +**If you are using envied make sure you have installed the tool version that runs from the command envied. See https://github.com/envied-dl/envied for installation details** + +**Setup** + +if you've installed Devine or envied , via pip or uv, in a specific python environment (virtual environment - venv) , first start that environment before installing VineFeeder to the same environment. + +For all users, after devine/envied is configured + +Clone the repository: +With bash or a Window's Terminal + + git clone https://github.com/vinefeeder/VineFeeder.git + cd VineFeeder + pip install -r requirements.txt + +will install a VineFeeder folder with all files. Change directory, move into VineFeeder + + +**Usage** + +From the VineFeeder folder run the application by executing the main script: + +With bash or a Window's Terminal + + python vinefeeder.py + or + python vinefeeder.py -help + +As set-up on start it will run with zero modification if Devine is correctly installed. There are six UK services and TVNZ active. +Regard TVNZ as experimental for the time being. For one thing Devine's TVNZ service fails on some +Sports titles and the VineFeeder service is still in testing. If Devine fails use the URL with Ozivine - +there are reports it works. This Ozivine fork has a downloader https://github.com/liam8888999/ozivine + +It is recommended to use PowerShell or Terminal in Windows and a Unix-like terminal in Linux - but select, via +preferences, a dark background for better contrast with the colours used in Vinefeeder. + +Note: envied has an issue releasing screen control back to VineFeeder when a download is finished. There is an option in the top-level config.yaml to reset the terminal after a download. As delivered the tetrminal-reset option is off. I don't think the issue appears with Windows; it has not been tested. +The reset clears screen history - which you may not want. So use batch mode. Select as many downloads as you need and the run the batch download. Download history will remain on the screen until all dowloads are finished. + +**Interacting with Services** + +Once the GUI is launched, you may interact with various streaming services by clicking on their corresponding buttons. +The 'URL or search' box MAY be used for an immediate search entry or direct-download URL or it may be left empty. +If left empty a menu is offered. +A search for a series-name will usually end with a list of episodes to select from. +If a series-url is pasted in the text-box then Vinefeeder will immediatly pass the url to the downloader. And being a series-url the downloader will download the complete series. So if you wish to select episodes use a search term. + +**Help** + +Starting VineFeeder with python vinefeeder.py --help will show options to set a service congfiguration - if required. +In the top level folder is config.yaml. Open the file in a text editor and set your preferred DOWNLOAD_ORCHESTRATOR to devine or envied. + +**Service Configuration** + +Most users will not need alter any configuration to download videos! + +However, if you have, in your past use of Devine resorted to setting Devine-download options other than -w etc. +You may continue to do with VineFeeder only you do so just once, in the config.yaml for each service. +Each service's config.yaml has an 'options:' entry just add the string you would use with devine e.g -q 720 to +ensure only 720p resolution videos are selected. + +To open a config.yaml for a service:- + + python vinefeeder.py --service-folder + python vinefeeder.py --service-folder ALL4, for example + +Edit the line starting 'options'. Use exactly the same syntax as Devine would require on its command line + +Image + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder8.png) + + +Services are displayed in alphabetical order for easy access. From there, you can: + + Browse Categories: Select a media category to view available content. + Search by URL: Input a direct URL to download media content. + Download Media: Select a media item to start the download process. + +**Services** + +Currently seven services are working - All4, BBC, ITVX, My5 STV, U and TPTV , all UK services plus TVNZ. +Other services: awaiting contributors!! + +**Text Entry Box** + +This will be the predominant method of using VineFeeder. Search on a keyword to locate a +programme series and click on its title when search finishes, to select any combination of +episodes for download. + +Additionlly the search box will take a URL for direct download. The URL may be for a single +episode and it will download directly. If you feed a URL for a *series of episode* i.e a +series-link then Devine will download the series. + +The text-entry-box is cleared automatically after use. Once a download successfully finishes +the screen displays 'Ready!' and waits for further entry. + +**Series numbers** + +Normally services will provide enough data to collect a series number. +When series numbers are not available, Vinfeeder sets a default number of 100. +This is for housekeeping reasons. Devine labelling defaults to 00 for any saved +videos without a specified series number. + +**Backing out** + +If you have followed a path to a selection and do not wish to continue then, +in most circumstances, depending on operating system, ctrl-C will return you +to a 'Ready!' status display on the screen within a second or two, and await +further operations. + +**Batch Mode** + +To select Batch Mode, move the GUI's batch-mode slider to the right. +When batch-mode is selected all devine download commands will be saved to +a file, batch.txt, created in the top level folder of VineFeeder. + +*BE SURE TO SELECT BATCH MODE BEFORE SELECTING A SERVICE!* + +The batch file will only be created once a service's video download is initiated. + +A banner in the GUI will then display the existence of batch.txt. +Any service may be used to add to batch.txt for later batch download. + +Clicking the Run Batch button will then download all the selected videos. + +After devine's downloads are complete, the option to delete the batch file will +appear. The file may also be manually deleted. + +Note: While batch-run is downloading you may still add videos to batch.txt if you paste +the video link for a service into VineFeeder's text box. You may not interact with a service +if the service needs to use Terminal to display. + +Batch mode preserves state; you may close VineFeeder down, if you wish, +and resume later. + +**UHD** + +Currently only the BBC service carries HLG output. Vinefeeder will attempt to automatically +detect if HLG videos are available. Software compares the search term to a fetched list of +HLG titles. For this reason the search term *must* accurately match the programme title. +The BBC programme "The Gold" will only be found with search terms 'the gold'; 'The Gold' +or upper/lower-case variations. +The current BBC H.265 output: + +1. A Good Girl's Guide to Murder +2. A Perfect Planet +3. Asia +4. Attenborough and the Giant Sea Monster +5. Attenborough's Wonder of Song +6. Blue Lights +7. Blue Planet II +8. Boarders +9. Boat Story +10. Boiling Point +11. Champion +12. Cunk on Life +13. Doctor Who +14. Doctor Who: 60th Anniversary Special +15. Doctor Who: Revolution of the Daleks +16. Doctor Who: The Power of the Doctor +17. Domino Day +18. Dynasties +19. Everything I know about Love +20. Families Like Ours +21. Frozen Planet II +22. Fungi: The Web of Life +23. Glastonbury +24. His Dark Materials +25. Industry, Series 2 and 3 +26. Life After Life +27. Mammals +28. Men Up +29. Mood +30. Mr Loverman +31. Murder is Easy +32. Nightsleeper +33. Peaky Blinders, Series 6 +34. Planet Earth III +35. Red Rose +36. Reunion +37. SAS Rogue Heroes +38. Serengeti, Series 3 +39. Seven Worlds, One Planet +40. Sherwood +41. Showtrial +42. Squad Goals: Dorking 'Til I Die +43. Storyville: Your Fat Friend +44. Strike: The Ink Black Heart +45. Swan Lake from English National Ballet +46. Ten Pound Poms +47. The Americas +48. The Bombing of Pan Am 103 +49. The Boy, the Mole, the Fox and the Horse +50. The English +51. The Gold +52. The Green Planet +53. The Jetty +54. The Mating Game +55. The Reckoning +56. The Responder +57. The Sixth Commandment +58. The Tourist +59. The Way +60. The Woman in the Wall +61. This City is Ours +62. This Town +63. Towards Zero +64. Vigil +65. What It Feels Like for a Girl +66. Wild Isles +67. Wreck + | | +#### NOTE +In the series above not every episode is available in HLG. Glastonbury is particularly +tricky. When Devine is told to expect HLG and then finds no output, devine will throw an error. +E.g this fails; devine dl -r HLG --list iP https://www.bbc.co.uk/iplayer/episodes/b007r6vx/glastonbury +as some output is SDR +A way around this is to start the service editor with the command: " python vinefeeder.py --service-folder BBC". +Then edit the line hlg_status: True; change True to False, and save the file. This turns off HLG from being downloaded. + +**Closing Down** + +The GUI should first be shutdown by mouse-clicking the top right X. The GUI then should +release control of the Terminal. ctrl-C in the Terminal may be required if shutting down +following an error. + +**Custom Services** + +Vinefeeder is a *framework* too. It has been written in such a way that most features +needed to scape and parse a website are already written and available. + +If you feel moderately confident with python, then writing a new service to allow Devine +to be run more interactively, is relatively straightforward. Most of the processes for +downloading, parsing and displaying for selection form part of the base functions and +are already written in this framework. + +Any new service will need an __init__.py to be written and to implement just four +methods. + +The ultimate aim of a services' __init__.py is to extract a list of video-data from a content +provide and store it a numerous dict items in a list container. The video-data is collected in +dict objects labelled 'episode'. + +Each episode has + + episode = { + 'series_no': ser_number, + 'title': ep_number, + 'url': url, + 'synopsis': synopsis + } + +Note 'title' may be an episode number or descriptive text. It varies with provider +The dict is added to the Vinefeeder storage list by:- + + self.add_episode(brand_slug, episode) + +Note brand_slug is a series-name. self.add_episode creates a lists of episode dicts +This happens in the __init__.py super-class of BaseLoader + + +To add a new service: + + Create a new folder for the service inside the services directory. + Add the following: + A config.yaml file with the media_dict. see examples in the existing services folder. + + An __init__.py file defining the loader class for the service. + The name of the loader class is constrained. It must take the service tag name, e.g. TVNZ + and use that to create the class-name TvnzLoader. This allows vinefeeder.py discover and + to call its use later. + Note: the loader class file MUST inherit (or sub-class) BaseLoader see ALL4/__init__.py + as an example. + Note: Most web-sites that provide on-demand streaming have a 'browse' or 'category' + page where video categories may be selected for view. Use some/all of these links to + produce a media_dict of ( catergory: link, } + + There are 4 methods to implement + receive + fetch_videos + second_fetch + fetch_videos_by_category + Follow any channel as a model except BBC and U. Most sites provide json to describe their video content. + Usually it is within a script. + There are two methods to extract the json in parsing_utils depending on whether a script id + is used or not. + Parsing utils uses XPATH as a locator syntax. + ChatGPT will helpt to find the XPATH syntax if you give it the web page and tell it + which javascript you need.XPATH is considerably faster than alternates such as bs4. + The BaseLoader class which your service must inherit, has methods to GET, POST or + return OPTIONS from the web. + DO NOT USE OTHER METHODS THAN THESE PROVIDED. + + RECEIVE + I find it easier to start off implementing a keyword search from the GUI text box. + Very few changes to an existing service receive method will be needed. + Copy one and adjust. Note the use of inx (index) to help specify action. + Vinefeeder's GUI calls the service, passing parameters in the process such as a + service's Devine download options. + By definiton some receive() parameters may be empty. + + FETCH_VIDEOS + Fetch_videos is very service specific and will need to send data to a web-site and processs the response to provide + an 'episode' list for display. + Here 'episode' is a container for a web site's response of suggestion of a single video or series that match the + search-word. + In the example below the parsed_data contains json from which we extract to add to BaseLoader's episode list via + self.add_episode(series_name, episode) + + if parsed_data and 'results' in parsed_data: + for item in parsed_data['results']: + series_name = item.get('brand', {}).get('websafeTitle', 'Unknown Series') + episode = { + 'title': item.get('brand', {}).get('title', 'Unknown Title'), + 'url': f"{item.get('brand', {}).get('href', '')}", + 'synopsis': item.get('brand', {}).get('description', 'No synopsis available.') + } + self.add_episode(series_name, episode) + + SECOND_FETCH + Again the process is much the same as in fetch_videos() a web site has its html harvested, + a script is extracted from which json is pulled using the facility methods in BaseLoader and parsing _utils. + + FETCH_VIDEO_BY_CATEGORY + Displays the media_dict from congig.yaml - so put any category heading and links in the new service config. + Once a category is selected, again parse the json and follow an existing service for a model answer, adjusting to suit the syntax required by our new service. + Potentially, you may not implement this if the site does not provide a worthwhile browse by category list, + or the data cannot be parsed readily. The service U falls into this category. + +VineFeeder will dynamically detect and load the new services on the next start. + +**Special Devine Commands** + +If your use requirements are such that each video you download using Devine needs many different parameters to be passed +to the downloader, and set different each time, this tool may not meet your needs: +see https://github.com/billybanana80/DevineGUI + +If however you are happy to set your download parameters once, variable for each service, the service's config.yaml, +then this project may work well for you, and provide the front-end Devine has always lacked. + +**Contributing** + +Contributors are welcomed to add services to front-end those services provided by Devine - see above. +Presently six UK services and New Zealand's TVNZ are fully configured; contributions for other services welcome. +. + +Images + ![VineFeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder1.png) + ![VineFeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder2.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder3.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder4.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder5.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder6.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder7.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder9.png) + + +**License** + +This project is licensed under the MIT License. See the LICENSE file for more details. diff --git a/packages/vinefeeder/pyproject.toml b/packages/vinefeeder/pyproject.toml new file mode 100644 index 0000000..e810277 --- /dev/null +++ b/packages/vinefeeder/pyproject.toml @@ -0,0 +1,21 @@ +[project] +name = "vinefeeder" +version = "0.1.0" +description = "GUI front-end for envied" +readme = "README.md" +requires-python = ">=3.11" +dependencies = [ + "envied", # resolved via [tool.uv.sources] at the workspace root + "PyQt6", # or GUI toolkit(s) + "rich", +] + +[project.scripts] +vinefeeder = "vinefeeder.__main__:main" # GUI entry point + +[build-system] +requires = ["uv_build>=0.8.12,<0.9.0"] +build-backend = "uv_build" + +[tool.uv.package-data] +vinefeeder = ["config.yaml", "services/**", "images/**"] diff --git a/packages/vinefeeder/src/vinefeeder/LICENSE b/packages/vinefeeder/src/vinefeeder/LICENSE new file mode 100644 index 0000000..6fb1235 --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 A_n_g_e_l_a + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/vinefeeder/src/vinefeeder/README.md b/packages/vinefeeder/src/vinefeeder/README.md new file mode 100644 index 0000000..d45f946 --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/README.md @@ -0,0 +1,419 @@ +# VineFeeder + +VineFeeder is a dynamic Python-based application and **framework** that presents a graphical user interface (GUI) to act as a front-end for Devine (https://github.com/devine-dl/devine) or envied (https://github.com/envied-dl/envied) - each a video-downloader, envied being a fork of devine. + +Vinefeeder enables users to more easily interact with Devine's streaming services. The project allows users to browse and select media content from multiple services, each of which is dynamically loaded as a separate module. Each service has a configuration which will work out of the box, but Devine download options may be set on a service by service basis. + +Features: + +*Dynamic Service Loading*: Services are loaded dynamically from a predefined folder. + Each service has its own configuration and logic, allowing flexible media handling. + +*Service-Specific Parsing*: Each service can define its own method of parsing media + content, making the platform adaptable to different service architectures. + Additionally each service may store a string of download options for devine such as + video resolution or subtitle format. + +*Alphabetical Service Listing*: Services are displayed as clickable buttons in + alphabetical order, enhancing the user experience. + +*GUI Interface*: The interface is built using PyQt6, offering a user-friendly experience + for selecting media content. + +*Category Browsing*: Services support browsing by category, allowing users to explore + content within specific genres or collections. + +*Video Download*: Once media content is selected, videos can be downloaded directly + from the service using predefined tools (e.g., devine). + +*Ultra-High-definition*: Videos in UHD are automatically requested from sites that provide such quality. +hlg_status in config.yaml may be set to False to not do this. + +*Precision Episode Selection*: Vinefeeder handles the selection of episodes and 'feeds' + Devine one-by-one, making Devine's -w switch defunct. + + +**Installation** + +Requirements +**python 3.12** + + Python 3.12 or higher Note: PyQT6 needs PyQt6.QtWidgets + Required Python modules (install via pip): + beaupy + devine + httpx + jmespath + PyQt6 + PyQt6_sip + PyYAML + rich + Scrapy + +You can install the necessary VineFeeder packages with bash or a Window's Terminal. Make sure to install python modules to the same python environment (env) as Devine +First be sure to follow Devine or envied's install and set-up procedure and ensure it all works correctly to your liking. + +**If you have installed Devine using Poetry and you run Devine by 'poetry run devine' then install devine again using pip, keeping the poetry install for when you use the command line directly. The pip installed version is the developer's recommended way. If you go off-piste you may break something! Both versions sit happily together** + +**If you have installed Devine by any other way than via poetry or by 'pip install devine' then remove it and re-install using the correct method before running VineFeeder! The re-install should pick-up the last configuration. if not re-configure Devine. Make absolutely sure devine can be called from any folder on your system.** + +**If you are using envied make sure you have installed the tool version that runs from the command envied. See https://github.com/envied-dl/envied for installation details** + +**Setup** + +if you've installed Devine or envied , via pip or uv, in a specific python environment (virtual environment - venv) , first start that environment before installing VineFeeder to the same environment. + +For all users, after devine/envied is configured + +Clone the repository: +With bash or a Window's Terminal + + git clone https://github.com/vinefeeder/VineFeeder.git + cd VineFeeder + pip install -r requirements.txt + +will install a VineFeeder folder with all files. Change directory, move into VineFeeder + + +**Usage** + +From the VineFeeder folder run the application by executing the main script: + +With bash or a Window's Terminal + + python vinefeeder.py + or + python vinefeeder.py -help + +As set-up on start it will run with zero modification if Devine is correctly installed. There are six UK services and TVNZ active. +Regard TVNZ as experimental for the time being. For one thing Devine's TVNZ service fails on some +Sports titles and the VineFeeder service is still in testing. If Devine fails use the URL with Ozivine - +there are reports it works. This Ozivine fork has a downloader https://github.com/liam8888999/ozivine + +It is recommended to use PowerShell or Terminal in Windows and a Unix-like terminal in Linux - but select, via +preferences, a dark background for better contrast with the colours used in Vinefeeder. + +Note: envied has an issue releasing screen control back to VineFeeder when a download is finished. There is an option in the top-level config.yaml to reset the terminal after a download. As delivered the tetrminal-reset option is off. I don't think the issue appears with Windows; it has not been tested. +The reset clears screen history - which you may not want. So use batch mode. Select as many downloads as you need and the run the batch download. Download history will remain on the screen until all dowloads are finished. + +**Interacting with Services** + +Once the GUI is launched, you may interact with various streaming services by clicking on their corresponding buttons. +The 'URL or search' box MAY be used for an immediate search entry or direct-download URL or it may be left empty. +If left empty a menu is offered. +A search for a series-name will usually end with a list of episodes to select from. +If a series-url is pasted in the text-box then Vinefeeder will immediatly pass the url to the downloader. And being a series-url the downloader will download the complete series. So if you wish to select episodes use a search term. + +**Help** + +Starting VineFeeder with python vinefeeder.py --help will show options to set a service congfiguration - if required. +In the top level folder is config.yaml. Open the file in a text editor and set your preferred DOWNLOAD_ORCHESTRATOR to devine or envied. + +**Service Configuration** + +Most users will not need alter any configuration to download videos! + +However, if you have, in your past use of Devine resorted to setting Devine-download options other than -w etc. +You may continue to do with VineFeeder only you do so just once, in the config.yaml for each service. +Each service's config.yaml has an 'options:' entry just add the string you would use with devine e.g -q 720 to +ensure only 720p resolution videos are selected. + +To open a config.yaml for a service:- + + python vinefeeder.py --service-folder + python vinefeeder.py --service-folder ALL4, for example + +Edit the line starting 'options'. Use exactly the same syntax as Devine would require on its command line + +Image + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder8.png) + + +Services are displayed in alphabetical order for easy access. From there, you can: + + Browse Categories: Select a media category to view available content. + Search by URL: Input a direct URL to download media content. + Download Media: Select a media item to start the download process. + +**Services** + +Currently seven services are working - All4, BBC, ITVX, My5 STV, U and TPTV , all UK services plus TVNZ. +Other services: awaiting contributors!! + +**Text Entry Box** + +This will be the predominant method of using VineFeeder. Search on a keyword to locate a +programme series and click on its title when search finishes, to select any combination of +episodes for download. + +Additionlly the search box will take a URL for direct download. The URL may be for a single +episode and it will download directly. If you feed a URL for a *series of episode* i.e a +series-link then Devine will download the series. + +The text-entry-box is cleared automatically after use. Once a download successfully finishes +the screen displays 'Ready!' and waits for further entry. + +**Series numbers** + +Normally services will provide enough data to collect a series number. +When series numbers are not available, Vinfeeder sets a default number of 100. +This is for housekeeping reasons. Devine labelling defaults to 00 for any saved +videos without a specified series number. + +**Backing out** + +If you have followed a path to a selection and do not wish to continue then, +in most circumstances, depending on operating system, ctrl-C will return you +to a 'Ready!' status display on the screen within a second or two, and await +further operations. + +**Batch Mode** + +To select Batch Mode, move the GUI's batch-mode slider to the right. +When batch-mode is selected all devine download commands will be saved to +a file, batch.txt, created in the top level folder of VineFeeder. + +*BE SURE TO SELECT BATCH MODE BEFORE SELECTING A SERVICE!* + +The batch file will only be created once a service's video download is initiated. + +A banner in the GUI will then display the existence of batch.txt. +Any service may be used to add to batch.txt for later batch download. + +Clicking the Run Batch button will then download all the selected videos. + +After devine's downloads are complete, the option to delete the batch file will +appear. The file may also be manually deleted. + +Note: While batch-run is downloading you may still add videos to batch.txt if you paste +the video link for a service into VineFeeder's text box. You may not interact with a service +if the service needs to use Terminal to display. + +Batch mode preserves state; you may close VineFeeder down, if you wish, +and resume later. + +**UHD** + +Currently only the BBC service carries HLG output. Vinefeeder will attempt to automatically +detect if HLG videos are available. Software compares the search term to a fetched list of +HLG titles. For this reason the search term *must* accurately match the programme title. +The BBC programme "The Gold" will only be found with search terms 'the gold'; 'The Gold' +or upper/lower-case variations. +The current BBC H.265 output: + +1. A Good Girl's Guide to Murder +2. A Perfect Planet +3. Asia +4. Attenborough and the Giant Sea Monster +5. Attenborough's Wonder of Song +6. Blue Lights +7. Blue Planet II +8. Boarders +9. Boat Story +10. Boiling Point +11. Champion +12. Cunk on Life +13. Doctor Who +14. Doctor Who: 60th Anniversary Special +15. Doctor Who: Revolution of the Daleks +16. Doctor Who: The Power of the Doctor +17. Domino Day +18. Dynasties +19. Everything I know about Love +20. Families Like Ours +21. Frozen Planet II +22. Fungi: The Web of Life +23. Glastonbury +24. His Dark Materials +25. Industry, Series 2 and 3 +26. Life After Life +27. Mammals +28. Men Up +29. Mood +30. Mr Loverman +31. Murder is Easy +32. Nightsleeper +33. Peaky Blinders, Series 6 +34. Planet Earth III +35. Red Rose +36. Reunion +37. SAS Rogue Heroes +38. Serengeti, Series 3 +39. Seven Worlds, One Planet +40. Sherwood +41. Showtrial +42. Squad Goals: Dorking 'Til I Die +43. Storyville: Your Fat Friend +44. Strike: The Ink Black Heart +45. Swan Lake from English National Ballet +46. Ten Pound Poms +47. The Americas +48. The Bombing of Pan Am 103 +49. The Boy, the Mole, the Fox and the Horse +50. The English +51. The Gold +52. The Green Planet +53. The Jetty +54. The Mating Game +55. The Reckoning +56. The Responder +57. The Sixth Commandment +58. The Tourist +59. The Way +60. The Woman in the Wall +61. This City is Ours +62. This Town +63. Towards Zero +64. Vigil +65. What It Feels Like for a Girl +66. Wild Isles +67. Wreck + | | +#### NOTE +In the series above not every episode is available in HLG. Glastonbury is particularly +tricky. When Devine is told to expect HLG and then finds no output, devine will throw an error. +E.g this fails; devine dl -r HLG --list iP https://www.bbc.co.uk/iplayer/episodes/b007r6vx/glastonbury +as some output is SDR +A way around this is to start the service editor with the command: " python vinefeeder.py --service-folder BBC". +Then edit the line hlg_status: True; change True to False, and save the file. This turns off HLG from being downloaded. + +**Closing Down** + +The GUI should first be shutdown by mouse-clicking the top right X. The GUI then should +release control of the Terminal. ctrl-C in the Terminal may be required if shutting down +following an error. + +**Custom Services** + +Vinefeeder is a *framework* too. It has been written in such a way that most features +needed to scape and parse a website are already written and available. + +If you feel moderately confident with python, then writing a new service to allow Devine +to be run more interactively, is relatively straightforward. Most of the processes for +downloading, parsing and displaying for selection form part of the base functions and +are already written in this framework. + +Any new service will need an __init__.py to be written and to implement just four +methods. + +The ultimate aim of a services' __init__.py is to extract a list of video-data from a content +provide and store it a numerous dict items in a list container. The video-data is collected in +dict objects labelled 'episode'. + +Each episode has + + episode = { + 'series_no': ser_number, + 'title': ep_number, + 'url': url, + 'synopsis': synopsis + } + +Note 'title' may be an episode number or descriptive text. It varies with provider +The dict is added to the Vinefeeder storage list by:- + + self.add_episode(brand_slug, episode) + +Note brand_slug is a series-name. self.add_episode creates a lists of episode dicts +This happens in the __init__.py super-class of BaseLoader + + +To add a new service: + + Create a new folder for the service inside the services directory. + Add the following: + A config.yaml file with the media_dict. see examples in the existing services folder. + + An __init__.py file defining the loader class for the service. + The name of the loader class is constrained. It must take the service tag name, e.g. TVNZ + and use that to create the class-name TvnzLoader. This allows vinefeeder.py discover and + to call its use later. + Note: the loader class file MUST inherit (or sub-class) BaseLoader see ALL4/__init__.py + as an example. + Note: Most web-sites that provide on-demand streaming have a 'browse' or 'category' + page where video categories may be selected for view. Use some/all of these links to + produce a media_dict of ( catergory: link, } + + There are 4 methods to implement + receive + fetch_videos + second_fetch + fetch_videos_by_category + Follow any channel as a model except BBC and U. Most sites provide json to describe their video content. + Usually it is within a script. + There are two methods to extract the json in parsing_utils depending on whether a script id + is used or not. + Parsing utils uses XPATH as a locator syntax. + ChatGPT will helpt to find the XPATH syntax if you give it the web page and tell it + which javascript you need.XPATH is considerably faster than alternates such as bs4. + The BaseLoader class which your service must inherit, has methods to GET, POST or + return OPTIONS from the web. + DO NOT USE OTHER METHODS THAN THESE PROVIDED. + + RECEIVE + I find it easier to start off implementing a keyword search from the GUI text box. + Very few changes to an existing service receive method will be needed. + Copy one and adjust. Note the use of inx (index) to help specify action. + Vinefeeder's GUI calls the service, passing parameters in the process such as a + service's Devine download options. + By definiton some receive() parameters may be empty. + + FETCH_VIDEOS + Fetch_videos is very service specific and will need to send data to a web-site and processs the response to provide + an 'episode' list for display. + Here 'episode' is a container for a web site's response of suggestion of a single video or series that match the + search-word. + In the example below the parsed_data contains json from which we extract to add to BaseLoader's episode list via + self.add_episode(series_name, episode) + + if parsed_data and 'results' in parsed_data: + for item in parsed_data['results']: + series_name = item.get('brand', {}).get('websafeTitle', 'Unknown Series') + episode = { + 'title': item.get('brand', {}).get('title', 'Unknown Title'), + 'url': f"{item.get('brand', {}).get('href', '')}", + 'synopsis': item.get('brand', {}).get('description', 'No synopsis available.') + } + self.add_episode(series_name, episode) + + SECOND_FETCH + Again the process is much the same as in fetch_videos() a web site has its html harvested, + a script is extracted from which json is pulled using the facility methods in BaseLoader and parsing _utils. + + FETCH_VIDEO_BY_CATEGORY + Displays the media_dict from congig.yaml - so put any category heading and links in the new service config. + Once a category is selected, again parse the json and follow an existing service for a model answer, adjusting to suit the syntax required by our new service. + Potentially, you may not implement this if the site does not provide a worthwhile browse by category list, + or the data cannot be parsed readily. The service U falls into this category. + +VineFeeder will dynamically detect and load the new services on the next start. + +**Special Devine Commands** + +If your use requirements are such that each video you download using Devine needs many different parameters to be passed +to the downloader, and set different each time, this tool may not meet your needs: +see https://github.com/billybanana80/DevineGUI + +If however you are happy to set your download parameters once, variable for each service, the service's config.yaml, +then this project may work well for you, and provide the front-end Devine has always lacked. + +**Contributing** + +Contributors are welcomed to add services to front-end those services provided by Devine - see above. +Presently six UK services and New Zealand's TVNZ are fully configured; contributions for other services welcome. +. + +Images + ![VineFeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder1.png) + ![VineFeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder2.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder3.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder4.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder5.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder6.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder7.png) + ![Vinefeeder GUI](https://github.com/vinefeeder/VineFeeder/blob/main/images/vinefeeder9.png) + + +**License** + +This project is licensed under the MIT License. See the LICENSE file for more details. diff --git a/packages/vinefeeder/src/vinefeeder/__init__.py b/packages/vinefeeder/src/vinefeeder/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/packages/vinefeeder/src/vinefeeder/__main__.py b/packages/vinefeeder/src/vinefeeder/__main__.py new file mode 100644 index 0000000..9b59ca6 --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/__main__.py @@ -0,0 +1,688 @@ +from PyQt6.QtWidgets import (QApplication,QWidget,QVBoxLayout,QLabel,QLineEdit,QPushButton,QCheckBox,QFrame,) +from PyQt6.QtCore import Qt +from PyQt6.QtGui import QPalette, QColor +from PyQt6.QtCore import QTimer +from PyQt6.QtWidgets import QHBoxLayout, QSlider +import sys +import os +import re +from importlib import resources +import importlib +from pathlib import Path +import yaml +from beaupy import select +import threading +from .pretty import pretty_print +from rich.console import Console +from .parsing_utils import prettify +import click +import subprocess +from .batchloader import batchload +import pkgutil +#import inspect + +PAGE_SIZE = 8 # size of beaupy pagination + + +console = Console() + +catppuccin_mocha = { + # Colors based on "CatppuccinMocha" from Gogh themes + "bg": "rgb(30,30,46)", + "text": "rgb(205,214,244)", + "text2": "rgb(162,169,193)", # slightly darker + "black": "rgb(69,71,90)", + "bright_black": "rgb(88,91,112)", + "red": "rgb(243,139,168)", + "green": "rgb(166,227,161)", + "yellow": "rgb(249,226,175)", + "blue": "rgb(137,180,250)", + "pink": "rgb(245,194,231)", + "cyan": "rgb(148,226,213)", + "gray": "rgb(166,173,200)", + "bright_gray": "rgb(186,194,222)", + "dark_gray": "rgb(54,54,84)", +} + + +""" +Example usage: + uv run vinefeeder --help # Show help text + uv run vinefeeder # Launch VineFeeder GUI + To run envied: uv run envied + + In the GUI:- + enter search text and select a service + or + enter a video URL for direct download + and select a service + or + leave the seach box blank and select a service + a further menu will appear in the terminal + After a download has finished and 'Ready!' appears + another service may be started. + In the terminal:- + enter the number(s) of the service to download + see + + +""" +# --- config helpers ---------------------------------------------------------- + + +_PKG_NAME = "vinefeeder" +_CFG_NAME = "config.yaml" + +def _user_config_dir() -> Path: + # XDG on Linux; AppData\Roaming on Windows; ~/.config on others + if os.name == "nt": + base = os.environ.get("APPDATA") or (Path.home() / "AppData" / "Roaming") + return Path(base) / "VineFeeder" + xdg = os.environ.get("XDG_CONFIG_HOME") + return (Path(xdg) if xdg else Path.home() / ".config") / "vinefeeder" + +def _user_config_path() -> Path: + return _user_config_dir() / _CFG_NAME + +def load_config_with_fallback() -> tuple[dict, Path | None]: + """ + Returns (config_dict, user_path_if_used_or_None). + Prefers user config; falls back to package-bundled default. + """ + user_path = _user_config_path() + if user_path.exists(): + data = yaml.safe_load(user_path.read_text(encoding="utf-8")) or {} + return data, user_path + + # packaged default + with resources.files(_PKG_NAME).joinpath(_CFG_NAME).open("rb") as f: + data = yaml.safe_load(f) or {} + return data, None + +def save_user_config(cfg: dict) -> Path: + """Writes config to the user path, creating the directory as needed.""" + p = _user_config_path() + p.parent.mkdir(parents=True, exist_ok=True) + with p.open("w", encoding="utf-8") as f: + yaml.safe_dump(cfg, f, default_flow_style=False) + return p + +def derive_loader_class_name(service_modname: str) -> str: + """ + Derive a class name from a service module name. + Examples: + 'ALL4' -> 'All4Loader' + 'BBC' -> 'BbcLoader' + 'ITVX' -> 'ItvxLoader' + 'TVNZ' -> 'TvnzLoader' + 'MY5' -> 'My5Loader' + 'STV' -> 'StvLoader' + 'TPTV' -> 'TptvLoader' + 'U' -> 'ULoader' + """ + # Keep only alphanumerics, split on boundaries, then TitleCase & join + cleaned = re.sub(r'[^A-Za-z0-9]+', ' ', service_modname).strip() + # Title-case the whole thing (digits stay as-is) + titled = ''.join(part.capitalize() for part in cleaned.split()) + if not titled: # safety + titled = service_modname.capitalize() + return f"{titled}Loader" + + +class VineFeeder(QWidget): + def __init__(self): + """ + Initialize the VineFeeder object. + + This method sets up the VineFeeder object by calling necessary functions to + initialize the UI, store available services dynamically, load services, + and create buttons dynamically. + """ + super().__init__() + self.init_ui() + self.available_services = {} # Store available services dynamically + self.available_service_media_dict = {} + self.available_services_hlg_status = {} + self.available_services_options = {} + self.load_services() # Discover and load services + self.create_service_buttons() # Create buttons dynamically + + def init_ui(self): + """ + Initialize the UI components and layout. + + This method creates the necessary UI components and sets up the layout. + + """ + self.setWindowTitle("VineFeeder") + layout = QVBoxLayout() + + self.search_url_label = QLabel("URL or Search") + layout.addWidget(self.search_url_label) + self.search_url_entry = QLineEdit() + self.search_url_entry.setStyleSheet(""" + QLineEdit { + border: 2px solid pink; + } + QLineEdit:focus { + border: 2px solid hotpink; + outline: none; + } + """) + + layout.addWidget(self.search_url_entry) + + highlighted_frame = QFrame() + self.highlighted_layout = QVBoxLayout() + highlighted_frame.setLayout(self.highlighted_layout) + highlighted_frame.setStyleSheet( + "border: 1px solid pink;" + ) + layout.addWidget(highlighted_frame) + # + sechighlighted_frame = QFrame() + self.sechighlighted_layout = QVBoxLayout() + sechighlighted_frame.setLayout(self.sechighlighted_layout) + sechighlighted_frame.setStyleSheet( + "border: 1px solid pink;" + + ) + layout.addWidget(sechighlighted_frame) + + # Batch Mode Layout + batch_mode_layout = QHBoxLayout() + self.batch_slider = QSlider(Qt.Orientation.Horizontal) + self.batch_slider.setMinimum(0) + self.batch_slider.setMaximum(1) + self.batch_slider.setTickPosition(QSlider.TickPosition.NoTicks) + self.batch_slider.setSingleStep(1) + self.batch_slider.setFixedWidth(80) + self.batch_slider.valueChanged.connect(self.toggle_batch_mode) + self.batch_slider.setStyleSheet("""QSlider::groove:horizontal { + border: 1px solid #999999; + height: 5px; + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 hotpink, stop:1 #c4c4c4); + margin: 2px 0; + } + QSlider::handle:horizontal { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f); + border: 1px solid #5c5c5c; + width: 18px; + height: 18px; + margin: -12px 0; + border-radius: 3px; + } + """) + + # Batch Mode Label + self.batch_label = QLabel("Batch Mode") + self.batch_label.setStyleSheet("color: white; padding-left: 5px; border: none;") + + batch_mode_layout.addWidget(self.batch_label) + batch_mode_layout.addWidget(self.batch_slider) + + batch_mode_frame = QFrame() + batch_mode_frame.setLayout(batch_mode_layout) + batch_mode_frame.setStyleSheet("border: none;") + self.sechighlighted_layout.addWidget(batch_mode_frame) + + # Batch File Existence Indicator + self.batch_file_status = QLabel("") + self.sechighlighted_layout.addWidget(self.batch_file_status) + + + # Run Batch Button + self.run_batch_button = QPushButton("Run Batch") + self.run_batch_button.clicked.connect(batchload) + self.run_batch_button.setEnabled(False) # Initially disabled + self.style_batch_button(self.run_batch_button) + self.sechighlighted_layout.addWidget(self.run_batch_button) + + # Load batch mode from config + self.load_batch_mode() + + self.dark_mode_checkbox = QCheckBox("Dark Mode") + self.dark_mode_checkbox.setChecked(True) # Set dark mode by default + self.dark_mode_checkbox.stateChanged.connect(self.toggle_dark_mode) + layout.addWidget(self.dark_mode_checkbox, alignment=Qt.AlignmentFlag.AlignLeft) + + self.setLayout(layout) + # Poll for batch.txt changes every 2 seconds + self.batch_poll_timer = QTimer(self) + self.batch_poll_timer.timeout.connect(self.update_batch_file_indicator) + self.batch_poll_timer.start(2000) # 2000 ms = 2 seconds + + # Use a timer to delay the dark mode application slightly + QTimer.singleShot(100, self.toggle_dark_mode) # 100ms delay to ensure rendering + + def load_batch_mode(self): + try: + cfg, _ = load_config_with_fallback() + batch_on = bool(cfg.get("BATCH_DOWNLOAD", False)) + self.batch_slider.setValue(1 if batch_on else 0) + self.run_batch_button.setEnabled(batch_on) + except Exception as e: + console.print(f"[{catppuccin_mocha['text2']}][warning] Could not load batch mode config: {e}[/]") + self.batch_slider.setValue(0) + self.run_batch_button.setEnabled(False) + + self.update_batch_file_indicator() + + + def toggle_batch_mode(self): + state = self.batch_slider.value() == 1 + + if state: + self.batch_label.setStyleSheet("color: lightgreen; padding-left: 5px; border: none;") + else: + self.toggle_dark_mode() + + self.run_batch_button.setEnabled(state) + self.update_batch_file_indicator() + + # Update config (write to the *user* config location) + try: + cfg, _ = load_config_with_fallback() + cfg["BATCH_DOWNLOAD"] = state + save_user_config(cfg) + except Exception as e: + console.print(f"[{catppuccin_mocha['text2']}][warning] Could not update config.yaml: {e}[/]") + + + + + + def style_batch_button(self, button): + button.setStyleSheet(""" + color: white; + background-color:#1E1E2E; + border: none; + padding: 5px; + """) + + def update_batch_file_indicator(self): + exists = os.path.exists("./batch.txt") + if hasattr(self, "_batch_file_last_state") and self._batch_file_last_state == exists: + return # no change + self._batch_file_last_state = exists + + if exists: + self.batch_file_status.setText("✅ batch file exists") + self.batch_file_status.setStyleSheet("color: lightgreen; padding-left: 25px; border: none;") + else: + self.batch_file_status.setText("❌ batch file missing") + self.batch_file_status.setStyleSheet("color: hotpink; padding-left: 25px; border: none;") + + + + def toggle_dark_mode(self): + """ + Toggle the application's dark mode on or off. + + This method is connected to the dark mode checkbox's stateChanged signal. + When the checkbox is checked, the application is set to dark mode. When unchecked, + the application is set to light mode. + + In dark mode, the window and text colors are changed to dark colors, + and the search label and dark mode checkbox text are changed to white. + Buttons are also set to have a white text color and a dark grey background color. + + In light mode, the window and text colors are set back to their default values, + and the search label and dark mode checkbox text are changed back to black. + Buttons are also reset to their default appearance. + + NOTE: This method uses a QTimer to delay the application of the dark mode style slightly. + This is to ensure that the rendering of the UI components is complete + before applying the style changes. + """ + if self.dark_mode_checkbox.isChecked(): + palette = QPalette() + palette.setColor(QPalette.ColorRole.Window, QColor(53, 53, 53)) + palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.white) + palette.setColor( + QPalette.ColorRole.Base, QColor(30, 30, 54) + ) # QColor(35, 35, 35)) + palette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white) + self.setPalette(palette) + self.search_url_label.setStyleSheet("color: white;") + self.dark_mode_checkbox.setStyleSheet("color: white;") + + # Set button text to white in dark mode, remove red border + for i in range(self.highlighted_layout.count()): + button = self.highlighted_layout.itemAt(i).widget() + if isinstance(button, QPushButton): + button.setStyleSheet(""" + color: white; + background-color:#1E1E2E; + border: none; + padding: 5px; + """) + button.repaint() # Force update of the button's appearance + + else: + self.setPalette(QApplication.palette()) + self.search_url_label.setStyleSheet("color: black;") + self.dark_mode_checkbox.setStyleSheet("color: black;") + self.batch_label.setStyleSheet("color: black;") + + for i in range(self.highlighted_layout.count()): + button = self.highlighted_layout.itemAt(i).widget() + if isinstance(button, QPushButton): + button.setStyleSheet(""" + color: black; + background-color: #aeaeae; + border: none; + padding: 5px; + """) + button.repaint() # Force update of the button's appearance + # Update batch_label based on dark mode and batch mode state + if self.batch_slider.value() == 1: + self.batch_label.setStyleSheet("color: lightgreen; padding-left: 5px; border: none;") + else: + if self.dark_mode_checkbox.isChecked(): + self.batch_label.setStyleSheet("color: white; padding-left: 5px; border: none;") + else: + self.batch_label.setStyleSheet("color: black; padding-left: 5px; border: none;") + + + def load_services(self): + """ + Discover subpackages under vinefeeder.services, import them (executes __init__.py), + read config.yaml, and store both module + loader class for later use. + """ + import vinefeeder.services as services_pkg + + self.available_services.clear() + self.available_services_hlg_status.clear() + self.available_services_options.clear() + self.available_service_media_dict.clear() + + for _finder, modname, ispkg in pkgutil.iter_modules(services_pkg.__path__): + if not ispkg: + continue + + fqname = f"{services_pkg.__name__}.{modname}" + + # Import executes the service's __init__.py + try: + module = importlib.import_module(fqname) + except Exception as e: + console.print(f"[{catppuccin_mocha['text2']}][warning] Could not import service {fqname}: {e}[/]") + continue + + # Try reading config.yaml alongside the service package + cfg = {} + try: + cfg_res = resources.files(fqname).joinpath("config.yaml") + if cfg_res.exists(): + cfg = yaml.safe_load(cfg_res.read_text(encoding="utf-8")) or {} + except Exception as e: + console.print(f"[{catppuccin_mocha['text2']}][warning] Could not read config for {fqname}: {e}[/]") + + service_name = cfg.get("service_name", modname) + service_media_dict = cfg.get("media_dict", {}) + service_hlg_status = cfg.get("hlg_status", False) + service_options = cfg.get("options", {}) + + # Either explicit loader class from config, or derived + loader_class = cfg.get("loader_class") or derive_loader_class_name(modname) + + self.available_services_hlg_status[service_name] = service_hlg_status + self.available_services_options[service_name] = service_options + self.available_service_media_dict[service_name] = service_media_dict + + # Store metadata for later use (module name + class name) + self.available_services[service_name] = { + "module": fqname, + "loader_class": loader_class, + } + + + + def load_service(self, service_name: str): + self.update_batch_file_indicator() + + meta = self.available_services.get(service_name) + if not meta: + console.print(f"[{catppuccin_mocha['text2']}]Service {service_name} not found![/]") + console.print(f"[{catppuccin_mocha['text2']}]Try again[/]") + sys.exit(0) + + fqname = meta["module"] + cls_name = meta["loader_class"] + + try: + module = importlib.import_module(fqname) + if not hasattr(module, cls_name): + raise AttributeError(f"{fqname} has no class {cls_name}") + loader_class = getattr(module, cls_name) + loader_instance = loader_class() + + hlg_status = self.available_services_hlg_status[service_name] + options = self.available_services_options[service_name] + + text = self.search_url_entry.text().strip() + text_to_pass = text if text else None + + if hasattr(loader_instance, "receive"): + if text_to_pass: + if "http" in text_to_pass: + loader_instance.receive(1, text_to_pass, None, hlg_status, options) + self.clear_search_box() + loader_instance.clean_terminal() + sys.exit(0) + else: + loader_instance.receive(3, text_to_pass, None, hlg_status, options) + self.clear_search_box() + loader_instance.clean_terminal() + sys.exit(0) + else: + inx, text_to_pass, found = self.do_action_select(service_name) + loader_instance.receive(inx, text_to_pass, found, hlg_status, options) + loader_instance.clean_terminal() + sys.exit(0) + else: + console.print(f"[{catppuccin_mocha['pink']}]Service class {cls_name} has no 'receive' method[/]") + + except Exception as e: + console.print(f"[{catppuccin_mocha['pink']}]Error loading service: {service_name} {e}[/]") + console.print(f"[{catppuccin_mocha['pink']}]Try again[/]") + sys.exit(0) + + + + def create_service_buttons(self): + """Create buttons for each dynamically loaded service in alphabetical order.""" + # Sort the services alphabetically by their names + for service_name in sorted(self.available_services.keys()): + button = QPushButton(service_name) + button.clicked.connect( + self.run_load_service_thread(service_name) + ) # Bind to threaded service loading + self.highlighted_layout.addWidget(button) + # + + def do_action_select(self, service_name): + """ + Top level choice for action required. Called if search_box is empty. + Uses beaupy to display a list of 4 options: + - Search by keyword + - Greedy Search by URL + - Browse by Category + - Download by URL + Uses the selected option to call the appropriate function: + - 0 for greedy search with url + - 1 for direct url download + - 2 for browse + - 3 for search with keyword + Returns a tuple of the function selector and the url or None if no valid data is entered. + """ + + fn = [ + "Greedy Search by URL", + "Download by URL", + "Browse by Category", + "Search by keyword(s)", + ] + # check for batch.txt + self.update_batch_file_indicator() + + action = select( + fn, preprocessor=lambda val: prettify(val), cursor="🢧", cursor_style="pink1" + ) + + if "Greedy" in action: + url = input("URL for greedy search ") + return 0, url, None + + elif "Download" in action: + url = input("URL for direct download ") + return 1, url, None + + elif "Browse" in action: + media_dict = self.available_service_media_dict[service_name] + beaupylist = [] + for item in media_dict: + beaupylist.append(item) + found = select( + beaupylist, + preprocessor=lambda val: prettify(val), + cursor="🢧", + cursor_style="pink1", + page_size=PAGE_SIZE, + pagination=True, + ) + url = media_dict[found] + return 2, url, found # found is category + + elif "Search" in action: + keyword = input("Keyword(s) for search ") + return 3, keyword, None + + else: + console.print(f"[{catppuccin_mocha['text2']}]No valid data entered![/]") + sys.exit(0) + + def run_load_service_thread(self, service_name): + """Start a new thread to load the service.""" + return lambda: threading.Thread( + target=self.load_service, args=(service_name,) + ).start() + + + + def clear_search_box(self): + self.search_url_entry.clear() + + +@click.command() +@click.option( + "--service-folder", + type=str, + default="services", + help="Specify a service folder for adding **Devine** download options.", +) +@click.option( + "--list-services", + is_flag=True, + help="List available services in the specified service folder.", +) +@click.option( + "--select-series", + is_flag=True, + help="How to select which series you need from those available", +) +def cli(service_folder, list_services, select_series): + """ + uv run vinefeeder --help to show help\n + uv run vinefeeder --list-services to list available services\n + uv run vinefeeder --service-folder to edit config.yaml + uv run vinefeeder --select-series list, range or 'all'\n\n + In the GUI:- + The text box will take keyword(s) or a URL for download from a button selected service. + Or leave the text box blank for further options when the service button is clicked.\n + Batch Mode: slide the slider to the right to engage Batch Mode. + All devine commands will be saved to a batch.txt file in the VineFeeder folder. + When a green 'batch file exists' notice is present the 'Run Batch' button will process + the batch.txt file. + At the end of download the option to delete the batch.txt file will appear. + It may be deleted manually at any time. + + """ + # Ensure service-folder paths are handled correctly + if os.path.isabs(service_folder): + base_path = os.path.abspath(service_folder) + else: + base_path = ( + os.path.abspath(os.path.join("packages/vinefeeder/src/vinefeeder/services", service_folder)) + if service_folder != "services" + else os.path.abspath("services") + ) + + # Handle --list-services option + if list_services: + if not os.path.exists(base_path): + console.print(f"[{catppuccin_mocha['pink']}]Error: The service folder '{base_path}' does not exist![/]") + return + + console.print(f"[{catppuccin_mocha['pink']}]Available services in '{base_path}':") + for service in os.listdir(base_path): + service_dir = os.path.join(base_path, service) + config_path = os.path.join(service_dir, "config.yaml") + if os.path.isdir(service_dir) and os.path.exists(config_path): + console.print(f"[{catppuccin_mocha['text2']}] - {service}[/]") + return + + # Handle --select-series option + if select_series: + console.print(f"[{catppuccin_mocha['text2']}]Series Selection:[/]") + console.print( + f"[{catppuccin_mocha['text2']}]Check the available series.\nUse, for example,\n1,3,7 or a range 3..8,\nor 'all' or 0 to show all series.[/]" + ) + return + + # Default behavior: Open config.yaml + config_path = os.path.join(base_path, "config.yaml") + + # Check if the services folder exists + if not os.path.exists(base_path): + console.print(f"[{catppuccin_mocha['pink']}]Error: The service folder '{base_path}' does not exist![/]") + return + + # Check if config.yaml exists + if not os.path.exists(config_path): + console.print( + f"[{catppuccin_mocha['text2']}]Error: The file '{config_path}' does not exist! Please create it or specify a valid service folder.[/]" + ) + return + + # Open the file in the system's default text editor + try: + if os.name == "nt": # For Windows + os.startfile(config_path) + elif os.name == "posix": # For Linux/Mac + subprocess.run(["xdg-open", config_path], check=True) + else: + console.print(f"[{catppuccin_mocha['text2']}]Unsupported operating system.[/]") + except Exception as e: + console.print(f"[{catppuccin_mocha['pink']}]Failed to open the file: {e}[/]") + + +def main(): + """ + Entry point for the script. Decides between GUI launch and CLI behavior. + """ + if len(sys.argv) == 1: + # say hello nicely + pretty_print() + app = QApplication(sys.argv) + window = VineFeeder() + window.show() + sys.exit(app.exec()) + else: + # CLI arguments passed, handle them with click + cli() + + +if __name__ == "__main__": + main() diff --git a/packages/vinefeeder/src/vinefeeder/base_loader.py b/packages/vinefeeder/src/vinefeeder/base_loader.py new file mode 100644 index 0000000..88ba021 --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/base_loader.py @@ -0,0 +1,486 @@ +from httpx import Client +from .parsing_utils import parse_json, prettify, list_prettify +from beaupy import select, select_multiple +from rich.console import Console +from abc import abstractmethod +import os +import platform +import sys +import time +from .pretty import create_clean_panel +from .pretty import catppuccin_mocha +import yaml +import subprocess +from .__main__ import load_config_with_fallback, save_user_config + +console = Console() + + +class BaseLoader: + def __init__(self, headers): + """Initialize the BaseLoader class with the provided headers. + + Parameters: + headers (dict): The headers to be used for making HTTP requests. + + Attributes: + client: An instance of the Client class for making HTTP requests. + headers (dict): The headers used for making HTTP requests. + series_data (dict): In-memory store for initial series selection. + final_episode_data (list): List to store final episode data. + console: An instance of the Console class for displaying output. + + """ + self.client = Client(timeout=20) + self.headers = headers + self.series_data = {} + self.final_episode_data = [] + self.browse_video_list = [] + self.category = None + + myconfig, _ = load_config_with_fallback() + self.BATCH_DOWNLOAD = myconfig['BATCH_DOWNLOAD'] + #self.DOWNLOAD_ORCHESTRATOR = myconfig['DOWNLOAD_ORCHESTRATOR'] + self.TERMINAL_RESET = myconfig['TERMINAL_RESET'] + + + def reset_terminal(self): + if self.DOWNLOAD_ORCHESTRATOR == "envied" and not self.BATCH_DOWNLOAD: + if os.name == 'nt': # Windows + os.system('cls') + # Optionally, reinitialize ANSI or console buffer here if needed + else: # Unix/Linux/macOS + try: + subprocess.run(['reset'], check=True) + except Exception: + os.system('clear') # fallback if 'reset' is not available + + + def clear_series_data(self): + self.series_data = {} + + def get_series_data(self): + return self.series_data + + def get_data(self, url, headers=None, params=None): + """Fetch data from a given URL.""" + + if not headers: + headers = self.headers + response = self.client.get( + url, headers=headers, params=params, follow_redirects=True + ) + + if response.status_code != 200: + raise Exception(f"Request failed with status {response.status_code}") + return response.text + + def get_options(self, url, headers=None): + if not headers: + headers = self.headers + response = self.client.options(url, headers=headers, follow_redirects=True) + if response.status_code != 200: + raise Exception("Failed to retrieve options-data.") + return response.headers + + def post_data(self, url, data=None, json=None, headers=None): + if not headers: + headers = self.headers + response = self.client.post( + url, data=data, json=json, headers=headers, follow_redirects=True + ) + if response.status_code != 200: + raise Exception("Failed to retrieve data.") + return response + + def parse_data(self, html): + """Parse HTML data into JSON format.""" + return parse_json(html) + + def normalize_episode(self, episode): + """ + Normalize the episode dictionary for comparison. + Focus on series_no, title, and synopsis. + """ + return ( + str(episode.get("series_no", "")).strip().lower(), + episode.get("title", "").strip().lower(), + episode.get("synopsis", "").strip().lower(), + ) + + def add_episode_remove_duplicates(self, series_name, episode): + """Add an episode to the series in memory. + Remove duplicates in episode stream + + Expects episode to be a dict with series_no, title, and synopsis keys.""" + if series_name not in self.series_data: + self.series_data[series_name] = [] + + # Normalize the current episode + normalized_episode = self.normalize_episode(episode) + + # Check for duplicates using normalized episodes + if all( + self.normalize_episode(existing) != normalized_episode + for existing in self.series_data[series_name] + ): + self.series_data[series_name].append(episode) + + return + + def add_episode(self, series_name, episode): + """Add an episode to the series in memory. + Episode may be Any""" + if series_name not in self.series_data: + self.series_data[series_name] = [] + self.series_data[series_name].append(episode) + return + + def get_number_of_episodes(self, series_name): + return len(self.series_data.get(series_name, [])) + + def add_final_episode(self, episode): + """build episode list for final selction for download""" + if episode not in self.final_episode_data: # Ensure no duplicates + self.final_episode_data.append(episode) + + def sort_episodes(self, data): # sort final episode data + # ONLY for some services + # Sort the list by series_no and episode_no (title: will fail if title is free string) + try: + sorted_data = sorted( + data, + key=lambda x: (int(x["series_no"]), int(x["title"])), + ) + + return sorted_data + except Exception: + return data + + def get_series(self, series_name=None): + """Return all episodes from a specific series or all series data.""" + if series_name: + return self.series_data.get(series_name, []) + return self.series_data + + def display_series_list(self): + """Use beaupy to list all series and allow user to select one.""" + series_list = list(self.series_data.keys()) + selected_series = select( + series_list, + preprocessor=lambda val: prettify(val), + cursor="🢧", + cursor_style="pink1", + page_size=12, + pagination=True, + ) + return selected_series + + def display_episode_list(self, series_name): + """Use beaupy to display episodes for a selected series.""" + episodes = self.series_data.get(series_name, []) + episode_list = [ + f"{ep['series_no']}, {ep['title']}, {ep['url']}, \n\t {ep['synopsis']}" + for ep in episodes + ] + selected_episodes = select_multiple( + episode_list, + preprocessor=lambda val: prettify(val), + minimal_count=1, + cursor_style="pink1", + pagination=True, + page_size=8, + ) + return selected_episodes + + def get_final_episode_list(self): + return self.final_episode_data + + def display_final_episode_list(self, final_episode_data): + """Use beaupy to display episodes for a selected series.""" + # episodes = self.series_data.get(series_name, []) + episode_list = [ + f"{ep['series_no']}, {ep['title']}, {ep['url']}, \n\t {ep['synopsis']}" + for ep in final_episode_data + ] + selected_episodes = select_multiple( + episode_list, + preprocessor=lambda val: prettify(val), + minimal_count=1, + cursor_style="pink1", + pagination=True, + page_size=8, + ) + return selected_episodes + + def get_selected_url(self, series_name): + """Return single url for series""" + episode = self.series_data.get(series_name, []) + # list with one dictionary item + url = episode[0]["url"] + return url + + def get_episodes_series_numbers(self, series_name): + """Return a sorted list of series numbers for a given series name.""" + try: + mysorted_list = sorted( + {int(ep["series_no"]) for ep in self.series_data[series_name]} + ) + except Exception: + # chars in series number cannot be parsed to an int + unsorted_list = [ep["series_no"] for ep in self.series_data[series_name]] + return unsorted_list + + return mysorted_list + + def display_non_contiguous_series(self, episode_series_numbers): + """ + Display the non-contiguous series numbers in a grid format with 7 columns. + This is used when the series numbers are not contiguous, so the user can + easily see which series numbers are available. + """ + num_columns = 7 + num_rows = (len(episode_series_numbers) + num_columns - 1) // num_columns + + # Create a grid-like string to display in the panel + grid_content = "" + for row in range(num_rows): + for col in range(num_columns): + idx = row * num_columns + col + if idx < len(episode_series_numbers): + grid_content += f"{episode_series_numbers[idx]:<3} " + else: + grid_content += " " # Add spacing for alignment + grid_content += "\n" # Add a newline after each row + + return grid_content.strip() + + def prepare_series_for_episode_selection(self, series_name): + """ + Prepare the series data for episode selection and display the final episode list. + Given a selected series name, fetch its HTML and extract its episodes. + The function will check if the series numbers are contiguous and display + the final episode list. + It will return the URLs for the selected episodes. + """ + # bail out if episode count is limited to 12 + number_episodes = self.get_number_of_episodes(series_name) + if number_episodes <= 12: + for episode in self.series_data[series_name]: + """store in list container""" + self.add_final_episode(episode) + return + try: + self.episode_series_numbers = self.get_episodes_series_numbers(series_name) + + except Exception: + console.print(f"[{catppuccin_mocha['text2']}]No data found") + self.clean_terminal() + sys.exit(0) + + # Check if the series numbers are contiguous (convert to integers for comparison) + episode_series_numbers_int = sorted( + int(num) for num in self.episode_series_numbers + ) + + if episode_series_numbers_int == list( + range(1, max(episode_series_numbers_int) + 1) + ): # Contiguous series numbers + max_series = max(episode_series_numbers_int) + console.print( + create_clean_panel( + ( + f"[{catppuccin_mocha['text2']}]There are {max_series} series for {series_name.replace('-', ' ').title()}.\nChoose from 1 to {max_series}. 0 for all." + ), + title="info", + ) + ) + else: # Non-contiguous series + grid_content = self.display_non_contiguous_series( + self.episode_series_numbers + ) + console.print( + create_clean_panel( + ( + f"[{catppuccin_mocha['text2']}]Data for {series_name.replace('-', ' ').title()}\nSeries are non-contiguous:\n{grid_content}" + ), + title="info", + ) + ) + + user_input = console.input(f"[{catppuccin_mocha['text2']}]Series to download? ") + print("\n") + + selected_series = [] + if user_input == "all" or user_input == "0": + selected_series = self.episode_series_numbers + else: + # Handle single digits, multiple digits, and ranges + for part in user_input.split(","): + part = part.strip() + if ".." in part: # Range of digits (e.g., 2..5) + start, end = map(int, part.split("..")) + selected_series.extend(range(start, end + 1)) + else: # Single digit + selected_series.append(int(part)) # Store as int for comparison + + # Filter the episodes based on the selected series numbers + for series_no in selected_series: + for episode in self.series_data[series_name]: + if int(episode["series_no"]) == int(series_no): + """store in list container""" + self.add_final_episode(episode) + + def list_display_beaupylist(self, beaupylist): + """ + List all the episodes in the beaupylist, and allow the user to select an episode. + The function will return the selected episode. + This version takes a list of LISTS which is more in keeping with beaupy's intentions + And is the preferred method for future services. + """ + found = select( + beaupylist, + preprocessor=lambda val: list_prettify(val), + cursor="🢧", + cursor_style="pink1", + page_size=8, + pagination=True, + ) + return found + + def display_beaupylist(self, beaupylist): + """ + List all the episodes in the beaupylist, and allow the user to select an episode. + The function will return the selected episode. + This function takes a list item containing a single STRING and is now deprecated + """ + found = select( + beaupylist, + preprocessor=lambda val: prettify(val), + cursor="🢧", + cursor_style="pink1", + page_size=8, + pagination=True, + ) + return found + + def process_received_url_from_category(self, url, category=None): + """ + Process the receive category vidoes based on the response length and URL. + + Parameters + ---------- + url : str + The URL to process. + + res : list + The response from the URL. + + Returns + ------- + None + """ + + if not category: # no category + category = self.category + if category.lower() in [ + "films", + "featured-category-films", + "movies", + "film", + "movie", + ]: # by defintion - single + # direct download + self.receive(1, url) + return + + if "https" not in url: # browse entry + self.receive(3, url) + return + else: + # if 'https' + # greedy search + self.receive(0, url) + return + + def clean_terminal(self): + # clear for next use + time.sleep(1) + if self.TERMINAL_RESET: + self.reset_terminal() + '''if os.name == "posix": + # os.system('clear') + print("Ready!") + return + else: + reset_terminal() + print("Ready!") + return''' + console.print(f"[{catppuccin_mocha['pink']}]Ready![/]") + + def runsubprocess(self, command): + """ + Process the subprocess command for download by devine. + Either save to a batch file or run download directly + inherited by all __init__.py files for services + + Parameters + ---------- + command : list + The command to process. + Returns + ------- + None + """ + if self.BATCH_DOWNLOAD: + with open('./batch.txt', 'a') as f: + console.print(f"[{catppuccin_mocha['text2']}]writing {command} to batch.txt") + f.write(' '.join(command) + '\n') + + else: + subprocess.run(command) + return + + ### methods that must be implemented by a service + @abstractmethod + def receive(self, inx, search_term: None): + """ + search_term for video search + or for direct url download + Leave search_entry blank for + further search optiions + greedy-search with url + browse-category search using + media_dict from config.yaml for service. + Uses inx, an int variable to switch:- + 0 for greedy search using url + 1 for direct url download + 2 for category browse + 3 for search with keyword + inx is sent automatically from vinefeeder.py + method called from vinefeeder and implemented in service/__init__ + """ + raise NotImplementedError( + "This method must be implemented in the service-specific loader." + ) + + @abstractmethod + def fetch_videos_by_category(self, url): + """This is a base method to be overridden by each service.""" + raise NotImplementedError( + "This method must be implemented in the service-specific loader." + ) + + @abstractmethod + def second_fetch(self, url): + """This is a base method to be overridden by each service.""" + raise NotImplementedError( + "This method must be implemented in the service-specific loader." + ) + + @abstractmethod + def fetch_videos(self, search_term: str): + """This is a base method to be overridden by each service.""" + raise NotImplementedError( + "This method must be implemented in the service-specific loader." + ) diff --git a/packages/vinefeeder/src/vinefeeder/batchloader.py b/packages/vinefeeder/src/vinefeeder/batchloader.py new file mode 100644 index 0000000..3aafb6e --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/batchloader.py @@ -0,0 +1,35 @@ +import subprocess +import os +import threading + + +def _batchloader(): + try: + with open('./batch.txt', 'r') as file: + for line in file: + line = line.strip() + if line: + print(line) + subprocess.run(line, shell=True) + + + print("Batch processing complete.") + yesno = input("delete batch file? (y/n) ") + if yesno.lower() == 'y': + os.remove("./batch.txt") + print("batch.txt deleted.\n\nReady.") + + + except FileNotFoundError: + print("batch.txt not found.\nFirst set batch mode to True in the GUI, then choose some videos.") + except Exception as e: + print(f"An error occurred: {e}") + + +def batchload(): + thread = threading.Thread(target=_batchloader, daemon=True) + thread.start() + + +if __name__ == "__main__": + batchload() \ No newline at end of file diff --git a/packages/vinefeeder/src/vinefeeder/bbc_uhd.py b/packages/vinefeeder/src/vinefeeder/bbc_uhd.py new file mode 100644 index 0000000..8f4a12e --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/bbc_uhd.py @@ -0,0 +1,21 @@ +from playwright.sync_api import sync_playwright + +def fetch_uhd_links(): + url = "https://www.bbc.co.uk/iplayer/help/questions/programme-availability/uhd-content" + with sync_playwright() as p: + browser = p.chromium.launch(headless=True) + page = browser.new_page() + page.goto(url) + page.wait_for_timeout(5000) # Wait for content to load + + links = page.locator("a").all() + uhd_links = [] + for link in links: + href = link.get_attribute('href') + if href and '/iplayer/episodes/' in href: + uhd_links.append(href) + + browser.close() + return list(set(uhd_links)) + +print(fetch_uhd_links()) diff --git a/packages/vinefeeder/src/vinefeeder/config.yaml b/packages/vinefeeder/src/vinefeeder/config.yaml new file mode 100644 index 0000000..1324023 --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/config.yaml @@ -0,0 +1,6 @@ +BATCH_DOWNLOAD: False +DOWNLOAD_ORCHESTRATOR: envied + +# Set to True if up/down cursor arrows stop working in the +# Terminal window after unschackle has downloaded. +TERMINAL_RESET: False diff --git a/packages/vinefeeder/src/vinefeeder/config_io.py b/packages/vinefeeder/src/vinefeeder/config_io.py new file mode 100644 index 0000000..488316f --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/config_io.py @@ -0,0 +1,13 @@ +from __future__ import annotations +from importlib import resources +import yaml + +def read_service_config(service_module) -> dict: + """ + Read config.yaml that sits NEXT TO the given service module's __init__.py. + Works for any 'vinefeeder.services.' package. + """ + cfg = resources.files(service_module.__package__).joinpath("config.yaml") + # .open() works whether installed from wheel or editable src + with cfg.open("rb") as f: + return yaml.safe_load(f) or {} diff --git a/packages/vinefeeder/src/vinefeeder/images/vinefeeder1.png b/packages/vinefeeder/src/vinefeeder/images/vinefeeder1.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e4e1b0bea6302008aacf7376f99ce18091f421 GIT binary patch literal 622403 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

IH1OPH;h|w;r-Ww+oCe7MQ@)-tyNyP`oz=U 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%0AB^ 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�L^QLvTZSw&%$CS~sj+QiZ;1c8i9t@6RhSwR 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∨J_6jr}E zY2mM)SY7p6SLu`$8ISL^rsq}jy`Sb6aO`HIarNWCiyx++xW6|D(i z(RvoL;7dzTisxE9<$k|?|9CW*%TlBgHwu^CH$4Y=A1Rt{=#FiKIauGEDSe3Uy}2&D0aH``?T)qqc?(& zFDj@}6bW^Vua=K8+rHrCT{REe-}WA<>eCh$#i=@}Djumy&bWWGukE_@0@tl;o-;7i z&yxokcJYbQ3QH}ecBPD)cbb}C^M9+B>0nE;IApvg&Dh}3pSk%dxh;Wz`5PLR#ZOX# ztp#A>IBK_jR^cN~0WX<`BQp$>1x|fEy!;1)L54H5jsj67CV_9cljjxbKI^r%VS31W zd&jC>D)+2D&k)|}thA21(C@3H_5`Ngzr2H%N~`#@X4{s{IQBQ9;@i`?rz_>>ZQV7` z;E?X29UAYsF1>g+p|{}FQx!Qo>lEeQ_p7;&u831^F<5<5B_}adpr|#+=Kaj;y6z#n z5_)ex*{q&?PyLzVb{+Glui5X}HJIARHs8Az_j_j{_wmGg>d#brZU3HLe*1ecYwjnl z&l`TM?hZ6uuJm-D)OGWuw{x>E?%Zztcvh>xjN-F0Xa1b<`SHi@eD=rlM?e13k9Yse z{Z;b$iMB_<8>+A7P4UrpT%po3%hmM8?^pMFZu?l4b1^7flRo^<{JXQp-|&)8tTh&2 zH!n{*wKF)V?|s&bL$CMO$o9ULHa<5werEqsbA7j;XFg3SUi0hSs=Dh*Gk-pu39@vB z<;mRjRkNx-eEYwz*H-`i$*O$^3w&$8EmXDowbzEDSVs41eqX83uCLv40#a)Jv)b<5 zu>l=u#LXAbyvZ4tAdnS*Qy0I+XQ#Ku)8tWsKogFugV!;FGhZQ zT;MJd`+FAytH!(-9@8a@em%*W^LcaehDXNQ0%RvY$D;5{l)G zy|74%E1PTK578BhqTT!VNlZM)!MCUMfkEFK=N~Mu;@2GCOgg_G8twVl zeSPEWn^&ebaUB;=`uXa1Ef3GX~ z*ygYL8}t2Oo(rGrgy@Og0fiiuqLmh(qtlb_?tQ)CW&X_P(mop%ZeNh??z?s^P~~j$ z^FPUdzWXSNa4DIaAGf)Fq4(lCy-7CDKv@Zf-Q};YT=r;*ht1r1Y#%J1GIW1Amuo+F z!`k4RZfc?1Hcqzb3@te0;Z<~0N`1lP2-)MS8kleFoZIsK$-Vqn*Mr&1TVi>S$6j=w zE_C5+SjaBR2#K|AOQu{XmEDyWmvXr`EUxUeu0e`%P>a%r2bZ}gL}!Jpy!q+7u4nS9 zXW=&$XGi4oWY=#M+a3OPTeQeeCOe%UXPA6;CrEu-{n_yIVdIVe_+K+J+@61<@2!6h zJ44LhFIVB!{qmUpS&JW?$)A_mo?~XaiSzy6ueL|3dLH;G*f&JV&upC;ey+v-$??eh zmfZb!KSZ1o3;1Va|18Fs{j2_!$-JDv+^pjEN#}_7_I6Fxv4v^J0b%!6j*T_^y zS6$q)kaKFWw&Axc8&Bw-{TlMUaCXr-5svvEf3A;?WMBAAp2za*=jFE)XaCKAbA0yx zTH#pU*kk`{nJ%B3-!?hlMl!3f%QZfxWt(j7ixsauqMl2}TOa1TdBrxqz4ZG!=lJOP zg=dQX&ZvCqb7o&w*(ooVyshHbZz;~6c2+my_v)<~_pj#dx66BIG3VRU%M*g9G*_CR zaXvjw%p^DC)%RMywu%PF*~wQ6TGAv=NJ?lftvweIY%C}$D*DYZ=*+Z9yLKBrF#MqX z|I7Ee&F}v_FlT6}x2v*$xAXP2iE)=E{5n4Q^~A}Ocg>2ms^9ZoyyAiXez{GiNG-gJ z7Xs%hbZuY2YZSW9^Ye|&rB8OT+MMU~k5a8ooqc5In^Q*f{#r~ed2`Ctb82o(qr}7; z|4yxuc)V-F(@On<@N1rRv9|=}^D9o=b@S#}Y}7mN%Dqz_w>dbEJeD$vHFmPNl%@T2 z*2P+%%nPDdL_nGFd~w&R1sj$L1fQGPH0hR*M{Lq(<=GqGZp`((t!>B3n=Kt+x}QtG z_P?r3O!z;qj zC>MEMx1TR)@{H1}IxSw#Gs^y%54hgoC`U8?8=SI>^2xa{ju`7G~?8F$MQ_p<+m)-l6=12 zZl{#+`B@ozmX}Lyd{w=A!ST}Hr7Jyi{(mnkk$-XQlDuB)BCUvu%T6|*%Pim zyu4u>qxS!5RlOarnK)b@EctK2dA{!F&7Swg8;(R?Z1Y)DXZ%I$l(s?LA(h2`bCn)? zDn>uISjSa!&9dJzVaYV#DO>wve_L`WZm7B%d?R*$?ULz8^{L5|kmrkLte$#_LHp*7 zt1)lXW42$L^Q?8r8m-$E$EsIfUoy|Ts!88dG$&}wf+qDHk6Y@N?EV_uwJmUFT)Eb} z3hi4S;V0Z0lfo}uH02G_n#Voa@5Zs}g_pRVU3f6N@Fvfh9XW2du3Nvd+VHH;G~@2A zS)acC&3||NpZWL0;vZC7HFbifgW5uWR@L}-uV@r-N;vgNlcC|>w78ragHjJx1~a=Y zf``;M{9pSwoT;jN^SEqUX?`7&KkINpsWd=8SYW}-S zIj`e>a0k=wSG){9HUC|H|6Tw4?yfC~jlKN2N3L)$yEU~>s5jn5?q7^O!-L-V{S&_x zU);A@wp9DILF!MDkTdH}L_AG5*tqEI#?FN^7hi7a6jp38*Uz5c|Dq~rLBtJaVQ=P3 z7xl!tlfJH6zDX*2fA;GM>(ebnM5jM`e7&BLVMBhtY%@}Kyd)-I?Q4rJ?Fyp{US^%4 zSwW%ko~u$O8*JNu{cdsBk>_{BSKgVL9n=4CRmtRCkNUpOYuU^Ha#hCUPhUl{86HIP zuQ{DE&tL+RhpbS;vh0ACq_*-k-}QuoJPMecOx|>Y@j|Xnw#J5%as?vTd`Kh0^CTlT7zMZy2Z{z2ebN`;xY;idI(v+d0 zFIM)&it{oYx4z!dvknL@j^Z`5-*t0_yWomh;j9c9cdvE5JN9l%aYi67`#p<<@Oz#n zbssAZtT}Oc(@xdLRZ`bXZZNLuvJ_oWztQgTkAni-Y3l@B7GDo&OP4rfY4dGoLut*O zso#ZeN9|hm@?dCXzgzpheR6l|UQc(gl03X>)2g&3(;Z;-or{afn-J|gkN74pS!;Ir zescNB*)E+^bA*n6`@L)T6F;X7svDbnR~PkOu47D7l`KDTjPsaB`D?cFsWRX1XvVc? z&lfoK^WRSG9Z&wYSuw1f-Cz3N)$F&@9G}`k-w#c<10u@bTV1gYe_k8JaL~{(y`M8*U#zPv&v@8zS7cLJ4Hed&ge`wNIN7Ua!o`^G-uVPK$E2>))g?x#7$%> zSDiCWcjjT~n;qYeUT$kk*yg$E%k^EE3T109aXXCLwKd1hj zQGfVP&u0;T?XqhDMi!0B{%u&q8yUfxZegLT-TQmxdDA@$6Q0*JyvPW%E&GEq5S(#C zGJN^k*B0yiyuQg=PB_l=?v;UDruNk(t8*qN>AjqFIyhHt;iBH(vmdSFvN%>zamZpr zlkPh$lXnODUYq?aUCh-M+j=Z+-s-I)Dk9ak&kO^4-m-{n&TViF<~w`la%TChcidpm;gQb5V32uIWrgLj zkGDTw>09%xIQ;g@Z0~=TYF%aS3tdfrFxj0qJgZssY~!`bh4ap3+`8^`^xPif^>c2% zkNGCW)vlQ#oO0n=#E}bUE_&_o>uizTV|XrEAG6b-)KSvhZkFR0mjf1Audo8?Kq{=xiKudFWAE|6~jCgXH^n%I@NknHdx zOPO8EZhvnz+NHnmUBpIa?)@7C_BHSePxm>p?f5oE1~q+iy&JApN*NKCCtQuGx?`!= zwf?`tWPw9+&+V2)oyj~p)t6O%^)KI3raPb6ez?|H_k2@{?2A)LS0*OA&Q87_(3U1~ z#xiE!lnu4#7{Y&u&-*N1zR_OJyL;6ti`0ja5hcHj&de~CU%FKE#93_zl{@Xrmi?{B z|0^Bw@ksNE+dEU2Ot;D?Dk>_xwuyV=mp9%4wq;CR-lqyyEaqkBe{=M-zFp_k^Z&SQ zZD-c!$JE|^UU;_t&XiAE_uJRV*L}Y&@5s@(`TSo2y}fUudZg_oofu;0wr|*7XI=NV z`~AZQjF0CmUsR;C?*EnWz_`HHNtd{$ObtKyp8v+@yMNwV7ku9S-ec!_@AI>JGfXUx z{Q9Y1D=%L6K#So3boEHkt?x$J=QMx3TrbDMu;;^_WX;jmr~Z;t;hepZw_WznVH-J2&@&zbzHP|cg`M1|b)D*1a%M)#78Uao$$ zWY^a1BG>k}e6(kLo)M|Lp+$0$;4#;lqstvW{(KND;_q?%MvwUQKDD{k))#lK7fwFb z@A&YC)A{V~eLGI@-OQ=3kv6m4!)fbl+q{pheCxD;OpV7k7RUbO{yL-nam^3sI-e*b z&f9Xg+X6Be|75qVqWvGEejW}t2?~G*M3bf`$IcUuNBXp%T>&oU4JU6 z=Bc#3qi3e;rR<%RKWCU!TB-TY>+9Cr$yNXJaqN%N^6z9OmhvqFEtbvydp=e}d;KSy z__)B{PhDAOEHf2BbA^ANTw9;QvpgjzE|8bu$NBSh!qemG=04v#XHJZW`1FN)?`Ced zShj-2``o@C8@`#|0j=i@h-mq&_s78Q=U()`OoMoKDVFe{?4DlH+EIl z-rCuB{JcD(d7L_J*KuE_nF4;E`+Va?)hmsjyX|=9S9NHw@Di_MDs{{@hu6l=Rr`8n z=Do@3k%xBsoIj+>uv>M?=RE-|BE~I`KWhg3)tWNJcHx?W2~*Dsp1hy({OdMB(f8fV z3|AI>KCTub<8*S15QD?vS!{a>uS;ic|Ni{f<$cq7opf-ew7Fg$-004$Gh1X87tgXgxowmEz{0gvTlB+(-0sM^I6_};mSh$ zd9|-DPK^7OINS8O$e$nS^-ZtL&qs)SLq$o)5DKXNSX*6oYa%Bo#M0}QwS|KO$;%NzS*#cPL)Pn3LYvX!pg-OV@g z+!He%h6&NLx<9|SlJ9*jz47r%*^HXyA3MI;ifmhdqc2n3r&)mMv7dDN$L{0I472WM zyFK4`u5Nqz?a!a&<`lf-)R2g7cr|%-;e)qd-ppH`?|*} zw7bm*54BspJn`g6j+3Xu>piWaxqD_weSbV}cizEkXJ2p3ecd)C`Puv;wte3ZR|{~k z6n-t8FTK^VJs?kR->2UBHxy^v-z#UA`|~;9wtn5a|9AZh-?fH6=#Jkf>J<0^R0_{F z-`BhB*k8}jSFh(f*WNWdUtE6gv%k-5JMPC>Y7dW{uVD`I`t$GI?GOF#@7mW%=Zds0 zT5xDhMRI0#_A%%By~jVtT@Quz4F84>veo@-|Fu8=`DYJ-Y?mC*X91b zw*7H5U(T`8)zr&Nd&8GE{0~;v+s`SQ_xR;!q^ahcC$%z?J-;7)&3N{q9?Ro-!Cs#$ zXIcqPj;Lef>}M6yx~XDU7QU@e?)KyzOjZrswfb%@IK^|@<9hY9h6w>J4X@0j92_}* zh_KqtXWHyMMVmoIacLfV&YKMr1l&~nTbQ##&QA2((Jp?+&85IcAieIhk4D{N_Fd1P z+J4L4tGl;s$LbunUtH?ye~){f&^>#nPeZQLnRk`s@!aYfX|a1-1hPDiF4EUIbb9-~ zoR)1dElLHa()}D)sI+)`t1o=`wT*Gl?T44Qt>w+VeLEm1y6NO;^~EK-KIVRW>z^n8 zA;x;%oyM2q{_P()=lt3k{PE26c^|hlZ920fhfOO@x^cPf>hCJOH^08o1CLHVm~wtj zQ~JNxk}kU!%`# zeadA0&19ifk1DF{b{;Z)SJ?2~v|{_lveg{M0?GT<{i^x!lcj}8!;W$P{rA6^c3Jvy zY}vL&QK-*>X~nvAE$5dzc`aDDkkQW7@oU8M+lSmP9Ip&^Quy3zDJ7CD-s7rZ|DZOA z;h&5>*KzShRgR`tWFGf>x!1NYUmIv6bNt`+@5y&E9|zQWnTpjVDw^4D;k?VfTd{`e zXmFR|=TkFhR9tg8Qk5)u+kI+9qJ7}NLoN|1!^@a^) zil@@2F*79D8osH_^xuD5_0@{k2bQ&)CteHP9AL1H;rZW3Hf#PLt}@wsyCuV4q}8-_ zM%~F0YZu{{Jr8>Ct8D+7RkL02tNxYbOP4$)jO%&~&;MWR{u#hphJEw0_!$mX3N+2!EK@ce$I9cYB0I__Tcy=QShnCwE%tv=#;eO`;9 z@Nou)SMyd&Uz)%x`@7B9X7byp6K8+M&I{Rj&PzePHSg!{dIht+-_7)PJxOM0_|)|( zk>9Gtsq)7y^ZIM=cl7mz{dvE>e#WP*MD8wqp_}3(h*Ea9!=u$W9D9!RGgRWl5#jQJL4DH3LFLofzznwnykR zJ$sh+dJPwC^4`s3giq8W#BM*W6f}Mxq?{#?k3w~ z|2}{E6c81bB(|q8c80L~Q9+w$S9I1no_#c{?zm}w)-i4SD%Ou1zAIge{{LI-RN53p z3$>10+}VNEiMm^6upM3QpmFT{n!;LTt5?1C^th&k{mU!~}v;{eCl3LHh7Jd45C9!|m_gNnfZIAa@RZ(oRGCHz-a=y(? zKBKGq1Ne1U$zF?j{eO#G;~|DD{Z+1YrFQ3b{OpeNt6S4NunpI(+T!+YmnP)=zD<|Lf`*yr;)sdcWgXGp}Z| z*}(+9Wj=Eg`)*F(B-9=4?=NnaAJe|`vzVgDsiRXejW_0=-pw5K`P6ecXC1M#Nl#vE zPW*eT=fADhm4{pY$n=~)?NN`^BFOl`v!*n}>GX<{(lEB5`lB;1=e%ZF9U9ct_}A}Q z%#-5n%Qr=voNSpoGyjN&O!BqO8`l-gd?>y@zID|vg%+mJ&;=THN0JOpOk^BXgdD4@ zt(_L?m6U#S#;_`~)YLsrUw6FpO~gj#*Y9H6C$F>Dd~El9|4#YU`H{Up=g;c@v#RFz&rOo4 zWf#~Olw<{MzF&QA@cY%x8Fe2^Sh)6FtvDo`2<{CD7?~h&EKn0TXOOazFD2NIAPBB^Ic+>K~r37_UGGHMOR-wC;YneVQc=rhMm{X z9sSb1+?m(%|I8_~j;woL_V8@{{?1Fn-oIlnpIct`DB!Q+nca1ATF=669Mtyy-k6tD zl_FfW=0;%%`=S>&icLcITkflPbefE5@JH`|nC1S`+4KIdc*46qts464-5e7I zn-0#o()^oKJv_Ak_}2M9lJ@_uf$qUQ9Q&yuB4P3MScH7R+VvG#O z`eqwESa9~&_IT@_seOFErH#VBTrPbsqdD8)cS0R2l&X3d^6^F*MCvdZF2p;fQk6&|z)h^(+h(IY6xIiG*RQ# zt8WYTu04Dw!Zki$=Hb3=Ek}P$(*CvM-=$cGjm+kk_%2DTZ~2|{;&pDL$T?OsMN^KI z#u>&QWwx8Sch9?Nn(?{Rv?TFq{d$+YOueqmQ-+Y{?gxi3&?@JMH|?X~rMyk$n)*YE3(x7p`AT%4lxWa@K9p%-~?+}vx~ zmrVQj=#BUP&p~1DSEhP%|0}u|ze#Ggmw&Q<*zNT@lXKq-Tlc+r?{wV0=4;s1yTF0Tu2j)2o_nq+r@lJgsVM#0 zD07Hf3c>6Z5ud&wTGuD-c z`)WStD(`u8SiIkQt!8ajS!9K4;kodyhgbAmyKQZeIOXAjRsR@!x7&%kKdSik2hrIL z{I=;=^q(WAOb`9-&DNZ|%7k-jo)K&6q+@F563@*I>q_yvWc7BZ>nB(3&8AZfR^Mb{ zs{2u6w<3!{fN6KxJ2wlV#s&v>clV-bZN*D*|Badq{i-=0=UQx3e!kIkx#PxLZVpbn zoE(LOx~}Z-ePsw+3lJC?*A^Suq7ORuJn{63iPMcDboOk&b~4~p*sS9-U6<=`cIJyV z+uNL9|Cg<#d^ulWS!rrGD;vYM{91l-owc%CO8MI4uK$)YUS_d6my3IDA#>&b#ew${ zL*7^hIe$g2k1zU8mDGEp63gSYN^v5vw2)F%r~HSd2)JIeE3 zZ@i%yq|5|U{e0HIc?q1_5g#1jiI3vo^79Ky_RqgsiLCe)^!wl3@*4Hr6O0UAUfOM$q0Wn!K2=zBk%OsG zVVTd|iC4{nv(s;V=YMnGxMj7p)Vu#-J63;Q5)^A&ClU6f)CRc=t5Kb`EZ=+iYO~1^ zC)MsgUUJf=QR3mbH9MXaIO&$1P`%4)ojtoHEO;J6|IZsg<{NO|XU*bUlon$u(C_r|YHo%`blEc)e9ZRlWy!Q zWllRA*|6wQ(3N=x(zmzon_gDqm?)U#KZBX!#p|~R*U8T8KOfL>bkVoJclP{Y%$MhE zfBU-?c^huua+GGhzwer;W|8S-LfSWPC`y&DlvZiUxsxbeeq7DNUs^3aPy5KDs=NQn z%DcME*8R15uefkhZ?+!mxua_w99;c0IF9a_pjx_I^J>AJr!{v% zix@K78{h2ZYTPu*Xo}dg zS1+*ZiX!WS@9Y6#aY=Cn%t;?DY9@Tp=8B8mTf4!Y*~P`hBxO#q@Q!od5B8PLH^0gF zxa8@dK7IK9U85~qO_$4<7Y6B0)7f1yBi#JQy!vnPGfdMN86M1fop-4G|L9IKNjz4lbxQ!XT5?RD4V`{#A9^usvkv>1l5$|{O{4!g1a(&t^T zukGbO@Hg~BODgC4qBjoxpVOKhMHk*t5OH#a+hq@}IlR31$HU7KQK62J zo`R~af`_I#-Y}9hF5+N)sGxZH-t+u<-IrBsa+mqeKYMoj-F{Jy zH-{&F?W;fc-#9wUtRZ^ai&Lxfj~JZkDO*0L%;P1mHHHOu?XxMlw5eJOQ$dgt*n=E_T(e=W$>zsAsQ%Bw5(_xRR?|n^vv`cZ~$7S`ii_e_wkuhC(yX^d*$A$m?-kB`9-roAZKj>CR zjl&PteAY|29>K$|@@Rnf+G@_4!qC`fpF}yLj*3v9;#0 zr*q3~eKbU#-RX}zIw#rx*;DcPOY?4vd3l|lQF!BG&uoLE(a+P%@1Hrwo4xs)I8R&0 zRNe(9W(}J*H6A&|79^$p{hs~DDaAK7)R}%Qjm}(g-!1m8*{!JPDw}(v@AsYUD!-rh z=SXJD;lOvlUdmT~{JFfc{;b!dvN@M76}9oopS{g3{$aYk-Gq(*s`*F8V}T$ZW5qq)1*=lijPW&b#lVzK3g zq;{qGR(*vd+)04%lhG?`z@ch%NP|~u%Qi>Nd-e6kv(2yXk}RwFK2y6jbJmS*Z&{f&mj;}2 z$v%3Z(a_KGsYcW+>6;Ooc~6JTxN+m%x2gGgI=2fiFOiLZf9~s*hQ%%$0$=fafYR4r z$4BKhE4JMK{qj0vX5&f8R-50;8%0BT)~tB7?e1;v__M!$?b`aj@crHU4}-7QFdsIM zv@eu;tnTNXdHLF{L$T#GbEj&H$qO{{X;0gKxc7SOk?VQ8W_O)B7{V*}E_MCK?Cji! z%gg`Ef1Y2ZlWpIY`02=>qp^9fFKMqkUGa9(=l+Fd(Z1Kd-MmwD*|g@rJHO$IEQyB& zQ!3Tx&%K!TcGjJx{`Cc~d27D+v9DYq<6|I^bnj$3WBSr9m2a;;|9P-{|A`~7Uh+s- ztT>*0JDUCRPf&scdCCbyEUFHxVw1dNbWO$Rrb>#>-yiRe96N0?`Gx!PErBm*W(!3Y zg;Y(ObH#4Y8;f_x_P$j&y7lANA@L zsX3jZqt17@(fFZSi-41i&zAS!%eTE|_`k{icYIdfzUJHa|9!HarW<*p{rt|JmF;I1 z?b*|`Lw0%E=c>5sua)!uT+Y9_t<-p7K}tQpX@1zA-)8drpSbwheU0gxVcZ{>tQHg_ zvv}#w&a<CXP~gBwexS>h^m1 z;!Q%ev+nC_`=$peY297c`})Tl^>a^pHtRj?SnLP7%&J9MuY@;Zi=1kO zOv{pve0V4#DlW9edZtyX&8Yx~J9nGjrkxMW$W<#B&`@}yM${qiHoe{4hGP;!04!lM_LY zpHJ;RHR)lSi{~nrvRPZsnB5Y;Fj*!eE&9(@u?s9rVi%d7pSx7C+&A_vU)cIv4Mt7x zwrz>lJEfLjSv!NRr9}NO8~?H;1_xR`I&WCRFrzb9D(|GGwrREBqBB#i&7R5~a5=g9 z-MfVITi;kWX-4L?fIJbOlD6b^AgB^j2JsPYzNj8)*_?CdjKRy)MFrm46Hml6>z`0t z%lwpoQ{n9j-%CtollnVL|JMF~|LNFm2d_o4<MoQ(uyqti~fI1Us?EMAD_ob84XqCRsnG4gAu<}wEwdHpW;_#+5Dv_P(^LR zC8JwQ&hw_SJbRHMtv{J}-x`w%mD9KDZ#Y)pzP-NK%Tjf!(nN!{g%`FhTUckE9lo~s z`MNhxcJMMU6=C+`((G?j6e>Bk&P3UrPgR1)B0A(`g4F&eHW5a~{%Y|jwg0C?@f+V< z@?GO{t`mo%%l}9GF=}rsf0a6Vec4ccR0%co6n_b6KYf=uSL(nc+whYMW_@{jCC8ZS z{+qy4i>AMH{e9`~4=){6<}#tff%{Ib{PIDno+F^Br!k=+!;xhv&z81ZyQ;$0#xysU zoet9s@H^mVBB3J1C&bHIs8qjT!-@$G1`U}rPp&cYQa!%7)N7e+zROETi+zhL(g+U%Gm4IuYi{J-ScYG^I;Byc&^?v{mvQF&NBx4e#k7{<#l&a?R(4KsX;8wjE5cy zv?VfZDD{@jzMkiheZebnfx!h9o$g16oVb({ySlkL-42V0x@l-@FWa%hz|^?cTJL}C z^Ccp%4||p&{a>IWsbNvt;h=E!(!7 zdfJGZHeKXX9H%Kr2Q}w>U_Gnxf9`cFVx5dZv!C1C z00R#VnIk5?`B%T+zu$1}+}uaoerFjZ7-l#~E}PW7f+DkFZwgPpm*&$c zGL=bpP9{&hc_`NUaYxF9mlJ)#0h#df$@@QVtzTtkW-eS;Cf(|Kw8eShlFZ0w zmxzGWAUU(P6#2Mjo8`G=-;ND>bK{~z@n=1Ui!bC+cNtVNcU0z)mK3cS0y3yIiXJtCI z@49=`hW>LwR$9MH@rf6G~q8&p6b z`QVqD_QZupO?a6Yg%5{lEH&VHeo=dWi!tYtt$w|tp4C^*=}esb^Vk-HGkz~RelvN` znHuV4)Aj9?ld91zmFLrg%#)(j76u5M=6!ZCYIEIRwQYGf+j4KeQ<>U(h#^&A3lG~7 zuFP9E5A@75=3vo%w5|8$xf08}T3f6SKGk0^Rf0e2_o4J%T$?`bpVjMCa_jInP>{Yj z9};z=Kq(>oH&gXp^}Hwf(@wJ>IT+;ri|G*uCp0EXXtYjNJZ8RgacNPKMj`vQ>G{XF zcLlEG4XJuG&1FfS-?IIIOH$?rYF$iM+Sv0g?z?z_k?-UHioi+b>6=|wZEi6_+xpYO2V`E)*mcgl^A>^C#a zE!1zWd;VwXra!koZJn?HoLCqpO`7R{`<(WvlWH@BDtgNFn@kwBJxqiOi(hVid;B6d zs{1=i!W1%=vDB;l47ysusQPciY@O{f>P!JsoU)&83tqsZ&vu;qfajFdPwKli=B{^{ zdVTY42T4D**$xU1q?;D4%oP7vA!D%TjY*qyj<89>FGb;wHXfbJU(_}PF{S_c{kU59 z=ZpN=9Ggy_$+;~2@_1w_%T6e*><&RQQ1D1519Cv8$|px zV%W9+hwxLYy|2}p8$@sHZx#n7Wu#I~QfKYkI}7ElOxJrGDIDAX=Jb_E+)bV-J%zvg z*(RtMADSSvX3^GOBaya;DF-*^O1B=`=|9VcN@ynUnyJD~HY%WmY?gO>= z{n)q~ZK+3dWq+5xL36Cq;*Q=u&G=m ztdX4Ub6G`V(}p(|%NEYj)xP6nE~RXE&*kO{mrCvWwz*SmzsNVbsLej(W4?3A{_VR@ z+tz}|Cu*l$JIN5QpEzIt!i^L~6@i zo>zfwN_n@}#BQE=b+viL?fl&L2~XQ{Z{+Q_vJLeArT6=r%~y^WYfis>dwKr*x0^yH zffDI2ed~$q^dd!td*7b!ntp<1MWcm5(*oJ!2aXtcegFOe)LKAtr;Ajx%L1=;XUyL1 zKAAe#D*8$Oyb~pl?={NyAMZS#`&=#Wu9uGli0G%2BoD5 zpo0hUI#OiJ1m-FJnYTZiD2q4O=E{yCIXan!)$>Ke>HKi4qj;9?6xG zshbM!d9z(tx&3SU#gXMZ=UD22g6fOE=Qy6-Ghxn;Ti{mjehpa06+ zUP+y89`{>6e*ed=zn9|mitM-*zb!2kUiRVf{J)Y7_4eOYw%;xK`%iAti(~tK)vAC} zIw+K6PUzGdF7vU<-q8{KO~LlWQTaDa+uo*Z{&?%hrn@Rk6;q~9JtoM*W~h5vJZ173 zg~^tF@yq5;DHoA#JGo+2(Y@OJZA}RplG7(o6J56Yz|?i$4S!Emd|O%my5xGe)y#Zh zCl1A5(!y(bwwPVGb;w|m#%hkkJWYwh<|2iMGDHitd=hszp18GF?p6K2KmD#PhcEVA z-+FC}$@`?=->mLM?`#Q=|0k~h=eeepwbi%N7Q#sz8DpxBK4;X>(0KG|b>4&1@jFuX z_q}v5FZq#C_i^@52AeMj`hVWdfA{X=uFZXOPH)fuYss+vZjtT(x_2k_Zp-J`-*3*X z|J_tuY4^Q!>BgeI+0|0+XJ)!zeUNzM6x*WQ*|OGB5xdh^x$oD^oE|sh{59R#-@XU@ zZi(5izx&he-|wG%=f8J3JNcFVyB)vzL;Pnl9yqQy(-e_ zd7BjZ-XKs}4$1@q>_(?6Usyd+v32)OQEAC3vs31GI>_}dGZ1oPe%Rm|nrgW$`dOFDNv(Ld*)i4gi{*=L(k5TLCRI9#cw^(peA!O*J8r}H^yy(ig_Xn&j=a#;AL)Zq#F2eO=xAYfHV8Pk#Ga z8ofJrzq$Q=)78^I_v**a{8;7sRAAlDL*-R>{PVv~@11l0_q}~K^M7kC6-l30D>*%` zP?4qHqR_Q!oK6vEB(Ub-}BylcXW07lK%VA_ldA#qHw|HUHOmB%S`6r z`l$cg$@h+>;_YoO-}F>F>YjS578up#BB@z^H^9K-z@|x!Rx6$)PkZF|a($+Gg8Ii- zD^^Kt%MBLOK6c^Obt}n~$!1UHRL#1nw)gy+nYksmcI8d*{Z;hqhRS4c;bnhwl|U*> zK$zeuEroST3zQf#c3vw;Znxhi?_Zd_5I%b?VH&%`>!*$=SZ-*x~ld_8Ba_+ ze4N3c;zYr|-_7hhzD-UK-dy>&PV)J*S-pS0+y8$sgTH1%Utih3PdAuKTzIH9G z?CmX2M@PY>smx{BvGoeh&b7JQ-+q7geD~%;>-G8-ijThvDj$D)tfPAU{+uT@_r8C7 z`ty#s=F%PS+M+FAUMb#t{n1B@_iH13a^H&aEM2ie=FEqQk2zSH81`(=I9MlBc>nUn zi|4w}+uvQhEjwKQ{nw8j%=h>GK+4Q7*4#;5EHo)m`Q%TzdQJ`b?W-&9aBlHDa+N`1 z!jrBci${Zr|&wS z^O%3lNzs(am#$4esrI_)mf4?LP=UGVf55?_DS`*od}3NJwzVEAYo5S-PIMC6i-M-f zqWdPz{2QH}ZT$V-*SBll`_3rgFt2%9*2X988d#_q9#^Zp{Z7eQJNe{8Ywz!ycItQA zrtIr}v&!Dx$bW1x<4WG@g$ovRY}(Ygduv=^;mYrO_SHrAU$eYXw~zhyzi+I+Kh?a; z*4z2VO8t0e_J1bX+y2rndz0ajDbD9^ne%NUkE~hOtz1*fDr<|aTi!g{7QOEN z{ll=trr08|``{_LE03njy_=}r-z_|4(ZwT=&2DY0O7+o_$|(oc2Rn8Xey9Ei1! zzBXswu}3V+CA?nGX8!U`A$`wZp5AG6^T%n| zuS-Oxf^7Q5E~;^C8?Q;Ch?rM-(>sU77jH2!X{0v4a>y25YSQ+Q?V%jQL9?AY@!L9P z@B791uKGcy&*hYJhU$S4A)DfxnYLZYxsiX{PU7m-yu>3X3a1<^(`WW5EabVvBe1)8 zpA4h~`@X%l*6zFLVmJQ>f4JAP9oY7`=KJmIpDxwUKY450)~!2_M@GZScMipt7q5G+ z{L#Gm@AGNdlxAstq5j)P9v8+xllpFZr-7(q@eD;Ntn{i zu2W(?lUl#A9#k>DU@;n#vgzmJ#rq#kxBna0f2{u6&gq{!&(}g>+3qUW`}*L$f;hv?wVw= zg^a35--TFWs}JDZ^1Pcdc&D-CdnWyW<|O+;4kmR_Oa@Zys+k)_byf{(m!lyZwK0)wKCsoVVxO*>~LcG)EI%Qfvg)z`OI z|FH~gJNPyJmtAq6Z6~M}db_@MlI-o*<=OS07j8e7zJK4BpGVIgD}FMkl3~l%t)G6g zzdz}{|EIKu4Grt|(*QAyPHRlw>zwbF-dvrz6X*rEKUzr*i+7|BF_ouUHOMZ6e zrQoQ>wLCm)1EUt3h=_{{aDQX?8_lZ{|+$ z<*)YxWtA7&CNKQdI~C5oFM58-eeu>_rNX;UQvO-W#xw5d_@{m~@mj-zY_xxaGkiY}`Ed=crs#OKZOZkI(h zA6MHyII-B@r&d`a>Bxz~9tq37VE_FM?e)Kf<*FVWKlim#-#dlj;NAHy4k4bIGsUMc z1lXp!c_lb`X8u3NaOt|N)n|>oAE(|%GT&ds+S(&yI&b3QW5u^5#Xs!6|F7l#-)Hai zeoNbKn|0Z~#!&wEkFWQ#h1FyamGAq`ZC7|x^Uj~Yza_2fHhsT0C)sb&5|v}(_T`EF z$E-_lJ)Bc;shx2~NUg^5IaPA?6+iafz47?Zi?g41>etmVrpef`Yd@IMSoe17{|i^H z?6_Y0?DwC=)A!B)y{YE?d)4XnecbwgbB?_}?B0|5Lp6D(_4|^#4|nyS)!KiX&N-Ry z;p_YVI>iH~7;IS7)hHV3W1Au-9$%-s{eBVidi{!pr}tGo{=I&Eo&1+;KeX6+pFVs4 zziZ)P_w+sC5g~_maH{sqHfRO;=lh+Xy8pf%IsALe{+jxGeA^zwrVanjP1S0B%XaR8 zx0CZR+p8z%7@az8GdW8Bl%}lcc}veFjR^`JsgW9oJ=osuP+csUf_~#P$=gh1u zl`yjjpFVM&Vh=IM{Isy;a3EU<&!ZiW?VqsT%(=CrZ|dp$YBGIBX)&g=&GyYV{qe+D z-oAO#B%?0xq$yL5X=rLLt~$ljH@Es$+}qQj=|*n-zdCbeW%qo#pI(uFG%4zK)JiFv zIgg*ubqp-jJbKh{-_QE*MMsZ*-o?{1v-pf>&D&+W_i{?FHGQua>v8tk*Dc$&f#Ttz z^0A;m%Ng76RqQ;y@6bby@;^@k-FoLSICy{7`}h0Lu_`yGgQLot*yR{quQWZmD^{%{hH5KmTvd z?^QML-yh@6-us}xSNhtfCvUIc+)=2To4a<(RNjbLy8TFR#9wEaidZMk>PMCb20bLMdWvKj}~qel(%_Wosb>z{jMS?~MJKi*!SS^UOR zL`1|e_0~fkdCO^~+4o@fZ3Q>V{Metu3igiq?!oyz6LE3zc!@A@|TcftFr^G{Y9 z|GX#5U&Wa6etqmoZT-KK-}07DnZ}!N?2IKSRX%zoasTH%{h$BN#y|L3|5rD?{^!4c zuTS4+-)m^MROJ4TbN+i4^tH7`#npeU+;%0$MbkBN&74z?&MW8HG$&}BssI1EU+?(z z_y2@GeXX>P=${X&Yg+`IzNB9}FiA;Ds!X7_C6KZEt@Z3lA7%DU^3zh~Qa4riex%ps zaw?%dOzO@_#Hgwuy&^ zh*E~;lx@M=CreEA;}-M^+i=RVa;o)WUnPl*^TxNA^snB120Te%5ujmy;@JK*4w4zU z%w|#AQ;hDuUfI05A_TPC?sHD6!?ksh6DP|3fA{;}p&K73OB$7^%>VHv{6f^{)$?oT z+uQ$R*e1)qeU4A-?2l@(Z@10r3Gyy2js9*W@c59oy|=ToZv4MPs*=Jf{dP6-<@bJD zFl(>U&|aVLj&u3vFZboo-tyNmYj~aaXPtP;<_~B87e0R*?|ZUoVt{Qb+sBGMrwe1h zzSOUtY?iNI(;B_6RJXU6S2MTn`|RC2e{TB?$_B;up9zAsOl8Y`@IDgUK%27prTyIG zx+dbE-!-%Lb8`;+ZolVlAn|C?X}jC03z~ztmOl7A-?D$#EnOaY!)d?e3e@hq_0M&Q zeJf`7{p9A%tgI)!*Z-Xk-&d*5aCLI}7mW)b)3$6e5$<$hjQDa*yL!w0>ebuNJ>U21 zC#!^I)t>J)XJ0+7d})0DdA!rUee-{J*SvZEK=H8U|EAS@pWgrbEDz+lV51CBhkobN zZ}G-;hpxokTYOKvQ>@@{c;5G>oVx1&{S{9Z&R_QCJ@ft_jOuf%^sdL&bDuKU@r?U^ z;>}6sH+Q85U$guC_wV)T`}wPqYm$$J8mG;f{4xFPs`8x=i^VVOS*^Kvt|*5=-XD>& zHyI}`dB6WUeZuKd;u36R8^(n|{nx|(Vqcc1I5(BAatF|<3 zoVv7Uy-uo6YR`hF%f5vFo1>E_sd; z3}I_yCKWHzn*QjKMCwyfn?JYbe>m=5|CIISgS7q|L7NTVC%-%AU-xD0n#svuOQS2l zd_P%a7R*0$>gImqbNi+^nR_4adiwsuS84t8QYp+ENFB%7eU9o7;?1UYyYTUH$Rr@|CMgnF6ov{V(_W z`dY7>VT+zzIAk98El&Q4_Vz1Nf9+ZuQ~kC5=TF=1MUP9xKR$b{|1D#0&FkLJJN4`9 z7`wW?_de(SdeivRn@(_1_oMEe?nDnp^SZZvdH;VON#A$tvEBEwdVlN3O8PIJT%G=Z z>Q*1$%jaZkzTckj{qyf``ArJhm)%`rl`-f3II(FaPD(4>n$@SGM&ZTYpA2TQOK!TSaVpvNrGd zjQ9WkeEasfY=gW#Xrv9)6I-uy*`(9$P{x5PyEQiOcquD#=`de5xUqF}r-#LfXUD{> z?pmj9eam+J#gpVm`&HhiP6|AwAi>KW9^EBuEPiOu+u9wfrTHe;H zd|rBOee}@{50fn(tq|UzbNY1HO=+oelM6R5Hi~ityqYFp%rm(#FRexO{ho8ndfywT zyzo%-v1)0}|JT3hkx+gu=a!rMr|H#AzI<+nKtrQwXwIDtX63iHaBiPHE*0-G2A{V*fqoOyhs>J=`$)>cgYY=Re!|v;N-V+&`~(s=s`Z zasKm(?`N#L#Y!sIZaZx5IPvwlUxyY6>7PEoF4j8o&$sNz+h4DInd#nGJ@? zt6lWRd&`0ejLe&--#aC~*0i+rTL!B=M}N-QV5+-2#Jl*D-j6Q~o!hR7F*N0QF8#O2{M_?>e}0y#?0+9} zeS7zlyYJ@IKY96kr~S>_e|udP@yJ_>HC(%vHchW`^Xa#5-@ae*y{cvLOvyW5r@4C7^ePAn> zyzjU7iR0f-AFP4(>K55=K6H@5@wCfA&Iqv`lHnHwwDpb{@#Lf~Fx+Fm&{8r|lseg}y z)a}z(7EhjNo54DF?#I9LCPkL`OA7Q#N`(FUeND>BI_H*@I1+b6=1s^KPU-&LStFF#chjo>-l&3PkOAvCvuB-OQ_VAXsJ^> zpBdhH&GgIx})pG^PnTvjvtL;uOIPy|{pT+avQQ7}~O>h5kbno5!bLXF4Wd48q z@z>98FYA3@{&U}dE5D~Ff+AjepZ@=E*3|0Kx665&6`kiy(pr}J>Bi*s@2~yZc!MF! zZ2kFP_ZF;5jHx+f!BJ>}@ES;#D`7HXYZ7N%Fvo_l-G?h?i0 z^DCBx*Dc?mF_Ur0!hL1izq!AexAC!h@s~n*(0z+MG7+HR$AvKm_3x(Ky|Zz#U8?28 zr7PF2HC_CrWo<44PxAfR|6h-O-f3S`S8kTquBd$A?)0{{KecL~EB{Sg{{DGOjja9t zW5?L+iqighg}r_IZ`zb;)#uIE#W!zztM@zlxpw=Nx%VvU$I`O0qR-py4xinA z*T1l^C)vJ0%U!lsNdM38_kUh)jNhE~bkf~he*1oV-?)AL_CfeK!Xo?4KF*0!%dDqA zo|adnUgp%;FuR=XSjg1HYZ+Ew&s$);?rwu{>)N?Ofqns<4}BCgpUY2JwvvN|St4zl zldsmyST|>fgBKDH-`KE|P1r#9@>->-JPSUy-~PcIJ!xiA$f-^B(f__~@{d`%?)7`? z)aZR{EJ_4Z9f51L(1$~F`Oq0S8rH)9;gJ!1;?wo1t z+{(Y^{_kzF%PYf$XPd1}{eZ%i9mpAHk zgI4T=@X`GJ$CCU1G_n5wUEaTa>id5u4nKdJU|$ERmpCrYx2!Z5x~SJVbFNF-%qM%V zx$w5;mKzn`P?)xN|4hHs3!R7D7Tzk`S)QDoA9Mn=q=)c-Oja_o%H_VWuCa#v)0!ntVN))7s5)vlt(I)3-QNv! ze+fRQYkU6xui?GOEe*GFO-;RG(w-|74B1NWEpj<||uH?k{f4 zeg3b!a^L>{zg~TJbjt5pzpqYu`~52B{q-N@&e{Ff#M8d4d`jAnOBXHGhkve=M^*<15ik5qHf%k2XrqdqYnYv`_vXy%qmu>sC&iaIt=Hat4Q@|Ymz@4<5~O%}KWTgX^DV}DED4vUNdEb%&;K^G{_oR2r>}o}efp22 z)uM~Bd{OTEUGe_;_R9W?zC@S*NnKI(yXFn3inY?uKW_`9g4Z5& zOJueRRO8AxmU8r$?u`TMo`r?&+b$N=l*1G;E!a+7P$kKF_Q9Puk5`@z=$g=HoOr}w zOPSi-J-ZuoZl4sGtg-Tmbo`^0-=>w`lD=o1*?)6dP`vM#rN+})Y%t zK8|xgTD+ZG7($ee&X?to>W-yhZuk>|A>kW?$=5ySKi+z4!L? z%eQuBZ~rAJIQ!J{{$2g&Wj`})ZY!N17yTxFVx!>upTESfr}J)N%vhEAXr{i+VPW~| zrmy<%D%%z_&y`UxTyWtQ+uImV)y)qz&F`pPfU`-^arFXy|9KWOa&GUsS#4MG z;>2FAZP&J)UDkV!#oazmya)HUnu>znrio^OqOHSPAy zklGdD_ZF|qdtE2>u`&1B#Nxfr%m2TaZP_ftaO#xyw~H%&_1DZh|M%hN-5C#8-}`*i z{mk17Ed8BOC-2OJTx$RwZ;MaM#Zb|8DpMPOExoXR~8HHEx zeLg$;+Sgk*Ua;S1|6NscTl!VShwJ5qPhCG(yuJFIQA0=T;hp}ttLndQ#}>icxBrcd zxOFDRcrD82KjM@_>#k%dZEG#(f64|Dd zF|);|*-+Un;nue31zN_l`+~TpswVU7Q!&xn`z4g$`1TU7vt5(tsUE*S`P|2(;FoJ;yhiYFs|Dfk|T7)2ZjXZWo&0-7szT?cbdZl1%0& z(qa!!y34nLvBPzh#s3NGjTa|bKDRTkwN1h@%o2sl-=UhP-qFQbjOUuA6%c<;CCcoK7v+NW z*S!m3^_e}kbQC^TXWo$W^3W8s&LWe?YCeimQ+v$zt}MDBP++`%P2|_S>A9=b&);xg z{L21Qt=;#p=ksgthK1?Wvo~ZoD$3h^Pp-Z?e@=a^dvrGU>+5UT7OcrpaBlB?wdwDa z%=Wj7Cw}ca*T)yO>v>V;nmL8S%SvwUTd`wGq3|-M3zznEUwvO%yYHEE{C~R}@{hA~ zavsdH&i^#cy?^G7<-cyrB4Vk2Q;?TbrT+3|Js1Cp7;$Y`+o|3A@Y?1$(0clX8+5o& zZ@P2Iugq(jxO2ACw9Zrwwy+QZK9)H>W@YM9t})r`_e?3ed_d)t_tUP)AMah-cPZ%9 zcJqG^X6IErU3F>N<$iy+ZL`)K*MIuK@^W@m@@+HOxw2cfZe6_9H%9Vgu2$>A(+R?$ z1!#{oP4@6;%;u|>U#uDav?az&8V^3b4w$cCV<*xO|nKg2Odi|4y8zq*QldYhz8 zwgJP`%UXM{yUjPbmA(1r*0WnoQtsE~`1G7|*3w*|;gEfHo$l@xm8;ui-@lJLDQ}!$ zlylCYt6enNRi`ZX=Fwl%uV3D?b|-sw`n&p@JB%3Ed}JQ%wfnW?;t}gflDTGo@|oXS z-)7_xW0kC0QhYuA?(Whz5!;`ub~CXuww;l3dbuKK%?8)oeP&tHuLf;i!6tkD{`aHr z@|G{y)Nsmq&iq2}Snk>PZ_HU5?tZmLONn_-j)Q6bl?yS?|HxET&6yH3rB{1#QIzV$ zPaNBFFYj49(|3Jt((_|;CEvQAm*!>De17-EWVh<2i>1O$FKk$)n7lV3al*mPY{52L zW+Ws|*mlfJD$I1l&)&0^o5eXFeqd+RHs27ja8A_BlieKV2d;7E@ilEyx$sQk>#5WK zpIo`D&+q`WP%1lqPfh>ts&DfBpBEa>y`+~uznt~|&*$-=G17a-c5Q!^HJ3+WTB>2; zr-ckU{@gwl~Howbzz+L~J$@{ethqU$o7x({q zwf_12##d9P|3BI>(XVs)<#T%`{H`nVzE%cWlJ)n%%HI_wKfj+(pP%q4L_Oifqtol2 zM#ukkIk)Y3{0B~*(@YP3*8jhI`rqZ*zkYo`_)jWcLE_82K^@Rtji}}TEL@zcI7p*gAJ{jk{VMrcDCH+SbpQP2y89Dlrk=r5FU-? zD>g73E_?ST?AAA{uj%!kInj$J_eW~{w@@^md^T@MgQx%5_o-_b6vgh00iJ@G$ViunG&c{rtC|NO7I$8BzLKObu6L{Iv|T={T;Q{SF{CwjL1yFPFC z$DKV6vztya_5FGj7~*qwo>JZEMY=jWsu_D<@3y~p_!-aR57~U`LfuRD*nOUC9Qkc| zs?MLQhxEQ%-<=TYJfrUDm!9kFJ~9)8Dn4IXKK~O_E|(V9p4z&{`^>*tTv+yNPu8+H z8&U0?)IHm?U+dlb^K1S*ypW+mRKV5uP8Hf3SpqUVCcf8H+a=d4GQK@BDsl_NHlp zoi5xKMdxh(eSISw`8#UkAK8B&ue<+v@KS#1k}W;adG!tQb^pC}qCbUQ`zAWI+45!c z^GgBor|-|Nv3UP`+PZaR-QsubDqs0D^lUVJpOy6X*3=#;+s2Q1Y>X!}E?Zw)7kMyo zb3gL~&{p8{@AsN6KD*`R=AVzk>l;Kl-n0v*t&%aBvb+ADI1^)f(R=Od@uv=%|KA>e zY|{JBJJ;9OF~-&W%LMJI#a z@@Ki+=@+Z*=hd@s`dME;rTE-#CT)QSJ)89sZ%%66^WpveyfA{6og0JcS z=loB%D|&bpH1D@Y`FYXPtLC3x$KRPK=u&(t^Lg>PpW#dwE?zwMxc^Vm{2u7|_BqS{ zUbALNRX)65zkI3cZ(qao`LlW4;x_Mkea7kMJN@}j;1eeQQ+{qDp;J{R>1I9Rv=W+%*dHGw`gAmUc6EQTpo6)44T1-zLR+ zl}Xl{Nv-dfxtURvGXLb%ooXk=-z=K!=-{_z!lz#wxBA+=V>wlF%sMka|M<4t4vEn*n{Gt zgZFpTuiIgt|5&=}NkN-_SJt1KftH@6;5d8D;M=fDOYE&i2HrtJ2A7$5&neCzvb&+fc$ zoXlQyL!IAwX4kXavs>O}EM2jx!@-duRb$opwQl8EV*jcV&)Hqt`abLYF8`OmQ_J7{ z+c}{-sO#qZ`DbTLKCZGo^s>wCKC?xlfl3=WSVdW7K7UQFcs)ITjb;qJxmr(PHDGiet* z-pla)&+6zv_t)RTxU{%5q@&%o*qqvU-)7qL{ayB{q9UoTVha<(Bd5`Zl0NzOP8jKOg}cm$TafXqN-0k=WL!EZ8N`e zF(Cf*x3^p0+=%mk+}Bns^kq-t-K@I5-M4qX3XW$?c*nWC_{&E1&)*J(ue`Zu-nDCD zU0q(1c1b+R$Ne3%t|H3f)^y_y zhGYJ-jveW2U%=CR-@YP${d@Jiv@^1|Uu*VG74GI;uy=3o)z#Bdw?yyy!RyvL&mnTB zaLH`#%dYuj14HmhysS1w(< zHmkJf=NtX|zkk2^V_$ggXZRwX=FR7J&p8>K{^?hfct*}0zsyX_%jq&FkGy)Bv3BPF zE6Je6JCWZD<7b&v?h;R7HmH1+_*?ga+WqIowSPX(F1UR*{=qiu`r|7Mg*jQ8K%=cO ze>P@E?9VgpwU*M*(OH(`psK3sCwb?mzwI>B3(M^1)&CUg6e)Oo{oRYe+yDPPm;dvA z>GP^upV{VXA3tP&|L~Iby2A!O`#znuwtU;uzv;u-{}=D<=|1J?Y?1dabIR2451;Di zKRmJ6|ICicmG+tW`H!#7UiWm{ZaFm(uHtv@>yyrHRR8>``+U&$TyE8+sb?(SyqK~n z$bR?lG_$;j-RFlh+=6~Jk?>~<9tWJBk$N0w;)B6c8Cz(fny=OG5?482Bo1UJT zlI?P4?S{#7rPZvgttvkG^Osfr`E)maA5y3E`00%1_ZR;^7pxEH`o!ctXDiQA4tAYm zJd!6q`IgQ&a<}Z{ygM@ll`e8LHcS?D+$ot9HETBK4%H^Ue=bbX?WBP`ZCo&#y+qzXvuK)7In~v%3?1kIkOui;{*ucOy{lD+&Ll@Xi z6`XRjxS9Rv-nS`62EM|FP42F-F#A{`llwe>Q{0z%JMKCLN2h)3d)K39Jw^Cftod8hZ>&I6U(&x4w!Yi~#Iy>4_&YMaHg?Bf-VX5RAgryjM7U*33{vxP&9ZRVee zCqw4P`zi=MxREb+dUCkk%t?EXyx-t2d+eL(?aHU_>njf0p9=A@C}uKVH|rtG?K$yh zKdDc@9CUs2r%3Jp+b&tVF{|-Cc(U7%E#Y9l_=ZpKwRcBWpYQp7!9xGX(y~Zh?z%k< zZC6iPx3!;-_fM{fp)u-5-DEO84?0vvob5>HbMC zAD>K^^Xl{Jy*?)IZN8k#o6cbU=W@Gn2g`-Rv#ZPZo_duYRxR8Xb|dMU>1GMjd=b%L zEs5$^5$~UWc_Ql1WbpOTO86Mgo=bssp~kEBD9m2lz5Uapwff8ENHZ_zNqJZPOh|*n z;C1olibtE&H&{Qdj#~0@o%o#RW_bc@^Vof+2)fQR+~8%{qaby-GfmAqglyxw{I^zyj8s5srvpSGt=X_4y-T~mNZRE zI#*g|mUsWO?TekeZb|7^yxJ@3{o>7;KeqcyKF*#~cC7VYQElwE``JJL{hU{MF16;< z=J@xU_Afl_Ui|i}dHSAzTlM44&0fF%#_qpQE9)RVs|JMEIo6`Hw zeh8mu`TqO1ed2xLzaRgcp6;M<;!b7ymlbb+m9GBoxq$b;d-*->8Cx2P?LHMw3G$g; z$8vd@{KQLXFCUqMmlc`!+sqf@xGldn;vb)RT)ANU?w5I5TI|856+5QyJ+^-B*4Fv= z{?-zfV zyZ6^jMy#Iee|r9b(=^MuQx-_aH*^Li+&=gC|K{@Ng+*6N{~eFNpa0eH`&1u4Cl7@u z&rS*TDKy>bn4`t5(Y5PTf9Rc1hwE2k-+y%q`4A?zWnwh6LWpi z)Mjq(|5aCCf92v;TU+--K9?rf%(Hn^QW{$O`nKuaxn^JAomYQnVGP{%x?toWP8=7o*&x{4=K*CEhqzy7vHY!=<_lZq^G#B@B-7 zyw2~C?NPgS{+X?@o$n#d$0tq8Hx*n~-kTR4ZrA4B|4XLt+*C*Z-FN>~e*Ax7qTHT( zo$#oIk7xb7em?#Cu|HxW(Q$VV{h9r&_@DoI^*F)jH~M8x-#UJ6lJ8SJ0hQI0b1LeX z+vikpXupp?nZ3VKH=ie4H(M_5@Qa&^XO=uukxDlUii^LuSoVs;nLp|4H}M^Ky}x$v z@r{?>W{Ul*QoOeH%$_8*r^=@+AKg)o_&EKMYS+}TGym`W+0ZK7P^zo_F4pm^qNz{i zcabS!GQawqBP;KpvYq#S--H!@Eo)cJ3O6_YzwGCZmw&VzW{c%K>eRP6Sh;;}`=zeM z_BACEWw)*$k1YBwbZoxCyf#hVGyfjsT(jNUcW#;As^j6tzrEJSI$iEsX1i{e@cItp zqFvW#W#0{c9r5|ZtUX_EzSH^t+Iq^!1H7Cs+UZJM*4> zJd4px6Z_p?vu%EC-);H%jkm?C8Nw3gbxKo1ucjDDM$Ib!aP61ro_!UJ=k0%M%r;+p zU%g*&LFREYzWGMN4Np&ZZTE=S_T=iGr_-L@)4sv0w)We;+S%7^zstV)*mj8d``>9# zy~PVZrphOMyI3q~m?W~U@aC>mX8pZCOupa$EnSv#-)YmD8ivKZdt2Aroe%D}Kj8WK zT*B8?s%Pq--1}=ae_@5)^iQwNFI>HOuzY_d^Y?!r%g$N+PD+z4wMjniyI{|vu65_i zqM~Nq*itCV9skezyxrG;^^bYBKfizQ!FBupeD(F;0`+#h&;n^tcI#1^?72Dd@NAop zH{yTp-~Vq~j@jwHx6y627uXW6c3uB*gZ=!YIiK&J?)-c%<Rd?uu-AT;@yV2|*hyHS)ESb$8#|y<)w` zqAiCseAACDExoQcKI{`ia!TV&I{S3x$TYb z=J$qdTI(~X)Neg5eT`dY=Q{6WXCFyT=Drbe`SArWO_}40V%?PsrJsf}8y;IA+v_y( zWXd6fUfx-GKNV%Wk4orI_%b^_he5&4rS_$G&2?>C>+i>2x261Hj=ZXIbWe8i+l+tr zPueGkObzE%e!T3*LF4etGjHBa-oGRGSo^=1(LL+uO5ICe`|w|?eagjU?w_}n#yWd@ zo9El5WklM3c>ZJM|5`0!zj+J?x~juJoH`%>vh?<1y9$xb_77SW=KZ{7oKunK+@CvT z@t!80Wj|#2?4K9-{ptChd%S&p{fxQV<-clQNaZ=A+mSIEe) z`ro#$>3P*FuYbNgyD@CbO8Y(YKGzr7F|7adM>OotY}Oae8X~!s7IgcCU`|JS)snzgBcF_xVE=nQQi& z=RM!|QD%AVSCeD&4dl!pe|oT${~Jf`#q*V`WMWSq-M>?!;VS>Sw1fQOJU=$FvISjy zwnW-5=~LvrWThJ~c^+Wg z(=962eARHj=+Z~eq}Q=0oSk(2mkoH240QcJXu|cy?KP2`yYAIr4GkCDyWjp{cpzKZ z$$R|AegsbFG5lc~5g?|O#Fs2Bm9b*o5;e*65MR^KlNMK>ruM8_y>#QUSuRTR;@_%q zYB>18e3-?p4XS|)#OyZ*JVUApG$^5;h<_82a?oVhDlGiasA%Mz;`;iX$AuZ{^W z@X6k5e=Mpe{-k;a?^2OC33a*S7x^Myho3f-xZZL#@5l$i@=2B3m-kt%d{Op(-oKN3 zCh#6;;;nxzxJgnc-}ZOd{MXlQr@l6}|M%mg>-LT7-kPQ`2N*9@+cS5C*PD+rua{p5 zz8LZF?Dv`5t9WlRr0g=%`SaCjo9?Y?;+r(DY}xdEgU9b_-#&a~S-Z+BP+(ft{cHEq zf3PN8=H9t2VR2gjt^DIRx7LM6^kzI-DLnIU^`r`AhG29S;7(e3ynAJVv=R^+H<2jj4M_5YA1`R=+lxZssVk@ zu11}k*o1j+ekpsfy|OlQgEeo)+t3Atv5&X5pGrBgYn}L%P8l8XKb)6f%408rtG4vds(#Tb zWBaaW&+lty`p-5_-7mMP(scjDJI{aJl`fn7@|1vne|zHedm;Vnmz5>yZWYd2DHZMd z^o3WJ`n4cKrS13cZLwJ`HFq`7l`TmHx13#~-9(En>#1cI2=#@pUG5Uv`}v&r)fZZQ ze_w2@&5N#gsjb+(Chbr|h@0zx>KH}6yd0R2{ zhXt>u`z_5amYyAV=g2qJ+c!6+9FN=H-4*rugw(QFv)(R2(VqF%^Sa;fnUUMQZDZ-f zux+|G-A+sE*0P;zX;=^%V!5J7zhLp{ji)#lpPt|-_&M7BX*<_d$9q;@pxpzASXd-- zw8{GvGxu$c^=Bu?H@dOEo!7MWRJQtL9~H%ip&M7|od4=??)7_XL5_sk-GWYZ;`TU6YkAbi<8rjI;cFY$MErAV~a<7lr`i7<4Wo$ z8@~8)?|ZF&{)t{|iN;Q5*UH*=d(Kq+?_qo&9=18%arQyGKGSL8_5ZY<->b^2xX*pR z{$Xxw$h7~NmZt*G>?<fShzOi**`fE)^hADdAi_UsA`c)m2 z{$QWGqv3VEUB{Noce)!ELDM}f0&bWm9qhe#%fK~qjkwFko%0o4Cl+|;-HcAHZi~q| zIKy?D4GTOQOm)#&jl~nA51hPu$T)Aux$6FHLFe6I0S}3X zMJz`(IF}M>N zl?~hM`1Fuj-(!(Vl|>e^S;IV9YT$+7afl}-F&+K z%(7VRwi3Tnfht)-OUjm3-E})|dUBQu!(H8x)vN>N}e`;rY^G-Sgbm=uD;GH-Ei%Jr&PCwM)(|^kJ;?pEW>8s_hm*0D2 zu~+x<=}!*ddiBJu%Pay44(H#!a`monbhY)|*w_@~$oDR;w_FyQI4(NIeWv2={54za zvR7u@)==Lx_p8<;hIOwem2UpGGbAFr;I7UwsV$f4vRB3&P?PJQ+@W4&yMB?0?(J_e z_g+80@GCOL=JjToAZy+H-P6r%4m>*h`TNN^Zf9k#KL2&>W$%j_-)(Yl&xv1{^5@P+ zh9yzKHb0N5XU1KP*<$6lN9o?%YO%1_#N%w zdRCXE$6!6}O~Sw4&zZNcwDn~^tId=1tNFmxa&7CIn5~nqzpt9hzP{REO_K3LS>b?l z4_L*6)@oj}-#brz{}&bS{|`c+2KFT#vR31{Wq5?q<>-c8JgZM_OjLB7{XJ5%<1?G+ z*Co?H`{|Lw)a50YwX|s1mW={!o<)%&^_F)ugD$G=y3>A0%lK%N%~$bFFAc*E+AQwZ z%&&b|_V0hx(t@>1t*0iHS6j=<%BE~ucm1DcO$XQU&ZnVMFGe+9dic~x`sexR_dk{& z`Bh(ZysWqT^{$jnk}>;ZTg2CWTy=lPx^BZ`*``ZPKSuBzpLi|s@Y!Rr+8N$&d8Q{@ zo$I-{{7LTSbw5qzV!xiQHCyhP?)$3vui$fe!F%_9^!HZ2el#_%A?m_Ic}@jG8Ow2><)bB6O8=&Bi@{K2I;atOpuqXV@y7ZTU?3_?wS^=In5O zyvA)=tkv4<*OKO1Ti@K6Gy`@wTVBs z-HX2V=GDD}^W%T3tvmT&I;cH@m-ly(x)un zd^xPKUjAS1vO7KE30kW)UvJF2%suL!m1imP@|*9 z)IGLVxwUONLM= z=Ok0lV=~rl#`{X$B&2Tr`}NIWkKr8Fx4YbYWDh=kE_3e2<6~`WcWhdzqkrcU(~qmc z=k|V$N&ENt%!ltYR(OHx+c}>P7q6Hb!F}M?&uq`PUT-hTusyc8`goP)yT`{{`!hev zc7N{sc*#FbX{&W>P}k&q3(NQA_ve@Tui<9)RKHiCbXk8ksBoMTq>??!$0C&}{eF?z zQ{K1_Sx@hWeUn)Hv-jDDZx_QmV}2IE)&j_%?O3V2Vs3=@)fuZk$gHWY(Pj8L`L*R= z>E)L#Rtu^>T=00-EzYen-#Z^4>auzH&E)lbsek9~4OvQPqQrlOoq`bU$Nnx1s^M5a5 ze6D2|E_)o8y?Na^;@I71B2JwCWnX=^~ zh0i^Hx!(3{X1rbR#LMnRzgArA`RDiXl=|)IInPh(+ul@`Fp*hXS;5WQLpt|j2m&NgzVxHqM!F&E*dN$qs^C|!Mo2x7L%zdn} z*5YN`NEh%k_f0K`Y{+|Ce?yu&m++t}^ zL9Jf%i)GG^!-ewpeUI(xWUk$io7!)td*jF@d!4t2$F{lNzOgZfz1LVObIwcK=^vS$ z&)0viWDxt8r3ea(ydc@d{ZeOdn$PE*xIdUF@7U9u>+QXF+1f7n+1=djx_FB4%8=yW zYf_XCMj_RfptE`|E#uxFD!cb?^4$iln<6^mZ!U+Y&Q4l5D`{$O)f?%Rc9(DO>D{{H z*oB)nJ&V1$=iZH#aIlUumHN}Y+)Upk`LLJu0)t~mCAweFD$wiuw!c1)=bFTpup^HP zA8nNAlRv0R6Lpgrf&M~jm#O)g4~XF3-izMOt|m3h(+!)vKO zzr{2hh&p{*`hUOcZ28;zpKtChH2<7G%m4IjUEAxqH_l%E|JUU7dtEt(qRV>ze~t^U z`E`5MhD9BHFAY*QKb@*;^XaAgi=0<)iuvYRThFY&TvMiVI^Wl{=+}uoPeZc1ewv?4 zKY7>NWBXSg!;xX-)H8(d0UvaC!ej?Seh~7@Aj)X)w$6ZKVG-p*ypRC z$Mj&sW&YP&c|-Dxs~>UuU)ZupbC15%rp()Sj(OYHbuRz^JJaXbmmBw^P6z-0D)M?> zM0;s*zwR#?pY6*lzZmy}I!`A`o<#Yx)*s&?Ieq)Q>hAx)kNn?Q`tTa#`B<5lPepqY zpYA<$UVCS%bfg%f>k4Kqb-!EqeCoFAU53pcCflugV$iU`H}0!c{qGGQXq6%(KogBD>@Gqm0K%G2+=g8!P6lT9x(aKcOD&yIo*R0xbZTdnp7pC@lQ6kcv*xb;}5)i3^r$Cf^g>lHs8 zI^*NI_g_MN)xsT*?VcDuS1m(7G-YSOnmt-3%xhAFd9QuBaeaQk7TYOXb-5(@@p@h{wch4?S`d3 z3zY93%8&cUFC%;SZg+$40of-3p09U>MP1+e?&`jo>v(R9iLMXXq#m?ZGidF~y6wi1 z&YxGM%?dZ&|2COVd}Zw4`O~kgyRzVqoYzx}YUQiHzCD}v^3;V*%hFqyYh>%3UClr5 z`8)}mgXxR*DC8f!|8nQkd7*6R#|dV3KGix_Vb2~GyUb(j%o7V*PxCAYI_t3d$&>!4 zv0DyF>6;|`?67++wQJX|7kb8oKF#DZTpR((IE@^_=yuI5*gw$=|h6k9Z0|Fx^77C)SI=tN5WX>i6v5Q|EV zRIRo<%%FAk%Z=?PBEAH!T()78@4t=QtDd<$7nf82E?bbzyTIVurMZ5WZ(eo1_La$k ztJUxt_mdyZneLA*3}g0}1{a)hQECk0x-PNdSpLP7jmLgJ7Tpl|&?d=Ho##cx?ZzOf zTBNmAj4HhZ26uwXKtUXw-Kp~xfrY+e$Oj9ynAWpR`0Ve+cQFEA52)g zba&*&>cuvaEdogu0T1urceQ8!Ie#|S^x|q*s)Y7NJA#C?!)#S2lz&X;pT_+(bhl)N zs`Ty6lX}e~>NHsYFPg%7X(rFzyLU^L8%MBuW$%w|E>B6;^=jOtm0!da&{wW_M&fa= zxDUhnxl=;dg`Yjf|5{_em!FQDyLRu^W880ltewB5J}1BL*8U66&Z@|D2gb$8+4=pM zFd=+l`=d^&lc7`WxbtnEOj;4*EWYL7q?atO`A&Xt;!tFZJwK}?F?IHWNwNB;KTQXn zOpjEDxxDQBD$4$1>n@-Askv1bqgADEU*FiVhND?qYtMNp=VLocmS0{Hq#1Ml>*^Z} z$5h`}KlEC-_0w(NhwRCFt_4cGPYP3;&C6^k=56+RQR%^CRr8Y@X88)-`xx!Xn6XDJ z@LovFlxr$NoJkvJi2u;+kPuy+qTD9A+GD%&es{$d0l`*Y1KZlrZGwnI0A?-KG@H=N zwfZ#AmPx(~<8Hh2E}6ue&^*nzPC)JTt|i8qRzaGZ9IKaQyg0r-A^A_4|HY3zU$=m~%7mi;z-!^VuIfeo+I4(BgqPp-VJ+4Fj;oTtiUi@xT? zviV(={d@bpAcsaMi2T#NAD@agy37$+#U`?)a`)66uA4~Z_X-~~ zXRWDfbNwc|CQfzI>^6<_P|NUb4ayMRk{a}I*8>H|KWZGiA{-(wL<#mE-8(HHQaqVQ z0EZ&e)&SduXegjkuPOL(vvz9WiHXs|p5<61_l?oAXY%n*G$<4chAc;Dxpo zsA-vp)-7q#P~Es_YBJY5=?vA`Nxv_ijzkE%$$I{@E^77wTlSE!5 z@Yqjz+@7=M{w+`Kr{U`^-mAFA5SPIw`qC|RuUUYXwv7AY4^FnnBU&8M(6-}(#O^zdC^`f`Npw#iqi7R`*0CKH}I)%LIL+BW&n{tqcSb)vIHUY6WiZ6Lhx#MWM=6$y)r zzNSu5T9Y$*`}}yX;}Xr+W<}`C<31KKdv;IIzYk*9OZNtDIT#_`mb2wr#@h!!9!kA! z&pT8WR+l<&L1{?An|`SweynIdd1NEDe;HX9;CZ!-R4ki5jgCfSbV~6Tgb$3 z(+;0eZ1;OM{r_(chVr`~mFs@*-_BQYf2aD~bK(1bax?7v+33djs$rVocr0^Z_LYyS@Y=3?cTa4TNi%P-WRd| z>f~(Ql_j%6v|P<*fBpAx&GeYAa8!{5!TRQk*yic&uJW%n&a`+ch z;^l8^AHLnSOR#!Ner#>t?`Lyw|GsNC(dXOFJJYx3uY2M>|93|JZ}(og^ULi%UuEn! z4td;pu>9%O`7WAAi~a4-fL6nNFX5}ofBsdw?HEXn!ITHP^z`liTfDxuPHF0^WxJO3 z1ui~z>Dsn#A2r*Q;vauw?Vo-zzSn$dR(X7dYW;CoAA*RJ3tmoj?__ntDm`1s3-6&h3G zH>%AKUwiC#yScuPu*@Zi$6Kd3H5M_vx4XW6mT<`OjmMJKG%BPlF8y)#%Z$eY{l^cN z1s=5juyVuIkS8{*YZo_FnP0qcHg3M7VvB&&lx_R;|5eUsF1pQgoF}imTwPW+HzX`9 z__{$+|F>SY;;31(f8DLSea+YA_Z8DU7hBDZEe)9j}uDt$Sv%CoF1&{a4y}n+eW@{<$oPtL$8B&ZT|GnMyebckv)ZaC7 z()Xec-=AMQCHP*YUg=k5i@#^Se|X{i{mZV}$166@`E>3x!;LM4vgd7nUa*_9Rzj!w zZ(V@a`E-yU!Rb#%CaHB}-@Zd8%zq^}Of=+r8oH_TUcT;1pSE-FL}sq(=5*7PxWm2i z$*KoW-i22tSHE2(;uX2&9BXcm;XSisY_Url7A&1&KF#pj?Ktfzytlk66{WLvPZfHo z2qm6Sv)aDrv*gU>uQqS$ZOH-k9+|xp=j^;8W_$R^;lRs%YeT}qE?>B?!~J*Y^((F0 zXU{I@$(WyC_q59G{~rM>t6LfQx3?ZIwv{L?E&VVzzox9-KY6~C?XwAgZCeu`cOL(D zO1S^;))%|t|GigEyzq?u{$Hlp*tz+yBR>7om0f&Xrs>oF`ZtTh=igtyu;u>UpUHle z&v!D!{JEF?i|1BM#Yy(RUYkA~zyFsfxvFjdkq-tl-m@?LQUmWM9clCz?=JmvY3|9@ zcE$})U({(8MV@ps<1_1h_j;G!+}PNXl9CDMQub&W9o*)swrYxe(8p%|L>$U-Sr0jK5#FpDcy4g(Ra5m#= z4YSISnQDK2(R1I{sd-JQp!kvTXgbegdw5G?>+Xb|4~nlAaNmEIbBoO(_V2vVEh|^9 zWZ(bj)V!FK+uKSP$1D-Am9ow|^lx6%i`G4L-p-|^xfRvN`_|UxSziGy=5MOE;XJV9 zWU%G08^Yar;c;;XcZ$dG)wxbNF26T_{<&bDeFv-THI_a{l=XZyyVmRb-aa({qL_cJ z&UdqEysOVNY!YjAjcnf5rf2T$?QZ?{Zfr`=!KlaY6JM+~^Sh9Biu=-!$3JyvH+7lc zh~ZGr;C{L*GUjoTVZ@s2Ql})=Y|L2NY00NiFvTsp+lcLW)RwIl*MjDG1Wojr)NwT6 z8vk3C;?Mmvv%^K_R=(?5wdeEn{W{<@)B5&l*}6%-`SVx*%C-#6npIZeIJ-@-`i9l2 zd)cyA_Z0u0aK>9^&oOzU%zA&vj!9yF7xjGI|74T>-*@Na+qdi2-gocHEB^NL{o+-t z*c$Bb{_S40_RNukE3eEu4=#N{gvExVT>G`}M&Dl1s8?+sGI1ZfSZ)Tn>U~Q{jDN0lJ(@KqM*C64|mIYZK=bnF=9&_SGVSCVhgGsS# z&*t3S)R;cMszY7wx3;WoZf#%T)pon1>~=M^7fV6Qp6Y&H{_m)HR5CsOkn8lgvp+Z| z2XNggd!O`o*VR8i*yGb)Pvd3ik+SW}{`b^P%Ds1C;t>ruvpz*R|CYzK|Gc+<_^E$4 z=u3q7T;uK%tE=ym?aI!boKtyjsn6^}9c5|v$7!2$?(dtqbp8G__x}}%zrMEaRe6t- zSGL{no%zP^uWXL|{mg6Mr}@`6t=?MMe_S)P`RlLR@2%mVPS*eDI&b^e;Qo(K%Xj=) zm2LUH>GaCg(g$~KUH#+b+W6$BpN?L+X8Pgd>wO32>|FlHg0EYA-vR%+A5$4wf3`jP zZXLn)`0KZe+4jeG6t)KiNBjHw+FspS8WR3I>igXP^RzAg+lGtW{a*WirgQc0caHTj ztzmlcXAXtWdw#=Gz4%Y(a>IWU4&T^P7`r1b^K9$%7~VS3t?u%_J~teb?fLwD<@p*@ z8~gZQciby04;t^yvo8K7v+w)j`^+Dn{Q2Fz?XC2g@B1Gn8T_}CfAzdrbH6;e%mopP zOpfF@Ca6_audo00b~aPpJ=V2FQ{&bINi5jBdUl9ev*A4}VK(2U3B9cz46IMv6ZUMf zsGPodO}y%H7wwZ7vO8y`26{bja=0eceRR*yhznNc>w>tl_k5H&?x^Wn>B?&Oe;eFkG^D>9e^;_Z$0FhoRO z7ii02NIPStr=JlVtuC6|Hhbme{%76sJ9{VgCVzUDFJn6GSYYzZ+AlG71!uq3e3v%= zQfatLzjyI5rVpLYI5ed?6fiuLlI-rjn1LZh!A$V`vf5PtlXe`O`BdELY6 zIVGnee`*VPs>zwPcDDOI{PR8L;QP8_>GHcD7u&81vi!Z`vE}18-HbEr9!H$B{a^d% zVY$8hoA!bOGir|T+$;Xb{^P^(qJymO>F0ZeW?Q#@ zz4POxcC~D=M*aTg#0_!z%lE!+l1rYlX!rX+hR4rYN-h-%GDkp ztFE7a=W~1f$tKU$w4hsL#oc^HyKmdHj*e=~D$tzg?e;vve;? zT>4?7TeHQ(pPDODF1s(4{?ud%DzGH{J|%BveR%uOd4Y*f@5mi?pB#U&t!cs8FOtWZ z5_%mo&-Tnb{_)A5--mOH*Dfv-k^LTTU#7TqEAN#n*Mg(N{d04fjnib0uUx*rxUN?PE`uxl{e`D3t>?u=2 z3w}(I%(=J4Zhh9JbF#O0Jf434v~>NsJHeoo#4xYw5977HI~TpM*>p2!egF0~Yno=~ z|5l!?=Fhrd_2%aE`E@hCz7AWs_3)CD!86NWS*lD;?4E6MQ%RW}6pY<<@&_n7zV`|oe1&RoAOU-#WuOMBI)chco2RLfN)AILxi`RF&f1Z77zhG~!xXUfiw^_N* z4zkzXe;?6Y`H$^(!oL5!;>|zn3`EX95308p0L3AQaLMcxZF9NNeadv_(?_=($<~NNO=deU^xBJEdsbWRp=t21rpI(AceGcc?-Kj%TjQ2W z*?&!1dob$i+^5FWoErtG}q0fZTs@G7Hkc!-0=@?SgIQ*Un_jLYttsK zNhggO;`YzIza?4Q*LvHtyW5MOmvP>D!~Rrs>YWer_j&cB{y+N`4Qk(?{Vh{_Tz~)Z zo6q-8umAnVJRs`x%JVf-pL)lq{@!-h_E_}xve5o-(%b+2vFo!aQhUsA+0!5YT|OfF z=hyT5&c^?%VL!IxLHHV(r{OgmCg$&71adB0w8@I+)}9Z49#@w#{*7PvyQbpe*R8Jl zAA0}qn|F72^rvk<-~PXM>iYg->*V9Ir>gb;OPsg;%&|IbkJ*Bc;d=2t;o<5}pNcZ* z#QiuVcYfm(-fyqXGerNq|NqOb%q;iug--VmpRMJX5>&b&Tn^6Hey+wC~oeke}d^7_)vtFBga8J8ZE*wVMfC&+9~_~NFrKu1;SwR=t( z*KM73$9_WP+XZ{HOvN5cy-zQwNiJHN%5YsmL`|RNiOVfV*7`>uEmBV!32mGazSK>$ zt+0v9`e1TjO?vFpcw4HwVerJ$vls6Ci?QKiHeHQ`Up6TG$@AvM# z=9`7{6mK^5bGmBZ=5fE+WyZ^^eE9a|^eWNZd9}Y3`z+t7@XfAKdHPheq_i|B`no`# z`r5@__gTebkIvXAd|Ni_ZC7Huz2^Dn>XJ3H zW>tOA&${>dc>MFVn~!bCeZ6dNoeXp74?$y4&CIYN_qE!-Z}Ibaw6k4u?`@ekd;eF< zecu=F4vZ?kxHSCp-TZq73zALV-#Pbn{*D=s{VjUU!}OniJ<84Yw@@ZyUiGiUGPBBq z`?g=(f3R))HG_v24m19^U0Z(f-ahFD*Y!5??~K(h?bF+!U$;O1_`aIGQ)h+8RZY99 zJ>4Mnl@6$?+3~%9|Fccs>voT`v*FPBd0{kll;TGXyfnO4D?ch6s%I68AMDDDuyoJteQYsh`gGy`qk;b< z?(N&@ojk26%g!ar*2UTE=(+y0`%g?;ofBMRSp`0bwr%^N8#(z?bK7R$-5qrz&FILZ z!dI{MF6h0+7rg8oTf)oN`kN~+R~?ftk_cWde|Ay$f5%ea+#UN_a@)cxD^<<^K0o_6 z@A|D>ljHyVnC*If@8>U{58p1o|Mjum@tx24_dnYE|BvCLk1X#k-rD5-{U`oA=VHj2 zzPHgo4(HczbN|h=Z1cIjCVOhH%i8NyT{Hz1jfW2$?^K`fs3Ru*;ql!aiMrC}YhY zXl|3)mKmh=CzCOmM|SSqEu|$B&ZX^*GP=gSh2?j~lzJU$N#iK(W54x%R{T&syf?q0 zT5-w?SFNY2rH2}N%=url7x_s1`{>_T&a*$tPf2e1szpsZgt_|#mld4Ynjh3^&wVa- zgWigS;4kTUr<)ABYJbN%fyP&lG$ts_U#+pjR3;+(=FZEjjRJ#T*Gk(*?M*uzoxiE* zXA(o&nNPRsS?=FDp8r?5&Ch1ugD=MVZ@!;DxqMD+$^Vp1Jty1!*%NMG>vg^T!KJih z%f>tWE>ot58~p5$thRZs{_MWL+T?qW|FWGnEcRowfARm&Xa6s||K3sx?OO+13t%43 z6c8AB^u)1;H*cj{+=vS}yLk0x+dX?TAMe^z>R7$7<^CeQRa5Hs|9<>6EGzEE?>`&1 zUUIiD6z+Qr+740s{ZIb>-*Oz!^XvD6()&;3^sbqvd^MKqw)@vLN0L74{ftOf((M&F z)^zD!#I*>cn>s5)X62Z5KhD@9-?34RmNS!v1Q~pHt=+r*wxlY_#Chc)DP!l4Sp6pCg4+oFbczxE_b!ImvxHL%&9N zp0NFy;2T=nJpZ5AZ@F{6Ny_2ip6<}~obr=F^=aGIL#Isl>V98S8~kflSx)ko8O|%d zHk(~eugF~-w!TI-n@4+^?xWcBSdnd$SFJi1x+OC+@0R~&J=^4Ceh*&t|B2pz+xF9g z`4M|QwALCeznIMDn8|zK*VfhSTh8y=x*D``g+apnUqIN}iroIboj?nX9- zwV(gjUkUhE$Nu>HM*Fz@>g*Ns>aRuB)nE7j`Dc0_=lP?5zu&!@zI5V&0;~GHH*bI6 z-~9G(f&tI+@718n8(i#6>5DK)xx9E0@6V~>A#tzT3{n<OE#PvwV5hiC*SA*Z8Jb&I3BhsH>0DdOGcM2f4KGR zZA<~N!R!aNNV+p`sJW@cFio%W=<`}FhsnPC2+v-|HHcwzW> zaMXF2&*Xt`^w%g1xdHX?+CoH_$arVl~dl#JL z+OK+imwEWbt2Z4(OLg0QX85FrnlkJz+u9PU>5_RWZS%uibusA+cDL4RG~Pc}>R(#6 zjXz=a!tJZK&W!*6$GUpU`Cp~Xs~0JLn`5}_#otKt=r8~NO?mXbynfF;uRwuAGPY?p zk>;n@U3px#~==WN~CB~7LW}2+a z-f*o=b(gN=Y7J?&jH0=7nlAL-H`2VcOf#zX827##9?F`Bq7RxSmde@RO#Ukus3o*5 z(CcAFFYA_|kSS9q_Z&a$F1e-I=-Q)QdMm-J;XmsCt2n4wf9@JL!%`#35HoKZG4+Wd z7Pme=e-^qYkacQKNa80CNE&opzW3(b(9zJJxkSwoo~Js^ZPV>TlntRE2h(pB`jBW&izyKWcfFUys(b`~U6x&((MO zMGL(?eh+-rcKP>SQ1JumA}V^h|Jb^=@k+?XiCsD_hm6-{zwlf7^3^M@{k<|xW@gUVtaF#|Ec?CQD0r3`kr9>f74*=<>I(&+z(lbxmQ2@@pkT>zECmtf+ z(rxV=^1*p|JH;YF3Ed(>)?;c8ll9*&v(T$oWeiiryfnAv-E_!4eXd}3YTfS@FOBeFGUz8^Ut?iP|G*pNO{lR)X&k*X4@Ag^d^2@R?0ACYUl-v ztT+GWO_Fd~`tP^xjkx^gT#a+{dusyKqW&(Mu`yZw&B2_b|H59qX9qa|95fofJM%o5 zcN|#!=Ydba$zxL9R&y2So|fWE7=+>eM6^Af&5kjesq@lD z%sgmX%+G$^ikf>1b&g5-%;4QrH+$up>-)4MEGlvmSrx7({{uUU=ks~?MAz9}S<7TB zg&Urp7JHhzIp^eR2GC4S7uU)RNHu|BCC^81AY4HB+4L)*hEkji>kD7u4*XI%%Or{mOUmK9u?9 zI?sRXJG=5t+_{)H`b+=RDS%T8Xo&ODlFpb5ntL_`>r@E0*&f{gF=xvz?+d>)rMx(u4Q!uJx}T@`U1Q3n#MPR|JAb~Nx5s{C#GFl= zj2=zg_mazCop*V;xU8(~l1rKS_4Z$qMJ198dJjfOhkY`wo4%*c_P7q1B7Wn_l>j-7(;{}gS zroVZ*=IFm5lw@SP_lnK7#M4VB#Q!+Dwe4L=TVIH|>|M=E$0nHRWj>x%x;f>p&brx0 zP4$jRtyc|E$$4B}{OSJ_C+#@VSr1-ly%7lgp{`Rd>~lKbcB#li`L{0&I3A~M-f=BS zN8{}T9~I9dd%es~t*^N}_oJMDx|XZeWW~8>Cz!6g{)x+=Zt3hh^A$>xi`K3(S)g-l z#||}bwb=(v*Zr3WefN=FcU{}p?^i)nERv)aUc;THHj_pvd2qfbp(o&RD?XYJZ`Xe&*oXV#yefB_jT3%sLlUs*8JBsTN)BE^H^2n zEDwtl6}c<_l!Y9NIFJzI%;p`FEwi?GqSXFbz2<4_Ci$Nii#W>r|8zbmL%#@}c&h%e zui5O>@NDDKugahyNUOPz&YGUC&e@)GQrl;i&D1u*#S9tmR5KQDb(({S+EtZy_FSm&48zYBpfSuX+ukf$y0i1zHMO#>W}Byls`u^VkAQ-Lt-1wwPSJwQ2ITX=*_$-^nHO9<5laGuQ9qS^fC) z<#j)-C!I99_xt?+LwkbHKm7SzF8O(1?v-n%1$XS{PP)GAY5MlMxxUiZMP>CTdVt33 zcm0}ZVqy|>|AI&C-;RR6kqXjUw*agdc@X8rhRkD zL{d{l|9n{f{llHh{G03EX2m=X3O8@!Z1;P%)s=h4`+3$~eIGa9-goX{a9Y8WEsHHu z4yo*`zbzlRJB@X{Zk$85xA3*7SFhcRo_tw6!|ZLwlxuftpZl}f9Dixt4;tb>ZJhpJ zxI6Ce@rLjEsm>pN$>uo!{atI#_WNtu2FW*{zaLw*R40DhgqOyBs&f7x{@(s~z}VmJ z#O&;8k1Y(3^;%B}zW+5(OM7+YyO-^jPv<`WX1RZ1-GAwv&-V)X+I?r;dSBLW_a%Ma zocj9y-%pWR9qh9{tPY#V(_Qb}dV1Z)CB~VTX7*ecJ1L>hwRoy{#z*bT54LA-s$^z+ zn*C=@&voTf+?O?~TC%I!a=Fwz>e$tmDhY3|OE@kub* z*J=Lo*><0AEV^&?|I%~2Q>VG-os@sSiNElz`u-cwE81nOX1=!n{Z;P!|L48eKfF49 zp7&+N;e)HDt}nj4KlW&S-On($Ub*8p3ftSRDl7`R8~f+Wwe=rQG}mic^EY!WB|o;reb2mo*XqH~xA&&*&vmc9-SAzvwE6EZSuRj4 z?`C`bwQPgbo6q0(=HEN;|4xniVz++fi5^AIET=O}f0Fz8Qn&x-z5jPk%rx#xOnE$G z(c?F(zwbYI#Ue|mck!`ryYFUq$LUn<--DR`c;p~_I&{;=)#q6n`LZ{9J(O~`n!C(; z>LJr((efK)My!dm6z&LxYzn-1u<5T-@Yaj^b*oRvI)0V3 zmsq@Y*`hUbQk43*+_$G}irf{PxoO?&*6a__;jC*HOgR))U!8rpc+nI!4_?isg)-~^ zY?)p9Im+|l^m%2EIk#MUn7rxQv(Rk^Z^bp62(1Avi{Oh{rQja3!zRY`?G3SQS0eW1 zBwoy&rdw&6zjNu%%=u@0SI6yI#+MR*xA^`+x%?fVyl40A;AV^Gf4&zz+G9MkstIb}x zb!q4JYkMbN7g{#MNA2wSyuVWX|K8@Ev-vFqTFY~+cfLnzsOe0fwrS5~_iU}>U9TT^ z;PZLAQ_p-~v)k;)a;$-4#g!y~aOa5U*z30mW;34We_poz$CKmwj}Cd;o#<4be{jb~ zVNGrQPJfvy(#aOobb+__YPsf&q>`C&PMTb< zp{c4*PpTY~*m5mm|60d%clOBZN41`Ao$Qpj_Mn9HIbY2~$3<9DM6`IgGnW>~yjSXc zy(@7CXz%Mz!?sN+mM2p#?H9QG`BP-PXl~cer_WLujy(QYx9yHK_rBLt?dDZKE^Rit zw=H+2qog~BVhe+Wt(B$5W1esK%Ug|R@-SSld){8X^*?;6?TXJrpgIHGG6fSBH{eTc zQ!oDhy?C*r^!me-!;dbrzUu3q&b~6_6#u0kQ?r}A%<9sPtY#AytNi#r+}8W1fQ*~# zwylY+GY@H5?wtRmS2%1F=j!_|{j-0soVskyo}Lt?hpb6k*s=}RdAqx-OYV;qsW>RH zR>bS&hl-tNCVpxUsq~z&pm)maT@u%M-(U7xIQ83MGs8_cd-m`9VEuaHgaF434^VHP zeceB;8z-MLg328bAL96qOQOmh4L>Xeu1f{26uG-HFXsB!RktT_Z+*ZXAmhGx%Q30P zTW4-M7QM15%=_Xs|D7#90lLS2rDo+6qbG(RI=Z#3M9ulw*`zf` z*&-#E8q^i5XX|>c-ry=!$Kn2SYT|~SStcuD6eT`sUAf^AIZH`2C+GcX7bp9Nu@f&D zaCxXro-$Rn(~{4t@^)(M^lyE9G1n^`CGA%vuRU10St9w+1Rnt%F0HpLp*2N~%F<=W zg6dRd)|N_$a4}hkZQ$Cq`|pLIic2SF*XRBEIW>=I+Mnb4pmz8}f32H{zy-5-> zFFKhP8}nF5=W%!xr}sLBYf}0?Njz)^o~*i2aW&rO;v}7}7*8qbEz>rs`8;&dzWF8Y z*-8>5bMHhVvoF@QN~cbhU-_}!WTKaKqM@8< z*mF*2^Mjrn9d~QDZcNy;^IPD9vzm|lXBxKsKYy?Gcx2GkO8NhDg0EIOeShL2v#CW< zSw~|93uB_INVt!7S4Wp#Qp8=?)KDLtq&uv_i?So`ny%&8l~>VoqDg_{u)z_=wv(54 zzF%8B&wkabD=Tl?8ZVhR@8Rz{+sAKrZO^;9(%Q!QZ`IZBb@kgWCUhyvCx&i$Y7x&? zb?WQxUu9p!L(LdFb6&@NXnJ1sur>eIlh=n2E3b*#+V=Z>{e<~{o;?3^|Nq~_-9O*g zdtbkoVG_BwD!1^h{p0fezwPG~&%RS1UG(dv`sZWj`=lDo_r9E~6JPiK@?MpR_We<+ z@n4F6%uT+0d(}2UBrvlk=)LXYUc*^ubxf|AZ02#l7ZbcJ`jerrt9Z9z;*_9Vn<<8m zoeV@4PckT6p=KW@8MiQ_a^$hS9QmNOv{r^Pt{a<c!O>f5o+cgm%KZHeJo}~Kw(rxRx7cUyt{e3OH?N(*lxi{R`@7=t)@#;BcqnAha zA8NXSJw`P&kF4`M79IninlrZOXf9RGg zE~m9-WiKlI@iB4sr(4bv%kOMkcCY2J?M3&XHT-P9%qRKHo)^D)?XkSj>$id)HTOH& z#FgJk*E(X;ub%P zXTP|0*(CAYoSQNg5B`;umKMEO$o{D}|BvzVIiHGt{bt{G%IeCgYDcnx-{)iYzkJJ-^*9Z1KERES?%^ zol!N=@*FV1GZT~eresPCQ<;VRm*Z$v^kLF4F*K?HrPd*-T=!d zD6yw8%{V!sfFYkJS623Fh4!OwGp{}H5q+n5UEKdvR_@D>TLYs)KOAd!m)~z$qc^iS z@q5}c2}#L?%XdpB=g6f=nJ-%%wfr;R^p|3DY&M(B_Wk!Xe&1=;>3?(?+~q1IzTYXX zuc-Zgw>+W2P6Wj>SHlI8bn`LDp{Z4|R&*G7Q z#=7rkjQzQP|G8fOcT(u;F#n2mwcl<|UfgHZ!^-{a@tns8+2tQi-~UI~d-}biUt1{Mo^||Eje9nZS9YYEy5ow zmOU!#H=R~w+!F58p(3@>y@=qbO)2qqKMwAH+Q2-|^x^B%)9;^l z6^}jhzP`S=BJa3t`2*qkKOXF;ef&J`+otQi+_!Y1wltj9`_0a0|K|bc`LDC@|C#rF z-*;!7=xsIKuk9YTJpOT^{od&}H#cXUkFWV?z4O(o^@T5&PVeXD=*-c-f)dV~-fmj^ zc+n~QfWJAXKYF`9SR!*Q0X7IQ?;ErO{rz^kf5rV9HzYtgsY{gqdSAHR_N1eSd;0pW#@#NzzxU_A@9Q}gXQypG35w45 zd%w5upRU|z(E_SKKy}6Jz1y7mEGL|=eJ6Zoo^5x#Tvf~Myxq-j@AS@`xVwAMn-&*qhX{ZIGG#&BMw^-^JgXwW)Z%eDz|9vad&%!Knu)I2K2?vCBNzbA0ETjLwzUUf0TP zDZD58P+I=q6y z=&0!QNy{|vRonf2scre;!1ID%FVjD7n!dO1Fn>Mc`>N~gAMRbgckkR$@%_eozHhtz z?!gIV|0f`9zW=8!!|L$$oabdLpLE_SxvZP`|J^%1yZ=A^4YIHKF#P*DfB&gTs^=fx zNRB^JJg-=bUA9DL{{KJI8D6}6`HVaMhl;JO?d(1KzVH7Zs}sAcXR^Otce?#=mbf2> zrf*C+X;|~2S^oIWJx8DI`5bq8Pi67EP3J>Wj8@ehpHUHg*9@sNQkv}Fb<)}7YQz#T zxji4ZmWg*O7Do!2tqjRE4GmDWck|9zCbRpA?XepMn^wuZeUj~K{_uf>!q#c)`uMDF z-Tqi1H8Z)Qq-EpAjepptvS)w(KK=1LpNU&O?${tE-((-6I8SNH{>!eiO6%?&aEn*OvjWy`50Ay z(~0{$YcoTJnQ`66?*H3E&tJcM`K*53$Nez{2dlFZ_w!1deL7bjcV^%3cW38SzdI&Z zt&?^=wmj|Ur|S71c9z{tRqwNSG~rgUtnAx2n@;=9seG3CX7~Gh7SDeyum8mr9{=}j z;rsV*-#%S#|JQ%s|3A+QzFximX!86&Id4nf+ur~4?7PLA4b2vhdx9;WOi(>D&o=vx z#fsyP{(L^4cwAPTvEZoaf17tP(q=hNE_vI#Zl3vZ+V(y3DnCE_uxa|-bJO>I`O4Wp zU1i$z{eQl04U9jVc1(PK1#h?b`U&%EVQT^2AJUHdD70qloRUkQe}0<2|KpD9+MCuI z>Q0n8n&pbr{8C%L<p8 z!>LJICN1Z>z2!;Bp{Stjms$DCH?QU8Hkq5AVIsf!$)hl-_a9xgoAeLcq(=LR@M)b7 z-M#SX>TlAIzPg>YUYj`ED!AHY?Zw#w+YGO!zy7?HkC*r2v}GxgZQAG3SIa5ft(ctN zGt>CD#k(EJJ3bux?A(0{R6d8TkK26p{NI)Se~Y~rhpoGLX2-Kx?+Z?ay8KR|`1`8szjyw8X7Bgo*Qcl7iypStyU$V+Ubp?r?fdsmNT$!} zGHh$*es242L9bz(`2HUv403f9s`LMSnL7K<_s{eH3uVswVE_MfcHWMM%Y5H`zt~^5 zN^DbS?Njah4@B2jaEc_acbUf-^}l{YRSr@Bx~Q!;X-QW5VOQGGBO!cD?5ex&(aIS{ z6Os&$Jx`o%p&I-ozvEU)%^#=81mX9OyA8YyH?3N{cka1wWkSp|i+OtcjDk#VN}OOe zefoRv@hItIu2awZR+yij;y>+r#9GC;`izB{nX4tIb8*d&{=0OO>4__D4z3rKryE*L z6Fs;f%TuoZ^d^HK*Ocmy3;Fl05T~?l#w|u*!yZz3w`~UyCZ~Ij>r}$3Q z>)hEjf9F-dzl5}?f$$rzqV7q{^#qON5bYR#nL0{A5L{=zJEKsOSz&FVbn>Y-sd$qOKPI?wP859KZQy5{5}aN4v9M-2 z*TN|aXI(qs71@*AyL9u~x#zZ(^=wT!XJ}(}>ctC*b3biv1ow3)Wi9S>(k&G3<Wde3*?|C{*MGCASd8A+MC z9|z}Dzgr!-A;IqX-0#=lY&fiR&i?fbvKOg&NNuPBY&nD*4a zbF{}@a%yA$C(Bc6($5dwSaIODjZg4dmo6u>($wy=KMcK&eol4u)0p+qVuA9;lC8^c zEIOH%QquGAV&Eo$6^za6rHc2gSF$@Ml574ozw^4X>&Gz3RUf}j@U^sBbuB4)_l8cr zZK;1k3*TPsSpCX)zQfPB+3mSGcS@8u$-a0m|6o@3zS!z_SAzXhE-qpXFqvQTWpQ+# z$4xO_9v&ZyV=phdhkssfuluz6{%^tiKaSaNzF+sd;FRX^&xhsXPH(;bZ_l>;@Njid zAnkdRT7Pm+WwDx#|Kf`a)~kNo`qY!$vml? zz3T5#QC+jj&%L~g0?$`J=+vKN{B(w9(K!op6bTPN@)Os=^jtjE7?Nv2o0JNwG5 zDff(Rt|e6DOgZy(q39lMCWDKnQyAyfJXCCOuH=0jRsD*4O?%_1(pgm!CtR){{P8i^ zwbuXZ6mwU$m3zYYk3CbA4zBICz5gZf$MNRVhs~63&-T{eJ12YHPrtW2`)l7^j;VfI zexvyO-H1&o@qPCHB0#Ng|JzdY^`yX9bOZMlpF*no>bAjq!ntVI`4}JYwm)3?ZJ-X1f(oJqlPq@+JLuOC+Ez9co zn7TssNZAIpg?raFZ`nI{*=L^qUIQDewqm_C=UrCLI-(|#oMATmXJzl%{*azMU9-zx zCC=7R5v~;pWjGe%Yi{?C=aF=R>jX8EH#0Jxgj`K<=6L18YyI_Q)K&k$A8IvrO1CYa z%gFz}AzJgXJDlOeyYl!0=j;F7PnlVL=(x$Tgtyzog(A1*Sc2N#kB;u%a651JmAKsx znu?uIJiESsUn7704|z}+yk7jgL45CvBkEh*+~wCsm786irL5%d_d{0mU-|y0>d5|{ zDf4Ne%duyQe92L-V!4*>2#kI6_~Q9O#GqS=%G^cz-)x8_96D(edE-@h>QZB&h3 z=m}Mm+fyDc_!Ln%(bxO-*=2II7w0|he&btNo%`p3uK%9)6W`vY+yBl7jqWgr>ECPJ ze6H$a%WqyjzSjBA&)qHINO^Wfa>>hW;#(LcBu=c~xOnm6Z+{Ap%kmzWWtv@iHv8Q3 zY0-Jo;+q&}7^R+?Z1q33{H|=B-JcK5^RH}lNl9937==~=>u0Y$swS44du2vYpKgX^ zeMpbZr*n_zt~R}Q#YsiC*G%z2(xd!r@&1e3R<`DI^eZbX_we*TVU&^IdZr@&Z7R<> z%S}3mrJA>jg|FKvbK;5ZSME;_qgEfAd#zOTtw|uSpCs3(Dc9d0P7kyT-+Qd(_EG+? zY6~Ra2Mo__zh&-xwHgDJs% z%h#_jpZxpWTr#tZ9rpUxCM?lmv|`}IHTfj2idSNwe)Z<;rMcK*JpX~y|G ztNy-@KYC~9=HqWSXIx~u_p$Hue;)0+tg|yNo=&&_U3lx(EruT-``54DyD#aeGQ*pV z$CIk6cB$JOD?BcHwo~0MfAe!mIXSik+qX~u_U#+z_n)_}?_+iF_vfD;_v^b#r|kCr zt<(5x9^5@M)42PxU$x@q^z$`7*EK)+g#4YAVzzs2{dbfG+x#n);jQ*_nBO0(-@J=s zO~_ikrz_OMdnPe?i!R~ZYj~7DmDwjSGq^Rp!^v#Ms*lSm&cw7y7c0g%OSTv$2zw`e z4m3Eo^8)ka^;eVDs2h3~%7{zl`h1b7Pq)$O*N8~*$+dl&yz}3On^V&J-?h)=Joh~N zx}5o&E7Dc3raIVd;SKF|RyxlEDi>tR?-;6dKD|>Mf7tYTO}lCKwYKZm*F+xwdi{UX zWWOrA;N^Y~@BjZRW%qfe_Rg2fqF=sw^Q1$W?-_4?g{gMvwa26u(7??0Jx{;d z{Jz=F^a0d-;hS+Sa=Ta9<}b=Ey^To19UVS)nh%fpiKKNh$!?wCA-TxV zj3ufjV-sU^jk5}{j+}UF);UmcODdNCy zo^0KF);$|7-W%K#za4sEd6?nj#c6Xb{#>3_{jsI^>a4sPQ3I{(Qin`F+FdOB_tC}I zO!u~$&)ZYS6P9{fy)zcQc~3XC%KZM{cl@9_Y5DTyv$ya6Yjf}WKK`rUe(v7?o5OqB zo8y0e7DsMKkdy!S;r`V)c^R1}`Tw5P##BCi>Z7JUr$9!1PQe|q@4G)9n_c;N_WiRL zE)=}|xxV)8?Kw4{K7xAhGG#X$YySU^Uw$*^(O!OC3(!bnm-f0Rlf3V3KKZ!*ZT9_V zZ#Kt!#mDQX&#zSjVFvNo62trdzU_DZSbzThk7L|BU#&WA`CW$gb9tpw;p+@Z%4S;M?oC@*gD&Z`~up4eI)5EuOPx>(62{{-sZZSLf{58oF-% zR>x&I2RM68FaB6@?V|t35adosE1!7D!PmtQ~o+NU#L`v3o^ zbaQuStoV8Qe8TnE@>P5HWnInkv-_D^^L@8{N=k}}&HU6p`Tswx{A|C9-YL5+TmP-p zUhrPESh%*@;Te@`4uO<<4!yC+uG#apExn_oZau^{$29kIXe z@Q%l8A~*M)*8k6xKEGD4xw+Z@#V^-w?sZM`AFrG=`!?!O?eUsF#`<4e9A{~K46;pM zkeN==C?a?Y3b<oM?@|Nl5`?It^<7Rbc(F3`a7q37`*yY^Q(9rr$c!9(uViP^z> ziUT#4@KoQ(I1^YHeB$>9JAhO16Z3tsGV zW4q1%?-N9CKmBhqJDI`a`N7>;IU+v~)?~D6=G9z1WE7aq|5IZ1g$>OIcV7EC?cm~y zE6#hrs@Yt7<}@W)$>-v>$)eeYiV>65%(!l=M9j8ZxIblLde_B^fz$N&e}5TwZ2sK` z4+QrAy83?Jm%?jnB2UjU&ECEve)G*I)1vbpPm9j0zVuw==DnlI@{hmmIld|O{b3|u z3Qjz!z`MP~iMyBIS37itn%vYU$6GT`6?$B|QPu1{)8^yj*$FFHOSKgFgKciD_^2k& z9cm}M|73eYPch&7)n#(=J+lub2_^toTm3uQi!b#dCa1PI#~Nm0OjcHb0r) zzIN*8A5jxllu3&4+L|f)>Udtf!`!CxIc4T8B^MW$ZKcapos2JTL(1MAK7Q9)GX3^_ zTl?DJm8QwzEn9ZDI8UFWAD1sVIppS-3XS_l#+kwEuRCd0?)8~1Md2(ptB-hTLqvEJZQp>!_6wH5Y3a{D6b%nvcd#@gyy-IX>nZL#z9izmM zAc@N&tO;2UXH~2T5&UuR%Iy3--zy$F&p1{&y*=jCTceW8MvGSQ+zeryRgn2nL}O8^ z$ot+~RZ-hk_Rd!7S*>M%DXQ+cyZQAD-ftqW&92Tq{Z*|qH6fuRE%<(+xS-(8YpoS| z860yk$N8eSBHL6 zGnwn{0Rk59yPrwO_a;ioZ(G^hsg$>CrRJGo43{mNUlS+62ztzum9 z&GOf+t!IT6Jrn}7CSZad&-DtEfA_L!S{#gB=< zE51zJ8ez=){@~6v5;LEgRn`a!3f|n7v+|}J$`H|fUzS{-i>ASBK3%iz16QIcRx$*45QBOsn~Nk4a=-Ta#9i(Qq~U z8pGR)P^@nd&1j{cJdB^e7 zXy+!*tCmhOYAlHdwy`Ac(Lew4lYw8ZteVNKBX7;vR&5M(Nu2%T#?jxkr( zB{MdE$Fsu11s6UA@4f6G)2Dgw(+6ek4}5$4D}Fp|mykRwAuap#qPzUTTP(>{U1jri z?ANb61R65lRGXEHGR8mgq`GR?)hDYQJZly|-`H>1(HFM*kY<16)-y9SWQ5&49tnm# zKA*elLQndm+kp??x_<64{8~19+G<`~<9&5!Q_GG;G?&-?`MCIOr@iduPczT-y;W@_1=OVe-7FpVJDwP0y^9dOw9dxNC8{>6Aq2 zeoe7AAFm!9W~Sb=8@NkB`w)gyWR6{kfy_-7VWri$yBP zySYC&Sl#|zF8iTj`dm<%G<)&IK$LN`_$afzEgJ)tO`E}~Jfp|(>WmdeTY~zgecD$M zzg7P+SNf-_8Cu(e^H*~w&+9m>e)QHNi@x>h^{Y;XhsOI|ZAkut>7T)kE4> zXRH)h_c4^&Pr}<(=Ge+4*Vor`6W-4H%8>IW{``v*9=S)R9u#>vf15$rsy!>8?LEA+ zqG|fs|8iZ|_edw6+v9rYugd>Jpv+fv>4gSTp*iuSKJUYs8e4+cLO!W?M&)#!@c7dE zT4}nFT&Cn#5%Hq|-6sNmU)yGwcIf%z#Xkhj6+XTd`^ar}#Y4p(k5_*WXSMyvu`1x; zW z7jI;CX8!vHn>Tm&ozs)*Rok3?o^iqIY%a5x0T_$)DsOE%13eBk}$(i4}ir%Y@(S_620m{diUR>My6?J(|ZNeFeU) zWU|>OEB^=>~RdU0T18W<3D+7rqv&F_4Z#p@#1akx$EBL^+z-bFi)C&jQI+j9BK+?+T0kFVXX28S^@=QTJo?Xe73ffK14dxR0 zh5H)6^G%kRBh55B(Z(kGzw)OG{gQ`&@Vq{5uw=TA% zqkr173knL}ytV3?)c%`qIe+~{PCHLBr#wc(?%$?F+KELT`wYtODcWiat@a!!-}t*Uo>9<#Z% z>GWw<=r}toKe)Z&Ub0V1^+R(hqGQy zjJnaT!IQH11OLL8YUjW0s5vq@^YEp!mzJK6*uSoGBbz^a^}D}H?{*YhU0bJq+Ral^ zA%5A>*{ceU-`XR2qS}3u3d4?^p2%Xc4Ry)({OfC4Si8lH)Bl}Y6TN-n&En^YXRp+F zsvS;#@#4+WwZ@E>}~UTtyYT++ED zwYi7Can>fzwv0bQ7bVo3ntk6Iw&bkZHOpvq@YDQ96N4Mho}a!<^P0q-k3V0#ZaX4< z;OC0M<1J-#CVXAEt1&eHtY&mcPGCWDcW%7N{U48Hrm?@l>mNRBe|J2JxhL_C!M)yzDnHX7X0~nB zy_YM$K{NB#u}8Mw7VRz8n&&4q^XQBv5z|+TGqx543+^*K+MqL;y%1b^1j;Yj`BZJT z#Sa}M&nQjye-+Ip+){1*^UktgzViO}Y=T=NP95m^td})mrQBh|Y~{IKA4A$6ZOmEH zc`w@L`Q!Yi-xY;Vi?3E^SmsN9W8}88zjxvU$FYcOYhsW8{eHLiJKOAUNj~9nH5(U8 z++T1rLw#fL0U!3uvbSoD(m%}IJY(-`pPt5fW$wv`i{xsb)QRcc=`=C5xX+=yW6w!v zSk8a+ zQpMBi!?8&!sWXm=zSeX0zWB>I*#Be3v04TtC8bTgRXS(QuFgY_45OJ>q;j(&XDjIi zwM81Ry^r}9(UK{{cglco*{K~Oj{-SEqmE5b(Yz)#r#K~&t)ckn43+1PA4%6-d=j+( zcf_WRCNd#9fznCJn_^_?d z+u3K2{d2q})Nao9*d}vmR+Y0~PhD>IZ#t_ZaWftuo%l5@8O9tcCK zYEnLVayC!zN|Ro3%sQ~Iv}<3X>@ibOMd??*W>B(zE9U z^K@7$Yrc4t%bpuphi;usQE{CmFKfeXhz?Vf)5 z+BLUHDkf6A2QFWm_Gr)f+r@j*e|?FYagTk;nT+?xet&A4p4@Ny{eaZrx!%*0HkN!T z31KyslM(w+^4;g~WJ4R9BU3bkB_w52N^*F7xb7wPti2{HRlzWMzkS{oL%ABec_Axg z#5Egls2u#MleMYSJ?LoSY%hy`P3c^obs2{@swKXhYtFp+fP;Iwx~%Na`HhWr47+yi z`ux2jx@X0vhsiVSYOR==n@wh&jS4+CulkMLF^kIQpPtS9U|IQrGd8xir1WcI&(gKY zV!?YDjrQa-c<#IRDJf>fgH9*&zzZk0m+-zkH@lC?B0+rubyZC#}I;+sdLoRfrvtf#J9x%r^Vmv2v%7spJyXuf&3MVl^P+Q*1p)ypp4 zyvV$)_vdHvO=)MN+}hd~NPG@C*2ZJ!bI@qY>#l2_f;SfCEH;#w9P)Ub(_-GO=k>RI zZTTq}@H;_t6R7#3*Scn{q3&X%ul@T$-54l7ks@q*%cZ}vsbzu&=fVjqcBLy2l!a&96iitV;e_qY~o1)c4=2)VI4rdwQb6)>Or5+{EfY+7aZTQQ5JOS)L2*-F>^vd`PD=)AR(t+}AVpzw#`?Vrkf3)e%P3#Lw_ zOuTkTv2~N9T7C~_@cdQci`ixs`GlO7S$W}qkkPS(+)3M?O*t>RagxsIPxGc{$X?}G zRk7M<_L4R6+Zz`yR18~R*Rk*+kAGB4qz;?+Gn?$|>lUX+#b-=dIc;+O7oVAjwyX@E zdC$Cgo@Q|OXY)ck?RyiRp0&Q$db)4D&Hdxyjf<`Y`d_@-vc)H3)yJPzd)L1;)qC&q zb;)fa!A9)P z&CY9Lw@xzBx_saM%z+0Q$F>=#X33wExK+K(cx|rLJ?nzDckfpI*uwih_ujeSHG5aD zo*lXQ*`>Re4^Ppwtz2+ydg81#K8HlE$Hlr^s%g&?2+hB#nQU`ZbavK(ke_<;OkPKy zKZ*UAe6>&b+{@J;0>73kDk&-5);7J~33W7x@~Nx5aLoPV#1&JHPI)}1OEM^NPVmo? z$oH2nbp*Hia@beL+>;7^_d0i<_r)JcIZeJnvw96DZQ*^->+Gy-^XWr#4^KKzjs$~F z-=2-fW{dbcrJpaE6;X4`v;6uNr3;hVWA+qVy!Y(k+&TT+Ik{)&Vnv#q=JnVxg~T}s z)_qLvP~$)No)^CyF3~jSG)UW80yvR&kUQOz0;%ub?p{&eB6Z#Av`rCayA=>|QcCVpC z_UHWk>5M|pJ#(y;ofof(+&k&ryq9a@z6#tcZOCU%{(Pd-(C7VZ*J^k1T-n$ys=0w7 z$679U?|i$LIr+uASBdZL{5)!Y?6YA+Dz`7k)eDpAHJOa9Cu3fx7io5R7 z`CU0DKZY6yRDRmfQ5E36c(IF%%QpM9|98EPuSQDc6HjXMel__Ruy~q)Z$_b}lTzwr z-<`gHJZ6@jY&JRe)Deb(=s!o&Rqi%zben3OU#lUHQw z^pL)Kty`6=%;sM+;7jCv`n84s>XClCo>N9@TsK?J>vQP_$~h&2oop^_dQ&3>r4hPw zY3L3WxzATFB?RZWFO**N_Exf`)5>W)h6$4v9aK9%*&_c#pG{Bm!JUTh_B`I+V_J1% z!^Y0?xh9*~GH>}--|F0ItCB05^Wy%2DVeoBW>P(Uy_aqp^Uio)b-S?#04v^sK*3ry#E+-)%;kC4DZ(YHFMV9Jd*r% zXXwJ&Kk{a;Y^?`1IDaotLs<%x>mS9MbxOoN`$XHSi)|W}K`gse>VDXt{sg7{zkfXccP3p#P_Q!XM$qKmqOI^M zQb|c^a(I;4jw87y`*z$7-nxBCu9j}{qAuAQZw__-jTL*==ZRM4Z@AWEUcp~}=VP?l zxAn(%TE5x;#G}Tl!8}+(>XkxvnNj`ny$yhRiUPj_f{%*qX@?giEFS>C>8StuipGxuDIvi4n=6(jk7M!UzV?^Beg z``pZUY`ZTb<>SQ;wf6@_87Em!|2M6%vDf1M;l_5Ig?mq5-m>}RrZTtR?inV>6bvPT za&8^|vX8H4bLEGl63@=e_5bf+|JrQL`dOJ>6S_W2ZsS-Rz?RU%81q-Em;bj!aOtrl z*G1OZs-(r(wltr&Uup2^q>HbK-6^G+)5PXz9hht{%UZSKe{9eHdB3lf-f+$TwRx_$ zi%Uv%de+>k=)6sVCy)o2Q;NLz&R*fFDkm>$TNUr?cj!S^K?mcStv5d1l{4TxxBX%5 zB=aW`J6^xLzp3i0v&u;xsWkJl8_y-=QrV>r$CmWicoo0N+w)yzTVuIzPkxet#AUW^ z9OriMbSG|){dS$hu&4=e!RKn-=6ZLH?-V2K7=GMj?&KY(d7u)%GC*)-Z(3=$#il;$^Se_d-0Nqgo4n{y^;%u2T%V2=6_YmWZCN-y6CuRq8@$)mMqZ1y@ z4%+J8Rp5IwB{(K5W5>sbwaYjTifliyh;8nY_Yk?RB6YFuZ{~Z-PkIN{`frV--$K zDtzmGE))d!+G{y!AN`^7+;~$?PujHuH_U`?W&X;X@vZXCW~IfM=^GB~?Y@*IyIcR& zqTDxnbGAxkf7H`%^OKxpa!}%M&&3Xm+abK>W+t~qtRKu#KW%jBoZlYvo<6?KX>XP9RNt4ixZG=QTzIlX z>P+gnL$x!F*79fDE_TkAy!k`pZJ9u}&4qd94}a|0xor9B?!DjY#ID_n+T7DWO)@Mn zyXRxzVxJhZ$A?4IFAJU0tXGke4`of&kV<`YC(tCXTT4OszS!qf?|_dxB_}8Owt3!q z`Sx|n*;l0zx8quKqMB_kvR1u%4r&$U-uzKGarXVXH}h(*1lIgJ9iF)M=_USu%=dTv z%J%;ep|mM?mTfv;c zFDowa2x}$eO#I=IwcBd?#;UJYX=i77|38*E?S8HGIqO+zR{Pe@e)+k7;pX=a3wo!h z?f7cKCU?Z_`o*bf7CI8%?$<*M+Sc4uF`T!KFSsYdC{)_lW8REK8;|wy?`bJ*Z|9ty z`)d1!nu>xD#o4Q_9Ct~az3O9I#{SM98E>X7?>yev{`K{*jb^-yH?B&Ze%$2ejg^lM ze2j1H=;+8%e{^xOaGw3X!(YFC{W$ToUEkJev-9>$tp9n-)c`stOQ zpKmTa%y#V9v27J=`uh5Qm8Cxqi~fH3@Xa zlhl?*dFA52Chc+u&8}UV*YkAo{EX#mv)QWO?kz7Y;@{VKw(amX{cBJ^;F`K~89efGV2BDlU< z;%4YSTTsdN?cfaE9Q%ET_r9I`KH=DznHBGUzEG9tV!ZeEq++}5smlCX?;HEdf7)_& z+wd8uoqO_U`(Dv6H*>eAotbga@VK3LgWKYR+UG1LTj%}1ENpkrSv#!YuK&8HKPLO7 zZQk?ZXuW5CyuSGV!>V&CUuBxiKD)d+5?&h{akje6F3>*a z(tq{LqJsD7$^YG!`OQ4FtMqlmt}o}5)+BY6c=ES!tJ)+F z{rltTpIaZM1b`fXn=?$6X#T@_8%paci4HpBA{! zXD@7e+s1GA+kMu{_p9Vr{ru^_{_!{ad*4FV6f zd%C#1@&3P8*Zs9pf~$^4>m@u~0{d_s=ST3 z%y#V2#v3Y$QRhQ`{ra|aaW3P@8(x1d)Ea!_NMXLA!g%|f-|jaj-|c?umo!VlsHa?F zzJ1U-#_ogH#4>z-u40anbJlFu7j6k%HKDuHEnw!fkia_u!L3m~b1Xhx-FIw;FH8KQ z-t{C~hGzP7o_VL8ujm;SHG z*M5F_ulg$z)X6aZm~raXpeRj8Q-I{4# zu9*3g*D<(c&yO0N$sZq_b*VLUbvowaIa7%txGmt&2hI0g4Spv7SMh9@ShQ}|BZp;m z_NOI+rK3g7?^Wcl3JiI8LT!yI|Njv0b+U^jghh|Vx*pFPK_93<4R;cae+}|6 zx1UYpwryq%{~oj3*Bm5rxBLB0_Pw>WJiL6Hik^D?`_Uf#<9q#I zIrF;}kJawiKRC$#`D%Wxa!&mldAl>F@jtb$Mfq92b)8f5tNTXw{Ms32xl+u3|LW|{ zmc0J&#qpZ=x9=~!n9*Y$H%aBq-!y9<YI?%{&RDSQyEj#(We~j#^ex^RY zxBJt?se2yi_uX7|o%=(+{ZGU0^82}muG`h#v@d%4d>_NnjP=*|{415I_;Bz{w1IrX z*6eEqU#IUobA8{Jsb}Xs?wqwhfiZvg3#Vu2<{zJ9Sv=D?U+?YPw-3Mi)|N4}+hy0g zxx1TJ|5^7=&(G#(N?gS&%{Ln^_nnzz+FhD`{nGt8EM zO3Odqd2ZV;KBvH@yZnA{Wbv~LSFavz`}%t4^LJ1G{F=W13H$xu-;ZDU^C=|ey>|R> zDZQ%q)i*ZO*}BUYSuj+;-E5vdx7LhZzKrAZv-8KR&mYzf`(VHSNB+8hm!?O4eX)49 z&At13e$Rcg;c?%WZ(lFozU`eKuYb9^`ta-YeSdV$)%=VU-uHb)GvCts$HxlK|3A;W zf9dx1<%hmA)O=l~|M8@^{jQs@b>@D*W?pr{*Z)o7zW*oeoaOtNa}_te zXId7kmFw>9_O`F!-2U&O7^rTrzV}M`>#y&-{bssM>5m* zNHk3LuNK_@>;C`mGwy4{>wxn-nKI6r?%I+*9E;aPZl3o0-R}O47t=E8JTGtikbCmX z&PR3u_iQfTyVmD>D>MK649j9ZvzLpvuWvv0!l1eN@0nSq?R|ZGd$xa_=(+IgQm)%a zw3|N!b^kJ~ndxDu#*+A{In;dZBMyJ>JIf>-O)t8KZhJW6gZpZlw1neY5_ z@2cM%jGy;YsIKnr*FS%E-}^j+N#wZQ|H_*G)&GyBulvKqE>~0VcI(T%du3`~D1z{u zqF_YHq{zS%rK?cJWrtv(_f8MgrhIiZ``F(6^?ScRTNA#oX?xrc^M^bC^4*w!KCV=C z`TPQ*`M)oPzS;bK^P%kX)(Y3U%P~Csl=omla`iE_!G%}Z_={Zl9F#1 z?p{86$hFw;TCxw@-Mc>T-*Uevzw){l7w5`S4*-AvovHqTrcvCRbwq{XAdv>2u%wg5LN)hs0mZG}`*@j-U1WBQNzW znH!@27jXZt{Ci%_=KqTmCtA+WuYA@0Vzy!PzI~Ek&b?T?eto|xyZn((_5B6i*RQ-v zzaDq|7_an9(`vEJ&(EcPn{!jg@`J*zUAt#k=gX%DcFuNyzs~#v*;g^GELPa5a3JXib6wAqZ@pTzt91Ljm+vb4 z=N8MC-O1Fk`}M(j&#zNCKC_A>PMtbsPiTu}!i9{*ah0s`Rv#F6 zBrF6LZ@<6pMK&kW(Mj|9H#JKza^6BJp`Q(Gr zpC_Jvy5ae~>cj^N9N*o!F}M6s_rA5@pGf76$HYm1=vwDkqQZL7bX>E03<9NgS1{aLv$Z0(wN6F%DgKeIU_C+CRS z;%%<$h#PtXp+UXW`l1@Aov9-{(9UQ(y6A{f){ydNJRQ-PY;e~KNGXp5qtqKcy7=65kIXgSs z@bk{+g@1L;nHkDv8!QY>n#r2K=i!}0W%p9WxpKiLM?ne3$dwV1`|E69T~jaTyS6TN z`Vq&25i_+__L-&$dSpvaPhnBha@t?Vyz%ZgYsJ3gFRw1&pVBSt*ctdZLf7*aqub2? z1yaXvS?smg+N-U|s?B9pF#Y2pam^cs7X$THX^N~_a=Rc&`T%$78A-{{B37qaHqBCa zbBe1aCpK~Jv#jg>@};TDo8HtP@sD@rP;8l?+p%S`ul5n6+x?P{=k5P{EqZO`f+?*QzU`29&Vd}rvx9=aCyMGVw*RNl7w{1-N$@S+4 zyLjTa)0-!pOewhV#B;}^TdM=Zp3Svbq;crp?>fQ$KQGU}yK&k${>Z}kPa7lHWoioI zrd+u?J@%s3Mvv(J@8Z|vp8v8>eDrR|`+7O9bJ2n!GRG@E{uJNvVs81wlW7J;vnN)R zep~JOefR1Q@%QZ*mAA<;O1RJ2U03RUun1(hgk2KLIg95yQ>IRRxaR%*?)iUTOyYa_ znDf5n#k0Sg%3*`cX9n=E8cEnX87~) zAp6{gw@YUl-!)Zs%e%Yk-`>B|%Gqz{wHuzDrV2aDmqW3o=3hrbi*j~W)`p_g(#aFu zqq3FPd0tWU((JjL>HcQJ;fS8Qndxt~UcYxE_j|2D(QU&URZq%Z#2X&qbP;;k(b+BJ zC9-_0p`W=`!G?|ROrOb%GHMw`r|!y|o8`hXwQQEc^?l{r1Q&09TlHH;y`WKKyN33H zk4n-H%agskf2d!VR=!}!XWf|K=9Z>;-~alg`OIB8;FzEDrMy;q-|u!l>1Xreo-m$( ztp(8kpAxxxw%wZ#`s}~`&sGTS-}g4W(O}`eeR9)di!`U{fBrgs>h$FKf4^z3>h;#! zC9yev9_x%9OO~hEbXw>AOpV*Q*1a#M^nbK>b+36}a!9yn*~OJnfvu1Gt=Q7%7D?3= zzAfGH@6_tTcQ5ZB-n)O_YTsj5Ci)1jQ!Bq47g3V*^X=X57KxV<-DUc6%x=H?%iQ41 zKmXCZ`z3dIeY?P9@WfSNqKowub)1}it_u2nHv$^v4uW4KJ6!&Z`Ia0y>aq&v=M{~~>NWaSZ^6DzL^*a+W zh7TVvE!A~z;zLsm-5VCUteE--u~Bv<_C9<@peXMuaC2h zzItrcRPDQ;yBe9J?z%$*A5{OInC4sdPn!GUjT;@lvtKc~*!g)f2Xs29b{TanI&st> zckfq&FRNd4N4RRdyen^YP9a!GIc%m&!XlTBNn0ia>It8;KJvs>Q!;+KM(3KKOvCOw zS}$XSj~QpqJrcv3yW@_Q;CYcXNiPqu9>3nY#9rywsa;oo^gVz7!|K7DvMpcMaK;ob zVeS_@B>OvNtCm+2D5PUsN=&9GzAc&lFSbF+Wcyz4>fO(!U%iUDx^^wsj+8qEuS@O} zy#BIioxI74O-GH2<0_XvDBRhRdopFwqFZ-ktdjO*-i!MomUdpthW&1DqH>$E(f;$| z`+w&JUf=Wkob`?5_j?%_qVtV~K0iO3ecg^v{$XoK_x;N6#yf9r`CeiF>%-x+*Imu~ z@@F#riPV4A{h@1N+SgYJ_SbK4Fx=QtsC;d0wD_Fv$4~y--@Lvl!YuF3gL&WIUEO_i z6H;+A;ku3b{8siH69H!?Hy zYFuVlRekE_kTf^SWI=Mq5r!V?zRvkg7baG;OKfC&x@bzs3SGlTV$$(Tw-y~w$oX9x zyQ)(|<9?XJri)Q70ZU^G1zh}F-h*QjwOsGo#hsV9XiZMc^tNk;b7TcTalDJY z)y0hU?&n!I^V@Q^wO8NE5S!h-bknA$3%-!3vWn)mPz{WmS9Tcrbog4lXbbjFJ8Y3??gB%$pYXz(cCTNjfPFK4qfqEvb8(r8R=>W22U+J>G>^mUUAQvMMdUwW~*D7Ma!zMvvVt1 z{I+uK!YO5a=0QJ#J>EQaG4Xi2I)J5RPvw+%Hqpy+Z4_GsHZ7g>|M!8q!>eny&))NQ z+Uxl3d26fn?%H%cyd3&dX@YlML1Fhqvwy!rb*F9Is2khZCy_s^Phfh9NOpGi-OpW& z%w4;d#sBB}UgPWQyZei`QfutrU*CWGl$N%Cob+w6kA=|HI=6Bal%mJIEVlf~};Xtgx|6XxOxO0i2m2R=I9@IQ{f z{&vTqm4BzbUcYWt+4*)J$xEyD>DGO}yC=E!^l5|lTdzll`nxYI-IuX6eSMs3{QbMf zZeNYqSi@?Td#h!hZFSP|xyQsx&-z)ve=<)$cGD8s>ggM5ZW?{BnVq|xx8=>+rPe*u zx5!6#p1&-r9afSR4^1lI{1V&$=G$){7w5+bIX5hrBKPtI*78c3>$W@bPLXOhw0^_J zaKeSlDz70(YNN;@i{)b4RU7q8j=g2=)ZHakr&A_-@~DZY_>2gv+Z{JliWgqeyvViZ z0;}dm-(Tknw>u=~tC$D+YlR%C*vNk=&sgc6SN7wU#YgR00#*dbgk;%2y*BxM&EmNU zC+216FY}q%q+eg@wR<}=gTIX-vvJy)7ZbLDnlI-RM9!H#OqpCCc=4TRhsEB$aG`-Ue^2Ax?>Cs4+4zo}dwlHS*`J?h>)c;oU;pM)Yb+zf>+9=}-{!vm zi^o>KZtS|BlPQwSr<3 z9G)!#m%etGUF|=5?3WhpO2r;sE=8rr{=}kVMot#W+jku>6pvT^Cff4jnAIJQg+05^#Y!KX z%X4e{>7+&f*YRCmCZ;|o+4u6tfO|jL?_G4`s+cmzUV8h|uC56`)|5;+v25{er4|7v ztL6Ze+bxrQE4Eb%`gN7x`_%o@`t7FT)xW*}kuHy-cmhuP-l|8BU}aNf;Jo%b2_r z`10bS^7@)`sr+gM*$G{xnG^rKUtC{){=D7)J87rq6+L@-B5gB6gSuR`%+8o~SKsFH z{jYp=|J~1@;(s3)LjtsY-ZOKTyui$lIrny>P!mrO)eH*47{CldDreo(Wl$zPqseJsn}ApZ(^UBk)4rj^UNcK zU9}4|8s9FTU)QzNds@msiFy*mve7~bF9tiJB&QQn3^K}}uV z($9PEzpGxfaG~Og#k$8=PdT*Wty}W-kB>jL-aVFlNKW|kshZD6{vVqmTXsNt{rSUt zuE!mo%`KMTe7Ehqjri=-hgkD>J$IKa=K1&Gfpf&4cZ(LS|9@P$|IwBAa~mHjyFF-V z=0A2NQ~dEY>HJf|Q)~YIc>LjRus>r@_qo62cki|>&X~vk{WoKu9KK1S8Wp;M|c`g6{-oDR$4V+WjJFDMu&bVIuu<2~ED=10A3ZR^w zDX-1fIrrzZ_=m4Mu>7jFVbYIl5=Kidar@@%5v)1W__5nFYeJLA(!Y-;7BpTAP_jBH zD=6q`)Te2=ZtdFc(#3|?PnI$EMjSus6_Rte;Lr{Y2kZ8^9u~)0Dz^4VKM2wiN}jwi z$ZN|(SEqF+6-1pn@|tF7DE=z^yz=4Q5``naov++Px8J*#_T}Bx)y&b_^O*T87}Doe zsvYZ*WM-)Nez*Ltf<-!D|p`}0(n^?YRb>}MILKi(^NT_RKV zWBP2};K0DflkxMKP98f7GGM{p??-3NnziUwM)tGwv)g}uewKJgd|$)8rF%dA-v3AP zf6XIKovP=tPaesz@yT@Ly7wP@Gd=y`!Qb_>%l|I(on3ITQvAWb|CIuJtG*sOxqN<` z^Kzeq!T$e*L$$*eBpqOQv-^MDjmkR~}Ozb zmnl_ItFPor+i%0|JzeKu+b-T0*Z0f2Q~4pn;J&z;FSR@V5_#w%je7-;iJb-TFt#RjoBKJB8-2i)y{P+V1G9tE)fP6@Pzo zQ<#~Z_s{`HX2TVmgqpRq4GS(fl>f_)w-*CBW!36c8;ep+K~$mhbIyx8huwP)bWDt9 zW{8{pS<5W%&W)R~$mz4haMR2j{x5H%+hQI|P5JVobrabqMCD{Myqodu0w{y2YY!#1taUgEnnGK1D4bsj?tcl*f z?(Qv*^Heg=y#r-P$Zw=gz@YKK4Cq1=D$==47l_kTRA7cD(| zYisuBJ4see>i^$!-YNTBGUw~x&t|_j?_YZ?T4UBKRil|ai}?Q7hIh!%skVDp`J!B6 z<5!L^dT)Cd_t~ngKeMR(o^FLMgHFX`-Z@2wI)5C^-JbAbLn5dmsrkMo_|vJ}I~y3U z|NG^|J@(#?@p1Y53FUv*1p6K4K5zH@oAFGZxJZNbH+P+zSygv$qx1d}hA|mu1rc#UF_<< zwWFk=qo%26R@a^zssh}uX^lSBi9Mx{J=ZQ?vEba6#l7oq_ulNvo3mlX-g|66Yr+Ei zuSsdIS``=<*LJB)25~K2x>Uk2iN&p7u2-XL!`-sm51-A>Ki14|*Af5k z)AZO&cb6^hSj6EjTPjlbdG>vg+Ovu6ve!~w!&?L{<$Bg1-?rsGlkxm&IqlV}LD^&S zGMTp3`ui7M{pce7%IraxcYWLayVdr5_Mfz8?07!!M%on(&@i-*TJx@5Rw26ajpg^M zxQ*x6GyeaxU)}1g=bLr$cN_oPd^Oqktv7k&ck%CzPamue2#agm_4W0}s;^l(F(1^P z?fJy@>e~AJO?~f7?rlrEsXqU~jl=t!9{c@J`)2>bA;&(A=hxTw{cUY*HM@#L#q^_E zEH}qxZtMH``Psu0CxZ*l6y85@aI$)0`$p?U^{%Yf)&AX9@ie5IYSQ%ay{Qb>MX;72HBtt>T<=d3-(-DcB zMh%;uD+eF@cl?4x$LohRIa7>;g#OEWuQl#-(m7%p_d}o~s^^C5$`d;e@5oV`yW^II z_AG&rf`mKOOkaa6_HUaL zoiI5`;qjB=+vnvO%|7eBO4{-B*=z=e-To)`2X8gKa&6twQ=zLF81`0uJrdT;&R#xm zzg4*&L&B>o+|i-$!}tFR{qrW>o|z%0`t8;qujBtmZMbuwkr{M)`D5$*Kl`%3@B97k zux$CAjW?6Cyz_QEWRt0Q&=|2jPnOT}$%L{@=W|z2P1QEcxS*gDy^ZI%OfkaT9^&f8Ee|Frn#KivB#r}df8;>(FsQJ!n*_wU5tZX`m z;*rF={`<;nAI?x-P?SBD?R7`q%m28W{>oml zrAF>%@_O6C_wVId82&u%=YRZZ{+}(Ice}va3Ia|Xnasy}rNck`*uKB^P})^-UMUlf z#cuiCj#H<0Oc8WCk+DRJ`~;{c>;Z3ewKaxw-DIa?6DCs=8LUMdGi@ z*L_zATN}g4@Z;P{_3g72rVBW2OYyUQUERe=S z-YU zMfb-`r^jV|oVB>mii=^w>8E$T9^G`9&pM&s_S=C8ip~qR9{cq4^v6@$>k}?6a&^5v z@od`0^LD=zrpJ~!Mn+0zWn~#uf6LkP?N+wy^~9IAx9fkqoo}DB|L?aKcXykIt&i*d z`T2SBw>LKrR!-~S6SJlJ>tPVZ8A-Is6l1d(c$T^cuimN3lqb}{a#nGz^>D%)|2;N24z1}oUetdjvSoP&a)1sM&`R!$%&nf0(+ex^=7TR^yTv0WoDaQ)gUo`Ep~9 zWpTmJr_+;vetLTL+UDo;svj-4|Et-?BPk?f|G3B4p!k_jOwmbI*RSjhel{On=9Jya z^xL2kxv$1DZ|74no3B@bU9Y=yDCYWkpEGm)bmRWNzGgMqCQWylzV~y>_2$+5;ncb9 z)2OD{QZw(x)z#v9J8e2+YO5bc|2VsTm)jj3q*1da*+QDRNi#~`9F_O;NWPQ3MPNz> zuR_^I?{5oxqI--!2~2EzGC$+3KJ%xXs6)~_f(89wx)(2+Y_m3CRgUoVXR>8(=Bp&l zC57j+%IiOUttG>}G=^tNM{AJVlPO&jPxViFb?eE_n_u4Bm`k4&_P2RB@BQ}sb(PQ0 z+x^aosr&iVFJ*Jp*DO$KoME0X_v+Ov28QbQd(GeNdad{6<>lo!xA9rOF_=^NY-YzI zj;QRMJ3BUB{cHPv&*wQOp3O|3cW~+SxGsyn=-7VM*=LiE^++-_$k|ps=uqy<*tSRX zF~fl#N#hA;)1q^d-`v=^c zIl17p?skibzO}Ws_v-)Gf+~VSndJMm-;X|>9)B;XeoD}eFPFRv?^QmxoOo7!eoYfA zw^+i}RiO+Giq35hW@WEC*r`76MpA8yz$Muq_4d11w%`BcZBuZ5uf*QJWpnS!I&r)d z>$#O@BKQBdeZldy`;W9fpV$8D*RON$gpi|zJ2~upt9H-lxW)>$#~#AWT1JAtox#2R z7MGOVye2Fc_B^gKGwIebt=6MUXZHrZv^sn!N?X46X^CUz`nk`(Y8jBJJ|>;=4II#_8uu&X?cHT>jur zT=m=5$$nOx3>)hHR)H(h=l1_!w&>bce>=io_kp?QZFcdvZrUVd|M#W;#ItFF#|`uL|1AR@ zn092D?`#H!!)?5WTgBr#nE7o4vahep-R2+v|JU`q7WXP1^Tt%a-3spP{sd)U``|fS+G!md6%HqbB4LiPCRRiI}h_dIcV2YVe0$p5_+nTJbMAAEqRGK)8lD-i*griKmqYL7Ff7=$ zONy75w?Q!5!)PW?T*X7yE7z|l-`bKn!!X(Hf!yZI%W9w?_;KV&zD&^x#k1SCW?j{q zQ}gL$#j}~|ckXW3_I8@Z&nJ@$U#(ou#E^D&R;&EK5ACk;w`IIEuUx(Q@a6LPYz#TO z-);j{`Uf{Pv-2Ob`~8NQ;m7y=|9f}s+9ei$9F&+2xAU_z+$lb9yW{J%=(#7@7_zdn z4Qqdu+^K%Qm!aX|;r7Q*Ci|aT{k;1AZ#ggDD>wA(K62Z9IKb?e!u;67IQNzbsJcx} zP4)e@e9sCNz9?e=?zZl=$d?Z{zx&?+8xpz`_Lc8k7+Qw~L@&%OFaf>UwH-HgRA zG>~c`P%K^g=MtBwJSTg>!YLhXMumY<=1z+2Ym3uvbF{iSm`g3}4R89vu+)jaLb1Pd z)u)Vy%bFL|$VIgnc3Lqd^6U{>Rze+<+cD0_RWDeP73&9ldXl7C&_o`3(rk8b^a9V>&EKbqjo zcW_PQX0ABttNj`pQ*zNYH!V8< zzumuY+xPEGc9*X$Ik+kQ@2hY@*UsRpi~H@QV(y3BHS1cnY8BV_yXEndQ{V4=E~gW} zPllo3h@d;m*R;)%G9?!r85;QQ{|MCoJRQ$)htIpoO{YyR#R()IHS@}J zI3A$oHz((fSYgqf9K}VmN~&r-Ztr@-DBZrKCE(buOE>;bIpLNavD8c9rQt+N7*01aTpR6K00+~^hg;loYXT7cYxcXk$kJjgE3z@X+o@68bnv85t?HlI8g z4!FzLhJ;MHbYo-k#;ak`j12RtUad@fzH#9~#{a*r?`L3$&fO|ncBjz2Jnznq!gEWX zy<9$@FQ)a9PSh3-?`b-jpZ+wm%W*J7Y|D|nSMj(v?f3sX#picE7gqDh*rub{vPDzZ z@@C1}^?|U!goZ7X!s~gFwe3y{6F+MDZoF8Rp}fqqMeS5)%%9#HQCF5eZL~S)DfBUA zJui#EIY&2(+ZLB)l`RbqNv##!GQT5QBuSRt)Boo=GcDDv7ZZ1%n%5t*|L=^g!uxh? z3$?oH_4}Wyar(349DO-v({e?U6i%gQt6rW|_V1+ysOc0L8Gq&4I#!098#@F`OH1`0 zsrMycSraKd<$YG38ACu|AR|M>{<_-9she)xEMJn?Ik=yT``HUM$@*&0W4$L_DT|vFhuqR?XmL57yWJ zU2Sb%_{c?^QT1;AEN8dEv-9ouAN{m`|39mLzxV%_HV_QT-}_Z8p~ZY!E4TQzi1WAe z_xG;des9-5>o1{rbK=)fArxWSN>du>Q_Xp*9q`=*!61lwc zBbTsxMq!iC!oLnx+;fFaya=ddQgqlD=<5`abo;|1>5J^z`#kk6Bp-GbZ`kN8@HXqm zt|>-J)3%^dQnQAMextGi4W`#OAEuMSh*mrHCC}~Zx zPfF6(`x2O}I~heqBev)5EtZV@`f@p_g*_!GVs}~W^zzLsSF9+|GdVp?_q4Tr$%_C` z3vY%=<|JW(rI{HS4*hbrx3a%(T;(QzW_#Wpvp)P|ZN?RM|ED(}t3>omia%7Do494_&Wyqc&W~MXpH;ELD`##9ywd7_j|v~d3k%sKDktU-Zp$n2AkWI(o*kkJ#P-hqYCvxo)?Wm7S_sg^$q4HIw34i}dtPxvE#Pi|Mjx1hGEuUpZxRuXSGXj0r-IIgU$n zeC){)*DUl(Iifp}>$QhW%9%p_%^w%Zcl=v%V#ik(yM12S4zBBR^?w95boG4hl}&!} z=F4L|`1k8IsGXPe z_SV+7m!2)|x9idjUdF%xnyv)(`G3FPZ(sHG73&ryGcJa(bulmJg@=W0i>UkX;NZKT zt3p@bDb{?WxlHb5)a10Qt3p?-SaIM`EBD90@9Xy;-Nm7}WN(1iKe0{h7mw7va=HH7 z3VAJ=fD^~hJHnNTJUu0Dtmm}+M40|>XcE$m$zYgk@!-XiJ=2dWh-}QL?=9KpxM23i z-&zIp8*gSk-tjoL=un5I{uRR{skh?mFGb&!zp4NF)nlt^`@-(!=((6*TB>d-W+@qH zH2>Dw=^~t}pQS>wo(1jR`R>hEv!xfOVb$`Kvubp6Jlc4?f>^n&DE^-*O$!C`>tNS`fy>p920}hpAUyC9(Afi+MH9v z<07XxpLu4Geom(5$HR7p2G7ZAj0}8MFBBLYLPJI4YCaxa^t$T*-|u%n-z~qt_voih zJ$t?_?zbyCukJJBLXK>p$V2Y+y8jL%y3{u;Nm$I9Rf~Ptm|BpX0}_B2-HIs@KQ1lHTPiR!`;A$qaZ!`h%e}&VN2QrH zr*^c(*iYdKyLsn^@9dZFO4Mq9eQ|t$ueFss_Tt&JGcyc-ob<1I^zHqQ$9)g>^mJGK ze!G448ui&{#Z;9tbqi(Ke}~7{nu_U0vCP=9+W5T9=CilAL|mUWQQ1AIUAC;?V-#qv z=+m#OGV--wCcggs*M#Uot`#*y0!XT*KRS^N3)K0i$9+1Z^zj4WBHyvdrnq; zyI)^FW$IMZ%75V2C}^=)yKGs+=D+s~kIQa+zwdX@1ZR#+`8(eiop|9>ANuTV`P%nE zNOc0Jig?sHr@2R9(T)r1&tEO-ZSEq2n=i~8@XN=FYJYBVF)t%o-cXkx|UMs&AnJy}t{w4C}jzZ;SzO&oF zeIq}smnt#^2N>U8y7vFy`~Qm;E@WgdD18+&W!f~S?B4zV|Gr%UI!Jz{DCM*ilm7D0)UkNjl^G10lA9rvUx76Tp^h3r!;pBhr6S+yL2nhlv7SC zd%ka-c+p===#Wfh%Vi4|NnzmtJj}foqV{Bx8mQ==Zp-$-)!cu`}0^n`NoDsh6W$C z=8eh6AH7<={#d8_ypFH0ua}?LF-<43>9pSNGk^ES)ct%aVOf+idwXzjaP$8^&+Qo+ zI)&9C-KNyj)3)wf=Pp;tvVQM3DTW6Rn)#2t-G0BXQ&@e`nl(Ise|Umqg-*fqB z@Y%W6;{7(CJmPHmZ9Xte(~IR|u=sMpx$yPc?MZ)rd<3mpY+z(AxRKcY@ZIkB$1W^% z{`l+ldh?s}d!@}Ety;Z~2{d2*{eC~F>!s}8=W}m=YO2ML2hD}=_kK_M^5SBHVA9nN z4HGAhOztP;`+m>LDVqIDZs|r|)Y8Oby7Frm-D|l=Q$>DWl^1_05_MO?edZCvWA2VC z5A0-hGnjNlUh{oM^5t1`R(HR5zp;#uyDMs`0lV9m#UUaV*ME46KC&|VQ_GsPicZcTx`?B0dT=n#qmzOubUblNu{r`U! z&t@bSoH0DUVBbEun>p7kH=mhl%-$`of9&IN`TKgwo}b@rKL6<7@At<+lhAgxzaIR0 zz5cl7@;ObrcI`6DeLm4$?%=|9xmVwE=Y(Wmi~{wLcYHi14Kh9H``z;M-7h!o`S|m!v0{rze@{PG@Di@~+`ue3T?lJaOyYs52c$eoF^=lK49`juKXl706$>5h6k7Ej)9(MMpIteRD z$4|d=$l}h47wY?G%+ESp=HuE~+*7)LV{&&(cmGUb-B!0{_oXa_c}3Yj3It4?X)dhZ z>S4ifQ$q8ti-p1QwF;X5&C2dBHBvE}$@A;0wtHozG|%DVdm=J@T*rCA`dUZkI)$ zb%Du&_4R+V_x$;EnxWz1V)w_(?f+)Z-fozFPDUqk6N>?#`OA#8*EUpr&6-nsEfO?V z7Z4piyL{iWWo+N?6!V|6d@i#lZtt#>Rrjjj+s-LErCIT6I@YX1KE3OepguHr%C zqF-OO@Bho2KBtf^?fksh4_|-(c-&ujxAc1At1By4tY5Fc%Fl`8rp=M>0l&13^Y?$= zAB?;?rbWQXBk{`J`kf)xiM^ejn*u$gxGs35I2`P7%!vu%Q7G$nzjyU0cl@Lm%0Dzz z#VwaMmoC}T+*4frku}A%af5S4W{Yya$%Bo3Mp`kagUaszi{3qB^`2d>OTq*~MSDVb z{dnOL(rj_n(YSttlC-hCme;eWj@l=4ZdT>}{yCq4!M5s)#=p=!R`dIFc2vEwOLW?O zCBL%tT@1s4D=WpfWm~UZx@nV;^_vaMzrMZgHqE}4@bAyhi0yf?>E)|$PduAun07`Y zXY19l3sImU<%lgAf<-%HR=;|AeZBm#KH2U|mx8Wbx$@ww`F+rsnAvLozrVj9|8_gS z|I?=;&_E98ej6oaCyvZ)DJdxihWoq!O;bB<(Qcb7`}WU2U;8}_;2Ervg!O14w#^24 zT55Wz(lih5g&svmI_yH8#Kf39n(}}}Ne{GIVb+ut7dvu$e)lx>%;9o1+oT@!N9aUq ziptc|(}5m4pK&~wereSlP%~NL`j1VHb3zXqt`3P+k~zd#GDV!-QPN#{YSHJ7Nz$ov z@~6C?-Xv)4dSTULncOu3&px}AmYS|wz1n)W^xb*Kj=AZ?>=57<*Zbr1bxq{vV>^G< zgh3`e-k7cI7I5lv*J!w$zN9+7@vqHtX|%j{>7|QR#PN%VN{`BT=`*oz^m+MX*#$$l z>|D9Ri1Jf6-MACIf(7kQ**Z<^UCXUEX;te{En&f@p*pNl8mt20Y-(malNKaY*V&hw&wH8+FcNZn8z2EL{ zT-XlkcOezPONvh_JxzHmXz1SfKt;?jh(oMjNPXIuy|-_5dQQ<;|Hf+4>eKG(9#d)- zDPA$XN>bV?#OXvr4CeSwZ=Ci4Vy9W~qFHTQs~+D$1z?*}&*IT!Z2?fc-O zEiRs_e{t0e>w~p9A$9SWn`R%1VDw*faATLEC6l$=TNg(Mm88W&%jNHHGb=sn6tLt@ zlJxsr^%eoAZ3SE$eP{{J& z*|^URIK8l!;n;EO%*P&&A5TsxnZoB{tX6Q+Ro~I8ET?PI)Mp(Ls=9~QZ25Lc{4J|p zkig9?tGzPDIps7sw`xm#0k&1Jq^eEO;y>rWJ;1UTo#p|>c}~yr^2qJq2i>r zwAaJKa&OQLY3t{%dlrCP@X||UimWhd+MST+b?vCI&BfQ5ui&`FdzE0Q&3V};=H6C%_;p%;x zukc^F6Ro*dVz|jKWpa@Zr)@@#!j$s4jm15Jc_tSQy<~HmBgDSib)DbEb({RmPW^tQ zpn9q>l&#NXo1b*((uE;UUSHt~n8?#F^v>+qMK^78w^SBKt&KB37Wx*=o5R8GrXajL z>-q&Z3+AbY$z2NtXKQG@edY0J*&1X2ss^cmZT2F!K`x0_$yB%7{`QC+@+>51J#CYV zpL#N%MPesU(L}6)e`Mou~H)H_#!^-O&^=Jmt4Q-=e)Sqe#*DxA|~b6j~2U}n))f(cPIUw&uxh&LB)OQKbPD2maib&pOjw(~=5Ak^ls)pj zJ$r!e!29c54=Lr&%sPuz9Yb&(0nNuHb2v^JpT zh?QX9kw<+w@751gGiIo4Z_W0WR+lcHyZ(y3=pwn7c8}Nh&aL(n*qhQ~V(@6%6Rv6k_XQ`&UkLEaj^xw&&r9J9Q`Ff&K&@2{`kM|9j=9=RHXNi43ZnG$v=RZZ9>&~fFI z)7(trvP&N%&kwn@Pkg0@y0d3YdeRFE_FkEiI}9(_jubjSvJieQB-m5=6*Gjw}>LH77J=4&^Paa8}2 ziTKzpwoBsabMNO2cNrF3-KQwo*lKZ!{><^jrw?^?7JCg;8~ z7X*bXQbu_B%O&cLZ?1S%$t%9>ToE7b)7d>MpmDXLf@@p}U zVs?8Hv?EvIyUg?O$yVvSWl9-q8K!=$ZQ6P5jrw7Z-wCYd_j-@d>2{Sgw7-{lTyMfk z8^%e!wU@%qB)^^_7!|Nc-qMgy`svcMe>68TxUU5DelE@3uwVJYmG`Te_{{$`@x4|< zbDicSjkhYyxIX1`@zy68xy>&gpL)y{Js?{J&aYkTR!hoor-IFIS7ygbxr ze(2{hQNh1Hb8;4`baBPyEDpJJ-b1o{#)*!YHQs&Qm0hmZ6Zc;`8r!*I)q?nYwQjC~ zO7lI>cZ*GuXARuG_VPK;a~5ws!ex!M9p{LGT(XNd^SFb0&b5_)|J?AX`-)Zvl-Mds z{$x48k$k3@SAR+%S88f%hf(08Z;PH*M#k*a4JzGbp%Lhoy>r47ZSNzND?f$pNbZfF zbG!HEE~`HuAKZFyu0T+mHP=dl@r1+5H8<00Os4vrGvc$>i#fIHr^H9!s0oV~E-c|W zV(DP+be#8?tNZWlyRvT$lVrKSPBcp`&TDBAaN>B`#=_UAwROIhJ5rp2ovt#mbUtU^ ztaHUZj7hS|XJ?t7cv^HWNUfH6TX|lfo801_2W|(qE6+)u;&rERLC=Y!Ia>v{GX!+R z{9iLcZKZP2I^%+KhNogyAF8t`mwK78_|tot^5hE>^6Uhh<`$f}^_^#sP8VeIC#3?oQ#Jt!ndwy1a9YYF*_wAXewFAyJvH6@$}9GTZPtH za!F0>ui2y|8@=04F6w!M1-tBXh9_rctaV`1{4V)++lFZK?n85rf4gDv;zp&{ww+gE zBFbeg8^c6IwtoNJ2&$~!_V`)eWZ^S+Jb3Pu9gQA@8(dG6G&Dvr@!S5`7l>}`9$f`3|*^|ST8F*=iN-`&aFB6{OU z-GOzC+Dt~Jk>xVEvBg_VKNptI-#z;hqy5BndM(#?%)70&wZFfqg7?gy%4}&>KOrX$ z#U-~N)y>a%p0n6#w+;XPUucc6T{07eD>CK^-4rR>W~emrz)Q6~jMf+1R;Y=!_b~Td zJ9O3c#v>2)*=jPmIku(=psN7QgXJdbg+}45zf%mSuzbL(vy(sy*KDaOocVSbV^5d;=1j{pPa2*ed zRcL5U&}%-Sv`Nq_EnFjdk8w}=2G4K3$9)tW4Aq0XT~2jHhiu}VleA}%J4fgrv%>X( z$GF`btDf#y+t+*ISWaoqujy}o{}YMWQ}kCOWVzt2h>g91=S^ll7m(Rz7<#I+KuB;x z`Psr^#b>%A`k9~o@0832+5B>n$HanpT#;7q6@N5dEtFLO2|}F%iqy4AudmlGDd(AU zxJ&r@jTP$ZLW1Ya)WlC7v-~+hMfy#O)4U*VFTHK2ByZiYSXtxPS@vmG!AY+!|2aF3 zS>C*HKy#|l$`=K5j5eJNT^T#~+Y+PlxwlVfO})gX`91&kBBAc|Z8<8B7KL2c@_zXn z!=t94zH7OwvwB;_!Thyqr?TYLSwE;VAUOx5AY4WJdNJ497alizgr`L~_T1qr^r+(0 zv=R66sF9s$Dcw2E_T?__lj$`vQ#zx9CKjB|%*yrd{N-vtwf9t)^TNOj{HjY_qddz0 z)SPe=zUcdAedwb2s5=+sdg42+Kndj1T8<#~+2yMO|Fwr19tDYjA`TQ7Alua^xSonU zCd?Ib>G|g%z83ZFFPk{m2|mA+E_Bd0<%nUyIlZ`BLgM?btw@@3Y2Tc4om1Cxm~CA( zf#t;ayYj*B))fn1f8t`jXv^Q}OjE>!q_yWwl#DL2yQ?!}))cXIR*5yCLHSS41!jTf zUP|;YX$I)lO}@=N%X~j-7;q@gb-D6I^P$b+!zHTnlA#iFh1Nf@JnzBTE4U1_5;i{@`~pR?n7hP?LFjI>GCr%M$|KQ>8r z>ybG^nb^_jQxclgZ0|HjsI$>D5?tM~I*{rA02aT6$!gEry*Rj>N5)+riS|I%RT4MNpiN&^1kd?aS;>lV&^Z>?vP( z(Jw~WaV3Ytv7Jv@7D;C)Ke%YbaB8B9f91ozT=P3whHm}W%(i)TUtxbL+tBp$OJJ~H ze#)(Hi$gT^6}&)aR!n&J`duJglTSWp!=NRN)yG-^FJhRB5qZR<~nU zt|(WO`!QBECV`)SzsNq^)@#ErmC7_%DI@pW+{b)Pwaj1CLmsi|2 zJihJY;(coF_a^CzMuG4)BQQ46@z%1-seMmIa1y6Vch(KGMys}CQ8I&XLPMs@Xm_C2@b z>XS43-iI&p4)hCIEGU^i!{x)GxhLEh%i>)xSTQf%bm4@V? zcEg7qhWpvqG$-s6MX!!uYFW6?PRX8^{q|bZmhiJPEHvLoEdDenw`DWWk*G=64((;t zGvf3M5}N&@MdDOPu1J#b)&+YFSSJeH)X=XmEY(`duyl@eZ+X|rCEEfkX73RGJmZ9V zZfwSxL(_Nfwz(SrI_&YbF#D9`g=h9yK9_wux9O6fgPsxh!I+)D9v*c71>8%yjJeKp zPT!RMeEZPP2aK$B{y*hKK@v#i%aYZCnaZm?=fv)r%)3A^T71@xT^A#+i?jIYTw8gx z%V*CGmyC)z$-QNZq$~<~Tbh0O0xb9U-*6AIJlMNZ*h*xj!cz(6hkn94&TA|-+_cX8 z-bA&&t*@t-Px9RGm*beQdhOLhKaQd)!lzlv*BoEumpZq8%6v1+{m=Hit$y=pF{oj6 zDOTfsc;~5ux1CmUXou?^opmep-}k8^7qq7S*FC?!7AcK_!d}lkY~~Af)gx+|%SGSk zBp*?n=x^Ronot<%Z5DTG_nsXRYHQzU{wNc43AtIfLu>AWW8Y66)zf^fr>s18OXtK% zzfW0z$awl_<|GxZ*9pn8xh<18{;eyrKDJawP(x4RTxU0GI>#rI%t z?v}o}(&ysX-?c=Z*Ku)nc0Rs88szFAlf}p0KaqL0ph4r5!rRcrrUI@`M|Auz-2m-i zM-JZ86Q>FW-fKPD9l2n_j+GIC93mw$+>SjZn=UqpPL61oc4;sY5|REX(vh`h!;*#z zE>Q|- zrTGpSOJ)nm9NaJF<@nlV?&j-^)`{<#%Y;6wy85^|EK#~V&2LWQmfpukf{}h7mdw4O z9^!Cv&*~Gpza!0+-d|BZp7WghpXsLeM$hjl$8u=T+m4z083HM~!VJ-QV=T`jtm=Q;7YW*SmK9cDx$x5nH)F z^mfAkbx*YO?6+RKy5>k*?`whMg`ey$Tm6}=t)O+~Y;WYY*;Vzd*V*Qqb6JJn%i=zI zJocZv(>=4;@}j*?hS#6v&;GGF)ArG=gqWf;zI}?SUvxIe?}_l;BK>Ch`mM`nS6jEq z=j7eKWFxkR@4zzO(i2zn8;bHu3qQ%7F;#o-e0^cTyr%D)0va+5I|7bqJ&Ss?eD3=< z<e`CQk?|StUdB0B_{j*>7vf}?J4#Dgnf2T{?1bv?Pi;wHxn@@XA zDRgZL2vmFNFOul%E4t~X5RZ%r)8AkGW&4A-uodleOEHc-vaxLcL{MTtN~0dv)h2bj zls!DTYx#|@rU!IZsrsK;ck}u^RyR%AX~A3pf+9-qKRpuLaYiZnf?ZF9i`@3rOXG?j zUq7^`fITl)N953fwHqY^xlN`__P;ShW1;p$J~NLN=L;Jnolft(q5brTYQfhh_D`6W zH3do9mkBOhDjkGrfaghfHPBXiPp{p4+Bf)}o=OcG|FCUnz5uWi}1QgeUl zGyl#N>ou5+Y8QrvooVE9aZKFpsJ$}t3XP_&kPnvO5e97!iZ>Mef5KGX`1i_vXT^!U zLA#n9%x}K=c;)`A|DRd8Vpn%(EMD2kf9%?!I>wD1GU-)zpPsp!@9z(pD^SYz_oQ_8 zkA+u`+%~L`t2wjmnSOru{=BExVs5QY*YxtLn)$wL$9o^qoA3KKIPcs4@_pu0JMFh$ z4_2G}h?_Y7??2<~)6W04^Qgb(F1SEM>Emui-T2Ax^n-3_{hyX|m#d*GByR3X@s$s{ z7ju6L?(tpz@7or$!b!dFetS78Uytaw$UE@r>gkUM+4B?r?z+m*kh4v_s8BD{TfF8s zT6I4`&uz(5-T!V5i?>c(nDJKZwURQEr(EHqV*k+r(r?bw?eOo8#YuzqddAw$mY576!zzO2KKkIgF++lb8UDV4QX5~1~Z9A99 zB)yk<=%TZ6<#mpjM{XHU?$ktFoV0%R%C++I%aXTpUpu91lqK!i>TxCanaa1nAG{|> zeiqmyy;SJ9Qu*|KB_{=wx4)B4nx}d&X7^eySwVqaJc=v4yLSmp^Np9zIa;lD{_lbA zg-^u1q?flySoz7+KeCvdSVw{Xra{`>3SSuq%jRDIEM?vG3D zsQTh}B==UG-mU!sA7@UzCH5x%SH9lYx+(KHTfbetJbmA`rGM3)ufMQ$m1wDGP37z# zyE77dUiOPmU8Ve{-S4Y${r;UlvscQ8dCb(BV4qfb%I?nh{2ifD9nnY2S3CVUk+QjC zQ)EVJPWu$6DJPXqr7$Qrc-kfZ{m%WQ`c~;V?z}Am%9-XO+9rV~ulJYE5O#`6W$6o? z!r{K~$oI%ydYWA>EjMcTZ`S>MuV-JHr?YOplfg=*jHNOA@7|d5x7zFUg$cjjecYeE zWbvFg+l}V)TJB*Vmc>hvehxF^f-MhF%|F$PwdBLgi*80HNWVOqecl_5p^3pul zSbkv(YV&nTamSOn5BRFtEAGYKVTh4w7W@6Pd&M%P%}q<40=wcfzvda|1^Vvdi1;of zsuQ!@irJm%{(KhQynyXbw?weE?RyXP0v%zGE! z?G@=#YqFm_<+I<1e>xHSDrT)SEL|osefpLAg&Th-hUSKc@2a02`#tT-)aS=S&ivV0 zWxwBVt?4G)szv!f9lq$Uc2J9c^pEZHTc47~+{SlHXN6YQ+n258dbfPHo;`C{Y3a$; zt6Q@_znUcIl^H#Qsrjt-ta+b88n?Xe{++$esdIsRqD<1lzX_X;%usx;{C0wvi%sXQ zrWdaN3m1p%I`^S<>io4)@0Qy|tIqThyD6u7BE`r}J^60tCBFEHKlgo8n*KyFtMq>F z%JcUh91ZAf?)e=v&Ct&+XxUzmFwf;O&zC&2f4ulacjJ@UC;tDP;a~A~fA#EN_lkZ8 z-gy6IyXz08?)7dj_Iz*KbA|hu&_>_)_i7DS6tS@J$h1W~4+sx`{jB8jGTx5j|MT~j zzn!QOzUfHcMO&lSSNmt)ym?e_gTMm81?!_;{QuA7$i3!^=YfQD7Du75%`@iC+*iAM zwbq35e@N}|iG5Ntm#z5J-xk@L!mKQ3=;h6+`edcq8-*`Zg8gzEr&c@?X>giweQB@M zqjit27wWM*>MLFl{^~;r)2G&@O@2JjRuwg}l#4GBm(B_*UA!XV%CX6g3*J^6#BMP^ z-?=A`8ok617G!P8ovr=n(as&(Ug{yiE8-A%R}zPaJ+`^HZ%wj7*U_I{C%^ZZ&b z-EB`z*X`b{)gS(2(E_1kr)OUJ_WhDb&Z%|Py+4nxe|vaWhW6&tE1LH>Gu8fOz3|`k zH*P}N>pKrUwm9ay-`wWMruEVMxW@^uBa1g~o|_`s;nH`(^6kgRyUXkZcY0rU`MRg| z)v26fp(U0h z66CFry&$8}!(`H_73F3(t~IRwQu*b- zfz`)^{lTUQs-~PDU4nI1>SjHW4)D(kPQIlYYF;q0bYk;|;O3+&x3`;om?75aEA?y1 z-^e32nQzuydG@SpvUI`aQiT^fIV(4@Ff8NUQrmv(a`zU_=sgGB6Zibi^si@(_76?_ z8MSTSlDFa+r|*H#f>)FxaN2d7xVr6`=q;iqOCZ(M}EFW_!9_H%*IJ5Ci zLU!n${HyK{mdIY7CG~pOMc4b0dp{_j60UueBPsc-X0^;VgE=>)u0QwK^>N#u=iN`= zK8fV3UMgXHsk^uD>+S__#B;tLD2%aw7#xx&t48z@T zi=}GUzuY0QLUijEk^cSvei`4}|6j7Cwm*0O;rRcr|Ld)ieffU!`513utT7oclKQ9N ztBO_Ifgqc$vi_GIt9V6)_Od!}Sf_c&!)xiQAT3L!9{x{R)0Ss+$NUx2N#5zsp%xPx zUDdV1&*o#J&0C)00F?&rS6dS@{8ul0Wh!Ji;sP+v|E#S77U`2|~>= z{{8RFEj|64cL|7Hf5Cr#hN8t+hOg6iyECngu~u9#OIEUfW}4|)$@)X}oScjFT3Fqr z*Cl!_m>J2|@m=b%md0%sRi-M|Ddq_|R_D6IpE&l|{t20Mw)pn1Rj-WaH&4HH?);Xg zneF*;_3fwYp8N3Tzq7cWZ+iOPCx<+V)1Qm8g{D{gE}PP@c+r`e4@Gqkz87C;v*&&P zLEm!S*Y8%pSRhcmDrd76_xFQ86I?fSp4ZFKpOVv*#QiM2aM%BHEo%x*&Flrfz2%#} zJN(8r?iE{V({GneDPqix4sR^%&8YYJcl}E6W1Gu=nYP_G3uNR2e!bWEwE1O@kvi5K7{~KXqH@XtKKzU~%{ zOH(fi$W<2gef}(PCH1Y*Y^}a6%`w&z3b(ez9czj?e23GWp(8p=)7M&*(@hAImULGv#19^-avD+Fvwm>-&N( zW&eZ1JDKC}UArDK|EJ8JD`j=dbpOwLQ~o`6Z*#7kUZ%eJtYWt*mVw)LrdE1xnrM3e zcFl=vDZ)Zd=RUl7vVJp{Z^-hQo<0vZ z2gEInXnE_(eDj#;`gqO|4(WFR+qA^qUn z#DDFAmM3kG#U5O?E2RBs?s^`plmj+`UCr`$O}dL+|B8HXu+)8+WnTQ<=l9HB*NXnV znpsN}*d9)||IhL(|39ls%U$8OhxSNam&B;-zy)QT#5W1Um}EX4H?wB`SB{=$FAf@A zG6`C8(AsiWTvfrDxdrZTxpY5y&b=ZSC9`_|?dv7deGi0QeNas2Y1}fg;_+{W)SVIc ztG!g$@`o+ovj4j0id80p?~_$uWpu4n^>tk|`HczJp0Gw1YfYCF&ZXUZLIlDM*2NxF z-?q5d^JSNr?pM*$`rns-=w9&idb5!;vDt8$*2aGkTW&6A@816X+v`xfZCm0S8-_b`|za=BFn6@pRc;x-#Dr8#@pm~ zr`s*6g)NVlp5f?ZK3{yt*gx3Oa#F{Z<5#UenN6wLp`^HLYq{&POJ>uzO*f2}ow-Ul z=IRlJ|Bp`?F|bWK6)=5C6p!`O57vo4-X1*jAnM>PzM|41;W+Dc+n8TT6n+S;uwBmS z5h$4P@o%r+*%aR$j)irbdUu(6y!v(7|9{8)x_{~cHw$mRFSz;M`d~zm#JR`QFqXB#aoejc zH#i;b=c{EsIO4-)@`gitqK)%{w0Qpy(N*diACCqFX5PKSsomJ3e05q~(EcN470dmf z%nm&<<(f*TVJ?=^e%_E>(t zbJzWl@M?`ON55y*99lPVLaLR3PYW~ajeDm0R#z3BVt@Q!*!J&Zht9H`ubXoAh8Q&b zzWzSooAsYBm+htG3siQ@nHZWkb*{wqn}7MYzAZk*U+4b$d!O3R%pD)k+1{)dR(;Y~ zHuufUTgx9loH+So345JXkA(Arpnz?%TjdmElQpC73#sl+x*dIU?YxWEm~5AZ+>iO? zUShTH-|kaAOz++weh?7<{Z)EB)7LNi)Y*UVa+x*!EYo&xf7P})t%d^-mqf|_bjd@ z6YcgS^|oo%&f-|>@oxEqpc8yExOcmA7{8lhG3(bUk-a6yZ~B%VpJ?S!#uCSAy)jpX}N6whO}AcC)|!LozSGlnYqqBDSA1>(hu=6 zf$0-G1;l?VXgb~Pe|X&D_miN<8wBIltnb}pdi2EM7|y+1+s?_>z5bond-B-F1=b7p zyxM2UHg(?dueYRr9r9F)Ur>AAv*)Lh%543aw_Z*B5F?;=X!UmcNBiV{y!8L?`#gF{ z#9i~cZ9dL?aEtuT1R@vj&dJo)2-a!+&%u9#3jy+ z-Ig7&hVjlm(-oKJti0x9Cvif0%MSL#5kGW4e%yRf?O2#z?)UU#g@148hz3VJzI9@n zZ|buHf&J2-_0O5y+!~^pE_2x6c)LkV!j-7NmNTzHbNy}vvM7Ggp|CW-L&by5xBtL2IcHCuc@~N4j~t_e-Cj;~?{w7MepEPq z&ZORL%&dATVp6Yz!!jAxv2S+CJj!7$($wh2l=Y-n;6T`?o(axXvs5;1O1`gg)78Ua zV$WuU_ZtNLRsK$yloQ}m#(D<64NK-HDeD!!7cXZ0!Ert9HN%tmj-GA1qO(@6 z{mb0?%&kbM^sAg_=0Uvz3zo>zH=4If{)wi_DBt{2XfM1-V838%U|2M_@9cI@vyXY) zefbOiu6NkN&NS(a<1DK$5jA~E2R%c6S{7(+oCs(jMA@rpUWSkJxhn9FzRSwBxqZ8VXcJRx)2-=@<~hlu^;H?+@1eezOdeWs>w6AEtXmLZ+|I2xM6)&JFj$y`m4Zz zor%juiVuZ-wlDdkP_c>sZ0#1$H=bsEXI6Z5SR4MKaE6u)|NHkF z-Who-JL19(RyZ=U)1T*6$#B<93ubbRIhpGS7 zk2}XI3;qOiT77%-`G%D5e3t2#uT9@-D`aZL`rvW3N`t%9W2j9+ITaEys<&-3$s<#bYQiob{1z51y8&f6+7;%~%@ zJ>Dhpyh8Tc-b9}}e1^NSqu#Hvxt!~F(kpSMTF!4)hKE(GeUEQ(%K3RNTRvGypzraj zRhhysPyFTU(9)Nw*Z*)-hw@BcruZ_r7LB?F|BN6}C*_w);9!z+1wd zn~7_sOQ$vK8Ivss{cdI7@ehf#_->Zo{>@(GolNw( z$LjupY7+OSuV4A;ljPe!vA3%7ZY%cX>wDcS%lR$4?Ju8`naR~O0rvHoV=gvwtt| z*9hxl+U=XlFE+nE^Wt~n-|p4(+0U9)S$A-KJ1x8I@1;)pi|jAH2iy$U#=BHR@Yu|& zRTk$y{woNm{di~M4!i!};>|xD*0%qSZS<&nc+c;<>E{(J&V@BkBQKmR{V~t?uK)g7 zHU6*s*Lax8e4l#jYHrQ$e}A6WyV1ZZo3i#3S1e`)rA1Dfju> zW@6#au;NRI$giFKi#E1h+A-NLf;qRP^XQ|g9LEmKP@fZU@k@x4!^U4v^Q3O&hSh`^ ztYBY})wr}oK!|&XRj348fb>CjyB%yBly9(@Tm5AE#$}{va*Em1r7G4WxBXjh6_?h| zSB&*+1xM_@m2E4Ft&Uptio-wP(Ila{8O$42uIm1$T-N?WSG4o}n(!$Cw{=+Nty5uM zmYH**d78|kZRhH5#RY48(qhuy)ouJB%6V?Z)yq>Z%AWd{A3c92`+S$wiGt~;gteJ2 zE&ezm>eTd*%Aa9xYgTTXcl+CdZLRy-_Emni{q|RG>6^c{g;`n!nZ4%EjVk-F^7;PM?-(V$+`HU{KM>3%XgS21T3EEVW$4CJ5xx0+uM^W zi)+`{3I7)3bg5fkGa>}#cA0HU(`&(+(|o3?X* z`}Oj=vYU+Yk3PKg&F3@!soNl9o~%{;r+TU0Q{uDV-nMuq^NN*WUF^ypFXh{B#HXywIqZDbg>|V(=ClR00nqPyg4MvpsN<#=+R%+qcSDwB$Ule&n&+ElSD#U1zdjP5n0`EBjT9`;W6s zmE6v`s#Ca9-afryo4vJNpXuVIXR7|6K406OJ|nC+=@p{=~bo6&;AW8 zSS8YHjAx|6AvhNnHJ5u=XXi`wXsZKJI4aqrFR-vEEN-ERerfTeD*~K)1HQz8g_-sh#^&3>%2Sqb@ScZieAuMtGz||=?)T$xeS7PY*+%b`Eb9{X zY3*!(ov3ATWh#ftnpK%I%?!3aNDpy*(P(?iv1GZI#k?z*{*}%S{lgP*vs!AU@A@}Q zvo5h&f0RENbnV;)qhf{jUxOpFW@Sy8Fvd?qBCu z8+z_MdQ)3#d;P9!hcu5@Og?O~-nlgW^ZT5ARlh%%rx*XcbItjCU+LUw?WSJuDzk2W zn|E zVQ zWMO?C)k!%|u2lb@=A@#jb;o1IY1Vlzp{`fFZv8)5n-<;@{QQkblFE)-qW)g>eoh%W z2X}KlT4tooBI0i`^Ys+ruQIpZi?T)h=Gh!*Hhq!TlsuiUQ&t{w;M7>9b76*>ucF&K z-c?LxQE|V|9R0KEtA%}_`jLQAJM++4O0{~rTc@!2%$~@kW!>@Zo_bM~uBnE=hXrg0 z9|>>loae`N^lRiiLFsd9Vb@!e+&>(TFtd-GsV0Bm>{E@f1TD+l74I0eR;>EOyu0dV zuQ1Eg<_||bD=X^r?iz1>?6S3e+4FPztFtW4-ha;dX=lHDt^TFw`cLg6oqtdLJB#a; zX3?u#VHxp%l2^T3A~UVjJ)k4r&o}<|ynFn!@}o)(4nY%DE9y{S#7vp|tvQSP{wZ@u{pLd^|WOr)i?1OKWd$~=nSg&-R z+2RwjBXY0!VTR8)^tiTN-FtY>w`8p@vn$`VKfPSn5zx>4|7ZSxv~pW zuUPZ@m6kMn7B;bmGE@Zl+CS|RlerZ9-pfOCR+Xn;#r6cL-BojPLxW#xPW_cx?DXK{ ziSa{lkvQ^>6bq*(lGfl@ynEbbGDRgnbf^m!LXwtqkP^g^%tf~r?EIc&9KYt(z9o~ zbG5|ftoy~hEiC&R?iPzdGa7LcrSC7BP&-IIlPC0b7pViWIv7E>K zdzleop$ct3E443Vo)S#_wBwQRDgT|{w`XM^@y>m|+-`S-{^Q-UqE09Ft221r+>l$n zAl~P5;l_8q@pGoQdq4cS{Mcu9`6JstdHnnJ%_d}i zk$Ubmhh1h}UK0QQ)}9N&uN$3MW3=t+{xm?c9a`)iIqkeL_LH)B!c)9UPaO7L zpBAE|u}ID7+ZMK!786{X6qu})j;_dB)H|VUBKI@S&ZFA1Elg)UvTx`97Z^VKcnHF`O6*z&gl}^xo^Vm=hGJP@@FwGK6Q3Qit&W0 z32$di$x*29T5oPJ@$AbY_FMP9UWs^i-k4SLvj2zr{`)_7?^)|UWq#57{HxbGrr$c} zUt1RPP+@)E(|y58O|$>6*s;I9If!e|t79hef1{q-b;@5T=zJ@C`gHnp{k&^irJj0f zK5_gi{_{@lhJe|DS0#C#2L9Emd3Won$nJ`&w#92#%CsN*FMD0@$m3jX# z>UmaWZrk1du~j{R({b6Uc`1)KtULbuY+#Dp|GxM6>iw_M6|<-OymekR@o$Uevvs{$ zQH4G$H~f0PtS*18X#MZ)|FyT}9$&xzA17K2LZfwhtCIRgTR|75$kK&5&JAoYT51+w zk+EZt2~Ie7CBQ{@Df^5q_tq};nKZ?rXwlr&!Ih0}X0bNf^KS9ak6tC9X?|5Qc#Gjl z2}{rXE_K5h*Mmb3YK9!Rc|}7$TcO|OA^TCy^#$PxRm7jeX9sa!Ji17W{?(@<;wCK#$XYuP} z1WuZND-V$~`ro4^FexTm@zlX*7SEQIEM{5sNo>LOgg4E*4m>E({q*U5=+D`!_Us9X z-Y+_J&iM*6je1s>R`uYTNhT$|Q6D}&{_T0y^?824mXFyN)|@cZJY^HG@9UcoyO*C& zJz8?>(Jqlwi*^4y-4B>QF@1~8J@dNvuO|L_UY)tYblTq=5s&vaaklMS_xI@OPixyJGq`C^-wKf>*5s4Dc^VBWs|EFPyd2BuPquM9Y@PSuiYn6-TGw#uAj zcd8Nkzv*Y^w!Gxx@0-6F3v~agUG^jR&iBB(4S%l+mj6kA7-w;*SNUt{VaJ?Wc=|4e?r z2??^iUfTau_SRn$wz*a79^6^@M2>Hj@w+e9mZ9RICpU^nESMJK^y}cII^I*4FNrNV zzg3&@>NT}zhyBh3hx5PkvKG=wRa|E9>qd!@-{iWB^;Hk<3ocyHBL3=?#nE*kyDs?# zKAoSoXvVGy{9V}!#U6&HQ-4=jT{>$}y!J$0-WR*6yVqrGKF_7(e;_w?LTL58faA|K zHttc0j`yy8R-9YU8~x;}cH36b1K;iciN@XCADF5ieBC1Rn)55;`HNGGukPOVb;i8; zTDRwfJiVVb?*uRR(pl_R(wPd?Z_JsRyWsk5FEio%H!cs4+|jg~v0htf>i>5ux!hI< zMy@M%xqL6=ZXBc5jcu~OpT>1=@M}2sZ==Qn#?;#za-+j{-0byX3NDepZ7%37wq(^r z1Mhd=8DH)bpL()F;gLm}po{0R{_2!-JNQoBPwY#WAuPkzKi8^P-Q!}C&b07Z&jYYW z)zbwmVx9aCH@XTtGn_d-zak)E;^cQ(o*Xhs`z=bvgG(7#y__lV^>^9wbxeEp<7{uH zl}g3Ede$I4`nzhbx0?1@E$nY!CWT}x+ftXXFFSmwmSxLG;P@;j=WyZ47L znfPG6=gnt@bXBuM$u3uF5$a+uAn8!+8s1$xFry>$-$5 zG*7HC5#m2_bAp3bW8^xcbHxc)e!cZ{T5?3ze-7s=3#m0Fnv3tmm|oV%W^ z$cb;Vq5lfEZMBURTt4O7n{BysWiFq38-MX{)trUePvuu$zgE0yck29gqFcj4Zr;y| z-Lw2&{ibj0uPm;}nmOM%vHw$b*oRK<$gBHv5ZA}H(SLo zb}5xlZ`geGUBqHGcLekA^W3$V=~b7pSe3H-gb7zX)|@}}Txjj23sd;xOg*?1UM=67 z9lm;@KuPc+zN{w)e>lttHrg=xpWfEy6%Re$R!!P_U%k>pAh*-0mG!&}XWN@d-)P12 z-%Ns45_iALpEM=hZtc{SPgV$Z_XMtAytFN=vFg!b8_zzLmc{isnoBs|9GiM*hxh#% z+wJyEOfc5u7hq5mpJH;g*<+g|r^gKD8IP)G_oclK5p_D|9>Q4VdOJJeH{SwXzmJU% zKA*i3+?KAE+7l@FG#eauyPYv&ccRQDXGE?U>`rr~ZRmt0Jc}e8E?b?v+_2_p@dn*f@(}`8Z!IY0 z`gzRt-;z4z7gH2tId@OUuwZbo#7(xS$&)=PQd2wswLe}i*@8r)2uRJyH z-Tz`2W#6SwLuSr89CShr%YsdpN2(Ww5p zy5>&oQ(iq-+~`ziaEPnwllgpqMc{(D9+4q~bNJnri9D6VxE!4&6-8hz1uw= zoc}U^`&ZB8jYaFCKS$qOzw+NUBaMv~r~12g_ny+(xM@Mk;`yRejMiWGVb8MtQm1U! z`qr=KhCa{Qyen%9^#YQXzwewac1uQTp8U6EJ1oE67fW1r?%lO56LOv?{cc?PRsAIP zs7OtgZw|0Kw76x0z|AC&S&EV};=enn@kTxO8aB3Slh zW=46b+TNywlsQ*lep;Ek@V*ekdfOQpOB8l&{%WXntmB}M{DSU-TiX`pW;7nT^*e9h zC4)OtluoZ!lTi>UP(Pc&9T`+I)7SgBqWa6{D~yX})^9G9kt=4AmfORd&isr!@lwT9 z8B>d2c^BJeU(7dubc(-ZNr9db5^Bj?(euIO+%wxY6E88zNhw$Nl_zbx6Rh@?-Sk` zcq?y9ioUoewXA#bv#W1o_Uo{U$IM^!Yr>@7bI<;7YR1ujWlK%-G2z?9Fek<3(t_yj zhOgS$Hm5tJ#Z0;%DltV|$>>sEXW}YebVRt!hR5J_X4&Bqo%?o$2OWRcDP;F#nZ02u zUMQx>c(Qn@_G*#z@D57@Bj1d4( z@3t$D$&Z88>%;n8Hx&|Z|fhOHbZ6|!-luwd#b+Xh4Do{ zG?{z0cx!e{u>IL-d-kXAxEefv>x8X3)j>M!hZe`55|HEj?(s_QTV9RNVYxTPXT4(Q z=bZj}Gh@c-Pc5wbJ%c@3H8*d%ShG3T8axZi7cwU*_WS(s)tOIcO8mOut=g7WHG&LqQGP2Sv58?|;BTz@#F z+Me?rbGTQ}#}X-Vo6;vd-PIHOk4eS|tdD)GJ%1CE-4Znx@t@`|xsEu*Ww>)>98*{@ zG0#jOH`cb{%{2jgeT7>LS>Ly9THWHc{b5j*A+rV3)>S)Kn;A`zJ~81{mwd+`-Tl{| zB-F}rXs(!?dtzcvM~tXj#iR)QT0h#Gm`tM>5iB~Z?EKDSP<~R(xlap z;g8ObwKq;(3G6rCsPX#GWYZlYckb>zv^qTBF?F}^#e~z9DVo)He*f;&UGni)XKng- z9pBX}r~WZ>>i&M=bMg|~WUZA;17i;#J9_us%wTuk@3l-RIw3Eg7(YAr!ruOz+on#H zISZ}|eLJJs4eDF7HKo7(Z|lmpP!fL#8jPK$dhjQYtFBH_M3~&JU3bL z%;y~Tk%H6Cf`@t(h1_Okonp?{CEAMgE^ z=+eK;=y9$??S+4`ck{zH-wZ9@vHGIHccXj;GlTquE%ghyXMFQpmgyq(tlu^@pDVY8ZBst!_D|}v+Bvg5|JA-uFEp__SaMr$mR;v= z=9vqB+bM8mOk(Ou&Ml#=9zVNF5PCk&bJkAxzBBOLD{i; zjp(_yy~R#?a=CuR)lx4vZoU^k&m)CprGNEfA*>lOUdVN7B9l&rDr15??^faeb5}fQ z4!Jjv#ccO0?%g}WeX6f?2rb(pv{}W~!{M}tsms>MIa&Gq*|Lfesg@h66xRPQHtjvd z;bvm^sdvSGlc%ztVv1dc0Y$wNoI-MseT{X_jEUa=^F^1@UA6DRUv(G{CvlnGm^10@ zIxfRyB3C?}=Gw4K*W!u`b!*Tm<49aDmwCrnb&ow{YUaQ>7FO38a?7GIrj z^la;P>u;eQjtkdsVcgQ3$^5<2HIb{_NI0or%IWMYMe8;9cdV7QJMunM@!4xmzo`++ zI6gf#T;)7x3N#Xfr&!Os3~g9nO9(#TRP~z6+eyu$Pus4hrayQ07SlA2AMR17ZuGUE z;x|7(>*vqnTOzh>!jE4UZ&G&M)EmC2D?D_$hB%#f>&XFASGB z3%^%%TFATfjqlaYGy8QOPKH@poc-u}7#PE+j5-Pma?<}6; zwnBOD;f>C7s@U4!JEyAm&U*g+&eFz`Z%gd@uU}+;zMZ|uw?O>0mGj@dS4*GwXuCht zGxA%q@6qB-XCtQ{7j0ylf7w86@ye^;v!h>E%WGBJ`>80%&Eq{H92M`sA^zRQ+}(mH zbLMYZvvTvD^Q{xVn|!JLli9fMdeF^)ZR>KF=Wn{S@^+6V!|{?plP{5PR#eT8-TT=k zvCEy+WN+2&IBxf#f}r~PwVN03y0~V-*Oqb}Y>jiJkD-Zy(e5ue)c1xmrWUW#G;u%c z5L>vUMfeR%;JS~??|5F8?DX9l`^&RX@pi|gQ!5x4-6vcO{#DQ;;@_gFx8qdbnV{qk zJbp{rlXkD(KV{vGpf!8-`c~L|IR4smeZZyut=FeCM9pFfRbrzhoc+n$}a z?DneWTWq(VKM;6ut@-mR7lkexy#Sxk;QG#@iIWPhB>VQdPigFVaKxaM#qy#5f=$*_ zrIsIgtS&FQU^3S&lkAntT|^hG{3YPEvmt|dYW0Gg+N^hX(}GVY%IK~QtGxTV*GP0; zis&DiQ`?#6ZTX=sVXuAPe7_YH$E+rlggW0Q&4o+!L?XSQd<-CLL#v|85Y+}O_TbyLi)=%4f-CW}k`lNzj6F1t4G zk-@r;t3~fm&YqHC)pzv4`eT0;pU=OirP_8j_{(IGO;|IkP`qest%>&o|ITt&VNd>r z?*EtiT$m8Kd;g4Iy>lYV8+G0tk=EWk(I$g=$KTxLXOm|?U|Q>|yR_u!+@!PR%g=b; zemf;4BJ17DsW+DTalNuA3W~cVAsSkmm?mJnV^>+${*x!A3#a@b&4O0(w{~ieGk(#t*izxiawH#f7xR~Y_Z`G_yjTd{TR`L&mxPwIE7`IGLZvtQ172Ub>kZmaoenQL2ay?^4`z_W`24&E-ee{@{_f2sG} z&G!>;>-EYQOi)r!?Qy)BHfQ1HOTK@;g;j=G?EDyKvmnM;^Jc-H8Ed->eZRj;zC9_) zQtI-j1$#Eti5=eTyjv``?{%AWv+&hPo8QZqzkht{;`TEB*4HoYuSgO8e&&YVm)ali z{_)=1^E2?WmgDW_bq0?+*6j29fAi69gFK!9&DfjE;x)fbo$|tIoo=7%QJMSV>kg{B zahNVz`uD9}uynHJqytNmq&Sw|J8rUXf1K-!YgLo5uNzsWA;wU2P|;RU@0D(xW#iqG z9|He6Fgf3w7bt2Ha@2S2QbEfH^9r|}m{QQQ;joy?;b%=*pL`0Z2~3f{G5^_d0o^Ny z-wAnb7JmKliA}5UmmaP~t4>+3d8-`$e!&`Mlds}-K6Bkfb1k&KYFs_uw|BO$eTWQm z&p!F&5B7Eri6`fEmI)zE?B15jcW&NgLSBvm@ zGxjf7KGpvD&HG)t@pXRD=kK1&Pst8h?ihaX#=!BwPo^}mNjGomo#rlWV`Du{ymVcR z!Rjfz$)8Rb@!#)#>K+@eWy!r&k}v#vo!gFIwwYJ|uN9f%RPp_t`}Wt>^LKCQghbti zV)EkVH2-#qulrr$^6XEh%cXF1zQm;uA**r)zS= zv|r2HZ_m&^z`i4HY6;`dnA6uJtT)ERdiaTyNhKb=rFwoxS@*9V`=jeMdp&}aOk1b= zbqKmjl)YUY8mzH!xlz{rZtorTxw?5-CQjFHgzP*%KO%hogv)*(Rm4oTN`IK~?9}pt zO)D~k?-c%hXyg$h!^}jybKmNPkel=Ie zy8I{aY6EsYGvtzdb4_DYx?1autHrOgo^7#l{yEM2+>{(Y?P9a0s?O@a;p_GV&RZ9J z_FR0klFygthqFvfYRsp}mzHvA-a6*FQtj7d)2S0Rw{+a<5~y?QkFNdp^R@Z?=AD{G zKYx1e^ZRam_`hx4@-X&RS%JjcW>Yq4&s_F4bjI~JenqT4jr|YrNi*%(R=ZU${6pcF zy>&-y@`MGw{;DsLXNvH!bbYIH-)Ym%&nvE*V6QfP7j~HyDcwHJHle>}<*sh)Pw)LF z8<#Jgd{}b}$IiB|TBl6Jj=a{K($Va7YUQ4WIb!9jEPnOa`=0yPvSZ8rr5j%`8ff|c zY^i#s63jp0ieIn9m5_{z53Si#*-Enmavjxg&&cYw?Jiif_ludwiVeHmdvctQyqoFB z*}V7HnR~(6o#)FI+}XNsn%IxUn@q1t9uS-}N2{+dpS8ebk)Ys;JB=^+u7t8i)fz?e z8Pu~Buzo)NjQLp3<*eem@|PwDu3Zn(**jy|k6#xqd46;nP-ANsf8 z)fMW#&}s6^+Vz1)@Gt2@tDjgtDh$4yExe~rp``?erU(0^kYA{=-N_+gCqvX4KeZT6_EB@EY*Bf04ZQfCK z=rrpK&4q8`W_r3SAGpHLQ17z#{lPzsG3(3Zy}f-*+pD8iMs7`iy~;Ugx`yOTed&|S zWhMeJa0weN!!EFJH5uMI^K> zar<+@EcqqdT7~)6IcQdVey1;OxJEen(ED!2%Q6#R9jf?z$KCU7NLO$L^MXvJ)_~|W zadK0dvg*4ck59?Y{eR=t+j`cdthH}-*KFPP%j@8_`=&y#w=rw1IAgKnTdsfIV~&+m z*y4W|y6nKwli};q=oIjLq`ZC+lf>=AQxbiy9-V(nJ>cf7ATH6~NJc&T76J7T&$P{# zpSH?uT;y{~UGZ&ujmWLOWmcD)tLzlSHW_Iw>|hE!>UZw*1inQjx38^xCROC6$5t6O z`{dS@yT62ZF4HntHt)p~nXju$BaXF9?K08w_1LYdp|$*x=87i`{L6O~GyJ$A+Og{M za@N@=SMoPXgq#Q|d%($>^Y+ydtw0SW8HRd>3moPLwrW52_#NZLn`VB0iLLM4g+iPc`)G*@@2ad-*-yCoA6h&{gyJ`OLHFuU_)66s|wDjrVoq%iAuZihTbr z&yU19z|bk)skB7!U5jWp=gttns@OR%)D@rRFue7xWO3s#JUYYIf6n&om*4YZAGXCv zv2|}L%JAk@^jq)XkkM%H^ALyn6A!a>>+db|Q0GwhxE;PF=kJ6DrLPRK(N&tB!bf`_ zD6veu_T-*f=;xQ)0;{fyp6P8-+IV7_$&=eYeYb@|+owcasa@~IB6RI>w)&o!YONKw zrqu1y^66mZTgB!yBWvXromkqNT6%~%@6w6HP%Y}&W)7naC8T9Tr4Ic3kK zgvm+MPrjAkQ@|Ox#%pzP^x0eSh51}ZPKo~SY}UwGQ*89e@x6S$eKWpn=hm*P+b}D(*#PA!0U#WVqf<4PN z;I-)1dOgiW+j5WZdp}F>l!t}u>km(q<`a`|XtzxuyOXGgJ5tCLmE zX?pDlez8HjaCy8%6W2lwOV*;)EKS)gQ&!fgrVZk$4W_5LTnuYP0ymbm3BO+Bm?d8k z%G9r1Jj07`${*&yp2C%zeIgw_^d?POwS1wFs+b+as=qDu-pyCE)+mTv*HbobwVTYZ zc<6*}%QA_@F3LaWZ9T78af{RD%4O57b)g2UR&ohuGHm31eed+$^C8tSyIX|6FLP1m zVy-S`43Dn-V>#_79wF@N&z9gD7Hf9~G>b#L`u!EGvMv})hK^qKLFak^QTjpWI* z<-Od$4}1*R$6B4&imxuL*H-N@@fOg0`19WErx{s}(c;0v2VKemiGrgMgC5j-}Az-=b}Yf^Y+71FMn^D zA)UbHb+GO`mxi>%{s$K8VhxvVKRGeu*v{(WeZG&gR)5$Re_+q;dA_!_DQk6SFZwO3 zymF(>&7(e>gyO^hu?TWaT{p`)E%=YdK22B7)dwutUca7vZ3XI7EtGd8+%?ht&4vwp zt#9}~E-4MyE>!=saFy!ybwZCr5*+4MTn<(~xp&c#M?q>4v3k7|+;+w^C)^Lrm|s{g zb$Rj9l}TD&zXU_)emk%rW3i#Xa!$rA4!c=N-0~Z1`;IvtOj}-hA?=mLn-ku5Y7QtY zKcQ6jRq@HAOUVk8s&>h@9$8eY_|D7FJ$&KAbuWTSYf5syM3!A&x21XQK;`* znaj6^{B@YEC2{a;?=F3x$cGF+lpFdJJgjr)ME_d8So^O`tm%svPZYRT?r~A{sA0R+ z_(^QRZpZHlGcHHT?eBjYJ>%WaS+6wx4{i^s{Hc5Em(aGqQLpA#UYKTEzVpuGudmB* zd_V27>7$pQ`v>XTJ@R^EBHi`Ppi3(EOKbHb)Qqx81wHCM?e0e&>|7 zjRh*~p{&xiA3XlE{?~9!eS2Rx`E<3s)_o_1W%neGJ2;hGznWe=f9|h<@5!ldH_Kw) z-A~wG&3fyboq^5P^U{?Sb6l6ZCF~dN;PSfZn0kEM+Z*4k-%S5KEozmBH~-PXH4kzH zU)F`MFu6MG(l@EJhHTfT(}Gt0^;_{ve^csH_Ar$j7Y*(|`)-cCIV`kscF}RA6Ia$R zvRkAn5c2e>VM&vf$3*q&AHCAYomI2Uman;VHE>r{*UBp!mTjKpywvuH`yEc1jFf4Y zaE-0#gzwxrdo1fMD^pm9wEihvr{afmOp;G&W!ag+$w_dAOER~+-K3AUoFZ(*HzGt74Iat1536F7IwBqZ`CAMpd z+e+8$W$*tNp` zkBIsH-cx29|9JkG^-A;n&2{-#&rQ#I?R`UTYEIh9X~NNF%KFo-bD|FhuD4ic%R5^u z@x|%yD#cQYHD127V7OcHJ2^v?3ziRE|hLdUF)!*Y(~|oH6@Sd&z+jzWW%1_Kp48LJ4(*)8+y3eB20Ptj52kJMUDE5a>Fkmm;j8Jl z?5@qfYxd@;=&7=UUw_FRKmOgpHpfT7MR&TL){UqsxxeH3IT;-eZkxLAx!jK*f)+oL zYwT@ao)XOI;mG;D_HRW(fo;IbFH?H%hE4nuy5YXho7=+2TaIT3@cCfdgYB`$_- z+lB-ug_{qQY8I_nymCs-f~)NEOV4j*w>ipU9^|7w+2nnws&?jrSWl(72~JL@CSLyV z$alWb%BY6T%TqTwY}I)6!>VTb(fMwB7;hV&O}nZ-MWNZw?O^uRi4#w>%4dh~UD>SE z^u3=yrtFjO?KzzfW4atY0}sBuKhu}t$}3h5AC{c_Tl+=*Pxt>=k|TV2e(MRTAA8d6 zk6)X<<*)mOud2EBC#UTVT>7Ts_cwNi1MTtk$3A|v&071-?&PBn9KTp~!|L*#JgY@s z)*dpQ!C}O0bT)&#PWS7|A5O*RSIBmkSuVP0dGgpr*JGur9>S(twZvvsPTW&vqNd2VBs=pSG8AU?%8wW54wJiD7NGOn^U&OdPA(eK4}-YAZF>CUhj!m< z(L0_iKB!2~wKn`d^ZJI$6`$`}>$VCf-c}J+Y1w>R^oq;GeyhMX6V|0)?ItyLG~DW3 zaL02Ei<9PyRoQzdmfXAY!rk4(3wy+QyqWau#kZ4H=lwdDZ}v@f$SZhgp?clotI&eg zyE-0qPH_99S-ZT3DPoth)a!!!;KJPW?`wYZ)Ckpl^D@e*6-pIbexgaBX3bpX5Sfoh zz6N@@D)#t#tuuT&H;F|y;nRAVh2>IgiYLsq|4S4eogBMCCb`Hlt+0Q^H;$KWI&Vd< zJCt3N`oZw{)_U9CHlePl2NOH1x|W|^Dwf>9=UuyWt=J`z-9MEW>&o`6n9ER*`~Bj* zAor=}40nIu+}-l)xg_&!tJ3{Ts!lzBkiBZpAGw@b&)fZ5O((c>uq={&fA6oV-J9<} zzD}<{xPJeiJNJ}lU+GWk(aoP2UL3L^()OXJ)TfIdB2`LyUTN|dPIdDY^=Dgn^4ZVg z?s-z5RVOJ{hICcly0yUi$_l&BD%$F1seCq$C)pwry|KrU&zpZDyAnCNe)hWwou0JNctTDK%cGO> zF^)N%T}_|5{O>Ej>^HfU`eaJP+9eZL=>y92|&3LX`c z50&dw7ZCn5Q^2!p<+6+hzv_fUXZgABSVUiyMvJTbIN^7;y?XXpG0$J?8gr6aWFsVI zoLKsJQt&UQLoc&Ty*f0n)$cQ7;*&quf91WYDf8;szVFF@V4JI}c9tkjQ?#qoX{!nPfOy=fJBp>nzBzpt5^BbS_g)kf-=iogP~BLe*& z=E`>;*tPJ-5rgY1b8hH;Um<_L`Srth=9gY8F(z#|c{n(I?$)1@-xWN|J2&y}H^1|Q zuW!oUu)K}mn-h!MwHlmOJ^41_KSR;`JCW|#2hs0KSwC2m8@wV*_9dr^@Q&zC-`Zmn zb38aCQ;tX}rervDZ}XcqVZn;O-LDj$-0~D#nH0W!TYBO9E9)z^?TKx9a`CbUkBjJ` zpD(MVf>JU}td`hLda!;;lUD4+_VoGQ3^S{`bboN%@oc#B+oQwj75D!)HBR!j95B2!!BVq+eHUFcz1~5!>AA|WKY~+b=G{v_RQR_cihoMbhPTsqTx0Y)X&`mz@w0zx zb}+`WPb**JGe2ah%b|}KH!oxT=CLM2=d9k6$)$N8r%qeW?-J?FpIf%sh&gE~X|0HP`@QY9(%0IQcV0PR zGq=iF&6Z@2+$`L8>-m-KXN=zR{)%h;QrMqbi2ZVR8ub1~>85 z&CxeQN?X`XmSw$ikzjbhq%@zYGbCW4?7a1VTda5S_pQ^}%v#iAYp?NrL-*mGKP;!- zy2aWM7-OYXA}UiPWv=&i(yy~i-(LE(b+z!78REyb9+i67)S*|Dmuc8yp!#=p-nt2! z17jkOO`KA3c$Lw`4zFpSQ(n6$Fnp2n`7U-L-YYfYY|nFF*{`l2RDuG&o5kXVl6LU&zN-O@qxma+cirL{#ewX9KG!3Td7C& zuLCp{^lJIHl}w!6%v784q0v9`SsnLF+n7QbhQO=$d0dtp311ZW@|fVUe+{Qguyw_b z@Imnp7M=Qru>jHnmILA-wjK{d{P>F9}m4j~2g|D}G{F?IxOYm)Qh&08>!aMzQ zFV5U>xK`SDQLd)+yLa)AfBX>q`fH))!&Z~HwA4AlkJFvZjDx0o8(;O*TNUy668|r` zbs}#LiSW+dbf3E{zVwgmEBjP0^_wDpr3I4uCw5HE#y%xsv@yHD)TN~7ilE=O-3`m; z{t^Fl!s+Ic_Rby~<_2&6X5{hxt>(P&R1i8dIU%!gTlDQ`0-QF6 zA?a^#7d9@q30n(Lb>MY?s+_|Kol7Q{CPXN7PVnwl(X!Ygxv_&wVm5b)mvqLfRpCn- zS267qEKVMy{E?LCO<&f|2G*EJ74M&Gzb({y4m(1H295`#tEB6M>qF= z6+Nt_6S4aIj&$+2E$VkQ7?-SHH!tV$_wLQ#Y7b=@*jdM&7m1p-WahpioU4y4JeIgI z{Rq2DOHkLu#u@7IZkHn8bk}cH60|IOp0jW3eWo++>bE2U!|S=HeyeWsiag)$f;HEf zyB}04b>w*aqO*ig{jct#Bg@!~CdNrTU|w;3nNjn+q?1e2KQS75zFn};+}AqvLWC9H znORL8heZQzU2na~ya>ptV(8|G@Bl3457Vg1dveTv7{uX~rD%6gl1O84xP zADgf0HlA}!xyksZPeMgStf;hm7tfZu*Tt-#LxTfMo%-iK3Rmi9`+wq?Bcro{8R!A%eOZGTsT8t4Dt<>+c^eCtsbj#(dm<(6mmu`-Dq56ejo zHaCxL*1fT}dKWuK-Uh=%dlz{btvUTq_RF*zlQnF9=B5~1g!R7hZ8Uk5w_PtVBi=*y z_{Q^(XBBd9vX7YWw@&@>9;L-D(aF0rA`a(WFzPsD<^H&|;JMGYnE$qU|38~*eYo-Y z+9QX!m%qJln&p7@Jj$Nhc3dQ2Re|vQ`Dr^Rgv+SsxSApl zem}lXOtV%s_f#C*I$7<(|3*2cDa z9C52rRJ@VVwe(*2Et!o+JQN;eEq|1lYw&m0t6ve(Rm$&H>Gj;}I~!#6HGReMxk{dM zm#EArTOSa1ChYCMRgVs=$XdXnzVYpC-8xey9?w^ryiH-@?7KgT&zF#7ud+R0!4Pv> zv-a)eo`cVhU0nL9$VK*B8py?4YsA_vfy4HC<%>*XYAMW$jwSrEl&oiQiwj zNpwn1$-U#%xo_oXReJj#eJ>vMY)5}f`GsHml>A)w3FyA&s1?1`QGd>`{McWeEyX&! z%kDL4y?Ib3fAw0@p5tGY?M@%woE&Qt!PWib&F_QuaSzjExbrL3HoH8XvGL5msw8g@ zGn;RnTycA=x^s6obiIic$?ZS9`h3s|c@~lHIm)+lG?xBd+*qM={zgngvLffjlYjFh zpVuh3{rtG}>7MEPBRH4YRA}QE{ZIKCtHqbPhm(}#h#%u`Pas!pC3A( z6ykYz$}D`r@5|`z_v^3@wxz2X}PJ5J$DYh`SrNNepT9GclFaTzrVhCxtJsLug|P|oi10| z{f@eEMBX{>nUlFea7E1Q-YQe0=~bK$KJjV1XSkKxb)#q6Hh(RFz{EqxzH@4cC9j(3 z$eBE)B0@`~=f3UMn$@xMGk$yD{H0X;@9yvSYtFZvdYikN$3QUS_Q&x0zwbXjd&~cJ zuf*lQa|Oy?Op7{IBKxcKa6NyV`1=L%uQcxz-=4p%|Hj{M|J=h@X?blZ^e%i}<2&Pe zZ{6DT+L}Lqs$bmPYZ=_onSLf_$Iu`&_tKsPJat z_gB_;_W$G4klyje;bwqig3{H{)qR(;jd%XnTd^^AE7!u!lk=)}scE@-TD@}3wLbJG z=+lcs^Y;WS?o81&O}o$e*|X>D%r)2>`uYs5POp|rsBF7@Gxp+=6H`qNJUP6m?9sft z&shu_r#KXrv`Pe4Pn`T<+9D3A7}Kdz4quY*ynG+DOQ>h%g%3fl41F68&603c+OX`% zqg%?`7(?408qQ^r-(ax(OEUAtd;fDc);fI)G?h_SEqtqGQnO{#vO1$pz2OW-TN~VB zGBsDkWbtYJz13-(;^@koKk57Z1r8UOyQjTlb-bC@6LUK~^zX?X-&QYKaLeH-(}i~; z%_Sy(E9+)!uef_#Y2TK{6@taHCIxOj`-N-EUxo{NFJ&@_r-nN+t!FZf%U^L>$3V+J zL5qKt=;T`m|D0K}=;Mt~t7_+GWiQ?Iv1i*pkNN*k{1XmhG)-c1xS{tQwBB?@j^n|_ zd%3#5@xFHs*u=SVnv3ia`}7A1!s@R-CY)Y=*>a<$rvJ<@T|b*@t9@6dx`u8l>($cF zJ~}tlIz76(+BYKo=JBbz_G%yRO@3`+_WX1H(iG+M8+ICM+|HQY);3SKxZ=#!n~&l) z#;Q&gpYp}aC08$B{LbC|tW#xggO00Xym;?>>%RM3iK;(bPo%jWxg?T#j@|cW8vE3{ z`>r!ixo=k&SLrI9v3u+4l&B((Wc&Tu4Btg&7q!;S!?x^VVnw8e-P1`c=DTcV5a&rU zIn=TtWY4cg*J)OF4=+t+ipf%+A9T`h(`+M0(@kyxlQxEM$L(xep?P#m!-5*U<>y`h zrv90;RhMV|Bc<4B+r$l~x_(%*d`VGb0B6bey7vrkefJ*Ke)naH-&(zmCu3(m<*5Cx zrEw`t*|qf3nI%~P%oC3bhwWH?c9JzG>z!chLUj(q>2*tQF~4L4>wkvGE-7xT;?fH~tod+3y|RGkhAqo`Zq+;JM!#P@Kinzj(<+gFUYDOY zMJt~Bx%=Vdz^(_=Ob$AKw_EyW&bE2G=jva*X8v8?KEQ6fXy~k*-W@UTK8F8)b${y= zi{_|a_04DAv%UxlKmWJO%w>m?XR@p@#?g?0`iAhz4 zzn$>L_OJDMzao}-25dG<+-2Tvzb|j+8de=9QWmmuZPnFX*xNteP7{l->Atxf8eH?l zH&OlXVyEL1-Z^w?92L|^`q1er+FDzsY_fFrJRuL~y?t+*3_q-L;T2E05)pNEiuXOS z1V$J6t{yM5B`MOAO5BSs?VH^3Mr3dBqlX8>)Kvu~A0GMhLbT$+yy8`+MtU_R(raq7 zQ>5LK0+YPLj~1o|&scd)FZXkSRJ{Mw$1iFo8D=$qN=|U#DY@s7mCU#POU2wPJs&!E`V-F(@4{Bcqe&s>E|~53 zX}iaz#8col^wb8(YxkkpOROPf^v@u zGMo#E6I-Q!YfbB=Q#rri{EpaHxnAprg!Pg2iI>vj=lwOk5#+x1_Q{3o15HzJo(o+2 zyz#gExBJR}UjO>KAgVunTcpNKje|iaCd$m`&AqO7X7!s-k2mbQ6}N=T(CqJ>t(w5n)3KfQ@{uhEX zmrM=xU9ftW0XJu}Zz}6-YfHVxwd>Rl8<~Sp9hq6y z|Ma&(bl}hBrIoJ_hL!EJvbyN}O1@K%EsgV@RG@ovf$i37YYrX0C1?FN?(LV|pVNQu z`Mp5tOXop9$K|hnOj^NPT5tMPy69lgb++X(M^-Uh$zRH}h+Cps{!@Lf6LzP{`kiEtN<5oz zR+Hi3dyDxz*QOWpCGK(yU0AU+pzN)ZyKCyPeeZYdu5R7^+kD6F>fYM@%z_JFy%+u5 zUU+twe??8a&fX}^rGi!4_P$Tw=r8lF{lli6_iYP(rW|)q^C3Ey>^`NmAoO{;fBWlgft>gD6TLeZQlm)J$6slPW*HIrD^Gv=}#|yjQ)MTPLl8Ozof}7X4Y38o43yp znd280|J=K@NAjeuq37C#%_q}lE>IKkny}?+@np}u&O-l{-p)&(eG52Ze|JGbifgkl zKf}gDGs`kx9`D_fC8uX{RaZmpY+H82+f~>02kl#xpUbf8bWiD0Nii0)Y^k}7XEymo z#VU!!rWgyY$`YEnlB;vkX>ZGQfAzNgk24K#uRAaI za;W6q__p`h?u6U=9=G4kZTdB1?%n)vmXhy%uWWy25jG*n=J8(||x>L3P>BL=+y+m(b z@xQy2TdV6b=aZnLN-K9f3fVquQcSkeB$HVRFZeVzpXT>>qY#jzxI0_;+4FZI=Q3CFPb|;gFz5Zo^A~$RdH4O@ zx?|6ts}cJj{QI0Izi-c5>wA0uGiGX^Ub}QdPRyMDy~he-7IEJ>^vlVOYePwoWpSyc z?(K-MID>W8SB>q?udcf7x9R-1$?L+>i(LimXMDf$}kU6%Ljv+v(BJ-+*@$C~cK z;*aOd9A{^~oB2?~_)gfZx_ZAo=2vq~&rOipmRFH09p-0Nx99cgeev$a>pt&SI@z{+ z_pUit?%L{=zuyr5?zDCM-<^wPlU+7HtC~|beYO(U-Q5NvzEe`>F_oYHl69+kWo+`h z`GNeenP!~5h;{?d6WxhRc3(fRq$KLqia+W}_SNP$H~qM}EkUJl_l9GCq95&>wr17! z3D4Y=9kMzNNap6jfi>1-^VPQnk2E)KdzEr|U)TCPgWR7B-$^LDsw{GkcUpP% z{8rA;oaSHiQ+Ukhmg%_NUUir&W%czoe$Q(JONE`LPSDU$=iXv$}0@H}^n%d8mE;`7O6J&KUVw=_zbd z&J|zsw&`zCd+q+i+unOr|6Kbg_d?a~zf&9kU3X(U_4!h%<>9Bx{-odic;xHOSS#&a z2P?N;l=%HaPwV!Rs;Ou>bdPM%|1K#5&AGFRUd10?T*u45S^h#!e|CI=eBI0?GbSG? z=yHq?TB*yJdZ%br$C91rd!|hN`Dpih@5kAHYZRXMA1z&0dz4=~sJptCV+&Vaz~kL! zU-U1`-f-ANCD+#T8LRBtxS+dH+jjZZu09sa@RI4K9K%lS-&^M`Ke}_7HD~Ge1=A`f z|7)!;ys`4{vR88}c5UFeyK;GF(W#wDpU+D;&9jNAI`c2gev9hi4H?z{wd}=@&#z&y zV5nvJ!0}?SRx&`)=}|T>D8WVeh2QJ zeO1M`y(jCT(8YCkqrPsL?@&_qp-;r@26xiReQW+qO`f@6zUc4O$6qPdJO6#|JTK?8 zjrwodEtWo8IX9lyKHGh|E6Cv4mALs2^`4$i|0;Ee+3@_O2@(~FP5H%><&Qi!vRQvD z)-~tNoZTGEdHpNzFPf*XdA?a8SlXoL`OR->|80}CH|iumJYFfY)`GRWxYp<8=chBP zPe;za_Wi@Eqkp&B_pX-T`*4$4-)f=LpWX#HUi%czafxqZD;@LeW{k63S1qnB`NjHo5nowk z_k_|-dFGEMg`Tt!oU#5}^KVD*MVtXbmkvZMTc!W-N{jTRyXjtk`zNsW`0<9_Sm^2$ z^n2yiOR7S5h4hj&HQu{jK4P4@cXbfIVIQk+%H#`oYpb064@vA=quJK6(o*%t!V8HR zCXqrO_Tf=;-~RZ%^ti|*mKTrYtIs}ss$iDq{pVX%O2)3{H~$%S{uY z$G2wj74kYIUGBfhZBeSoDaN<`j_0qH|8AsD-(R%m#e=&|DzWk-rE{H zc?s|I)6DDU+s&%XsLh$Lz5B$XlQP$zZdOk_GUZ>%?@fiq+)gtMUq&zNvkZT9C*gV7 z<0F@nTC1XN_Lh4`ZvD7Mwm5t5Xa9mpfpcH)e`9aBS@F)sy}4D{)7?(&VB-nSgRd%wl{*__<{3`#eGB8vTCJRG^NH--zxQ{*F8_?ptU<@^b{BS zmMopM$E)t;%Bot|wih3Q3pztqK7Vrj<7&}aUs6&|ux(rRwQqx`J?k$cpKZF=CoNc= zyK#}UL*pDq%LTi>rY3lO4lZ4E;gMF#r^0)#i!9l;n#A=kG}vcYcH^&6qVmJ6BOx1e z*WQ_{w@Gq+$PrtQfV*C`Ycsf3tg|wEDf8&t?Z7Vopj(Q+&rdjQuY9^z(q1=l-n0`D zfxf%9*D8HJeTUg8XiNE>=Pg{%?Lz;BZH$xpz4q8I(Qo%3ty~j*bl?4l$M63a{`cqo zf9d1P`_($%vo_Y+O$*;BRTy&H7O>|xJPNG=q_nG}^_sXNz zYhLTvD0Fj1XMP87@8;gu_O`G0@6`Xh^I)#puJbG#dsojDHu+igC2G#mO{SMK1AgsZ zzF$48UVKhs{{MT=T2~yqdU;>n?BxD4hS{beqSs$9SK4;*(|1QN>r1JJpBD8$);O1S zyf7p&*V6KN_D|oM0KtUYX5p{r@ISGcb0x1UC+z%`m!E&WH$b}Cl0&gY;M24jt!A+& zj9w^7KUNCZe|sJKkt@quB+NQzteUZO>hYl9Z@>TP{U}i4Sh>#f-*>f5FZm2ts!99~ z^4_VZ9TJ={EB4hY{r3u~kt(w%mB#A27=A;StICDInBed)H8N*w7 zF&SGdSs1T2F4D`qXd96=TjhGqoWd!Fo|o0~9An+M*7BZBJ+?z`O75#g^B$&zFnh!b zakcNZj%xop<817T?%Y>ml1+={)F1D!INy2Y>9Q?4p`qoOyV$?YpQu;gw5+|V=gO+5 z;v6DvlYQ^c+VkQ0a?`_K?Zay}T76&nX?xe#OE>aOudUzk|IMA3tRhb>Z(m}YDAK~2 zSU9`YyQ?_ZuxZA@x9ZFGi!O`!_TANbPR7OgmqWy~k4u!tR4fW-;!vLdqWIsb+Gl%G z!x~<^Zk`-*@8mHqEt4bh7PseE+~nDKT4Ql{kel=!+oEl2)uZ;h3*X%F@RieLg?*;C zA1ZyT$?ME{Q@6$X24`^7jpee_izm+RlHWeXOhd#|Z%0gyuE_DP!gBKVOp{&}rR?Mj zE}V7y`<4EEarV90&b~*VZ*!ln_B!Ws%>OkKedraW?xmmWw7Lv4J+4}EzBtYC{76LZ z{E&-h*rsy3=mp$l%(?LD+M=s3m#BQtVY+1T$iv9f__t||aEr-D*H?N5XSb#m$rWyu zy`I7Oa^joQY73_y+NQd$nRz`6ntBnzgl!zmP=J%Ub^;}Ze{fAE4S|H=l=_L+WK+jAz9z6 z>(ZL@{&U3qleFBMzw?~pzljmcqkqJ`_37CF9G zEWGo~%>DW1^E=azeaO;SU%mRu*^a4A9!o85b|T@tH^&Q<4Fq!4wr5FmRuI#mz?M; zI%5jAcX{*1&dm9nC;t=u6LIYn$1ImU+AeR;UyHwx{3hFEBkwwaoYMJ%_dJA|XMXek zedzvnJr1tpST+yXk7RBZd&-8Q|tSL)8{Xg@Qdm;scK&5Xp@-V zD)I5G_-9oczi4Jrr!9}Qc%(B;u=7U7Us;pu=dBlcMAv88oMwew0gb$*?*{`&1F z)7qtOO?#1ZS^4JEHS->(2+!TSOthy;_^-6N)y*0+tG4o<_0sP=S3Ekd^kx2(@>fsa zE$nv{p1dsN-sVYf=3e@LVMWqxZiNH;-tNdcmbzO3RIfdwZ>Zf5P_58aAaWd5Gju~h9uO>wkFX@$rpYzZ!fsTxYmeUNlyQd98QKOMx>UqF$ZF zA2PY-=Y+k^*v7o`_|6f+<80bu#hD?lDY?;vZXgK3p%-HDP-3rYnKxB>Vg4PbglO)co?uum5376x>99L{43K+aTY6=~DO3 z+r|G%eixrtzT5S2YUR3(=<8`F51$l242w4_ ztmJ$t9onifVH>wuXwL0>)5Al~T6_w;Zx_U3J!wLa(>ZpNbeW&G)?beMy?EBg_d1-9 zoo@1?1#fi9{+;G8GOC=iey-f@`>x8qaZ;?+u3&F#x1~DVCi{BKPbYF5+vLur(f6+D z!oGX*5gYxw7lyhNg&aH{_BnhdS3#eahUBAJo7M!EPFi_rPSM@P+m}}hUHQEB%(5dM zkALm;4bxuYY!PgKalPiQsy%+P_iw+6$-TnieTApBgnf~nNS?vN&C|~sGMqiQT*ot% z#qnCbWA)sSE#JHwPu1SZ`=9Iv1N)qkeiy zq|TFcePivJs%>wC#ch-4UCqC1dFJ@6+Y+a{x9#|MXiM#`|Id=!u7y0$6Mj5LNILg@ z(#v(% zXHVTG%X#4O@%@jADjmEy`}^g8ALvj~&@{Wt7@Bg{qEBg;=WW(m#j#AA{%S5tJ?X=s zsp{bsZ--H+tv^)v@8*v=s*_jzh)B77ZKtUzpTRYKMaPu&kHl7bvp;<>P3UsnCJ(!r z$-O6*>Ze|biJq{^+Ph4M_b6kaq>}X7uT$3U*nZ+#Y{ss-LtH^~wEeZ#=>&A7P5u+o z@kC1bd&>P6;V=I_F}iH}?!~XFxNw_R{hv!M*|tio?6x~4voE6xCO7!@PM=!A z*#ELww9swC*ICJP&vGri8fcQ*5?S~=rb+LjuAu1Y=a=I}if#9{T-mIhc6^b3@{8?@ z^XJ{qxW7&DmW}v_HODhL9*VtZ|6DD?>pSt+l)NS3n-oJ2o~_&I?&Z3odT*Uh?TlN| zMf&Ma7VkO|day68Bkf7emn_r3*-LmebJy>-kwwjY9F?YBi+#@r-aPW~Mwxi?ztGBe zO6?EZ6eeFk*s<`d5tFOgZ!et_Va5HSImVohSvPl_pK?LBY@MI!)@@NN(#nY%hglcK zE!S;kk(sb2)MWC4q`L)6^p0-1I_2}l_3Kx7%Y5Z)`B^TtXu>+rpvPN`e{Fx0@2&RI zDDuXo(o56Q51kO7wr$zGrI)u|3I4xoA4hD=uL~-ds_nhnvR2tnjky=Jx?;uEYK}U$ zqD`t{a~YOfzGk`HY;17rzf*n|8V7|Pt)WNo#vE$ z5MEGTS@tvfXjSH$?NYD9Z`42k{%ME4e);zulgm%cD%^QTx%LOA{QqzBFU;xvx1d9J z*5R=EzZcI)Iq}abj@|GXH%CGFf4NzpIE^}1`q!I?|X+JxP>EL$ugwP8uQ8}C3*S&fc?=*vjv@+l6zj-KQ?04 zzVPzv=123Vo=B7H-nV?aXN>tguFf-i&0>#k<9+on&r?D1hyVVq-MP4^?F8S%me*f{*K4n`p1UnM&T)+=sIiXJc8{Ac zd)D`8XSj}pd4tOPRFq8~>^si$#w;zjai0soDV*(L!(koHS*d$c}I)rd=KO z2J15IL$>P~#Ij5|UKFxP@?me;^67e;R(9@tv}5ua^Y4AvYufgt z3oPkjyXF6~y?~9&!$?n%Y2w;>lNMI)*w?b|<-{#kzYnOo-?q4!QtmC_9sg}r?{|s# z62`!r*EcO*s~uH&$FlB1RJ6GW{{r3{^=`ZVaEH8Gy?8=dc=J4+x1EXeU1B4wzSMuW zHC$N}RL5tRDs%k3aVJWL>+5|L$p|jBhAC!u?%F=E;QRAb|9_)y?vIDZ?HPU^xc~oK zyx*Sd^WvXBGTwP%%~7Rq+s&9cS*D+sUDw~=P-Aqufc5&MmmfttM89^3fA@L6Ecp2h zwV5A{SIv^Rc=Fkun`&qDxyoy=-iZGk6scdht@6}KwJy&yy#cS&ugu&wPrqo}NB!kj zOXuIRD!l5%W_I@Nj6Czp$9`&X$Ovf3Zh&lZqZ+ed;Ek9la*l$*j-poAdu` z=PMQ8Oi--J3=g>dZQGsD*Y8DS7*b^J|Jv6(TZ(;d-QUG|#iff+KAshO;qtnzU+p$; zefu|j`WvmsQOVoPzHQpcCbTK%L=pep|B^*N(^uFyJPi__b<$%-)~|aOw{NWVzgso) z;)Q=U>;K3sQ+~WtzvJtZo%)@BXKmbP@-4detM&`~-rE)Wvy;6K)gRtnZvWunUG|*Y zeY#73eOXbxtc!1ukJ10);nX@>El(4m}~c@NV&^v-!WFdHSMRQ^-2ff;7)~H zYrW~ewN~A13ozxFzUAND;_~keyH7h89-pW$@<|XW|8Xd`Ojz$UXK0w+S$#r7YWQgZP`L}6BqXnt+T zE(JFCwfTkD8q*Zw7gqJ$(6}!9^<=EfrF|jo-8L;MO38*xHeTs`+5PY8KY{ySEcQy@ z{_)~P^5$JVC5^$k$tQGoe{@}yD>~U^YUZCe*MB9y3ChjBx$R<4{O#XMk1TTT`C^y# zopG1;1c#?`yZ-aU{A2NzUy$p$vF`nu@Ao&^L^2;;veEOPePrCdbMIzUx{HYKQ3(7M z^nJ=~(VC+X@!&BJ(=YKBsk^2howC*P_LL+43uP>d-uZV&sB39&n()9)Xx`+VMy^+s zSN=&Co$&ed>(|e>=zNrAslOYxUxRC6!1(~v$0?h&?$1hhk}okA2|oWK!T9U_KYq5- z=MBr(oxW_dcJ++HJI_?-=j`{@Gxc3^+12jz#<#mxbyxX(on&F#{=Mz~uDV&a z_x}FlcmHYyo}u@}wmWU|X6L=m|Gd$lR`Y!<|Dk`|zD$Y@JGs_n$+H>Ev(|?mN!n+X z@26q0U?*p^+uuFPO=S~%!zT8;x;VW-NY-0wWsbnj)en|DtqqQETN(3R@Y1^I*X*?| z&kkQ%Xmu*&q34-Rk?rz@>ntRmYVmb>hU`d5JEPQ>y6+MD-^KA;%XgI8I;`b(ITaK! z=~Y>C(rWLNlO7$>?Jf5n2HlovVYs?5!{Uv~W%fGm$xB#1MI7Q{x>={CBwgtc=CJYl z$FmON+Lh@|h5m_e=5Jae^y_7&y0o=e`kkW15%d0--VM(AX_~yZ%=UiPn(deB{qKkR zx6ON(`gqM#8P|}HAK%wI-ZHxrEB9*WHLoN3YmIaLv+n+z>$1UgVFSm%U)%p5S>9jo zeC-Vj*TIOCqRCRnkEL7hn&R?(%GFPS+Um2XZtiXQ>3?nGTxXt|%B%6}VY;jTZ9Zoz zbo$Y0gU7o|+@$AbKdUHwK1W~q>hAk7^|kLp=Eaow$R`}xnrD&QSMJT^_kK~u=Hy3L zPO7cidG6KD1NW5Q#U{VIt1Q1GPX71rZ90li|9joo<{fF|)v)EQN6@sXx4!RPd8Mc0 z`{(B@s98?nQ>n+})88hZ`550HUCz+6{_Ah?FIj!^dZu=TxiPUZ8L~|?W-;Wgyzr=^ zdDary(;_Q*xpw~vT=)FRJd?N4f(+I{yO=M@s>Cwf?0&IK@Bb5-Qj_rIb8V*8yjrKX zRBuuj_c@QYUX!TbYim38d_$7w3P!D4FF*ZErO@Xa%6048uZWcFK9=#jKs+P<`R}S- z+isYheD>=3tN7QN%VHPbOtakZD(3R~=XXT6%ujB0y-|1M+lTcY-~V&nt!w%AbYGF| z?_8Cn=4w}A{oYMC-^UdEda zx&Paq7Op?GsgONTIi@k`wtmI`f9x^u-tAUc#`^Nsj(0(i?t1^(`sVXP?F%tQCaZ;S z?s&ZG+rb^HB?9l&^wpZ*e17%Ke3^?-d@+;J58|?FTUr^Y1akKKYYCnY=m-=e=J72r=-!AiQaK_cu)6#Xb-ENsJ z0i8qcaEZ@Twan}G$s7l?R?I$g&(}sCu{Q+wPk0}HYPSC2- zcvE18+;cDc>ouC|LKB*KC+y96y~+KW;j*2NR}{{als^}K(Kmk63Qni4ZeQWT1@(^e z7lhU%i%nb6XU;jPOk>pxckkbu1b^{N^cOs^MgP}T6=nDOsP7^#kAK~`;^di+(QhCB z`&t|Q?$o#Wv;O6*vr}7si`D0<;)+y`(B8y=Rex2N*>?+g>{jj*3k=<#e{4p2PQcBH z6BkUHu)4vs(4p|kZN~+h6yLuuu=!(eaqq8w&7R+q{h9iGE^lM5)@>{Q$oYMF@f?Xh z)~rAJ=guGPKJ_j#^3CU`FZLPi&U?{YJ3qMYY{c7{wOb=L*2gJ+Tfg-Gv9HhnS-ssK z@a}tA-&4bQ?JZ{_S5?&fVOi3$<^ID}SEIceb((ap?p+nCe?48RJ-cLipJGpDQ}bhs z0$aJlC&@9}xrG-AN7c-q^7nD&M3F7v#OoXI*~IA^iM% z!~W^Zt1~Rs{=Hvv=lAkI6E>GA^14h2oF~8bzwD~7Z?&(kUHfCl)`-m8g&C2D-d=e4 zeOrbYqM-w3RWiT1Yq+2`HSaF>1)0Q2|BGY~d%F03TI(%yX8OZLkIiTMNXM_^zdl8% zSpJ<}&~%GSG2g?}g#&ro85^&#ghukM)LlLCZ1^Xxqk+>WW}Q}B7{8md;DWE{rovj! z?)BeKZwk9`c*pk@o^H!l+Fz-;YWHgqXJVGTL-qY0JE?Pmi{Do6xW}>TK)OfGpX)zg zM88#%{<5Q4?#yn589wtpiset;-RidCs-3QPnPNSQ%Y;j|4YD5P0effdyD@QMm zJF%_#%n7Hm?;=m;spRfAKiGC4CpPIamqW>spxx^^EoLb@dW*EFPFZlFhBfO`_$~#v zUqL|)Yx92_$!7SO=k9+YT2;gHNj;vdcBi{r)CV-~MW zSDiTWC0zXMmng}L9_!x=d{fxL9x?Iki}?>fU0ApLr-bLnx;>HGPJU~Z+j@?@;dRGC zciUyhUafO>_uV!<_uSJxbL3xFGOa!55OrL4sddgK=AX(g|M@QZ-&m!fp6ER7`-Ic~ z8}9t|PxvpXCBLAEe=XDMYhm4O^^)_Yc-UuO{kT1;Hty%QeIL5*0_#q0)Ysgfw&wb} z=h3}iSHH5~yR-gJ%(Kf=gzA1gl>gvw|G)gtyLS78+u!!tTfO0Np7`U;%%$_L_`W^Y z>XNfY%_pNz>2J;4d%RsXM?ZPVEjHQsXqLjR!rymllI{dKS-yL3yj_s-Zc)Lf+I_pO zS;WQ2&;EY!OWlXq3+oj>-s=8$C@SUh-Sj)Af3EGDKWDM8K<}LC4^I`(?zzEM_xefD z<-N6^-lzV2(=hpYT4~;n?SFU6#>tq39=ylAu)e|d=N>E64u;~B-xH3B-_TvSIClO+ z+3Z=_4S#Frtd7-CzRI|~ws)=R!BzieZ29VJq;1Q?!%{xTU@i>-w z;M!{0=%lWnzhsxiY@Vg`_s+w9gIfW2Qrk|X{i@pkE#2DvYePumgpkGw3oNgOTmqP_k6we6|^iO^sl=4_w$OU z?@SIl)Xu;E_`dszx4(bl@mZ%(@U%{IbI1bG)*s1-s~2~MtvTIwv+vbPaV@1TmovXt zAD=h3+=L_V$k~~%US*!X=6QPBTKjX8-?`=Sh#kM3_^Dk=d|~TmUyD53eap@rvrW~S z-CdDBTaAa)N#eFxZ}bnNYx~dhSv@~zcCGeA-{(yBw%R(LXO+?C=FL93^V@qS`!us@ zJJZ81hW%~7Xm1{$fgWGGC%IV_tArkJe}4Grg6wFubg|-^b$%MYEs2k+9{L%{Uwi&a zulUN_t=3yTN>{!-dG+0ip#GIg6N1)0a#DU7#3H+CX36!8#U+KuMQ7PF{uG`d|N86f z;Iqkv>rP&Ow1SyolXJ@Y+6(J=S9Epewi@31$iC?A+2!gDp>9qatsmTYk}0~$qnO3( z?#bo4Tdy4PxVHCruVd-*Oeg8gB<0O6J+CCp?bn%>o%l^mJf8`AJ|JYP6J|p>OZLy^J_xnj! z&(2!Ut9c%=e@fN9s}ajLE>=E%YoYV%%Qt@T|GgENY&-*UQtSe75s&?d~D;E&6u&Q-S>MWJ=?agJppoMrx zV~=)3tkFJG;J(6X%C?fA*P^bXi)^lCn;xI`bV3O|WyYG@E9c_C?DDD!Aw$;DvlfjdD$}D%!iun3iqr0%JxOc*?kSiW-*S9e? zgcR~NFqa?rr+(t^f0lRuMJxZO%Vf59IaDWS+dqza<Zq&iA#0V9<+;H=l|5Ti-nL zsq)Na+x&YUpI9INwe-s8wa2V_Wo0eT$y(Wj^)WGUe*Z4-*78m)ZQfC<`<3Oh$~Mf@ z7q}C&E4iK9tnR%xv*MYR-(r{4=FQ59ZE8MoYo?af>mRTE-*0^(w(Z-QqUUbcrx>np z$-X;d^Ru7dk0j>ZWnKMhZES`?)4Dmi2}jJzEH!?YGcJ1@e9r9f#bw*yzL^t||Cul1 z{COd>$L}Y9oze5JEcN!(hc}ErZ?e2*{H*1I{^r*gD>=|R2(>p9-#LF%+?1K=VEAbE zJb}}9f2OFMSR>dtwRnn7;Q6~(pIk0TGF&ugo~Dc7{*EiEE246HnjPY|aRlV3JzQ41 zlJo4X$<1Xudlds#dfu5g=WdrYUs316+{l%CE$&%_GfS>BP7>PF6n8)9Tdqu!{NvM? z_C0!^H2YTiEfy=+H7uTY9o<(O9JOXzaetO!)B3Qt_ETnP>V#zuh1%b8@^Sc+f=bBKb4-}nZF@-_4#bOGn@IBRLQK_ceo?t z)Z)jnaf=o(<@RmzGkZ1vxt;o|LjBE30+0VaoSW05-I1Lh+oC^j@walx;*2}?oRi;F zpWd(Amp-p-8Fe4h6#uBi5oLfVxz)42EDPchtOcda9Lpi#u-bV{HU^Kt!(LQ2@btg64@g9?n}yS-$|>Yr=2{0S?j>X!W_|K z3_IT$Crz9t^5(R1s5#sJvsJd~(s|}*OWn5W^-ob;mD;)L)iPri?QM6HCQVA3wAhzr z%hmg{4US1!S1@u{E!wWC8hkhYZjDdVhN%yQ=7;5MK6NAVdPB;t=+{E=JJtT?gl+oz zo6nE^Tz~WS!3(!d?(I&@o?ckAy#L?kSnGT7+|RAA zrtbW{`|aM7y3bR%wKq8m+}3$_QsG2lQ~Zze7q8xZe!sx%)W`Rt+TR$TZ9in`yhSCi z=6CZa)?g+@)JXbi^=9?@U4gE~_bQLpZ?qGd_ado1^iZM7cekc88A}!++iivX4J-Cm zSZ}(vb?LdRChz`2u!I2fvPvDfX%{)U!Msdc3P7B)B|Y;^ES`_%mA*SUl7uGfKVmcrAVfnOvzp-N%13SpU@j}x|_qd zR5`8scR9kcsn68TiCG=)c=~cipuuJB7gCAO9vi36{A}D44f&rd*fV#8)R?oT zORqjX>sZQ;CpSLb`FURY{zv}TIiDW|pvIEo6X}iRE1LzEb#R0%>B^n8`^*Wuolh6V z6p1)%6e%a>O#fAQ&diYU`82-^|0e%ux*H!J{dZ!m(I(mA$K7AW+-J>TwUy6}i9a*_ z^DJklo!j>AKF6R`sl&+1n6i4EWz_UKFH_FEtA=my6!CsvT60%F&vX3)hYPH}`}9(^b8Wl#Q=H`q8_vQ7Cd82yXkC~MZV+D+$#9w*moZ~9n% z#3Fm^`O|riD(X1Tf0wQB42ZvfUdWH-di%;hkyoucze*a$8&Bh`vi|nH>#FmDr&?udr<2pNT8@)TLLhoe`4|cC!3spYegjeMb53EN}kM%wbq}Pj_K=#4RJAl^o$w zufn!%l$ox!c=g7n85&WaY8fINC;tCbzv#QKu)tk|;0r>Q;UD`?u}*rYP{e+Mbpp4F zt-||yhD+58ethoPcO~%u55s@ChNpFRo}QCi(DFHqmbGqpJ8^Ue7xlCq1owF)oncnXZp@L|^ z!ybQyy^c3Nxl->R30qJlKdU|=Y3xGw4j;4*1es$ zw!htrEns?yqt@+xk0$rDB-%%3`JZ@k`rmt&yLArJWR<2rikkdx_YJqy_6JN;C#szP zJMY4zDRW-E&Hlgoc{Yb(obkQ<1HW!EFi1;#x;Tbh7wFtms>uEO{hJ5Imd9u8XW0?+ zu5jla=RWr*kGs|+uiQDisUhL}#A0jxbM^i!xI~b=vCYcYgW)T=TlFttd_M_jHYY%4q3t{@HipCmsA#MA@f* z-Nc!kIZ4Vjr|4tYrjs>F@9YfS?aM2+teM6udE7DR=X%{z5&k#cCJS|DE(z!03!bcG z-k4RolJS^Q@U^RKrTed_iEZqip*nMyxwG(_4ky#uN20y?(iWGU{Ay8pT`!fl&(7%9 zoj-Lh3vQe$ofX`t;nJAH5~Lfbw@G}X&o1Um)(-EorMtK%oC?dHFk$=mfF)YXJeRG# zblkPax#gb3r>nMG_UWGsTKqXOe$tP*uhg%(zMT3)S1soLt_e@qe!lwq{Eae)d5Sz7 z#WoG!vg=LksOE zzMG;ed1Gb;_}&WeNjj;r?^fZixKGJxH52c(*eENnc=rGG#mUxPrFEXiWS_tAb`xcv zCA7KQ{a1dL(EQ|^T7qv+9w~Au-Z*j79^rKtYD#B%UtK)?=vKSx_Bm=jFP|PhveI_# zVOh4&9Alx!L9Hg$v8%Z5x_T^Vxa0hl%XO8#_``t0oi`P4+p6qs&v~!-a-q!pcdL~B z1g}lmsPi;QB;>VfgTmGOxk|NPmV4#&`kUU)ea(44e!GjA*{rv}uX|^1i-NPi;6kuUpUU*QV#?3zg9mdj6EXIc{Ccmvb&}nN(8PyTfJDk0&AN4^LeBuJPyl zeW^*ALOfhO2aa|6M>S>3w?B<(RXA(7aOabhOOgY83_R$iam3&l%Zg87uYQIl*Pgv`f6+YKWi!}iK4kta zSXIflpsddC$HU|GM;<>`|8sl)-}gluW}ix}QdstLjs1BJr}Y0`S8KCTY7WK=cTL)U%gFscIjpTR$ueEIZY?h7B1)1 zS9`AYB+2J#>xpCcUO(K|zx|zwnA?uWGU-#Ymv z%wJ{Ox2`u0OO#$+{jdHguRDL6D~(o%Fn*2RBmw;I5uP3uUj_#5A7D8{^Z@^ zXO{jn{kTzY(DbdbYlDldug&qX)3@K;biV8A>HAvO!ZVD2=U+S)%s#ugUi7z&#mAW{ zC!R7g9bD+Tt6j|XNW1CzkQ!T$`eWB#O)&l$TaxgROSt~!JZCmtv*{qI=q6J1wzo2hi; zsid0lL#NEzCU5SQE*>oW8Md&h4c8olTp|pA;VxPviN+c)r^ieGWx- zcgfDvDe?xjYi+x8&lm-LTwVFaf6w0Oj<(C5)b{V=2|9b_TCuP~CP$FZ*EW%*yB@9Z zth<$yAinxZoaoC%LT|4-#7eE~Omo?yw&#yfKx{)$a@UQrnNOEz*)!gnUNmW!%oJ~i z*Aac0U*p0^u{-0I3Y5#R^NxVN^_^k4b-nz` zIY!`!*2RN|rzAdGs<&qIBA(l3%2!_MZvD@pWW~AGW^MZF^TK&1VJ60Bn;+e_`RZs9 zAO3ao-$&a5y`Rcntopkwd0x?$nX-AePOsKiEi22Z_g}I9znGb2E>HW4oH)5xH^0W* zJ-qDf`NB;T({1^M{(a+o-(d0eevSFh>au;);|<)=mjmRVs?#g&&{OGNs#;~qUfwv% zWE0bzS4xY`964r(I165Pcy-C^q|U}GLdi!9mv!eZvhF(16MkK0#`=fRmur|-AIUv5 zch{FGX%3%$IN6>)al+AQ)0WPhTl-hXm+dW^65X9OxYc6DaoD14{B zrORG-VkayT?)&Xbez!haPs?BS_oRq;<8S$j*Yuapi{E(m?&qcFzm{h1UUTB-fxmyP z|9pJ@zwOUU;eW5~|MS-W{~h13V&#i>y7!JQ-QD-OPsD( z^gA&vTbt=n((W!V)^XZ{xer@`1!YZ&MmZD zaAJGn_xo4PkBMJ(-90I5k*1_>cj=x;-IGE8i)XHhX_c|sCZQx9GST;bm}8gOMBnwv z>mJF?D4yN0OglO2ZFJD}dUd-?bIyt`*As7z;lJj}mZx%diTACATZfAJHC`yTIj^!WIGD|hMVM}+1^9+GKo z^-C0DmE73AF6ryxp2xkVZZo6y6m;wi^pBR~;=WzKdGhs5^Md#OmEN(}a$}bBeY@z> zO&6!mf1YA&c{}0nz4G*Pq+p&oyu7BOgCU zj^yN9RnqG(NWMQJekKsT9+*ApSddqi3`^UIW4pF*shReBk!?+8{1hd_gR8F!9?U6z zxA9_ff9awvYP)9r?hY&T^giSzdb?+a!E>>RJ~x$AijOWay=~^a`h?r=AIECm^=&L= znw;mQ+@R8tBXE=Prs5{Yv!6n8JGB^=-CL`+RKI9f`!d;Etrn?1w}L{#)(G3x@y8#& zy)n|_W{K1662YvG<GtSeo2e|8cFt@%Y2@%G+ekqj_!b+It`SF!TAnF4LoSyKfYq zjxTzruR2W^KE*Tj_xqF29Yiy4fB1K}|HihpI``7Ud8TMQF?`=`kbh+7LT{coTV3z; zT#pUt+0Aq2=020Y@-DuOpT-BBm_z+U(!Ac{M)G**8D7&1drA&(`;C z-~HoGMIX-m=5g)HlBJbVhYEho3|Z)1x~gy;<2&x}BAaKv=rg=JQLXN!txV3N@b}6m zukL?z+~UYn|M2I0k=@aCi?=S9F?Z2P&5n(YimsWRBk!>Eo9`;7+1v`{9xwSORD0}d zKVh4)oBh&KIpNs4RnfgN4ps{|FN7TNY|8m{Fz&w2Ow%{~3@*!AE}z%yeZ5E7=fC0? z#%cC9>gN0^DXf*3;rL(h{C4r9r{_<9{1NzXQgQ5M@j36Rl=W2ewZcl&D_4U?DEAfp zpKGt4+{fNfd;j+z^|zAVoVT|rpA4%j|Gc4g*&i9U&%19u_W66n&nr#S+MNINjOml7 z?A&$SD|dEO?%%I(CzUF`h->P*p1YLG-uTyLwK`)>anQEEH}eYa z*MGcIxb|}Hj^*>K*pFfCL#$SLt)^f*GkqE#XZ+p6RzeJ=xA$e}&(wG=5O61Y)Bi>L zj{9Ane*bO7lQ(nI&IAS6el*pJUmrfb_Er4+@aHpL@m#)BU1gbm;0phVgL{{L^EiK? z*DoXf-eUFJOZ2$6I+}(uUgYx>XAtkW6RLRb+WsBx>;2uXxj*^C*`9ae#=;<(f-pap zq~l3NWgGgqzIFdstNW<@x;^vOEvkZei&(=9TIr+>J1?KDZ+Sg~FJejs}Pr@Gg*^AF^o||({rrbw< z>$ZnE5%X^x`)9M;^<2D0^6p*V&i?Dj^C;PZ+Q;Xp+^q6iZGr7fb-P5#IX-IYQ{IV8 zIP;!M!CGB<#_OKs>?F@uA5S#IG45pg#c`1FMPOb2Nso=!Crj<_%rUxPtCCfA>+0ez;}|NZ%+`OnWcR(`u}6Y)Qo!QHOlZ1|Gg_9biera!-%_DiVY zSgJNx@*H8W3~!Od1IG%kM_4a9z>%Dje8hCs*V}JSZLN~``#k?gZhvWzSh23@#*)%l z!(@SDNtzs)kA>%CS4m3!dikx;xnfh9Le%!!dHk`KN8-vY{OIklqz2Gnf>H?(D2Ni;d;nyJxw%EjQaHsd5x}z~-mc=J${?0CX z&{@23?fse2=TAoXL@U2~)2Ehx{p#|2oX!szwdX~Cy?;vanVaRj-;>PFe}DYq;PWfl zb?bG19oX`J&;CcYTW`p3DO${1I{EO88JqI6E&g}beSZ9IJ^C8$dweH%UFr#m|50PT zMC7^up|#e$U6Z{_CuQ0(rOq#vX()`z{5_l7ciqXAuR0bV?OoOxeJZtgsZ#;FL+LI@ zqeWt`-7eqm5O7vF+qux%$mIH*C%5j*zPD@n(z&M20Y}W5m=7>|tls{9dz9@GDeI^H z0)MrIg5JM>n0CQ$YaWx-ws$>IpHhRfl@%rh@EA#bJbqfmBg%4r%MJD8_U#pKyidp5 zUK9Q+I)A$HalY;EjZd$aTiyO=Q^Y;N7hjV${+}1vfBAQD>wH=Nxhrn{_ipNX@b4jW z-T%w-ikZ&Wcsypl{#_P2f91Z#wZ1t@2M*2TUMMqN^wabWhlE3etIH>>^q+6&f9l}H z)92Rh)meDoDSGYf&RL&LV)Ty%h2Pz5mzgVe-~R25cQVY^^Ev)@yfC@!vQB7D`xD7& zhL^8>S@5f>w<;?mT4(m-v+)|+{?_d|@;zQ>_T$*EK6?)p%=$i0|MugORS$NYfBW^# zeYdyw6wn$a`IDFAX)3maO#Cl&*ZO8p%9OviVpg5@jy7BQ#FTZF(Y_V$k0M%w8Z{yP)*ssynY$F1=bBU~+x- z;_d=B^J_1RLsFK5WF zZ~H%~|I7L8k9$CyP(S_KBl;&?=ylke>pfqWZoHqh=KYm={W`xQw{w!WwVzbyU@-Eri9pO=R}|X6uY4;>E-QT_KqUTwhv>BbuXv3Xd8W>zIsCbm)=bi#kLyqUzdHq z`$xIsn(Z&`H@}(ux*_QKc6nE9pf>%}De}#P&Hu+y2uXOs_AuH7v9*OpsPd?L0 z6hHRI^Lh95nne9)|DSW{_nYi?nKN~N=o*R7PybeGzgVwwZS9TqlCQm!_g{^;zvKVB zsyOxK(+U!V{onnT)thd;BzOIy*=0Wsp0D3#wyRcNqI}L$?!Llxood>r&2}}5f1P!! zrutiym(=oKzbdWI-OF2dJhFbS?GKTJGm}zH0st zulq%t95udgFA^7y? zeDpfARQQqB`o(gqzq@B_Uf()D_;Km7V&|MA**dA}YR8`FCEpEs^IMN4pu~OlHT~s& zW)T)QO)h%8&d-)#{OZ@QlA`(V_D}6vx_A4rAIGYWZ7gz{Vxh88Ie&+&>vQSyIvJkJ zDhHEzmKB;aX`C_lEV(jMrVPE4H(TZG%R|dISs$CodTj2ox%#dN%$nZHt`pCGF|8}z z6Il3kVpWf4RPox0H;v*SZ{IY_C;ZjdsN+$}Np|(_t9J;#xv?!fdX@9>OW|AJ?2F0& zD}1NA%k!MO!~Z*cGAI37vgXu?{kKt{y>gMebrdQk8>^c7Tul1d~wi4m9A9xApX3TnV z;bynUoM}#vj%4tezh{|quFW~taOZ>r`({6oEvrh;=qZVkz1?_GQ+wX_o>bZLUD9XY z%rpAhXrj1WwDwNHrh|u0s$DtQopWUC+mcD~RyS{4D?9=LtHipb^)>UsR&BYi%?OT#(x#YRRxcUqqqLK{$5C??3SbXoWit)6FvWI(}@n>?NR<_qv2bp7~7A_wzle? z6nC*-Jd5dtXw{#cD$=Vx`-E@qP@8%F<8I{xMrVJ|tof(@HC>J^{?o*|5^j#4U(WYz z)!WatUh>U!q1S6Ij@gL*UVE%c`LDU{{$2m>%Ip95@iG6zPlsD(9V&bNe^9uvNd12cwE`8#2a^`yDJH7VwBKgIW zdsXLc7rM#gF8wl3?;>NW*z_OYXP)TX>{~LS)6Yz|>%^KLbJ}0cJaKaW!y~58`D`2~ zT)MSK;O3XC(%h+$T(8fZOfz&im&^9KtaMfF`Yra-%dBo!>8x`_OMmy|I8AvYJDetW z%=n*gG|RZrYq6@OXw>xdpvPv)mtx|xg3faJ$1KylX2?cTv2>@VA_A-mp`&?&HHy;zHr8Sea+4t$FBd_ zT5-1j^ZsM)|1M@e>Q3riuwLx5xG*C47XK}mTe(;G)SoGr+NNx?lIK);3%cH>oPWoi zz05&^4>CmWEU>yWXRl|0+NI6!RG$6JJ*R%JQOC{b|254gPi9>0kJik{lSxXpF%?-Z zr=Qll=!MngGJWlhYv%7tHaT)lZ9(TFsp^TL%E`(51=Rhz&Y5L=<@MI_+)>$d;#k(s zb93@yti_rOqkkx^*89FozI1(#xO8C6=Tnz?6j7_=%GiJUJI(%0*&}^Dj)8%J!PC{x JWt~$(699|W=r{lX literal 0 HcmV?d00001 diff --git a/packages/vinefeeder/src/vinefeeder/images/vinefeeder2.png b/packages/vinefeeder/src/vinefeeder/images/vinefeeder2.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5c0ec4f26c6f22168b22ce36f086df171aa83e GIT binary patch literal 578187 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

Whr=75+f^@Kv4Ue}WMoEW=0T9suhY9feDeN( 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

UuzWfHn$(YvT4!2cxNDMd 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≷I z%x!xLcpS46)-nF9XK@p8K2o}zzbx+1*X~mvuNvPysULhZZ9>_;e{=0hxt9CS4|4sw z$eVxPOWzI`7R}wqo=;g_G^0+i!|La(>Ah{2@zv_NdF!zYV(yZ<{jw3^PTIxVx8<#nCK#|<3P8qdq- zZ;LDcJ>NP)Iy$49?e*l@{bw@FSkuy2&du@Nut`bK^+4awrX@=~#c!qCZ(-uP{W#C< zZs@K+_kLZ`_e$IE{FwcE^WVG2ZvD!y&V6$+tZvrMb@N@*=Ksx}ptd9>D{becI28d` z!IqAqq;+Pgg0prcos*PYc%7;GUckTKu3rx>u33C?_S20QzF#uD;N4dkugstObT)(d zW8uj^*zbS6yW(n=Mb#5k8QV`nQESD%z1`1Oe!p6Nk;btrUv&2USC&7z{?DcTjBRTb@F)OyEmEwt~Yj<%fH+4JMK!BDQKwAP2_mR5B+~f zvR~g^E_eLbEiE;*Wd??(t(~2oGJF29U3p#VQs3@7kC?bP zLt2l&Pf}GHUpt??+uE?hm;G(7UA|W~KmY%6{r~GFq-P(v@x$WSu}w`M7rxFva`*ea z{R@BOmj28AT9Kn__y1=5#SF8x=bx3mImFDrPx8d}(CT+H)%RX6+g<0{>fD}xfd9Yw zf0n>0D~;#a7E7JC|1A<0KF!e1u2VXHr)lsXN$JDu&;l!{o|9z@t<$)lKEM* zHo@9Xe?4o?^*_5yG6m=VdNM!iTmHVMWuTIR;ec>|EpPhyIbVJ$rfy38C@I3f_v_n= z-`4kgO?*H6G4_A(GK_tO~epW8S7 z*&XxqQqVag4iLQDXF)AzA!)9sPSsic`@cYn*sb0qDaqXDz11&8_#|7F zXkUEm#Sj>FCitl5beEvDC5!voyqp5nwKaQlKJ5@S+jdXv`<9n=>u#wYow?~z?_{G{ zJD&DfcfIX?#F44BdHYJ9rTs|`OQu+SIu*F5=85Q?n$Ny7=FV#m@Xf4ORqgN+mEFIq|81IMO_xHY*re}`l_D;8dt43) zt-WS7!z#l>s^f7~YZK4y&V*yL&+M??9{#z^;Hk9l1I0JDx62z%w5SZq?>@+5^Y2FT zj?d?;FJ@fn(Jksg+2>|%Rrm+hOhO!DXXD!&<*4|qO&6Zule`Ap>zt#BRF zt(UI3y))f=OXATT$6GmTS({}OzpP#(mORneyY^hJ#QEs7bJxyqkw|26bvnK*BKYJ! z_MY^rkGGk{E}lIR|F~M@iL~juZ9?-z)r&ga_I)gU)c7gJyx8u*vD^1P>Tw7@{Qm#` z{X@b1_F1*xx7UBR{PV*9k4V;6tFkwDI<4RB+g{?=_`T-&@6d}6UQC?+;s4)v`3bqD zSFO_Dt+(rx|8sHvkvDhvYA)Zt*O)%9N=ChJZ`h{NXJ1xMn)A>9-9q?>i@p*7k>J&+M@8!jPG-1 z=k4SLjR!0BWrG^}%O_QQuIjn3u;b&i+gHE2yT?~bW)?l=T3%gj%EMq${EMaTul=9* zaYyHBbZz{9z;TV$#?p;xban=*keUE=d)q%1wG#IK{QtT8_?}NlDiZpB=eJwU*Z2FMY!&{LpZv3Y z=clJ%O;GA`=~e~_CG`^mEDnYef*mX^FOtfhS@6B7<@^0@Ps82aeF}ZMDmQvHO>pAi zoEDkcIkRXgn?!!LbpEEvpWCcw=2r)=vza8jTXXT%cMGn*RMP#Y>=MV&tQBy(b^WDp zLFb}h1bM046}g+oHS_**jXRD0V;nPc3(*+4f^$J1cIj&aKN^ zrEr5w%k23fodEHpArjAxBzoOs%kNdXf15is_}E`fVHX94_4|HlUAuOz=#%)Irn2=r zX4Y=|eCDjZar>Gw&$({mn{FmA{=avD-S%VU2mS<`?OgTt*wOVZiMu0@n7U1pYk6YT za3!Gf#I;#&dmAnO_j`es`?F|lP3+Ijyz@ryOZMz-H$ShBTmSH0_4~tT&g7IO) zYw5l%4bQ`3y^YuO)uP_e~kRy?YjO=f_Ni ztp#wm-cezAc3yqkstG=ulV=$zPkzUPqLd;lZIlm47b2|1UQ|{NTM$7jAn!|8n@n4GA?h^^YgwYlY(f97+!j z$6na07Vy;{DNwG`k`pN01N49?3bBB-P=k~2XCfon1=qzDo zIPLBIY`?mhYii^z(-7@F?iNQ{{`eMl z1*|r|kh}hQ-OJx1tyY=~YtMI2Im4v$c9J%;$K^c_IyLt5Pn{}w#{9LfYIE1(AQO$1 z%@tR4+j3^#ShIFsm$~$o+@H&zGQF|0XuY5%DzSPQcQo(GATNVYYZVeZJr>-|S#7()c!hrsnuDA zpP>s&g4IHAUf*<`|Ha0K94-zrvaYl4t*V}tznw+NRc+%RrD|S{YaF|Ce>`|1KRa*6 zyNW3uC%Sf@TN<^u?czqmEw^)zY&>w*{C<;0*MudUi=uj#+-_BH;9%5Do#!mnqSs*M zAS5`AA&T*$5l8M-b6I_}ThC@#TIOpwGxp5gUAEwI-oqy+KU)<4Qdwcvb#mrig(Wxk zrnCFao8i7)`JmC+$(F%vg6m%O3o=i6^gx4o=l#_$eO~=v`{zr|_48q&(tStczRRA` zziyx2`+i|ZkWGS*sjxs|W#pnbb(7gMfAw~7q@OP{w3U5$s8yu6*idQVeAnmam%k{J zOkT{iyUhLCtOcF6$9_H9)*iH6)4kxamw7=BU)|bI_ii|yOl~~*FZwBM*(G>wH`D7_r`6I6=N`*Y zHN54?oBdW|^;?P6x{Xt(9q`gVl%>5}?Wu$&OOTRB%59&GpH{DN2-s5@U-NETZT`ZL zn^IeHkN13?KYK&0-jTdR)4u!uIru9iC|>jCCD#*4)+-l9oL-}RNa4hu54R*TAGFQp zYd#<#*UIrEdXXTrd%R`W)~TW1SC71z)HUr@``!IT^J7IP-^=yBdr%^N|0~C>Tu!Bb z%qHcBCZ`@-{M}~bbLM7CRt3g2w>K&~t&MY+xw=Vc^Tyu3NS61K%FhL_(wwf1Y~PtNiVkn=zH-`%6(oYJBvPHvw%Z)IFjeI?kuJ6FKl zz))dA{`Tjq$~OGEANH)rR82bO|Eh5D`?c)Z)qk~r&fKo5{VCqDuY=`NdhoZ-6aRbr zxvnT3I{H&Y+goU^ShMh->U&vv9;KlLxM zD)#Y?>^_QF0}l$d+Otja|2gj-B2FCt@Y%iL$2$C+B(BlwwBNac>mlU8PoemT5SDtlpJ$|=TX{b?q_UEL>;`>et+bEer3T z+kRg}|JFC@J7zZmA16GP@_lg8Ok7NC6(RCmve1EjRA^>hs%-xToJ*cd2)E#pTygPcJlB z8lU*HX4kg&5nn$Z4tb}bBruJkkjb;k+M#n(qGs@hwH}E=f-y^Hze*`QerQM7%}cNO zqfbfc{Z#w>{y^hvlbe2CSF%i(9Lc!$IwCsSdDb??BTO@nJ7hS2@)KC95Owmp#>0<0 z-TgFF`OW|59P(Ry(_wF%`|i1q&b$mxm^R~1DT9j8n>&`>pVOyJR1um!P0Y~Hcx||4 zwzdBBSr6A)+J>}g-HPL>c1q)bg^&$a88 zow{~zuArD$(3?AgkH1KAGB!;)u(Me6k;IEFl3UrnzS+F;%TYgRKR(gi>Xfrvy^ixg zGp+4krfZ#j=l8el-#K4iS?{=||5$Oswry|JI5j*4o=0y=Jp-5;L?of;`=A|FQ|CzzTe5^(%V)0Th&`!oN_BgT$%oVivRy8 z;Jf_%8AlEs<#vw!d}^XNyWRJ!AKN8C%T&tm*6Q=!uMl3gEZxw^sw-;kGu!gTmVdv> z*oy~W-u&Z&yIq&YxowYXo?PaSpSreriOn)#qId9g73E9AD-KNzX7xc zCjQSMWsA~JKOD-o{jRy46|?SN-qnhna-Z{O8a00Zt@(ClW#c-_>R&2+_b22A8=G%u zR`1(ucExsm+P;{)nC|nZS9eaRkM8akuhPCVGkW*0I@y@)pWolt{fkd5e3*2;xbE5W zI>yDx$@ku`bNk2JoSkcfyxer1+M}{`uEIM^7hO$WotDVeW15m5I%%@_mv8!e`#wyF z&Y9tAe7)`KH*?GU_mj6R&`R(MRlj|UO(1n^$DwJiS|3DHV&nhT{k*+yX;$>#zPk9F zXx6sPFJC`@x^ZdFrrO^7#~3zrEh&4mRfuo#&74OUzOom7I-geh( zwlr(f=qkxuvFG&pFV{L(|5{Ug>#Oj*w@YK5N`H!dt=cv9dH-wg&WJ0;HnrP+@w)9i zf3JGOiGPm;RRy*%wbfmoo0=t+&}T zUS+YT`^7UDKRz?l_(hk*=HlN0!n{3w{Y*_C|9n3Gu+hAhS>v{Mz|rgejUS#*-~YBh zU;oSLw-0k>*7F+Wv$=OJdD+vs^k2{iJ1@6Q+0UK_3p89#7pm?vRDQ{netzkVo!U-o zZ{BwAzK|#zm^Iz~n(EFS_ovRk`!9XxdfOek)q5oc)_n?}I)CXywGC4y1U-ump7l85 zUK;PQ9n-GoXM21-lqghkMn>{MM(M_aombc&A7fNqvvytHt6x=n`!u@DYic*&l=(Hw zyStltezobJ+Z?aHTHX73J{*L#X?!SI*SZCMM@Bg6P?$`aKnj|5H4{t8}KbW}x z*OSoC&!2QA|M>h%7zkFuWJH>lW)IyaOiaQ#tgkIDIkVb=UfOahrf-CBCD%nz^b z4|QP_-ZdjE>|w*-Ydeb?OLqG0Ez~pm#5>{VEb${Xt5o+jT~`QjX_50XKYXhwG=VLw z_2bPq$=S~TzJ4s$`2XPi!o=6>choKLJ<4M;_1D{)$bAeRccadK>3E2Q}AS_43~EOzOc+p)(OrR?N82 z)?2i^jpyoXmdvOy+dCSdw&@4;e<>@n*=o6Ox-8$k@zLd}pYkIF1nVBO*UPl$?~y#w zJvaXMsr!#!Oq{;4BvWwhwOOZrOXuwpmH%;%KlfE#eE!GJi6uEa|Lv>u6H z+O+D|zGct%r5i}_7%FryI!sXTXkuBpRpr*Mu&Qm})-IWh1jNzt8{L8@qq& z{P{VNpQ5I{nY!lir1GOvGomN0Y*zPZWO89*>G(b4V8XkXGvCeIw|e&~Bjs=Xdz3z{ zShX*$%Hre0+0#X*&fNdU^@#o=sh<3QkJSGkpYMB5t^WDj%YXj;|15tizp-36B4);O z{<`<&6`#E8&#}w@msl=W#j-x=;fIUKGImux-Qwpy#@GG-|8_=X^X-H^xhAs%@Atmx zU)y21zdC5!UNbkT|GoRC>E7JtwI_#d`{Vad*B&_i2@b{qVyA3mLxl!w)0)r|!F_eI?6V@-dVrK6+ zazW$G-Tm!htJ|Ba`IH1Wc(rCae-=#r6)JI>_2c$1*8|6HWxapC%Yemb+NQ+|WIbKP zB|E#e<*FW9?!vG%urXofIsuMfzux{y;IJ0E^mE;9AM;55&rUOQes>KhUbQ3gYixFXPU*Di zm*4RIWp0kWd-?kOyxW`Zq)y{-FTa!d`1;ZK>Z-h=V?yHfb9c`CSibx#A_Wz!VUJvU zEimes_wJXHb2Zf?S>NQCetVQ@-klYB(f3d3t^+eg#gBBySbdKa(P5NIQrNi5bzf5c z;$2*cQ?I9Xf4zN+XZGxu@l_GczTVM`*V=7lm1{b9kdaT;=ERE|9-V77(s*hmvrqjB z(g`_m$|14)a@V#>t{*=EDZ984xnRzW@rN58)Kzedu@gMaPT zyY+3MzjxU2pVkq3zR^JJj;luA#Gs(HVJoj@UHty=ZqT|1CpBAkFfN)Z{*!a!PrvkM zXRhWLPCwf+S&W5IbmfXLTam84?B5=SuKM!ro1|pXDHn5*Bf)VFH|Nfud&47o+gaY; znQLCCnX|pUI6GsxS8n20N1w$DXUyZ;QK-Bij-NI9YwFQcU3w;Jlip4`bH?1z^>g6G z=SdHJ{7ytg-Sdc^D|l`Bo`4Nojy+sg_@hzngQ(*I=ZoG;8cwQD)R6DCx_s*A^Vy4L ze_208<#O-C$v<0Xo^*2mf1Bg(jK#K5+G)!Uv%ZX4d+fxE8*9r>CawO>UT}W*J8!%H z7wdodtbD**_XWU zKAt-9XWNn-y|#3F@w=Nn*ZA+>{4*!TILB>rUcm30w~cRp6xV0|&i~EW%<9&~nO~QF zIIrg-e)L^dZf@IKCNt$}w|9y3MJqmA84|W4w0h#D#X)P8mTtESp6z9~+I{uY#Z#8u z%z0E9rxZ15QR|fJ6FxCHnK+bBuG?MnE^EJRoYuUVb7v+O7G4zaZ%t=me6aW<=alnD zy~QW5kx%{h>Hn!mxyjDYmbKqkyP>tq?a99DORs11dNsax-n??=%)o^|+|rLmZCg8M z+iLFk_Zn;bE?m4;u;kF}ANjr8c*A8D{>(r7&-7o1mcUn)`CH7ESUxigIaVoKyZ`F{ zXFGZ;f1i2z~{d460 zPswj@?KuuiJuUw8ZT#=4+nkoIb*jzmwEuU0|NJTC@AcwU_Qd{5Uc5u}Ypid5PHNME z=a-IhGw|^6sU|P(+4qm}o4f^!!{&{Lj!f+~KYHG}(>n9dy}pm)KVE)w$v)|EIcwR> zt5&IzmK8rvta`g%T)h728r6T-r1i^#>LFDFsD?ORH6f!_;qUZ)8)HA{e|9T>C;INi z+Ct;~O($}B6Ynh+mi{Jn`PR1ShTE5)O6QA|-sbCNRC1>#+H!Uk^WWPH(U!AcuiU(i z@91qw)oq8*FghzY_w@Fve4MJct<6yIz15^6>3Y+4yQU;XNi@w{k#ptlx7#QBCTtd+ zYFwB5_lLKiL}bCF5Mh>mNvTU6AN;P2zL|Nn;?%A1g}1L;&OhiR?c~rqg=zoQB{y>} zJLj^6PuQX4lEH+9%BdzvVj| zoAGmb|JC(Y!DTso`ZnKvKKNrd$>MN8RpcCZCKA&w(RTPye~L{%_aTt4G3?2dz|_Kb6mG{chP`$;vxJ zzrNjOzs*YD?tjjwpPm1oRo{yH{lndU9>KvitgjhrbFwhM$Xil)v|5(e7`@*WInIcyrjl;K_@P(Qmup z&59k)6CN&F(Dm=-nI^$&m%{#RtKC%E=drzB;MjMUPfay$v!|#$KfEgL;rl1?YLi`V z>j>?7QhY2et-Jft+B&n-Vb=3Cw@khNY;m={`MEH!!nxPoeukw_6lW@#vTx=7{rv|I z9(=K@CWe#IDf@y}Sf@l?+2#-PVk6Gx7lwtD&+Tmg^Z8NrhMbG3XGFRuUV2{IxBqJ5 z^|NQ53VomYald*7dH>E@y2s_j<1O!Nya7 zWkINhSP++ELyDG&)+@Qyvf=t^oBnFa%QH0|zp<^bt-XEC&nV@<#%DJs=DxYL@W#em zhLQ&Vh85pL(tIvm3v0?{ky$+}*gDiS*j+jM{4C#RIcwAFGUMZ>u6?rID0tf~<9UpS z3?tWPzw(w0oFw@D{6#soXI^(*{CFh2EAN`Ut+m&Vl8;R1|6Pq| zGBB_>;a~SE-J)WJjq&LdFU;osSoi+nM0fiaf0(sTpKZ7MwDC}OpN#D>|36pGKd8K$ z(tJB&Th;H-)uDB7CeMF%Vd915ovWw+JRAQzb=qrh^QS-Wez?&-|G`3cxuwgOFF$K4 z?`s#oyK3u~U2E^jOP@`zdia-?A{{HpEa)@y5HEDeSX!u`sZ(EKKabdzi;~9-+WKj zy?p!nv3vcSiuYLcsdEEs6x?k@LzuSJlXA}=^ z*MbYLxz4I_CPv~XO}{k-?chjxveEO@%gW%E$<@KPBNBXd)L;9|tX=0NKI=?sZEl2j z|H((9&y=Q}xHEgJ>p@euyH+yh*Qc4~+}gH#`^}x_q%*bmCT%r4?ODBX_BZbP$L7tR znO>D;m3vslv(drhf>-goJC^VE{gwzirPB8JhS_n~LLSj0@qsp6xBY{cBP zznGo6cMpa+{x01R`Y!$6I?He^*DZf%Eef0X@W(YN-9vAj(@wm&^ZC(6;r_i}^5@@} zzsd66ypT<$y}Kjb6&GIK-*Z{i4nPJLZ*dKB@~ieFCM|3lDc&e7^QtM_1R#z~W47 zx%~432M=eg{dvuN{=>{j&GV|ClJh_1><$tx3x61rIJH%Kd%tSVvcH(*}d{mmVp3dvjlzK8J9B&AgHSDS48+xaWK~-i#q0ij&>Xkc7#!BW`*_nyE`wD-Zy}oPLby)Yaz~Y+M z(U=|DQMR7!R{O1BX$Vf*3sO)b?TH|Tefo9Ti+Dge&X7z+v|-py}QkhmoP?iIQ~Dt(CqAd z<@M>ErKkVxs|yQzb>{3j=RF3qJC7G#^o?5}(BJ%~Df?R3H;LOP=P!P+vutPVpVZsi ze*e&xE@rKr^kwtUo)W`5eKSig#%yRxn8f{D-^f0Gp=gL@;Ul}YwzkDjoYUeb^u5+& z70ncN34i)#Zl$eD#L0X2;!3jR7Oqovk?l3vCeZc#;8mST>CZMynsKtLSxtTUjJb2S z>eznypn0$2b1t8plrzWCOP6GnZBjhc7VQy2|0i6MnJBW)r*K ztucvt;%a{Dgj>ql=QnSh^7!0Rx*_T4#-Bgxy5s+E|KIig=WF{DzvX`$xMY66z4YFC z@f4MbK_BY>Y>v=*L~V)|3_#3kAL!xUI+g* zx8JD$Frn0U_01>z_P-_d;&)vLt0-3AcK^nW9ie^OXTNIO?!SL0r`%J{KLx87WvxB7 z@v*u^*&mmOrM<_v=KtM$|KYE#o!h=``&3c=KUw}^_5Szmw{F=~yvTSM{dfOo>HVjo z^Y_gAUAOpg{^H-stBYSgVy%08|8M-C7yW;8-Q2cs%&oERul><^r*v)FnG3u_2sUYmcpLzdwEVvtKSh=X_w_|J}Og z)AIUh6EEh5XodROe&Mi5iT`{}di|%H=l|%j^U0=Gq%6t4Z^k5EpWVIR=$f>?^iBEx zx(|hRAOG6lxpx1pb=gN|`#+0!zOVm%y}s2rfA7U_aScmVf8RX)^>(_qKfGgI_&dn+ z{ycwI!;{Z{oXvimo4-3J{YykdL{e4OtbdJl%hZ-j%JYB!yEbffj-lQ-Xha(e|g__EZ!>Sb8WL}`I2p=JMMO0h}mD(n|)n8B2I4MMVUoW(hqv4 z#~=D^^KSotk*o8hyjE}6yJe-LhPYJf>pR=>tvDICcx;;_c;J**v%-ZdSwb8Fhul}D zxfx`n9L#tfyG`|SvXJu4Gu|_&{+Kv1@mX4XhFQMK?R$G_pXJKce5m{O=5o#3Y=5I& zf0NIg_bt5s@v%=_{zB$n0im_2TlV&yYKyP@o%+a7e17g!rq!>z-x=Lsb1h7~xbE4k zuPOUF>#NTcHkF>)qCV>&hef>#n+aZ`G?K~u9RK)c#@$1vHKEA$+u;; zKbtdOm|gXu=D4q5Oxl>HE&DY?lX(>gC+u*F5iDUDJW|!o+#6 zud7u&ea1&&$4Yke_d~AZtc7^EIa$TU+(_3=j7|Y8SnXcOIyaiP`~>7+w`2<7Pfo$vNR^` zj7u*nYTE9<|77v~idnyc%DLx6*Y3$Rk(R8VeNjGouDAHP&)xR_>py)^e*gT)-tU{! z-`o9SXUkZ##=zG0?9A?}k)<^H(dBgkftNx#0xymoj zAUk)Ly)>(AkLxD)yuabO_157} zMRQkA*Z*{=`2Lfn`S$JCW}Q6QIa_bf!K3$QJzC%M^%%GG4SA;%p}*yWx3Go_=FhL| z7LWfS_I+NB`E>pGCp$yAro!8M?a8_w{{PO~FUfUmC^VYfdN?XVU%-#0F{$boo49_= zvG36#TA~gc{vU`ddw);z*7cjLJI@r~-X}9ZQev~%3gb?u6YI;@YLzx7CrA3nb0i-$ zRyH|#JRoA;ygdhxexAO_WXqvT94*|px`O%lwa=S3Z_kTmCf2<>73PaR*&@uk_5Qt; ze`a0TrYrZtZNUc5C%@L_9B}*Z?xpiZfx%>L*nyqJmwo)MH3%+Qv%oYY+m?rqukh2p za^tdgOT6)^EDs}DQbUr@bk4KKbSG(YQZjS7;yUXpG)`aY+ zNEBSDo$*%DMODOMVUgmNTMu`xdbr!Mw%GcHSKmz^^Ueus^E;1!W?8&g=;6^?O~EJI zjl9-Ke@>j~p#MH|d3OG?wX>6hXGpH$*xn^9^zYN_@QVl7?Kj9PvTU8TBx>ry2YNTJ z>1~-$61p&x`;6{hq(7HZy&Bxt1oOWhZ@N{7`~A6+`Cz30Op?=yF1__7GytX|xn7XNDdwmS-+ z3~Gb#)Nsq*7Q0z}_VdrD!I#&6l`+3{t-PmR_Sd0r`pMDDug_4Ltt99zBVP9)y4wEs zqS-IJChE;gJML)5-Lo>pGdEF9M^pPrSbty$~BR$sh--GBAXCr_ux`B-^pi&jnW>-Og>RR>kA5({Gk1Snn?9cboXy{m^WSDYtueHs$ZK-+yhN z#^&11IjQHj>xLIjL2DVzjI8eV6U)V{iqCGhqH^b+ z{>N{&Dlh+WuT`@oATHBj1>bC~Xzgo5mGa^-)yLqSStB7VE-Zi!;ZzO>I2(M`ulu zopXqF^vg%Z7xzZqUbE`&wQJ%(e;D7|utC3MnSR%)nGzR8O>7;ES50@~IQZv~jO|uA zlUeEWf2&#P#I9zq`9VZ1vHt+1Gn_8t(buEMGOn zYw4-U{{L9_$t}8>_34)O{bgG(J$Q7~wXMC~vhI%@i%{sMRrgo^-IaO&5l?3J=B@C4GGw&4Z$LX7=o}MCfdqaJ2YDq|-kdkQ2q5f9S)&q<8+lz6`ik3)~@xHt| zBH2KDO5>ZISErv9yCV^u`CIhb!X8)s@pccFfJ9q9A_KRK+-HXYCLHfh|n;D&CrCd!IhZ zG{vPQdi#v?0UwPw>|>v(BXwLd|4q^CWJlXmMw{1c-7|5U&i`xKrz0}%Yebu`|C_Ww zv?Oe+X8Kx=?AP-v8iN;q{2S)ErsLA4zdJMLY|-z2^H=qHTJGj`-)^7yvG_q$v9#>w zoO}8KyPOu3E&P&E;npr0F(r(pF==I-dO+8Ll^>+-L<60b95Y+gtX>`Zc6ytC=FMO6 zdqVUNOZsk;kX^sw{R4@;&0P&vjTsF&imRM;*e?Wdt(9tU5?*rKJN4GuHGfaUOr92+ zqHV{P8R=5C<=LmFr(<@P+0I!#d5y)wgjc8IE84=6XFL^K^TU^EZA9kT2d7hym4^i$ zWCm^XV7s&kil<$(`ToYdXWvB+K~Lu1Z-@Wz#7>{Q#^a-na$-pd z!`fLodgnIO{$_CR<16~IVoA`>o=f7ERd4jPwkj@po_g!_y6oK_XP=*~)KgvhWZunr znbpU;zjY?4oqDlw>Vt>h?auK3dBFc!{r^|)g>lNBt&0VPCUo8WDLJq1mwx5%GmL8&YIRBuBCrm?qsL$+IU&v<&T+G z_wRX5+naN2qmPAZ{cn+8SJW&G#{PW44Qp(ALc&cJpEu1+7$c5pCGFFV5!t;^oV)3#fQRtyRhu zL>r%TNons-^zrM|bDs`WP?4-$^!UPr<2Pm`l&m>*VM6;9-IfmmNe#8^eZgz(VwYS!@ezf5KyD+|8nd~0jD-MLe@)vdpMetI?L_RVQ} zme+UYzu6`IIelBLi%uGoXolUli_Dq(rRuxSoHwud_w)6SwF+My4|_RpycDn{ifbv) z?3-^=-O{9s->mG>|G4*>E$c#s7TY?cwisf3MkZQ1@{d_*AX`I|kGWgq(llsm7bgN5;;ZcxRRDBW}W{>tR< z`Byq6XhG_}cW!fYO;|H^-~7v&EUNi4F7tHA9XXEPAjbaM7tS?*cJJ%9t^U3!MB?#9 zFZ;7$+JaI({{F@9?pXh5l&_wiB5^uB;?fPJ-+}X*eR2;i4 zzWZ5v(RDZXz#QY-=e8|V?ebNeF^A{IwzH2vJk;7cOLDjC%=}Zw^UL2}$;<1W`}*0f zcc-rXxwP^Bnne?J)sip&NLD;IPkbKNa}~|Rf(^55lqaoQXcDu3-=WX?J{v>6XKoA0 z3UwC92n&m1(du}{vAh1PoyRugp5I=xAKzc&?RZz{qVG+c=g1{9ytuy6b>h(*9>tyJ z*SL);I9AKV%C4<{du!|D*xlt(`3>pD3@tPBrfBZPL{# z-LG~DZWEfFy(RRD`s;09Wv|yA(wc3k+;DMY;IZxf?QK0e93R8nqOyPe{yll?{k%<= zU5*(=T5uUzmuyO%QXE;m=_UWIv|f$Asqb#BpZ(+VOsl7x>!+lhJ^6+Aq)|1)nI?;~ z7nQAV?tZUvHH+VimBo=e;L7XI8CM-T8Wb`xGIayA?L1&la;!=hm4d;&>S?X~@N%&&(vf$rGMZRR49S%&?aeu1e z_IQ)m5#i>?VZ=zrMbX*;&IG zJ;hD$aj)#_x3{*haJTy6+WyJyme!1aUau#dE(sR;-CBCiXZzFdvkE6{73|)3smDh` zGGNQOw0$RS?#!~bIxBs5%H~C@%8D;#onAfXzL8?m|GFE+&DR!I=<~d**cMvz9s$D*HWiZTP&8 zYM*OoR}_P)TX>|xVmgO6<#+k2x7#nCHoCjy>6djCfosE72doX7)Wh|X`_;?azoWGO zy z+0(j@ZJzm4L*?IDVTY|+FW!n)#6@f~y8EK3JtF0~`0ax=vA4G_wyfLiH2rJJzLVQx zW}h*SJQ!nooSb!ZDJ~0w-_TCVqw@vb_}*420Cbf2lLPP7(f3JI(dkNUo#v{|{G-`H-S>`Tw6I&Q(Qfe+Y! ztQBi~-+YawvHyP7O{XTlx@V_nWwCDSKm6@uKuK_(&f4hOoqnsIHuJgaNgO(mGkc11 z*QIEQZEt!sUozFcIQ-*>*|+!ikDqwKp{%^Pr?1Dr%IwsO8yd&o@0?xjzps0;x_`lU z+v5_lvWY1vDp5zmJvcdh{ntvR{<@%Z{q>nMXD;QKSsx2uUSyrObZyzR&Chq8t+{+} z|BqWaJO5Vn89Emh1Z>JZvpCB1tL348yt&aQo9>^xvo&@9#J7KQ?A1%d-`x{?V#Hi3 zX!PvImSfW{?fGB3yO%pxaPGAWSz5EsHgJoJ&6u&GJ&wz9_0r5WES}dCmzwNbAD}h& zvF9)A*)LD6+timmlT#`;$NVWQOM)T~9-}*KSCo`Ts&PAq%}Chyws-5i9)_}aw;cC^ z#^@arm1_*-fyjsy>(0K?es3aO;1w}UK6T5!aXzaiJK<>5|L|M>60d& z?8*&}2z-|R@0Q%+yAL>7=j) z5fPI@szV&z_)iBi%<5$`Ha6DrozJSe!_ao}k;%FjUa{?ddva@hjn)27>sa61*x4*= zT`o53O2!nf9fp;y)qVGSxkQ%VubTY%`MC?1FDDcvu-`7{D@@LsH+8C*dES|VQa#w(NcJW#^-3d%$&!T){V$*I%@b9gCINv8KdrFW=bXQpL z#mm|&LsA~aMMS5D`%CBwUw3SI9HlVH)AVf4l~Pme&8zJ*^o;H;d9tZlBES52ceGWU zw)nH8X=w=?=Ff}L-DMwpqUZYjviGvfmb-sAx074rZQ$y!n`)nLGf-xA{CNBK$=e@P z>QeujoZk8SR?YT_+g>DSe=pl#dS5Dc?XmN^*XxdkFWJ_0YMaB-_3NiMHr7r0dgjSI zjmr&P>%@+kDW>J9r{2zNRfHS>AfK7 z`2AP6^lzVc-MIFmhHRep(tsCt>~qho?3(%d`3i-Vm6H~;e^&~7mU(SC#}^yk`e{-9 zZi@seICLYTA`*W6QaPK(ESsM=wYxL#asF4s&1^S4W)~)IPY&NUDfwf?3$@F>_tKXC zT)(8Z$Czn?)U@d)-JiRj?qZVl3@Bb?`T5-&`%lN$tk8aaebuX&OLdE zwcS2qvW)yT8|K(Hnu3oYdcY*Zl1|VmtTOp}g~D zAJgZZ+*0}Mcag~jm&b}OvYN{TlC19Vd9rXsO_XrIoU!IY#+nORW-BY?GR{7F#3X)h zesW#iy>IH@BNFEeF!df56SRA-=g}2GU=t8{jrjpd#YVs%N z-sWHZ_VdQMbNcoBw>|V?HOjO!i#(WK_{)YnczVRV`HxO4-23Lv#^$MQNsn&n6mLG= zAfCqSWMFD}_ICQYOzvkwC zqy4)KrtVEiQ%m?%<*-!g!xD$r7iI~#=H}nuD5-bQK#74R?QF%fnyxi7k#qN_Q^hOcy{Tiw#n>$g=-H? zu9dN`<2gUs$3Hf?re=co^k@tFZ+|7N?cTex{BBD21P?>rM{XhO1Xc(-Y|Ou3#+H zH@4;W%dOx{`Tae4Xst)fsD7UbXq<>ZvujmbMDf*CIDWW9AeO7_;TkSV1Zy4$)= zzg}28_wCKa9XDqd*ab@++g=%XKlNx)+tE34r$VN={40q)sZm_QpnLMHSHbZ%53T zK4koywf(-`+1PT~#H>$ITjsX8bX-+^R(NOU3k~5T7cK}WD<3{{{_Jw@SxR2ji_hxX znI%?kPUyAWePqtrxy8RPubpv7ME|I1zTy#;D21vNTi9BF_bLDX{asMKqvmCiQTLJ9 z@U>O(^9E#3WUd!pdNZ_|9cdpAER`tDBcRaWR7VcPaEjao6zgm_!ht-zH|9mkrihO_l zWQ(1tsV{?!MTNo{AGNM4($b-e*PeOR;#eqLs?PNKPs%Nhg1j><8LY|4aa*2-R5f>O zHHnP%-hS-*)0LW6FSW5~)$gle)7fn{ao*Om-%>B{oD`LzWqR=Lcb?6gWGXmw$QzfCLKA&Le1R;Q}h}*8Li85p1->K+GO_H7g>$hTvPk5@}klzx6Rex^=w|M zUe5|rbly0!Y>mHc+$ZD4B zmVMlbolXoQYr}+>GOgPCH^ao++xyJ<_CwM<-Y=J%c=tFM+r>F{D2TFjl)N|GZF<(n zNNLh%4>9p{$@`TOnl@?c_egnGUixGFa&q@3*V5~CsUOo#(;Zi&WG`$@cMacsF(t2T z+Qo~ubLw7md2M&#ULtl)EIlfFnc8xWDUVJ}Jba}ptL@3cSTo7FFVBDbdSBqK`?;`< zCXdr@8BL!4B)9v}k1eNvY8QQ);=y5LD;lu!(2W&5Yq@*HR`M6>Wcnz(O_LVv_PVxc zZPxs=YWs8JF4m?bExQp`7nhT+eLKpvIBUvUeYxKgUo5@$yzt99#c8kXJkDM{{Wai( z%dL$k@2orQSpM)2QxHc~FN5NOppO=nMbRa}8dabFYGh9rtC+{27?5G3$k}uuZ!Om) z;fvQ2{YoA~a~29!XuWA!h|x{m;y0{0$&7Y;6+cIAuKypWH8rbbtpi7Y)Y@at{Cj8H zRv$ZDUtM1K<3!?u-DiYuMQu1eJv{#Sr^it@JZ5j-UY{Kule1k%x^7`_@|2ru=VB&I zbmmZ;F?X(Vz``1(d#7B)y9~Sboz(v`>v5CN#oiNBN*_9v{%(D{b$k5B9TCxIB)G4) zK4mg@4OF!I#ZkztxNh-Qc}^yiDD5VPiy3AUf);Ic(`>yq>*Y(&Wy_Z@di`k|E7Q^} zj*CetJ5GHlFg@wxC?cM^HnU27>G^ZA)spx3O_#MUQ*P-IJEACbJnG7i9kII_f(AXsZ}E z_ga?)$*2B>T{lNe?jj8+_C=pu)nfi~QkdOg_Gd{cX}xE!-EHyCNKRhtq1n5AkE&Pe z?YS~`d-}6NKdgNo_uy*yJ+Ava=OexQl`3=oD84@bs+H^G-kZBRO>cPROuG@~%{HlT zTUfHu4+F6%z^;9Qycp z@tfP`2kzA}zqxTU-D`c2VDOcHPA$bj3rybc*?ho!{@!!h>(2`O$h6L8jmm6c+rKm- z;=@Y)?HMLDVPQ5VF^|5JVmud1tzt8b1W$gm zd--UwSkvO;eIKsPUVc&QOittaisx@RTdv92?P)GfUmv(uZ$tWfy>D;s=DpB5ULImT;T9VsJuAOH(+tF&tx9RaAo!S4=jwZikvOo4{N9Jjr{Ix%f zZ|R3`%R3Y4bzAQ7PcB8%A|0$-7;dKZSCwA z5AmCKO!6&zBjH?S_xG>SNxhU@!^x{xZ>Z_sAIP=jg9GO=_wu65cQ#fTE|m9XWh5XqbsfefFMDo(7rPOfEU(O-0sObXJeepBbS$*&NyKcDxc#dst z+wT7R&P&5QjaI7Me)DAc55D5;-GvipF1O}7ed>5?>Td0uK{2Vfr(IH5;-W3OOEu(5 zAD1HQ)_Yo4XB|JZC@nKi^037^XK8!yzuu>Bu6;f!qL;PFDL6i;qDb-zgLn7o5bds& zo}y=`JlxC7EOh_+8l9~#-mg~L;?vSpxJE7ce8=`fAEPBYtv-f7dG>PA=btkz^1Gd) zQ=je;F#kQ*ukQa@3IAWRi7H;+sX2d{<&M9TWOHDh<$St%j-~PWH#uKsPy7>iq@Vl! z=i0MVwM$opc81NWekZwk+o>;FO<~>_v$k?fQ3|-gRU@VAczV5oP0ZoRqEDBbwH z?>}(oj|_MBW)rE>E#EF$Er^R(;)vqV6m(kXI(hEywwLk~zI?5GaYDR0S|^ytF=!i$ zU|@~uZ0(p`KiC`}7?=JvY0MIId2}$Mrg^IDvRG!ZUVfeWOGWH&J5GF`AF3?aHP?WBtDg3yJ-_ew^jpe$-HlU!+`SmI z&tFBMrsd1ZYa+YL`VH*vdB^Wh%ZZi`;@YDX7$X%WeR-~5-P2p%A~kyZ+%p)XgjoLi z_?f+UFX|KXF=Cy!)M-(v({jD3p2?BITbSJ1*d$-P_t&`@nAY9U_1H+o+*qRY^0U1= zbv#o`&rO~kZ>HiMlh(I&-+8&qygz^avi4G>W9zCN@9!q_^oH<0jF=*z{Zajw z?Zt&Vo*nw>>bKu?_MfXl|3BNjcsn^{H3QdDk$vwsZ@7?~#7tE)Rt)mY2F<}DNcTvh$@RK&AO+df)6ZVuAg>ELpo-R{i!^$IRKgs0vAwDygP z(qwtk2Kyt8hdyXsj)&P5Rb*voGqki;PBt*V1Es zbKO6tOr5*CPpvRD&C~1Ax@I|t^k)ld?9-xx(r@eMx?At-I_6pt;qkUiYvn;YTEppmZo_NKi$95biphsQX)6@+wJ7T)>9X{pwW_vfzi!W4-5%qc+s~fe{`_t7 zL)Vu{db7&!*H04P|JTUrWr|{D%982dZ3?C=pI4cvbRvlWR`E2K{55Bvb+|$ET{O^vdNz==f zmTm2}?{+?C*}6~B#Z}p5a_#T3$CdLovd)`ZdqQmLlG3?zY~1tDGaOd7RusB-WtHs- zg@mL>ChqU6S~lnZ7j-(ZCpY-!gtGj+Gl5oir%$!jDSWoE4l{o2#$mJm*r`)S;d=Xz z&Z{l|ysnzx&`PJ`^VZL2&b=`B?R!aXL21UrtKsp_{;~Th?hTNcaDUdBveg=Vmm}h8 zD`U4!TGvs}yun3e>G!N&E)gfE{QTb7-N!Dj>YTtBs@WK_!rbJI;ExRk%X=a+lC705 zUAXr1-EIAk_Elkl`d|^Jiv-oq&-d#r)Iy>JfP7+yqNWEg-g7w!APi}fTRYCLyhvVjz5pjGROn1$) zCm()zqsH#T!v0Tt?|*k@`14Z!fBL+-S0|(2PI{~sxH6>j#YFd=&tt!DtbQN&>-X=8 zL7QUM8{68RJX-wx=c{nL^F_5U!*;(y>GV7-u-L{h^^KBN+P1DcPOJB3Os(bK_h#3J zls#JOC!bMfa$Fns^dS5D=dI7#9WR)rC3bS;9lU>qX zf6k=|Yev*$m%qw0rucA3mEN zv~aJN>J97q{eD0H`OlX=h`fC*81>rda_@;d(E(;t1FVYkBehe+k9QxtbGCQ?3G2J- z)_e55{9(Mw^~gt&t%U+V6quGYMEMrHc^7zY-(Nnh3s*g!n?JKO zE?U3cb?x%T@IVDtugq0f=Y{a5_=GuCoQzqr^_1!7A3qvZvR!4YqcU5>WGp`^h+n;vkx1aQ5(w0uccc-Vg$sYG?FDk3kluFJ$zCba{ zaIKWqCti?a7Ok2CYz zoq4#sZ*%Q$zARf)F>&#k^JYDnDn9>t>+^k%n{V#9nrDSrkA3)I!JQzjk4(E)GJEXP zwmg<{z1hpv{Nth}nx71fbV62#%GJGhw)y^M`y|$@4|c#bFSaL z4d>J9G)~q`{*iudXRz4>z5dlZx7{wgmoa<$J^Q);@13Zbe0tubDc$e38tY`3JbwI` zWo-lZbN!}m;?9pv}-TKzq=c%XX8sEJ!Q}K;!s_`=4+bOSnX4^$( zzgf4oUehw|_pxoF+@fdde61C&yc}0weR9V-pIJ+2_m!O`4@0Y}XWM+aQ0o&jJE^X$ zbE4pfCrUwl#lOB-mc75}>+jF2X*%!Agn2yw&nGBO3{r62abs<%TM1LeR4=zPOz-FX z6?^P#eRJbuhU4$*->%@we!oc1=gxa-^; z;kWO7pVwG_=FOcaEyo%Za^aSwCsKTt-`zIP zD*e1OY-N zK40JWr&4`ap@q!$Iq!cj+&{G=ugT%#wb$zlavyP>O`H6$kmax+>p$a?Aub%dti#oVwrlenRe27mtni z7DpcMwaAP7zh>WwBjG`M=X?^5hlqF^y}kY+$Xc1vBd+FSs$9(nMy;z}c8_}nx3_wA z@!iyM35-m4vDmmjHue9B`TEj}bBz~l$=)COHNPw-eeapH6$a0_H=pM{ICY6vltg~wS?k`%uUjI&+Py2b(?Ms593cuV? z_Sk=P_Ii6)0h0?>9W3I<#GGgPm}IP}dzm)xWZJHiQ+rPuOux8zK|EvFE8{u#-%Z&2 zYD8KO2+Mhy2d)y#Gj26$Z{MmbEH$t8o3zcReeQ49-Z6UpXjz5w^p&ZyPq*Hiy(2$m zpW#wT*YC^jJ1-EKt{?AqA?eX8(Qj{LojF(wk4futGBt+%C!{AlQQ2~vm zGiP#6dSmnWv4M$(^UWSrqb_RXN}ZGofAhA?}hEV^Df3bwZ~{@c5&Ua zfAciu+^u8|?95$~qH^zx&B5dLbqs4Cp8xm8$s}Cj-;Db6E{oP|zc=e)ulaJz%KK(~ zG7>ITE9+feCn!Wco|EK%^pDdS>AbPMeYyAFGL$~fj?j=v(+{ovzW?#{hi~8T zyxb}>?Q{O}n3fDnHROdGEY;>))E4KG$|*lhLW1p0#IJ6yKQ}R->A|Y~~qOw@B&KN4ZUpsynxv zdm9V2NOFYykTDK+^m9o{zi{A}&YGgQ8IuIpq!`^llBs^{Zg$_gyhp{RwHFPy-99F- zn)0>@^hQ`jDIn~vD z0#1Qzf4#ZCUs$mwWCPEn73U`XWIcN)N6Y(UcmA#~n-`p0T6*G~vfH$&ONu=A9;#pX zLydRghw^auzgb<6Q~Y+M{+|}jY@wd!d8{x{Y}TP3<7fBTpPrAcoq5LM#JA0s>r1zZ z{;y3+-_Ut0aA{hWZKB(XFz@IjY0XRfjGwn$kDGh&vx;^3m%x=?Ei8&E^Omo;w&3Ok z&+=Kyuge~u)UR!v{JlMCmb?9ziQ5j%c9;KcFi)Ma;?+t01y|mxnHE{d+|TUEmG0kk z=ip7_e9MbxeV?`ezt*oBEykpyf4%b6>i9UmphhKaDu6bj4zwT(Q@~vsDf!lsFONk6>Rg?Ju)Eglve&uJ^%E$uS`A@6aU?)rUXGm)kkUvvSYb1Y*bCeB>yf$s^qvs{Nwg>-t`C^XWsg)MSBKJdXY+cQ+D0Xod z=OJg!&TEq#8o5}a+81pIuvmD}NmbH+*SEd5?>->J{_6OZ1`dX@7vfBEzBN}X>zbLMHvo4>66Sbp(F z->s0$)=9G(KHPV=-#4A#ZXbKR#+Hs_y?jT_CWU-Z7VuD!n-spUwt0QcN2AZ1&p!FS z`cdVVZ(d760{;hIh>D)yxq5oV=da-mH}yZ6iL?^(Bed3*c)?-C4~jg4!5|IEJ^ zVlT_rzPMxGzJE_X-+A*!_v=%?Crk6|xf{YZpA6sshqdnE{D1HN91Y($V_(7M)*EL3 z=IZW=jEZ?;y#Kef&CjFu&%^&;J^%UH>-A4qHeFvI`_%s5we^cb7!Fj+)ktV=kBhfN zZI<$+B$jc%w)XudHF39|*8l%+_EyeNb+3H(yZg-MYx~MVOT)vz?pt;B?yU(KkwS-# ziAhK>Z%Z`bU{2#PJGSrpt?x6_pUpgO{Mh<)MVd{q?LN8tAB~bf$Zp^@OW4fG5;b8$ z%d~qcU-wJ46Lk9bv|A$AuX*w|NQRorE~hGXt4i%crK{w z!&Xxbwueu%UQOGc>RzySTayT5R^sY!xqL5}XVNLmTBr*Tvd|UsVbYgyZ-R{ulH8R{8{pR&i0twf3!=# ze3|LJ{ou=Zk9zBEbG=lAWNfQi?(QyMnAvpos%RUV+l*Op#|&O|xJb>IH7haWgO+zU zH;2m4oUV@>4KJ+}@$d}kS6JFOMf*vycS_jw6DdJYiY(RC(`L+^=Pqou^N!X{pRO9c zW)mK>(mZ9s^~oPzaq7*fZmY3-9=7A-m-ki2_2)%Am^pop;nr1CB*a~Pr%nB0B!2E+ z$HT_SPr}4bq%O-?6Q3AeukP#X`THK9H0z^27mt%GgO8tFa`~E=JL{+30zQHG|G#S1 zZ+qi%^*Y=1?)gjeH{5<~F>S(;#|DNIk52I2rmN_{6?R!$M@OfrWtrOCd1tLkzs@rK zzUJup13xN{2Tj;r@m%BONoK|uKEB@TVow`cOh`^pa5sBgANE+Q`gqF5w&0b=_Rart z?l5Dmz?bO5+d^LM398!1nbm!t-#TWUL`BH_IiEKd%S}s5)pX1#Gxcq6YtwLQ|MhFe z*EfZEw(0*Tzld@?sXh19<}EXvrCL|*((6z!`Lt7s@#D24ll$${YVE!qxXtwXPT}{x zDw8}J=G8sg{p7P7*Et_&*jj)DTUJ)q*4LcR{r@eP&MRUj_WazQW99pPmi{~a{=c-` z|8w@6cI{$vP!ZaDaox`g_imOhj=fR9!x!`P_x-g6r9<6BMLE=;qjIM*)qRi?W;vXynuuePdfU-BM4YCSzqH}lPFl}QT^ zCJJ@3%WTfvT z;Yl5G>T_o;-@118)vKb%j;VPpy#!jl|Kr5lHS5+b%4RxYU}<>Z%o&@ny|Q1vzFoSz z+PI_X)U`{8OkRGm$<5vSf{BgYZ{wu6O}CXcMnClua*w;BP-FTMiZ?|!c4$od zykxrC&ayh53z>QET+J6|z8S@tA3F>mGS^~+V+Cr`F~_N++f z%<~CGZBqhSDleaY^+!kcXp-KJ?Poqs+q>|lb=IWZCKBpr6%A)(%-i7$x{_*Q<*6f1so$Ipi6n|Gc zx5v)AyxMlTzyIyqsa(rvFDorRy?*lYWfPd>Y7&gUehpkQMMcQ!=9{&?PLeV^PA%nr zeq(2~e)TumC5tytUU|~<^&SDK?|1(TFmQ8!R^7h1NJ*@_@b*J%i<;xHTejyfTDYqRUg7lH_bE9nEX?ax#rxm(C+>b1n^Ly#gZTg6&*|q|uD!j#uQ~qbnS92A zPd~bAes;&NIB|aKqj|sIJ-2=T+cnO*bdLVttN$MyY`=f-?svJx`}Q?%+$gy3>(~9s z1rM~o^78KaeD{6w^?S@OW*vL#{ruw=DZ`*Kap&4s(w zPd+s|bM8#R+f%A>HUHdudfW0>7e6_-`{x06d#(f9|9@O<^ZN_`sckR&cE5jGyZ=KX z!@Sy8ocsRv?vD@7xz-h-bL?MpyG6kZj@VdR6BAS6ZdcExK|X#x#V`Lz_U-@kxNC}U z*Q;>dwQFUnAH02YZ}x~bI+rC*0SOseY)yxz<-P`$CG%gnce7QXsU&OW$Bl;nKCZ4m z{N_x_gRigO-tV0gpVgZ_ujbD8x$gqz?h(w$%X}>RzJ~v-uC9rx>E%0jn&dYApYn-Y z{-4DD4-flU<9_e{|EFGg`sry~;$MHP-n((jj*QxM`57sRiT~PuEna{M3X}sTRS2(3 zO5Cs5S5lWR@BLBqj&}SvGaiPWG4o!o%#@lf6&Vw;X^KZv&XSiwrQJ(OfBGoPtt5h#NT#%h;w&0E0xg952;-V85Yt3K~ zmDw&msXlej=Fs3f*LOXB`XXFGs52m5K0Pn5>4}T&?BCmrO{Xrh6I7P-y>$Qn`9n#w zCQdZWj+-R3>84J1w>QI+B1yI7ZGwyB8XY?JXhsJrEZefRZ1L9o#MIK67Y|;K@YNUF z)}^V{X%T*__BhwG>0ZYpTpwTmsF)Iyp!d%EWr$NJL(|WlfeOCK%sxJDp6icv9(~lh zLuB(MlU12gy}Z5eWIh_zJK1je91s?wm%q6vdg<|YQ>mpc8Emn4IZbrCr!e^z_jtJ5 z2nzIay?V`hv!`*H>xrkOMUmEVQ-6ov{F830<-IJv;tvaxrpnHk#=~az`4iS$7MNAs z_hHh{JuFc#f4%u<`yil!YwJ_>8$aGo+r4ed+6ULT=jX1!zoY2xzR4eMiqEV2^3Bmm z^5KDhVR81h-p`k@Xs@mm6Ek|3J|p>`w$#KRBkSpkGka#SIIdW)|MT;kX$L0XukV?= z`@0gjGyF(?|F6{7clI@Jzj*B);{jv;y7@JF;n(h6+m~DOL3#dyolB2?tu6M}KC8Pn z=l;&w+xI`7Tk~|ief%V!V(kU#r^D`jy2k!vrTe|y+U;BOrR9JASpTX0|I6x$7c@~Dqnj(`FOle^!{m}ocix1yPb>k;{A7d zd3#MvOg7aX*OROGvHa)v|G(x>KAYlo>vY=YH#f^C@c+AXyyK|wweM9bho0$1-`ta` z4Z8iV{%3mqp(jToJfpXsdmeQ=J2Urj^8QbfR!kzclTKP~`|@q$((V1*_k3jp=R$7# zs%1;|R@j{TZT~}%?@rl`S|y>St9Q4rdnfm9-**XryMMC#{@=}yHD5aOcK;pM;Ns7v zJHv~!7v|slIq!S%{lEOX&K*rMl#-H;jEdsfvu)bn=+{4=Rykh&DqZ!zt&NROes8gJ z&VIpp`6qW(y)F)1>fwkA9-eLM3M+HEs$;XKMPU}hy``?t7wH~7n!3hyZHCFId3&op zbeC6ry?XubA|;D${(?;pA0|pkzs~G3ovF6ecgY5^tv0WVpGv>Z+x%tA-Qaavbx(6b zKbk))+UBL1nzLkWZ_oVf(|ms{Qxdc%ojG^L$kOoThKI-Q+>v=%GUwVgF%#dz6WX*_ zE}a|_&=#YxboSSPnU{K_KeAmfcU*kR`-bNFDGz(^m!93v^*g-fMp0S$#r3~_ftn_2 zlOvzLxOjVJbX;m(p``4=2QN67r?0zkqfQ_G`YuJr8e5O%!o zut;&K%6#vMXQf{3I$*%lB9gK>Gi_OWMC?50!RR5~TqlrTm^tgJXs^#QLB`g%*9E5iVt=;h_Rh@7uEL*Jy`EBNV6c64;I5C+I_azL z{Lm0mSLxj0ka6jbrkB#vXRDr8y_N~4;6uo2$Umufn``cWZy|3fs{+~1VTprAD=l_A*j1h5BkB*AZ z)6HI8|C`V5-+8<4b>el~`ucl|zJ0x{qpy4E!i6K}Y^%AuWWIi_dGdJvv(xc^Y?k}& z*>h0$j>VR3TR-=e?`!|LGg2?k;`qD0zcaJ4maW@2FaF=u_~q4~#g;8s+gbHgh@D?n zaiYhD+~ay?rC$vU?Ots*H?{PPt!@5V`QVl6GBx!RX~rgIrkA(pvftkJ-i4#Lz5bQp zv$XUIRfkrM>8FbxJr&>i{vZ3zD_4Ev|MRh}i{;C8*O`}a{oUTy-+n#DMm72v#X6Eo2b7!i}K6&ZN9k1|m@w2+QF}n)3>AYlHuyA8%`QGo$E{g-# z#q2sT)muCwGBWY=w6!u;MIy2N7w%j-)^7hz^WO{pI{lL0TcVy9uYJp@_+xp0-6f^F zI=Z?=|ITEeIeWHgiiwHY#Y?yR{(pPxvN$l#wsKF(ourKt`#)vxcP&3J#$dEsdyZXc zQ|Cv)mJ2Um-aOOj?B3zF*yhV*`)0Y$4>!#B$8EFEYFu9TLE@v!p|7#k$JO5L`5k9) zb@#bFWm+F@2z@afk};U&SRP0Y+L-?-zGoGe^>yG)?_XhvS%!*9yvQA=jee5u*S zwqCIND5wOwe0g$XWyI@$Yrp;}+8glk{UhE(fBwka|NG5;$G+Qp)9r7Uzhiswu8B-`+|kwtj}CqL^M~nVo0U@FUDs0wcUruR?bqIGm%c6Y zub1w_kKA@)%~7}Zg#Iah)??mYkh6O8q`1VwLP5@qb9KUpyiPS{J0E#$IBWK-3npiy z0{BA=HD51S+ZN#U@|d^J#@_1v+~NCHPAdual)tm$-`3}x=Ou*a?U?y@+R2p28U7QE zd6uQ8WxmWgxL{s(xZ8;omWdhK!or_bCNYo?zGd^KU5Ebs(U~=E z>B^PDno4KR_AY#Fxa7>{Jv$gKB@`B}S|Gx_?NaB^ZA{R?1wz_t)5_O)ENcZr!b$4>IdE{`Z?Zi^<{gg5}HQe4A_bEy~-G z`SHqk`Q+Q`_RczDkJoMAGgaR1r^W2*-!Ja(V{S;V|Ixgur9HytAiLd)t)LZxN7sU-_SXXW3V-&&9^lw-4|(3AFzFzW@J4`3)Nk{GTt& zv-^JgKU2fIv(XU|GoJhZdtINRI``S5pT>V4wbx5F?ECk&k^AxIV&j_E^8flC9$d}C z%g1uB`1-usKbQ3DyF64*9k&1Kq41II!O`dQH+C?W?|Zs$(vjJtzxLwY~JiS<(+{0=+k8s`Z<=}X+x_7)@qM2E@B05IUpm8Mp3kd( z=4toy<$1y0qc2{(d2(Q(@;<8^2fO?uKVBGKt!6mp*8XF&{lCKwtlY8v8#l+pm2-UD~|j-}YeLjazm+INj=^lqr~hZg1VLET=QlPk(MJ z{$BU$6?d0;xL*7kkE4F5mAK=>-i}pf-rx1|J>Pd0&6y^Yofagv?X$+eg_=UW7j9ik z(rdF?_x(Dc%$^TPqp?*?Rq4hc75sP%wxyXXUvLuc0^l!ri{GG?3t-WNi8p5vc7t4 z?WrbZS@Wca~(!3=bH_G~U2j0KnQyp!6GpDOY&o!%Z*3+ee z(|j)V`fmEL}f5Fy-JCw}eG6oIBQ zS#3XeR(`&f~ zGL7eZtd@=m+$kJtke{fu-2a2 zwZD<)sqN2xJ=z+4JTgM#jOAqEWFOz2 z=;v`2-!j84Wisf+TBO&;-`S_lq5tQ_%YaL~2abMDuY7t`{J@>G6^l0;Z@72lhXivt zcgk$%_V)$3JD(hFbpE!@Nj<(&b4%RX!uNmqCwizcN=V5(;I997pUKmlfjL~?*rH&o z((a2HQ`F`DmnkevtH@|bug}QeyS4cGJqPKn=braU$gf?Sd+m9+|6HECW@_`#PgRLy z{F3wT>AUKFMgw!})8h93pW9vHJ@DmI>;QU@y!m86pL{G#{9Pq!vo8JJr7>diL3e~Z6xL5!uy>u~ms zx>wIlJHKqj!g|vUPd7(SHmg?Q5_l(LWN&`$`sMAV+P-Jc%C++AY~uC^S}C%6W>5BP zQS<9*x~JsozDliWje4lKqC;SkZ$RZ+FUf7?_w05Q{uJNRlc%3=ebupRmr7HGjbC&& z_X!ze;mbZe{!VTSo~j7)SXoQG%*aoxESz}l8J}5cp5pwo28LFLe!SqA{8;%&N%Nho zSu8*K2*bi0?3@nP1?t=aM?x8Buqu=wX4YN>0Gk;!Ju z6~rMR6_nACmS-NiVd~j5Nm9E;*qo0LzXNTtsxfT~kXY3W9ub;y& z)_v5X=F7PQRues@+^yzs@XVVzcV^u5{HqVP-R_T=FaP`5b*Jq$tHfsdw58Ag=lJ4h zaeCZ#J8|*Ldsmc#>WzrFxJ`EXFYiWOO0&F^sCAs7=Kse0h}&mbAHJIEEykE~|Df~s zFF$w>|GA^%ZyUI?>73iydh?{Zzz>gmKh#ve_TSTcZ*6Ttp5~8Nn)Zf)=w6-^5vO%U|IWPT;ho2xJa65(w30*vTT8d_bmQV+<`+*4HW~Z$#U^Fu@yRkP zI!+ceu2+$|q_pBkNRrd1^)g;=$Fs|9KYVHR-CVf3KH{wi+XCjzSFZX_KFxpm3e(!R zyd1v8Jqwi#515AD7m0{|qtdZw>)t7i2PRCIKH>Dit=Wfp`1%Y?ERI~bpb#AVc*!Mi z9v(iCf4sa#78VCCJWz0EKFq_%V{Bk>;Kd1nojJ!GcWqo8AL;FNc5Qa{8dv)%8!Yk@ zEL=mnY$jevU&8YdT%pSkSWikanR zhO2MbU-K}o7m>_wsF+vzcFNYTr_TR*Q+=_t_slD<^R}NuZe}mOs9`&sJNn9*v*)JV zeU_4%+R7NbS4FOW^Um$t)pBTxWm|X!y*;`sG zqc^I|^Z0e{y48I1tQsDRZ5waae<-W_INi>#*xN#IwMf~UTg(o2`32v;hM&GBZ~DBe z!p5=K`}C}LmBx>sXzPdW;XUtm4xA(lKuPlT+t<%!`}as|tT6lg_kP{QrB9ZicLCCz zkNj?})|QE}5}B6O{$*dIT+gHVv45sDy-&R<*82W&r$uy?Idjv@m6EIbzN_ub>6`d) z;-POwf@kls9eUcyVaZngEPHeQY=!l?W(UH4a!k8-Y=xD5c4qe4T)s1%0@9A#S}K3H z{&Y=Cf5y?aWb@|9yLK(fHVmE7ecsQt<%7L!+xDAQR!=ndXj%Auo&DjCPU)Q)KVs+q z;r_VX;+yT^;92v-!^3CHoVl@P-ppBvRas(77A)L2@#RU+CCh}pkIbAet3J2u!nJFy zQ`j!u5pulDbzSPF$;+Knn{f~h=V!R?sqd}3Wv___IWO9n z{5)^kWlg1zY9+Q_$;sTCF9%CJ`)2Ospf^3eq@?BS?Cl9_0^c5&zyEc?ojW0~cIgBi zn|Nu-u^FA}t;e1=YWw*1EPgGdSg`XzV{e76)b>uDU2=2Ujs3}MUZ3H%wi3?RvT4hdr?0lUPMcQ5 zmwmLl^6#Flic6ool&_f{|Kr1PpG77%|KIR?YsHIPymTus*4WN0=;GgF?(H}CC5tn> zeJjhu8xuYKzd6_Gd2cItA`{M}ZjQWv&Hhr%iz}ycChpw1z5h0!Y~t^8u_oKMOkA_t z__>z73upAsm}$cL`%lz-*tY&&EY+&1y~my?fG|E^M<<7F(I ztZW*~qPN{(-s!Zp=c62cWX(Mz!&#T5jaB*HZr<-TzbPdR_G5g&QTYQzxxs*NeA`FTC43=f7D}UEm77?Y};+ z-MO?k{@0D=7nED=)onliNKV~8FE{`dR4i65Sgra0P<~;f-;VRsfBv4$u|mm4zJ`VI zVcZ2j6`?QR@|Nvg%VoQkD(Mv&&TKB!> zZ|+Go-dJ%areWH%rrovr`E4!A6^u7NZP$6}W|6~k+33*er;ncN-dG->Hl*Qn@Ookyi!ytr}Z&YPNr^-B+a`Ld-xj3c7_ zdp`G*H~uz%qhwM$(=)Dl$@BQSo{?o$@6)B3v!p(MDdF6;Tk2w|gp`!h?6d04x>+-_+*^|-+vv$x3>FWV06JfZcI!|mW>%{$ZnN7)PR2#Sv5U;2D! z*sLQWb=w#G)a&>Vp>lV}`-}HxE~t+dKACdFMAR*#=JA6sCm)|VD|W?UiAlw`_J_B> zT1+g+$(`giRsB`PYt>10S0_fZ{){pE@H@sVrcjkP&x-e-W#<1c68(Go z&qaAo?>mw~wEnWpk*)E{+?UQjPE0 z-gQx$c<8&6h={z;QuhCQz1G-P|0!7&E%NzXB%jj5mYW>bZO=cseRFL%Yx+FiVZWF8 z!*gMK3hU*&-7>SXl9F;Rsa+S{zR>9Q&OLiP?B=ryDo>5tcEyY9a(8j^bf^55@|=$O zTf5?0_r}fC^8`MeH6s!eCX3Bp-N|W;i`qpJdbGz%v5nI zUS$^gOr6iDF(x>>dHvVhTB*TG1|DjUU6iDLCdqLeoVq&vMAC-Z=V9yOcCon0DHcBo z3!gD-u9{NunKOP-YhT>k!#Q)V>nRT1-q{8xCU$TiJ2w5q^TjSD>hl-96z+j?zD`Afb|+E1kCeH4B&bARuSsK zbUSQf#golXKN_#u*l4oo!1Gq?IwzL9($!};PM*8#oAWl`foc6dtHZBWHRkPjy*KcL zd61Nj-nq+{ZgovGk1*@p_;kYg+rJmRj8X`{!@gYWaMe}6YtB*;`k!3WVp{LFJ8~R! zxBIs`=l)LVrckLw*jfOePbW_6+Z~_kEgm^zesZd6YVS|k-QPa_i~qB<>y2Mezfr+k zquRgVN!gm`((%gade8E2Z=9VHYa8=CcNv3;`#g`x*fpmP&g_4^cc0kLJr^G*XBIZ< z*T3Yp`S_!J$Nz)di@%(!zMw3)?d^@D+hli3$m}=;8dpi3+Q2Yv`m~BS(edj~99Pl` zW!yP+!pSuu0jnE&-`tNntIw5vyti)OTG7(4U;liv|Gj2uTIthEtpC2%*Vg$isbNJ0 zt>#in7Gina92JxA#yA#f-esAxx-tCdkvh)1d!`pm%6B;s{UC2C4SC^OJy$Z`?o3{xAAdJt4EOvoX7QNzhA&vrRvLvRYZ) z?sQw+XT4M0v)kcsA&nqtudV(;X!8L}f4UDE_(6#4}^@qwt#>jiQelx;~KLp8ub# z`~M8?$-%*od-{6?yiFFn^Jd3bbaGwHXnA|P+~Szm&(8bra`h*kwY;X4n|)*J!BqR4 zOU(vT^V8DPGBdK09^6t0z8vh4IN|gX0i$k%O)f5S%G1*li{`9b7xwM#{i8cKx2{zZ zdzNm{WApaySq^7rB^{k5C!dv^i{EkPU+wKqx6;?=%6L{~Zr zMeFqD99jsMU$5D(Z2wl;%&jb6sq%J?D1d)vM+qCB73sFiwbD z{>bwW?}8m0-yg^odzn`7Kx_X0&;O5kS;TVl=P%7kne) zPS@YrKG!~e^sk+^?wuS%8{4{%;r~DT>t0%lIwsI`XtwOE`inQ?YBt^5@omq+kaaO! zmo}eBn|hY@(W14BoH}E#f4LkIU7)AxRs1nODM={v-+Ycwo0b0GsSB&pxq2K?}a*KL-j*hPG#M4h@yZA1xQnfK_4iRel^F=SW z+SAPOl=9Kfb*$3ocYM(0V4u5wlfKRMJePl!x$Vc#FRpsJBI{{KNl$v`(jAXpb6);) zRXaQ~GS;+H2oYmeEBPtgl!%3mK^rIUJE>-2-7%xJa=%rjF96WcsoE?vIt zXTmir%_2v1+niHr#WB)5j!o5`zUIa>Wwt5V!CzNdPM!X@Tv)AB zv}nsIhv;Z`(R=si6y$M!`MUr2>wrtV4#~mAq1)nZe|BxHsQGvl1L+&cBfr(^4*ZXZ;;p0Rq$?9}yZ zmzq^@e1+G`>uU>f7a}#IS zzK_>SZx!j4upeDtqIZ3fzRmXa7Vdj~KJTBeAGh!4v9KJ?W9xS=?Oa>Cx9@G#hTr~T z|1RIX?5ZQBtC7fgcFWqzXFXiU+Si|5db%v0<;IprfjVK~d|%FgR$TLD^V3)9kpX)J z*@T*B&MYjk?O&Jv;$@zql#UWefrwjLmDdgjyqM{y!U5s(d)jug#wB)d zyExJ2k^m2H+QpWH6pMBfu2(^`(k{8!BwxJBes4}`FLS%PUg?ZSqUY9pta`gXdfgti z=!JEy=?kjoeZE~}x4Wx&R>`sZN^fpF@7iC;rKY+zxA5Km{m1W|@>QIF-q6H?!J*b! zIlAh%*ERoZS1<40D(|y(>c)wV@pE&IsWnXrmV9x0TW#;W`!*Swxy;4UlRjR&6#e~6 z?(M*-Z*$B}pA3&7ugdFJH#cqVU-pct@%fXF)33ex9<_0U!TCprm>76@d%xt| zth!sv;k@>9rSdU%RS#YL&;0fOw}IM*Pjz7&siEEnHTb3E2OXH+&#Tj zQLS5|SJo$gWaGi*kt9H&oYgBUOyJalQf581(^@r2Nogcz#4&PH= z`Jk5h9_RW)o)tF@PP=_{Vkn7K7wVny{)9Lu_o28s(a0y;W6#a~Y;1ZB-T8r(Rg_0u=m+c&n? z^M7=?67t(1X4@Pu)=LX>5>}hDXjoQ+3V2P4J*7A8k@JtO@2d9-emb8wdHvaW$%X&t zEV{(&pdz$zce?Q2y|V?w{+~RwN0FyxN)Hd;=U1KKk-qE2IwCIJS;ckMxRulY=HHvk zUj!EJ4Eb{{g74G$RnhBYa-_A{m|EH#Cd5zN^WnO%Kl~KHq5Zs>N}hj%CsuYkLQ+ty$*; zr8sxG)K$)T^GW1T1Z$Cp;>zqb&o4~8ZBg^YtWVDN$i&6$mNicpWZ&v4l&Tb7ib~|R zcJ|^?snm=-xn`2G*R_sG<_@PG)r6ezj$C&3^-0NcKaL59s-`_RHn5tbJYSS2=Jdqq z))+SRUjGAh7Nm^7rzVhO)KOd~+G$X$s-2PW(R@jYu zZ?BvTH{hxNBPRB2&H3Bg-t%m|dgs!if6eXJUVJ^<{OEnAukaOfleTNGU%dlOF^A;- zKYrde`PTKDyZBZxTey? z6<>Ec#PA;bIDOt`JNfDdiL;__U8^~7t_)7DY|lS0*}Z)GtJnFh|9X!m+5GDC-@G+n znju;F@SpScf0M6=MZR_oFXullS25$Qb=lQ37{mO%4bQ5JrN4LIzqHWeq4@oR{YCF< zh3|9DU)26OxAaYbw{PY-+oc|U(1$l z^_&@TVKLkHtQGngoxJnfwye9)6t+r+pYu@H^oelK+;?{F*(Y3IW#4fsUNAYhF4p=* zM!vFK|H4eat!(?Hd?V_1+5av!U-2fybHctoI<>hICLNmfIQ;RS=XihQm{J-sO zhLd*6#>M@IrsQzwc2C%3+%T_r>I!qu<39w;{(C8&l#Vnx>(J5ktJQ?3WTD{22X|%~ z^Th1*F_L_^y#AS^$=VIBQI@a zlU+T7Wv2D}o&6OyHUBKX9k{*b{Nu%o7k+JH zW3Tx5Go5ioe#V38_FuEVd~Mg(Hr>AE;|G7+L$=@V%11pv+tT|YzV%jONy>>|HDA_M z-?(x$`07{l>i=$w1MNO_`d{9^*C6e`d{u#f={QeUn`=!HWxHfaaj5NKTErh zFVAnRe&0CjW*F)qRzQTdmDR1v+qdN&U38a!YF_tv^Pgk+HPhVXYo~1A`&QA)>X!5R z?j0xCjvjsfsLc0Lj7&)ZPmK0~dqp3!U*7RMzSrZuwU_xx$64J=?^Qj1EX>2-Z}CpM zCjXu?i@N`uXYY3RTb;Yjz24C-;c7vipv#W^seNl6&I&rd>Er5K`?qd?TlFLS()R^6 zCgK~WiwDP8lpl0mp!sZy8q4i%-!I?0_w3cjB%PSrXJ_|6dbGF1U{A~%liPwX3w6#+ z+ugG|Z-(ysi#Of0dhUOHbKk(;``G!et;sdqHXF^iix~5K&VINhVh&r5QRu~K?F~Zn z>YpmbpA2jhN}cn(>Gaaq)ywamTF?7BKJmDF!!q|DC*0*yt!$6Kc*5EecKloJ-aY?* z?Wp{36D0MbYD$OP)<2F?Vt)@T-|@Ke#gEhHu2r7?w`cu|7@6$8=iN``C%v2JH;I$k z*IU`(!imC%Zz{`jZg)*QJ@I_1BKQ6O_ktzbmMmO2Z}0E2+1rJdId!^l@Wx)hu{Yb8 z->yVjd2(jjb8&&BX|lJI=Il>VSeo#>%+o~c&!uH`g5emK(S(=46wAi_(RA%Z!a?ZN74-2*dSLt3q zH?8`Q)$wytxz>Uv=2pLtsEN9l{Aao|n|Ei-wEh29?|&dX|DW%oiyGhUzf6{~C}}ZX zKR2l^ukTkITiM&2&u=YzEFJ%!D|qtc#&2$IY!Z9QTG#%)eNkD^?(6IQM_*1pE-5YP zmLc`_t*neyk$R^~({(@D=MUbxuTRd-?hlXqWq4e!Mnch~&-R1C-`izHAOA>Bn?8L- zen!&sceXiiZ?{dEG`;?hO!>Xy_^aP5KK_)yczu6!EqmVP6V^v{SLCrQQ#)SyCOZE4 z#QC-I4BO@Rb~m^875u!!nwGxoWSX(cq|%&MuhP8Vhb>WzJtZvN30`EynDg%K(+?MS z|GfFVt|2>I-`LE`$7-t5{PUMDTsUyf_V*b4!h3EhJdOs7vito!5Y{U7T;+*%158cNciqpA#&1OISyZ^_;u64C9ThlE+-+H;}>#yyi^Nzaa z+~3*F{X8yy@p1Gf+w10auWi0uXqK_7xuI&+;Cbxji;U+lE-s#9QP{M6Ue&Ccdu!R` zHikIcyhO#mA2R0rsju5GYQ^$E-kqK zK#lgd1tvO+LId9}vQXeT{NU45?FEj}(W_T3QjuXXWH(fF`04g2W=)yJqmy?ZeSex` zd0IrgH1_$P-mlYJU;m!1|G!|W?cAqpgagWs##sGoNRn(>wtI%`whf&JCJ3Efcz&uCW6p1N{5-$pn5Wn_rB3z7Z|?1yYZG~Ho~+{3C>6o$ zC)0QyZIp15TE^AF_9XW2>)x$L=W=Q7_Hf)0m65*ZaJc`z=~~rOW8ZuhYD}rh>iPN8 zaFe#N!eySAeI9wKGe582@728x2&7fp*-8+Gqrl<40mvYTKQy=Xqepz(w)Xy`k z5>iauotw`s)02HEBxtP5K0#)#ZFJY_AtC=%I{r7;`>OZn7iTuz+gDfh z`&Vq~rkOnPzfZ**+n8)ndvtcSdi=xK_m%sXY8jgvo;&d&;q0vqVm8082tO%iv;Vv9 zyHKy&MPV8{>XWML+ZhPi=H6ZYDmE&cW{lDM;FFt8y|I_&Wr`qrG zb?@Uh8Q9BL`L6x_J?y~w`WJ!Q-rtd}&=c$a82$hG{-WA)=x&i6e)o2MT)O|4e9foJ z`yI2Rtv5#WEH2-BG(0^?r>5u5nZLJhy{fBTz2k0(>W-3yo7S>TpME#lcJ8XXVqxfc z>8iu^(z-zrv+c)WJi-3%6)s$`9%J%)bx_;LQbHU|Sz1bh{si^JwaOgDaqNeA* zIoGX%KJwPC*FC;yqJOSq)d@D$tBwaIOqw?@@6%43!-p4t`|Fa(t)*yEWO-8ixW96* zO!>W1_K6*R3pNPI`@AUpm9D>FmzY^$Zhe=AQhq_VTo=<)+(Gzt*n36?17? z{dDz~gwoX3;^+ES9in`t?Amn&FCT^Kozi}Ddwct{XKpQOI#)%Ur565dpSpgBy>*Cb z)0AkflexuPcD@t7;L+dIw7+Kav-$V)|Kv_O_jdaSjk`CV9tym4@1m35?bBCRD_=|6 zefIRmm25j>`Z~6RM&3zT{Xp4|Yij1{)h_}wZ%Q7>TEF%5yX4YsUfV-wF)u!mEaEiD z{nMG^^PjFIw|7oTe7;WZ+}zj&%a_kxc+k>lrf5q`>mQ}`^K%p5H`)`8=KZWH#AzEQN(&T!ckc0LdWsalGw-J z4sTcFW%j+yRm|dQ)Kc)1U86|_x$jH*N%v(60A@0XTe#t#$Q-9YzQr!0b zhHrAPa+~7Jne!eU+IhY5-OS}P=Fe7@>JCjf+n-~0x--1)%--X2EDw%+e7#sMnD4y( zZ;|!$YFeG$-#s{x+n$-5y?o(D!N!El%+8l9Ioa05J=}U(eckT-t!JJ`-Tr+m{NJq2 z>-V3USId55&(i7Fwv|2VWcj(r(Q0Z^QBjY#__>dlxb2m;#z;D<%|HFIcYW!<d@@6~T?e$Nnl*A~3${*#Wru92bLv8&qR-nS}@zrSC~{oJzhPb!~`&5;iu z6!iBpb|j-X=94+q(Q9OR$3VV|)4|NHl!$6qVd`L;vs=;5CX z2i@iGaJSwwKkO{tA!&GO4H0mLVvy8eZ^8xw2O(kF{LJFmUejC*@&H-3`gGn`P-#*K8>!<9$x!>AvsRc-E*?KfH!)ubT)O7vz z1rKYw&Ui5`X`8?l+kN@MjWhR}cfUQy`FWAk)7epO`e(#DpIo}SS>e(a6W0^#&lwc_ zl(~6@$!Na*gw&E|>-SbY>t1s#tUMv98!?MsdOZ?B8m0K5pz&YG4Vg@!ZQ=hn*(Jd{m+y-c=;jOyQ(gPkYUy>> z>&9_fAKve}^~ok7D`|Dpj!3TPZ=au>|94lO!JuH_hJ@{@rw<0rJ@EeTar>gF|DWd9 zZ%e6VZH;=g{QlRtx+#-ArNO_Rr!raCc`OfU%ikNZVbi8VCr)q(9e#AY;-~DkDwl^(ZeBlM z_~(bG*z{>K%MO3O=&LtjNB)yDx%NAkP1(i8SlWE7v;4x&^S`YYANqHD$G@+?JsDme ztCfGb_SMUBP1z?69eyfOTeWVlvS`g0>SSThzwK`#RH~W2^EaD+{DZEo+x1UPzq^qu zD>EXt-g3wKJ7(Uo($o6$yc(^qNVP3gOr3Lixt@{f&LfWwiQL|npZ58gp3un%#rW2? zL;35}$dhx`? zdNUI;3XZt)9SZTA92C`M{_mRC1aF5qKFfA|otw-jEYP2NW0Pf@B5TmC=#`wteR@HY zyk9Q+RKa>&KjBl!vt5;)>l~HVO*|`g=Iql*Pw!jSCB?7Z`dzOZ8~C(#T-en6sdV+m z(5iK7w#CHGZaST4f61m+@oo0ny7lkA&uu!y+q{gk?@l2<1M_t~?MuCAGcaK8A>C%@ zcD}Wq7o#{1E_7~Rv+0?!(%q@t@-nH)#Suw`u-|#+iFB73+8E^ zo7nb$8$1JDnGV0R-Q9WgamK8)vx4XTZF%%M;CU^+fO_XyO=!b+`6(Q6Bckv&60X~d)r~l4Ne@> z`?giLZ_Lm88Yh_NJ4Ks&P2G0)nJ%Yva&=2huBmn;Y*@Lr)kP=Ea*2Bh-`%f(d&z)OwrA%Vt8Cm`3I*GR3B0t?8iXEI+%buB&#q{8ZxBb40@6cvKpxlt2 zfB*iK#$@OFFP$1C{7I|Vqd%lEcG|m5tS_TWxPp5P_T-`I zvdm>Konl{pT)lB6qb6^0?HPls99?F-?fK_i%il-;d3u^f&#d}U$kMl;K1Q!zn_#~> zuUI#?Rp**@zVM18N)D$El_ht&%(=U}{L+;>9-H(!r?gGgZ)?_3KJ%ON^|nPDl=RO2 zDPH2SV^(wdLGzfe2WFoRV$-#&UZ-owr`0<@-1SA+N&9-q@<_31n|L)NVxrOt3;ABY zNKD@|ZQ8WR8PNwORA%!DGJe;ZTYvTGrt|L`!ou^tt^Vz{i>_1UkGx}Z^3J-|9~=aX zjvM>ip7zq}K5^a9(9Uz7j-{=)j--2r)W=^eLFb!Gdb|=ZM#tE#w@p7JIM29j9f!K7 zn^#zPSmX?8<*g=sKY4a8b@ka@U(LXvz~JfP7~-~`XTzi@$3=+?Cc7)=Hwet~?J<7N zrRi(dFSIt) zL436{b}Na?=$}q|xVl5H!;RJWa+~G5C8F-DgCgv!`bAe9zIkuz#;4U{Q#M7;jSu}9 zzV58(&-UbVn>c4&>e}Y~%fs=Z+VPF-_xT*uCO>@gaeDq1Yc8xnbn(WGg=epu&D3AY zl+kFqM?dp-{0TFD$5&$axbM0&8@Tc-=7b8Q-z+p1*pL~l-rL*zq_}dnN8(;dy)Jgp zQHQnpE2ApzUD*D2^ZUo2wHN4|-d7l(INSMDc2~UXwx+*pu7s)P#_iX&uko@DyLIzv zO04YfZ|_r&_vLQcy8Y6vYfiDTu??!nzv=C`>XfokXRepcw*8xYX761hv;C3B#2F8A zce{T*Fnh6F=-i@@#kb3+=imDCdD}(h+Q*^yoHDj--FoTb&4=R62EX5*db)a!W%0Bc zz5H*hYj35lX8N%*Z0YH9ukT!pp1*cOmlX%A-!6aSaM|U+iBc^)R#yT4cfU@HE^Ik8$#&h+uXj&*O8o#O@H-(1V$Fk$4kDUhFCz3X7e*@=giSxE*d z?-hD_>wwH*=fl$?Gk?B*S*`uIwe+5>ef}Kn{`s3Tj`}*7aT^;~7FnKrwQ9);#*N!* zOTMi-Z-4&cau(4i%Xj;&Sld-}?DDovb(OhRZ$mP)uk8P{;nSJt`^zr{1?;daydHh; z)Hm7P3>6=Drk`B1?oP&Z5v)MVO-F3?$*qF-Zw6`a6SF_C*XK#tCylKhPt;jjWH+7= z*yhx^^D;Xx?^hiaG0*jDL}VHIH+5W&&lJ*~^GY>OskQ!~uhmI@#eb|@wNHeZ=B`Wq zJ^hF z8=>BR|KcW{T(Z86I(-ksZ2xVx7c{NI1T@8$h#$8UU*af{ovXkj*+uWwV0US4ce zK<;F-lgB0X{ZCar-n#8aW!1^AYmTV!9D21XrOL{`cCmt-{-4j=?yS6`B(rVr(*}7V zJMEkX-Tb?+a@ef`<7RPJ4IT{C!fM zzoi;$e&sS}se9zBIg>SeuHTMpQ&&~)zHJtIbM_;@Ca1!{y?YnWZQZFlyW;U`Z3$V~ z#k*IZzOzno#-D(!jYd9G7p~~oBo>jSB^PbldEYAMXHM1MnEraj+_=TftkHgc_-*(pEmg~w- zQisYXKc7FnNN7s^(eo=qx{e-I{d}*r_>$`}&2OyJ>Zetml-i!Rv1K#U-nEy)Ww~EzudoDwtd|&=km!6&u!mwo7Wn)t?x}fVRPxjYT>C;hTm*kUPp9?{mv0R zsU;*PCO%`<93755nSo*A;wRVZOf)~Kx;9tW#wYWGhQe2|3 z;(kVJ?J^cuQ!`H!wz+o$H%S`stlh9Rz=5Nt|Nf#4vzMNGdc!Ecw{UacG^;t)R$Xqa z8)qoYot9!GbiqS~MJ{i3b3sz|yRf}n%4Z(rF3r9ZmhR1V>(lKr^G#dc_HGcpq#U+* z?zV{MKLP?)*xvhh`TeJj|HH$>f6o5@b^5n&mDuAf-{?oDx$Bhb!Z}^nCu=!v5aQ}% z^{-x-S664(;M4eZ+P*0h&Zg-yxk>yy_;*@O>%XO1~z$ypD8qK4sISGi#c=k|B?72_Nsglg;nqq?^~8Kn%GQldpZc5v?XUzzf@Zz{&;&F_1*1P@7 z_sg#iT)wjBj!@lOw_9AV9u`DT-M-VtD?fGRf`Z3}c4kiD;pSB;haMeLnyxqRal60W zxhqG0^p^Re?c0EGAGRshtk!%#YjW~i^*Jh=%R+MeIi96G_ta$<%-2c&HceJflsQ~< z>zuD{Eff0sM7L})QEo{nDA+N&N@tRJ|)AUZ1C=>Q>0Aj zreo*(9fD*h_${9~bEesR=FJj24JUYW1g=S)RNV4GQ`^$LexuAivzHS0Etf54GZ1+4 zxz{5pZ&UQgdrUzuMRqRDycIROHur(sS!uDCZWGRWrKPL(o^3kkx3|FR0^{xAz)PPO zOq;Skx+C5+FmkqF&J*(?`<*KUfb*}G$UT$q}5>irai-Ne09{u4p-AUFfXSMsrhIVW7*zy&cPrpLot&!nmu!!{x%AJ1Lv=_dIF2B>m%Ntiqb2 zwGWJ*7HH3nODrqvyec|(<;u{ucCm;V@r;~v=e{*DxwbfS*4n<5yzMHox7mJrTKt=K zyOdWU|5_KrEYoXiZAxO&FPAonuJ~8~?cI~peUJBv|1tmcOg76QlyQZVuLchbhaVG% z*Ak5=8JEB(s{W!5x4)xegt z2?`zphit+{12nEwtbR9P=Ed$gN=nA>L$<4Z`u(tRlTvMR9Z`4zq;tk zeFqmLuw}9;bN+nQHUlE8mV>nZ5PkwxDI#?sm?t`>Xov z#)5PA?!|ri{{49MEP2+z4-EmYL{5IpUcA$~_Rp>Q|81{bComuR|7OZVX%CJotGZ|G zE@$O`U&nHK<>P;QrB_^6Q8>)tq2D3-k>Mee(up+Tx|r4TF9or!XFuJ0X6lmtx(oLE zx_mh&%Aj*4v65e5PWy%>4HKAxs#b((OGw;lcCvf_UcyIzdELH_Dc@tFRzH5f!eT;N z&Kn6G?f3m_w={k1Wj?9WP@~!2=qT+}ajHDpEqrm=%cs3O3w(GIBrdN?KEu2% zf0H@6h0GYl4@G@%E?AVTaj@XvZ+)JYrb~U>QubVb^qyavW6#8f@W$x9{5y&_Y~WLr z>FMoFsCmQiY1`ZFo^8cBCl_!%t#&?8(SOK7`ebPkQ}*h9gN*fum=s!{Zr41u;|Y7? zTS=`4AJzF5>_4A3>!8}cw%(%Oi>KGDPvzXTW#7BRQd6F7p8xl}d@}1?UhL*ww^nX0 zjI~~0o5nkLZlV$rxMiiwde7wC7loeX`_4+gUu%1Eos3Rp%?n9hH-4D|4<0P|v}#}e zmc3WGR)Q^zBFPmUUmswnc?&*S<@OEj%5) z)>=mSZ`vw`3)ioAE4%YAUccUd_GZ_;(_9OT?-a&{T+_Z`ZNlO4l*@GXO1|7zLF=RW z_X(c*>AO#iU2O^bo0Q)8qNq7@tNy0Wz0dYo>Yrjm*4DPKU%$Qx$yh8XlU7(LIq!Mq zb4%5^F2TK<@;lt#=5Jo-mORn6YVB6u3Bv zmTK?k#|M)jI^4s>n&2c(gB59`-2 z7w?y~?z(qx-VYC_yXtzkE2aPb{VSlfLpJZ;L%(iO51q$l$F9%ax%gMP%mQVXTiXhE zUfgMLKiK;FFYb2D*P9Q-u)Uq=^~Ld&o{@*hmmi&vPuwmunfK3hVqwpfw%je}GegV5 z!Vjly`?arQ-QgYQe!TzkeZu_EGtB~Gr&fPnu|{{n_T}tCd|6vfuVk0%=v@m~8N%=~ zeb>rsGGD&leDQYU*Ig|~8kvr*V%w^6yM2m)@qsfOPp2)zj%GF0MqYpZ(Z~A`^$V=Zf1PZi3rNv|8t(n`3XJ8E$)PSaJ*Df|KnpA zCc&ci=e)@EQbX(C0>%8#6kDeLJJ)w>Ir}u%)Y{E$v(nFc?lXKNbK$b`g!Ah6FJ~?2 zy!YwZ(}+*SdFfZC?qRyUe)ZKdwevOVGb@ma!;XyV2qV?QJ}U~B&7M-!e1^X>x2INk zrpA<|A=x5KQ@?U$ZM9NpYLL-fG<(Ot-g0(ze>=`j8HUp*o-Nqsx>q!9%i^nc<;8!_ z7-lB_xwTR|FuncxPVLg%OJA4Y-y$M#u=d=%c|t|gMAz_cidJC~VmbBHXkGk%PR-`k z`fF#Vt#R0LWqqo#^OSwf6Ac|tZkl-K+L;v>p8R?D>GgRTdyo3AMXjx@KK|#A99}*r zt3JBEYv;dzava)gZgQX7zWnOkX^F2d8`aI6S#ae{Lgd?SBL~j^#vxG~-U{vevsB!` zZdb#`W>y|~jf17DSA<-9U={l1{mEqidd_*_hhLp?4q5#);guTa=^{hBFsJx@(eCcg z0@E7QZU1kMt#Z_v`cKcta__0k$t%527+CiwhyK+yB;;qTbC%Q+wk#*Up~4Fh=w4DsQdz zrPt0qd0w&mu`5zD!ew{k)L$W`n|=6o^}cG&PANNa%0)13PvG{zJRYuvX$&3npS^$i zwli{a!{0tR0vnd;Ad!Ma)gQpWn8+mj}}bi03SkKE+z z%L|Rl?)~&#I6wTe%!|Jq`3c;N7Jc1OYoEc6b^m%6Q$n)ox=#FP8$tZx2$_T9U;>o17-a>0JW z@r8$*EsB=3EL^SwUukodbL%H;ee3XuV25K zlMkHGNN%%|Sgu_a-TmXO?3CE^hpU$IDB3tM{Qma-_>+T%9xsz}YD9#EAD?*o=E&Ey zIyRTEY)U$V6gw+RK#S77-xt$pKSfA^c4ubh|GELsurX-8qQ)MaDiW5+u^zD3&B zKl}AUW|^SxHq&)89~2wTNz?K;wz$2c<4eNSH97_-v!gQh=5EPfo%(gno0eTJUa@Px z?Yx+-E{Fu)>V)08eD!VGwoKK>y+2j7@dD-!mi+dcUR}{N%^S7M-@&4QR`a>rq1X5)Jn6~=ae6;Xd zI!UfX*yq2HFSD@B_k(}gcN9KOn{wAtVcvb$?6hX@6KB3GNOuf~_tx92<)5-5y*{$z0 z-#(XIut9z@d%K~Dih+?%;g<~iU%x;9`{FmvK`-6)@k92_KO8Nyv$Gw;WIm_7aAd!z zeXNq({`21@CQR#IC#~JXcEa?@8tDl}?5DL7YHFC~|3CEHu(CiX>|EEkz~$Lp`^6vm zm}en?wpGAxBH=C_X z-5Q%IS$QemSxMUI*6$UcU$4LUBk%s#<*uhPl0RkC37W6FZ{p^k_5N|qLAQMquD|BV zKe2kESmyI}7jJC)`%g6R=xocnv$t1%_kNjmXWx~_#~2N>wuzqJq^QHVfbB$T#U?iG z@aEj`riZ$WhYr1nV07=F7VwI5S+5Y&At8&B3NE2i4wlPxkxE<(y6#8(d%k7XRaa}@ ztTHLhL{9b~tBC06Rsqw9Fjl6k4_+T`N{v48JU3#Rk?z8xnXeC;fBfDO+4kx0LcV1e z_BCI5<14m={lqP`DnYk+-bWbr(4zC%}P)Io%Y?k*4N4H`qT{! z6NM|j?VMa!)BC(t`q%Y<0_RAt#+^IecT_&^o4=Qt=|jq%%;s#%sH&{pF3lfLpKG}E z>g$cO#T#R<$BVQ)aKD=QzeQkz68nKBb=L|lg{3X2oO3E(6@K~h{m^8&B^>tdk5*2b zHFvfD;U8Q7*#&MpdFMK7io^kpiTa`iKW=ar?6t9pm~ev8iLI2=qhi9PuhSRtMU+-> zoM(N&)UdT-<>9?EY_2e8R(@zw;N!n^UoYa+gFo$&aT7k(F)}1pM#TSRxw_RdV#VSa zzj<>Cd7Yj$XL~YzP-tGcdEmp--GUSI1v^=K+*gph!cKoDmk z=lyw|=g({@(w<*0t0P_euQc)I*C-C*IxUk?aJkTeEr?;QtkEjD`V<|UM_B!*QwQ!@WHr@gYonxg{3X8cYKIB z-_JVX;10J)2NpT&ZxU?nZHo-~Uz@C-_~g^&|NnZ|E7VFY{;=xe_rU2NcXF(EzFz#t z+uS1j)oy3&`dcDljtpEXEfY@M6e_!S^hyY4*g5Vv{wBVrU5i^Bjb2Q4d9?Y?WTDlo zQ+aq~+NbQ*xbfb(%9Z1xTkTb=^=ThH&!#M1I;Hcvcjlh=(zX9q-j5HPFw^(Jq2tpR zUHta{gMD(#6bb7B26leGmvj5<3%{hMEt9UT{>pPWBYx2xCpF!d2l-VdDcPwDyqsCl zv&k$^DKCA~+gv^A)IYBdZJJ$Lddm)}g|Bq$=b9IqUo=`=GyLPa)tp7su>Pbf8J?EWFdxn5J_dgz~`#orrm@h{wJQ|0?= z{miFf>(7_nUmsohcjiIIS7u7DHuo5_cy>muZOdBP)#~2;TF~-JUn6*@0DHo?wFVte*CZ zdYXy1_0-h3PTbUM`7q(U_Y)m`yR8>jPIFXfm$G=Q{q@VCLY1m&6`S?uE3CifF79vt z_IJUa=Sz&f#_WhwG2X6nT>odRuv`F#1Iy(Y&ZV-KJ~Ml!r==G@KPS7^FXQoyOYdG7 zYp?Uadv6cZ*Xy@*yb}sf9zN8>eSNZHnexi>7nW~v*Os22*?VmL&F9gdi_Bk7GSFYp zd+qK`)LQ5A%|y3`E9#qiug{t$ZL@N&h2Nr_BN7s)Uo5Nru-#$KUYA&7Jb&5wRRc~@;&TYp7t&Dw}V zO)V{{kuP4qb*(J5y`lc}mq&|Xi^KH}A z*Tvss>o46f<15mbe!cMFWB*5XT-rDE_np*Z3D6KJ_;Esnt({GPHB|HQ%DMm5lDGUm zwtnia3BUGTyfyukoRh>8rNbYE8$uoSMKG}_ELr}hUBg51ZB@AanXkK4xmfv=lPlNg zgm0|h(XrK(|1-aAMc=H8XXZJ^^Q2KX)sA9v{PtFz$pLX6qbSS|-HrDOS3gYT`SsbRVB@BoNINf_MSZ7`JVKj&%&VNDPsS{GC%r$xZkvAZ-_PZRJ~~S)RU&LZ(Q_X*zLq z?z7|m-Tql)iVBylP^;X63(1a8Y$^^N{g5HY{I~SWv>1--&IflfO3!DA1!Xl9bju~d*b=$i@k1%DQXNVZEb9UD?|Q9uRb;TTTms_{=oTH)&B=i*ZpEyd|&Of z+pfsx@ABhsm3{P$HEw5_@|n%lxNAzqvzg2PzTr(QXsh()Y|Pr)m9_Snzx3p?KRw@F z!`zy8h%G(4GE(u;?CojWI{cshRJ#Fe*yt-S?B< zf2PoPy*n@O1$*VM#Ys6b5FGtZBG_B}c*^8b>{&9dRAg|^PRaw}PHqQw0z=l54UklL=Usyz8xc4kgDTdBF0 z^3%^drAr-GpMK-K$$#yfKqVw_i*rqwnbGFUDbu4@>MYL7yz|)Wj%QDQ>4O6tY;5cd zkDtXwOcyxNI5F{!i!n&R)<{OfHigRh@i zF~O!j@x$3ehnnhpJ@jwraGGpj}Cjao_AE%PUS+)l2Isev9GA*65&rfZeZ+&t} zGHCq5{qyHrm2(*qBAsR~Q?H0U_2SMHFV#1<_wxq_vm0(HH@M}danLMru9NijCmYRf zU7!2=pMibOFz4BdK(h%yBBCmse@sQjUDK57j4zJ{bFKPq#<5SZGuu((eY{}!HNAx?7eA`V z*;H_7+TPh!${r@cr*U@U#m6>ZiiPUZjs}Of)?WQ}$LX@r{K#XomR*niP_!^1@qZon z(j<$&voGl_pCY(HPRcHh>pYwUsc{d2FY3YTuZ?YDQ`nliK1-6(A;tKCz3xA-t@ za@;AKmDb>9$TmxX+3nQF6p@<8i~^SycV5~fx* zn^)?temm9C|BSK`B|-3{Kov_uh%Nk&AZmm|ERVnQ-AS7O%W~$i5txa z7drOzy!jqK{n^X_qdP3c_m8BOeEfA=_Wk`S-l3Cuc3phUWgl#N{ovo-*A5%)1y+xkbX^Vkeo z-+jf+t%2^^l6gUzGgr5?CLfnS{O3>mhL-j@QzkeaXlfBK_0VR28L6>;ZE|TTZ|z^( zh6!$G`m6L(PHp-tq4?Ei_H*04T7qS~3;{YEPjVNs8@o#GKT}l3urO?;RoyYWlbiO{ z{i;j$w%CQ9(f6RP;c+KZsJFmyHA6nHMBB#vW z_VK|%83k3YR-13{Zg=n77uO>r!NyQ=DLZK9tXAbSLYKULn|=PfdjFP~>Ff z?_b_?sX2=!Y?}Cl%`p*<+ZV0Ty7*fqH|3Ijs*!u>s>@=_@-99x)}FWSbpEub-wzjW z_>sUDwoiPi?eB~C)dS)R62f|&zvaTj%NR(yHdFXj5xlkb~-bK+n9Zbr!}M%FW1 zm48o5onm@OV|nUJhYibShHYNu;{V9I)4g9Vv2?4W6Co)t^61t;N^wv%iw9TFJt4c|E7%0}H;q zyL%YJBR2fbviS3ZB`iF=@b|Y|``t5G*x1-E>`(W96)JahW9IdeFoRhkQ4iRsduTqq zvUl=Q>6dv34lm*uz3P1g2ArZ3h^xS}w-z|}-PK&D36clyJZk@7YbQG84@ ze_r|f>|3SwvGsv-zs~A*-@LlQWOLKktGC+vyj@(j+^(G09<{V9YH8P}OGfYR?_z$S z%y8hri8`6OSDZ3cuUrILCeJ(QzHQFiWr5%3SKL~!#>vo$US3eUvewT}_fk;2dGepA z6_;05&)E5qga7@yjGH+z*L(j}&a*#zGTrhvub^PdK|5ItGc$ zW{16t)cozTP(SgJw4j~lyY0z!b#ll1Y}q21E=@kTCAhHvQNo-xcC(EmO7A^CE3rT9 zRSUb#j?FDIrMW-E>|g)2O1AIufzrF%`rKVyzGRB9&1q{~p?G`S#M4hFoPS>U_3!5$ zKQFr4d|mpy@XyZR6F0X_dbw=w8S~!F&s@CO4hkW)6W>bdvfgvK8FJ{2iR4qU^!!WP zeBa#Gk?a+akd<~V-P^Ww>CzRlMp3^U&5i~M9_rfs@ZfKub(?i9Rd1@Zg zZ~SJv^3p#`j_lR$FL?b(W(muxt6Ex9xopm72Y?32O&?dvX-(~tKk>?Q&fos|4-d!B zVQgA|W6OQ+$W7aN>zg%Zen1Y340mp$dmO68-52H^5c56t>|0fAq1()~+h$f_HPWa4 zzkYYOddB?u;h!(LNahRZEmoM*vq|ttQrqqsGjpP3o6~A@mftz|qcZ5xub;mw3aUAS zywLBT-nS6{8JUB9ll^vKlB@{hv*|8<`r*YiFv@lT(?t@}4`FMI2a zJQi#{b85w|T?Z#$e>*KPWohP){LM=R8W`T)n|o|;_2q)t>+7SHDtQzOetpq=vSvm4aIc7C0ifMud8xBT_XG)RA8AkPZ65xrFyES z`0-=^St;u?)i3kzKaO06lyRRvqqF$m-QK5eoA<3q)%<%v(tAnDu8BtXt_l4(^m#u2 zHRW?9!ff}Kq^vajeXm5v$mm;1?VnjW!Eq}de3O69ps1Dxy%tG%fXK zDT`!oi-6ZL>CVmdKN#kTKk1ohv}5Vim}Mp=Tkn{BKAYAX-)yy1z3}lNNJ?8iT}esl zR?@oHi=x&#RSE5{eQp21$}h`I`s@2^#`jUWhkofxQ|n*4mCa)LywycAN;WIf?ed>GikJ#{IassXw$AOk>6ft=Er+H z{%R22JLO{S>ZrYZ*9-q1kYseI`nPS~{t{bp_4&4({2fM*7(N<5&x$-7ym;&4yJh(w ze_YMhOUu*w@i=hx(k+c09Ua@e)`m4t5vu?5Rz4tly~&xV$umFdeY9>s&PHWc-e*-F z2QMoznztu!`2jqX4VP4(x(WUHjk#eMe<#Fj5sY_Lzj!33WagdSpF;;EP z<@579u<1~4s(?mw2B#{A`r6j2-IHoXyeuu#W?R<%+xB%<_s-p?9Srue3JMD5?*Cx@ z^VZJ(fY@m6YqRdZeWfq(x7=Zq4^rxKv7USNlv|{KlKLrKn}u_KhLnp4CQo~u8nvRk zWuEBq&o(i;YFLBX8m+QKl>*&w6~Cz3ZT8QkYWwl`7vE?tN!cc?q_k-6k4157+Y>zcJUnJU8VSa;z?jU9$AR?0^}$YNswJ8E?9lvq10d!h8+>F86kU8=IHQ zA5988ogo~u=!)uJAB(KJUe9K4c=cx5^6!DOBrA7acwTn={lzm}3rBalGh$_{*LT|GFF03q_2{oG zUWNx2e#dham6UF2wg_y{;ocde_bZy?@9sb^&hwuYmbSd!b@9Hn?~l8COw9YecJ>6t z$9t{FUwp>=?DDrNNC|t<+{J5q%oq9@-7#6A6Q?Hs&o5`%j_{>^oJ&*A&YWK_vi|zA znL>_NdzvA*wrVt5P>x>rY=@$$!UFt8dzurM!9#4|P!Hp3K^4{>pb=+eQ6TAslP-?z_y`pf=;5 z=X%eq(-#)Ib8Ae$zD2s!C}SqiD;X)77LV+-_KD_M^CwGYZ_E0lvg)bTfdkS?O1D~b zZoB#W^MCqTbN#iR2-l03FK-GmT0AWOa_Wy$^zWnl`7N%BAp0&aQT16#mH}%M&$g+O zPg7zyIVyMtwD-Iga=WV(xSfS%!=_D5U%gZ(f9F#cynR;9&XbqF zUMjdSd7Jn9<6*t?9ZK)=@A+u6KJj;FM@Jc#B8%5jA+A;@_nW!5Ed3S+IIIl0b>*>% zaGm>lJ-t@l;5gIUOZ{py|LG~9#PT_>`c+ny!5jy9bv67`WEUr#&$iU_%BsS882 z4sP0(S9bcXMcS;Yt>f(|w z3~cP|kE~J)gtfWWO`I_A$kfx}iY*`F#ZT?k+nN({U*ocGly&sQvmc9Pi~n?Vbd;&x z-nL!$x6h2!bn9jFxb`oe8|C|R;lwl3($n@B*Ege74d<>0J@5?^o7HwRbJHuM&3jBv z*C>Cv#oDm+sOpr{uN_33h5d|0ebiYQ6&pG`3mr5{+syx6QIJ`Da^}puS!w%j&ia@P z_9WZ3+{FPJIpxLy8Y0_Nf3S6CD&9U>a<~U2Pw#HMs&U#Y?Ay$+=_^a68kN^h-P*Y{ zU}adq`s>Y^Oa44=otc|5;n=fc_4$tR_4W#Xty-eC`|MtxDr3I*j^DG{d42KLl4YQJ zU~+1twbBc<5Dk%SmA6)YaCg_9na8sKGfLeqXnjs-vdF$=sg;?F=R~Q0Sz~zs@gLK|4Bs(&}-HZPEAakO%%n%){{bnE7l^RsR1di$JR)>;=n zVmWsF_{JSOI=IF44iwILnq{<#Ov=*Gpq#_EchrH$yZX8`W>-n(?OQHuHO0DfeUI-5J=Czk zYw4z?$G`5se0cxi3sN^rJdq2F-OaM8(Sc1?S4uaXHM-Q4*PvmbcFs;Xt@5JrsRe;z zGalH5EPdo}s;aXvWzWQ0mp*?<*6=K8GMjOJ!R*?A>6cz?K2vk|PMLCQXhqB-f8*nY zAEvIaQ7yduuYCV+*}C7i@0;EIe^Pz^k@h{j9CKUNh&P*{83sZ~P&xeRFR0?Byj{XEy2F*tU1+ z%yliFvYr3W%io4lsNX%n$;G`zXKG{~&q`%C7w zZQI&*m%mrLCU0N2XX)R5S?g&L=C-!IMLT)Ue-1Lfy<^?&#OzGt+`lCbS9pKc)a{;q z;mWn`foGXB{-tGvp_UBixbj(-rtitzETgv8agWL7Ggq=ocg$O!yZHT*aG~_Ifw#rG zoAVy!s;KzQw|i<|x<2hZr}3AL9Xdj~hDHpWdv#__xqWk6W@M&(bKZ;1k3Ky;-C6qk z+uOtYYJW?;yMF(EKQlX@%C-2NMXVfl+Go~ShOdu1dgsoaw%a~;w+Ao(zbNNtO`W@+ zVXBbRfo*Ts+AI>flbyCD6Wxv1mL+h7&3YXbcPb^eBQAK;C6gQGri{HE!Vfzh)TkhD%z4}FfQ11!HoaVSNT<4E-~END+XP>| zXM03q|aD$i@2i)mKi?%lW6qxV>#ya@mDn4nE>S6udRz3lTd z+eUxJGR--CTnAqZRc-JN&~}kHtGs2?%)(_iH_gr6>SL~X{L-<0NAoX|fosDGUtiO; z`F11u*00CM`^|ax7~b7k%>MfI>sz~K&XhcJ=1j>Iv)kJ)-oMX({&N&ponhp()_?!% zZfxuITH3UA>(;(oAN~J-@t5Y4(wOS?;_chk#}*OM(XV&x%exY+BX;rj?e4E%OGC6o z6PSa2ITbHlzuxY&upw$~ThY!v3o}>e+&(tXwtCSnjk%H<+of-8+pBueTg#MgEUh;a&^o`s0@>^#s7QdYly8O!at44QMFj}WYuG}4BOIGZe>y_>B~E_v-bFF&&=zv>(-0iHHBjj z=knQAUtR$X3ZLtH|H-db}xK&MN`J6!r+!X17tmB z-}n3V@~2Oq=6(I5?cTk(Id-*D{r3NMnDGU9ojG&n!J$^}9W_6TF6S8EU2%L{?i{O9 zuH}An4}rqx>-YEfkIyttFL-~?R&~Lqoev)-+I+uLY*F<^qw8qWmVI&SAAfs$+oJrP z%(CUng@5z%@I0`-|Fdt~yJu%-S3I9v{^6AN`Ugikg)dtE{$BsT{La4G-AljKT+2y$ zwQT>-+4~t8)~sLu_{>b>9i^|s4!>1bSO55G_4-BIw~I4;*!#YA{o=>ZigxOrs!IO1 z;N-cQ#i(^i`3C8`mwJqEviK*lf3`}U`nYobtm~3_w{0%_DnzL3B)q@psH3l!oSA94 z!YkvlFDD}pFRxnO4X%Z3SB^xcEZH}4(oeRNXUug|mUsTXrLx)AZRU&3Aa}30{vxAi+08+8MptkOpFYB^!4xW?~l)#-*;IVa_QRbZN2LA zYlPhUWDfGz|8Tyuzux}hx){Co>+$un{eqLEetv#= z-gRDKVc{R$`+snM`SL|2PS`0SDTzr~SlFWUl}O!}#qx=zrKOi&y?p)pu=)ON#u(~ah!Xj;8~->hA^cJq&KOg>)l=7wR+o(e(x|3A-fP2ko{ zeKaR}T5Ep&@7tZ`}cLdx=|g6;)mY+8fD`b zZmE%Can)~4ZGOMmES;A>tC^kuk^cWr`oYbqK8qJG{;_)hFKyjyAM@9OP7k8*{|d{x z;Co_|&Yq9Qq;*-t_k1|SUGaA7^(d~c%2z9we^_4sYq{@s+o~@ahrdnK<4JfqMT$eU z<-qIp`};sGhHcg*F9MWaq$x{g?-DiGB6#tAV~;9Q<6Q7<%{2R?fj&}^F-s=yTspPL zgXRCy&P^{n3~qP-YuY(qK&fi&{{8$%gHFzPpp|#>@p1WPfkM046;Ya{R?9z}{Iq6v zYu2_|Peeise;WmT)_CgjYi%cqoSe??XCX4=;hiF{r!K8+S=O8ZY0HSj5snof8R_F zgB90b&zL#$;GH`$N*4+X3Ix{g{dQ~FmCtvI&nH$?SZrPU>Pkr3w#6ok7cZ{(cvM{Y z_4RAl3f|w_tKbk^{^rKUX-x}Pl%^e9Q1czSF zzPH}0bHgwizdWMC;EkHCeB1 z$>cI$wEX?OqqlBJRaIAS{d&A#{`mVk$y-Z5!qx(O-@T&d%ZrOg&Q=^REcpBD>$Z;bVWy?N1)vvb{lqh<0!?5PlNp%N-HJ^{_*9BI`dUbBUUuVt5u}Oz} z{hm);esirvbCV;*=GFhJ{PShGeeR8U>+8O*j+)SQ^0UpJ&*!We8YZjzFWSF9zWVRI zz10=3*KS|bdL>iQ%{ZV)&0)(@%LXGq4Vgdc)ZWu zb6+lb>#G{At@&_}{m0eyb)voJh5cT2Ucoj;g!$st^BnRlXK;b9Yx* zH2dSrgXSk4rfn&`Tg^4se~a+ebDwQu_Ewn+HWa?OVW|5-EqB(++2;9+;?|chmEF8~ z^N)}H^)jrPI(m9a(@#H~8Xk9X+wINi{$IXNRCW*05ZQA5{CxZMsSiKe@W0>pTdz;X zvZ=ALG2`#W#qNqN84@C&jtKjkB!htnVizN)LZ4|=C-Af>+g@__Q%eg;bB-1wDN)Y{vWJtY-|NjPE0&w_wC!a zq@tpr=dtK%QOxw(1f`rtLv zmrZN`d_2xDL9%ADSjp#qzu)Ko*b!}hHKgnU@1h0L68pEq5;lm=Fwd}S_nLjlDco#v zUg@N^BX2V~@9ZoVZ|75AUYQwJto@WX%kV_Ui_PyYE%oj^F#F-dL>?ZVgvv@uCk`K9 zU)67~ubBjMY??R2(V+a@9nYNWmoE$doqJ8~{O5uvCj@t_lm7eJhW}|%B=;W8sa`ks z*W1h4)$Dk`08dRk;r@W7#@=KSXeyYx;yElT>|*~vM_x_n*sS8x?Ed-m+^ zro0gO+Ao2J56o_6=U>L=D`Qt!13+tjI3ub8E>-m~c2{7|#U&U@EXQ#I`$$F8hh zFni4}s|v>5zTZMTf4#nWS<7TboZ{c7D`fWTZ0-FL`{?o6GiQ=sT?m=N zs=oHF(dOE-zwb#(`gU&pxU0kNZ(4f##yxx1ur5>JSoh<_;(h}=yS}82EB1!1zh3zH z+1Yhl6KiX2H?9j>X>#ZIoJpJv^Qzxj+I+uLtScML`{-uJzJ2?ye7*nUn0eGK`#DCd zqQ5Tr`uboq`^w*U_Sf%EoST^|B`0^xeE-k0+ip!sD=igW_j+3he`$Eshu&4Q9nGV) zbyq9&+?S}D35qKiE@O{AuPA&^z=*l9>A}>5JoUsWlY^DF2%J!6Q8;Y%s3@$*Ph_6Z z8fi;|p08g^*Q}eib>*^@fb<_CyW>m4F8DrnSiEEIsV@P6^Q|uw#?GGU-jR{MyXL16 zsDQ|gm8h6JE%Mo~udfSa(z&B&Y`J(~X3)wjAHI4|*E{%m&zb9ouS>B`-*UMx@9N}h z>!a3A+tqK?8ak_Y+ew}qi{>tl(R085blKIbS93EjADa<)^yCBS#D8Y59$4>>TAOvf zbYX7PfK4|Nm~Q{_MXE7O)eYvU1s(2Ypj=^xc+CdviuNvh?WspTCth z_88qsxl_S4pF@BB)WEgZ6mb`JY!KZ!ZQ+mGgK=J9&_ z%`*CV>C&zJFE&4gB-?^n3!U31T|QY_JZq(2Dr@hSS*}Ot+&cB;ob~%HA~92@&Rl-A ztmSs;>UmofW;-pMu*?72uM27YhPnO8$NL^`y&iXZ4%4fr)8pBi8ur{(ej7FU;{UD} z^i|DYq1F9hI}KYH8<}PpYV} zh?;)>xuL0P>&1(Kxwo^nc13T`%XQW+eOhF>@m>7Cr||~1wtL^c-BJ9U@88?||8k>W zMMg(^uL(ZCIx8h*$y>9(&&>B9d|&_n_qJOu($lBTT^0+fomQ{kx9X}Wn@8*G7J*pa zeK+4R=p_DAGcxAbX1L~Zd46&P=bp-MpU)eAXaoB-quugv<==;!s>}28qoct>E2?#j zKPdCXH5%#$zkWJ_=b!QB=NaCgmxU`y`c7d|-zTZwaI#rgLgI#SuHuwkOTKKrf5yJ1 zMSJ@CqiZJ`tqb2dbLsQP7nd*cdYxP}bKYI|_t{mJwSTTSPB{1^ev!7hS!dbeEz)oF z_x(tEWLx<5*4DOQgWRd?{BkPSWNoWVN^hS$>1p%zO0a~aWMl5_mA6Y)#ptOw#U49; zJa~D{CLQkO{_~GbRCd2`{rYyzuQoM53^x94WM&U)&YxHLY-U?+c6!hEH#eJum-{6q zB{c>6zd1KP6mEa_+3EjWf$whrV<+fr zfA^^MbJWjP@%=p;J5TmSLx=V6ni^WRK9Bz+oO@SY-0s%4Z{T6O!0$I+UbbACUY@yS zikGC9K~I#|`4Zu!J2;JQ&EPC@nZwBbaoN%!&N4gxjt6C70yC5s@A~T?X0Poe;UN4) z-(t$mbmPmuM$x`=I*;qj-fDVl+r=M8AFD0iWXCCXG5!40)6+j*^48BZe|k2@{D$IX zAI1Y$SBHN*rM>>ZrZpLNUtV5b`2Ah1uJZW{7X<#jIsZ?GE8wFIf4`jVq3`?u|DCpM zQr0nW1uDASZ*JGMo7;NL@7D<1|NGd#I5}cktA6cE?;nT6_X*^NuMPVMs_{TY_w`qm zA09BCdb&w$f^y4&>-+ze?)iExIwB&XL4axg|3A+^{&?JP{^s_dKQ_;vKi^pY|6j)4 z7cVs8YCgLD`L=z3?={hGS5TvO#;jRg*Ve9E_sHG;m*Bhm`|n@eF)43xWOARpec$x> zI!n_RZoIpKw{te6dRQO7%46 z#9TYJ{^YjI()Pcfn>!vAa(uogP%E}}&6LS%MuM7Ptv7E*>geb!*uP(X^5n@;1%0WJ5m8aEye{~@`1A8KXrOOvjuoi8 zR=)pt?47;U;`5#-mXwGzH#gs^JDMbDY-}96*4?X%negUT9;$mId z=2^wD<<2)}op}?Q>1h7&e%gn#-TM1>EIc56z0~^N_Rzuy>!nz9wr=`Y%^=%)YuCDF z`TzUv55)iX|L?seFQGu-|I_;a_8)%VpL4KXe$LUqHzlvEn!4_5FSu~%*d*HR+SBLz z=;nF*{^#*Ep4_`820ePay^i7h?LYr_PXQ}3o1dGudZOga2rJFimyAzp%*;13x_gAP z@X^X8SDsi@MP@jf1y(otSajxCG3uV~324r+I$d*FW3%t8pp&nZuWD{>TAO!&o?Cpp zy_nea-36yQ%a)&>u5Zq>XJ^&dSA8?mw7$IC{XVIvNQjx4`PQ$E8x4DUdzZcoUK{rD zUiJIZt+L$Q+!n>pctD-D+}f2Phdw?&Zv5T4{M{Tg(~#}2EUUli%&U0R>C(_A!1VX; z-$2Wskuyp@K5~_@EK(`_bMW9nm%pn(3Euiu)Xldx=d)kdqy{oCzSNZGlzGrR^YYxS zUS2y@uRG2;t7d(p;Un_`*w25z7 zz5n+{eaDH+W#9m^Gu8Q;nXNH1c|lrZ=FT~H;{RIL?23+VdzpTwL1L-S*4Y~#e(^TC z74GI}Ryb{rL2Vy{g01Reo-fr=7e)Mo-UfSFZ*5z7Ie12DMyY9(mi3Y2VoXjy%oi?y zfA{$Nx^lkFo4*&ny_IS+=f31kn~rUVr)q~w`EhR!UN)2KYL@Ar*ZcovpS~=)cJ11S z?e>2Zr%m52pHTkqPvxH9?{@35OV<4Pc-*4+*_mZm9$WZ%|E+ny_j}YVwioL5KRNZ{ z_S^`nwmE;;`u(2f*Vor?-(tIUSu~^0R4>-|`+nzTUGRPJ>FMc;?{~`sSLWDcdrKH> z`FX`*)|UGsy{Fz*|91Z`yZ_HmfAc$8&`^;9h02eY|G!@=Gl#5<+jYWh^X3JuYxHiW zZkfUAcCtix`IgShH!^1CGbE<$;ml8noVJwZ^^3@oLoa7(U6s;{`N49&=3S;Lv)>$7 z^;_GI`j{IW&sKiCob8{+W#3A{QsWI%l#j}Tt5HUy}i}Kx7Vy&_vq2l zZj17FG2u;|n`(YMY@ac2-Z5_dJq?H3`PG-PeX`;I{_gJKo0~z~GUocOO)o4Iy#N2- zcTh3@@JOd{l9g0?sH45o z<{#Sa|1ffMbNjwt^3AfZIY#gL#eMgG-}`>+*1uO*S4+=|)7m0>+2`k#6_2)@F^hb9 z&g137x7+{8mgn6)GXL-L|2=;XE62X(1eb_{rSBfzk-1m*`hLO3LqFfvbW5D|5kvi-$EiBHItPWqE-e1>Z(57X#)t!( z&(Cezz>@OCrA{Ja@ix74HH+CEmRx!swq5k$#wkx1|74BXStKlE$zawpp<&HIA=4*E zte(6|RM=tZ>$2NBK3=}9t!={j=YgxQZrHVJm!@RitdmcRZfwt&|MlzF1JDW`E-^8& zfc4k6?~%K`ZDalaIuS0`DW_9)baZkwxIH&U9NAa&Ym4rZ&7;d|A+Yh=F0bdo0s;a-};mP|M`7JhP?Q1%{^-B^D}qzPMdl- zc)oS(a{F?j$&=eRq!(};P1@MK7cvF0Nat#n=xJ~68T+c)=g0iu5VyDEKcD?yaYFTX zy&SLKkgV(NH`i+Fu7COezwOUkac}?c-T%2664F_F51cr1DNE9A+3bKSwV7|u7-g<^ ze`u)m?>YO$11Cxz-`}&TrL|@s!|}oi`cD>%FZ#PEbM+S=8{MxP9p^{Ot>3UPXi?N! zMh2PVUw^Y5n5?(tOG31ela)nDfz0-QI~IQSbGf}DMsIP9UVgdpgI#*ho;@=#H{bsD zt3}`CPbD#HSA?yeF>~h2sM;&Ls`mEP*zLc2Hp6pm*zHZpoT^F@60e247yehfrE$Kv z@Zlf!9R>fI*IjXkw0wsDayBJ#d4r$fvtI1>Id-uH=5LlHHc8zUOYd*tVlK(MyX&q0PLZ@e#-<*#f0v4F zWA>KGvh(|~Ia+4^y%ixZeK#S;q%LvU+^biO*2U~wm-=zyrSk=o&s)EEKheU%t|i^y zu5aVTg=dmMYdW@oyy8SR~;%eScW zJ8$2@l*Jcc2hIN%rk=x4Rb6dpV$l(!_ndtb%kK)KJM1g2zuHmuwn{`nIQ2|p&otiO zvo0Rb=n48gCvf?d>GK{h*t6?dzmLJu&^ybd+P**i_@lGXr-%Q+g)4P7f3GZ5dkk8U zSu1nA@pBlb-sE``DSB$!Oto;M(%yrf=IL^Ja*;Elb~Z(erU;p5zjP;{AD=$v$&YswepP$+{Q1Mme^rUBr5ubeSsQhj1cFqUDt#hry{7ao zzx;UDm#U=`pSriz@|`-wwdsz;TMe;><9&SzMM)w*Weh9=S|(WAPi7Dltlbv6I&_NH zQd#q-Q>F-A%_^1dllkX2p|dn|f9aX~f{-wSkXtrK8Z2uwYED0+Fy~6@Wgqjx+>b%$ zYlLN;)$)B>Z)Ug5`l!~kk1;?;bmHcsQ+u^n>dGEJdg#z1ql?WZMbA}Iw`%J;PpE5N zbMS|!X@f^nUY^|cynDQ_!d_36u-qU&Sy)-(-u?Ey&U-hsuq&43i7_fEDdl80cqd=Y z+S+?x`)&%`r7e?xLOMC%jN8#sX0>{5?_wX_EU_6=66QXevV8Yp^+$_aBg1Q&y}123 zo3j~oboCa#v*?gp$G_?F4{erLrtFu$r%maY`{U%NHPg74Y+wCZ{m0ZZ=0OQ%&lvOW z?UDZC>EI=}b?x%y?7{5E4fo`8Ofc%u7i!3OT>?s2+~+?BtiHN!x8%gAwcE}HC!Flr zFZhRxgY)foCU6-HCEnJA-3q??Y}X2%vqi_syeuR4Uzz`n&-kQAv36$8{57nBzD8D2 zb2!|2(;P*TMcB`6sR%y(qF70|Z{pwMf2>z2&w1wc>wn(;UDIC_OOzBBWHH&=?$ubo zj`9ueN&X-yc`31qI*w^*vq?v@++kh<}h*h}KkDiIU0FZuS zKg^G{%$n$?JNvSuPMKZ&;_r1$I(gN~lvt&&C-YbO90iS@9d=)q@VvM# zO>*L%($JM5h4tSYv)X2Dc|7~|;|AHS{dLk;Qt#-c{#o?!)Bhdi`D!!1dbwPV_hdMl z#8~~EFX{a~N1MNAge5Es6lTPAnLq64$SD70!#~w4)q8o>t-jv^|LMBCpDKz-7&h!9%&Y!x(vx}3tH$|i@g(v+=?$+}Mxr3Ni zB)`8WXY=_?U{8<#g8cW2BGup1dQ}7kFRl|vo4@jE*6dk--Ml)Z)^5vXZy#s&x~=Iuu}CDlW=OD;dg$|y?T-Kz3%$! z71v+KuHC%*io9f6zVm3Y0so>h5Pr%?|6T8wfTdc z^X9j@b8sX&ax^+EZ1~t2xMuCz#EcAy*V(2zdUu>s{|e6erPUzCF#Y>O&|TSxjS$|bk9+l`v zS>7?@>JaoYlSt)MRe1Vgp=M8iuUodTqj^@5tb}A*l<1jjUw%A3KH>CJg_en}Y8KO8 zTkWv_&2ag9+Ln1)p{}(TXR&HmNy&Z;I(tRb zy9G{}UAp|r@ZR(L-XBo-t+YZzL#n{}Xl-}r&aPw9(=&=D?-1-Y-}x;4ipnD~({-Jm zSB|K%UGH$~EmYjmB&}r4bB5>enltzAme$pml$UAPQ4_o^#?Pdi}!HK#v^{)nTD7FYVAqXD+a{-0ke{|fwsjoZiY5r}|>=R`%RlTJ( zOGH_1_wIf8^@fs^==YFv6IXSiZOPvIE_R;pc3T@G`EDAn3x3Z-YU2Kc5f!z$KTA` zzB^sKd)N1OA0Ja){SJncN3J+3G#q}pWP?WguC=}ycYVXd#l2kJvX7{|0Xa9RBKYI} z&6D(6kzLQBc%_p%7820tq(1<;*5mu3c^KYObov$jCUdVd-<1>a~RuY>vhf zT00Dz9wsTY9&^ZM=VHEW!pY`aRsCnivQ9JK>|I)GO(!q+NqKvVH_V;qFhl#X*Pjb7 zykU;qT*o{!jyc!j1@Esyt>0IIwlS%L0-VSA+o#0Tzvnj9g{$5aLkfS8*A6!u+ch5B zcW?g^=|!#v*FGj{nUn^X%vzS>X?AjQ-Ws)>zuk8_f=+Gd%2)a?Zh7pA)bi6u8I6~H zPF(WinARo6wW4Rwu3ZzmozXZWX;#{bBObFYWcVBsXDxgrb=bh-=ab}$hd-x(_+Ij` z#B!!hA=84FFJ7b^{w1}g%)PsAic_ZWn$OCuHf(;&xt%o?uBhF=^f9g&uuUgCV;)BM)H z`(>{^+_@^>oHX62Y4vj3;$GM9?#tF}691ba`)cV*)2PG0-|rRQx2-GY&MWugV(znN za~B3?it63FDACsJ%s2PsudUK6*RFNW?#*PYO#GNMr;p*cpZ?LOMFJcq3%4G7{>6Bk z)%;RvslZd73J;bq*})=WVrrI{)thN$u$B38$)}H9r3-vS`T}Ho8IPZ{7g?^{A<45K zL}35^>AbJalQV?-jbrkK*i7ZN3$MR^a!c*%i&9%w zW@cqAS-4QHol#k9RmN+MOE<2_>ZN{acU$J1X`wg$&}$>ZX4@S+%+t@eUZ3cGw#~Ok z+FGh48|AFB1uAA!B0`s??q{hsC@h0C}=X%FF-j=hnSj!2j3y>z>|O_^1<(AB)` z<8|-dJmK?ZEb}}d&$8C=@bw#eGP!+y&oXGp?wxf!SLj2#+ESy#f6d;yIzNotHD_X! zocaPoUt!}6quO60*VaUWqV1HyiIZni?%d#HX)c}NXwQ3l+vU5=%5FUe6dHnZx4g|* zzI%0dR~OeQuhlmGc*~u3VJ8m7Hre0#Oa7_cbylr9HI&RDi+x%rfw$KNbwSlEegcTS$u+~1%*nKwSnlt6uUEi{ z!_emCjIaMx?}I#uXcc$RdRRktc96#l)UG@OPk21JyWeFr{b0R zQikBgAsS1Ut=`PNCC$CsTG~9vO_O=4^HGb1ROA^5*r)l{d_kIL+GxwX`|KKbV-C zZB9E|#j|wL-!7F$E%6;T{OhK6UgC0|nUeNH()3jO?X9wx&n(zy=JEAK&aPdzKc;3G z)pUJ)Y<%OMh|5LaI7dCcr5`O!kFr`md^9WLzgbSi`Hoc+E#|xnu%DXr_0`oLN$Y9z z=E=Q!{Yug@OQa>e@lwXC*RM~WJ$?9TN$c`;T({ct1v1twUb|QJ`--fpt;-gs8N0T! z_S{SFG353a`bm;SI>dr@l&%VPtPjLC0!By6)-T3h9;tZtn+ zc{2G}V<=0rtkE z+qiqvCP7exB5Ydg;fu@%mYkfLA+vz@0HcJ4&y;WN+d2JfMQ?{6?%1ekl(W{%DU$D-Q3Ayd;QOntd@$rg$J>#}*v=XP=FM}2q8 zkIoFZ#o{C4c%Y+%E7*DslVtUR9<{1?on;E@m-KIM3D;XL+IBAoN{^IwQ)+p;HV6&&)Of8D*#QEz6X*K*A#`d?qI)aoCJx0fI7@>?l7`N(4DzvUJ( z5C6I-oS|a?p&2@gk`}bdjA|oUJTKR#()migX?EFR*ru%*96v zE|x#+Wvf5XAJkQvef?%!-yMZl=Sw)gX^L^&kMSzXTCzfQj>hA!m6C>=Cf(T+^Loyl zIXp(ju?_ZBv%da6+-j&bE1Ov>id%Skn(%c8dFKvm&6>XZ?~luK9I;(EFTzf^zB7RL z{JQ%w#XDnm*Q^7TH*C}Izkh!`5at4Cd6Tr`_2v(5ivy!vg`;y^%`ZNZ&UW`{?A%rq zdq~hk>P&NFfri0Wu4%DFyYEg3pYpJ5_sP@e5A&#>ev<0s+S%+gzwf30l3tJa zl9-7;Z;YQlERp$L5_T={)V9?5{}inz1-LI>+q$Uam)4ffW$z-K!)^$bl-x0G6>#GC zcy)pn*M)teo`)|_s#JzL27UjN}vGL}4Uz>gLIe#xte7QPl*^I8aRa%XAIziR&zM`c1_@knx=s9|C z)cscTQ}eC}%`Ta&^V98U>hX+(+uPpetX;Wu`*QK6B3_vyu?v_UCP|AwaFdif*0Yjr zX`z+lN`(hX=9d#vW_m8W&Of8!a+T4Yt_hs#Cp1#Mmu|FLw06zxe_g(NByX5V$zD(U zvo$E}#)(=BQ2SG2llYZm;@7pbU#5lEtw&Bdpcc@=tLYDWgC<5he)KedSbJ-q?A*PY zMWHPNO`LcVU=J=6t*G)^L=Ni3qJ32=>$nxcuVvBbz`4_I;I>P+@&Y4|X zwcB@jC(T$XXFG5H-$!u_)As%4f4Belv4!t0O_*(wX~q5j`?f8|YkqyK*4b70Q112R zdro%x&{PL1#yd*pWX@lC?ZNx6?OpzFJk2$yUGsd%GVAT_ZI>@xXbIxusam0>ucECj zJl*?Y3Co3LlKXZpIeEHpLBNctM2!Z8TW_{*%~2`w(@Yh;dPME6O8heKX`VBk7XO+Z zH2H_i?{jK*m-z4V3^z~#MdaS-`pJ2hrn#s~gxdB+ZthPxwa@s(X>Ao_?e=^3@}i<= zt+=_RZ|Z#g=ZnAJU$(RI_kzAW|5InrKL4^lp25M*O)b6dv-O`>;^91{+gk*f8s5yY z;hR^hBCP)Y_=&*elc!D{d|I}7@!F|xdAI8Pe{p}$*Yo=?-@0X!Qd?p*cTUl4^?SY;`Tu)bxNG;Wwl(!gp~7Q+EhPBcZJTc{vlmGAs2%?j zsaJI^zu$T|@xrA$9%;*jmurXkES}PsSrxfEO{tEtf^sPKR4_2cCng%Yw_6Q z$4^h^z4YUo&h*=|o8OjIx2@4XeDUOReFx2>zfa#w@IKqN@Lk`H?wosj=0(@foRJnB z5pt~Z|KG)mFE1B7DzMo3rM~Xe7iPX=4?X5wwA9}}Vb33@V}0{aeN?ZTY;Rk`{=e?` zRoi>#A59W^SNVcb&1aUx=PJKEz2E0&9Qtm@D?!t$v~Q;QQvn$5K+SwqLq@+1D}AaPg|+ z6DQC1cS{o!kFDa3ojZ5UkBpacuNNPG{P148eA1mCA0OJW|NOA``^vRzmu}cFL6Tjz zEdHvIa&s+5W zRIg)R%5(15HP@Owf9_wqa<2L9AMX9hqIcKCZS9he`(m^dg~O|xqtgI>xA~kPQ#0*7Cz}TpSWyI`nk1FHj|0=C6-O#J#!H+c5nt(Dh)Wv{oHZ1i#I;=R2~^Ye8pqcUcwpU9$W2AlL5KgSS(DS6A<Fo;7R5-Ca`;EmC55Horuv{B9Y0 zbXFGIUX+3=y>05bByH)=HPN0r+j6xz)$=k{&n`Hre`5KfO*VV%t5{o)Jv5kMk||`& zZ`IMvZz*xuz^Que6sgxAJ{WDhp|UUjVV-+`Z~U?htw=B5Q^}X-Nblc&J~^2!bAFgs zVYK=lMNp|IVV7jgnq0sC%htIuo|&y%|2?eE=MCC_G(0f#XUD>KO#)0mDvlau?_IDV zr9bBLgu{HQ=KA~%$K`8v7QSFhxL0`GsPvXe_H6^6KI@MywwLT7i5nbsZN}*)B5G!V zZ61$$bLUSrnQZcrEnuP2tYypGZp|_?-gK!ou_aGQQ}kDGY^-lunwmyyW)@Gi^tO^& zEmvl#%rxpeY5wqf=qr|)GjebDZn&{csDJA*uTQByO1^(~7AkjqG5>2+`5$DH;T@HK zbsPU1dF-1z>-gi%*Q~AC%eYpa4Ca5Z!Sc9K+8vQk++7@OOeSV|$zNCbSA2bX^h!?L z{BM7P&sp>bpSRF|xldK!=48CwUtKTFwEDLa&t$8mmOfPu@Va>M-mz)3djGuqzWwrs zwPw%u+`qGZ#+o;Crd+Ri*{WXg=VEnx%APX5_Q}oswq1YuELvV&df3pG7eDsvtzN+Mi7M!nQgxIZTWw;U!O0D|GxkEU_ye!ZNH}rA~&!3s;a+d#)kWk zKNkG#U(dE+^XADtJv8`bZwxZ)k0 z-Q+lVUYvbf;sb}pN|!xeUNF73Hn#irTQzHI>yq9RB4M|BR&Ttx@$`|-Ig3u37e0S6 zqd251_xFscYu7$`e(e2q&fJ^c*;~H;TlnZub<#HH=f~8398rI8<2R^)?s%wacTGQP z&g>fNt<#>py;gPgMD2|Y|4!e1H~0GM$A`SvKWt#;@2@_|gH*GGqtoSyu`O-JLWVOPZ{Qu8u z1$1a==qy~Yp@nnuvf@{g&x`-t?td^@^gXYa{3Xk`XFgm0{KCq)K0Ksv(W5PaGBqy( zZ9d$dJ!#(TGw=G!Ur&2s;XbBQ4KZKC0OF@9g^p zhxnacriAw`*;Ay_e%7+@c3mm&>uc-YeE-UR$e}Jy&EK|xdw(@=<o z%Q}+LXYosAUga-;o6pznzues4_;1e_ch}IZTlXzrc6PQ&su4r%+}JfyKV1*~`>g+m zZ)#{L!<~Pxqh}QVcqn65&No@j|E4l(Bcu43U8?Nqc_q$E9MoJN^`2f?AgT7X^y?P0 zYXK9o7fd;(5KFOr@1D$4(>=)`S{)Y|D^n&=$|*;Wvre@F!))0m9dNbsJB+v zclRCV{^O_p*Zt=WRsP1fVE5|D-|zhukIuT5EWzj2BXPE8W^uu8+c`DAnC9r2`~Um- zZ%JiXoVs8QJ;5gR#uR@S3ute$wRevuaaH|*N_-%S0-kFR)D zc;$Nj!tKkg7oMFT_gQw+=Fcb2om929p1$Ty%(342r_MO{NqqV!^w0MDUisL3(Ysr= znSDO_DK+PQTt8D$(PvF9z4SLfPVTrXcklOi>D^b}&%JtQ&)ns5^#;$j)-IPl(&BlU z@yB=T^?{o!V=on7RxRk6Z7_9p{U(m(#vweLmZmYw*M2awz7=)i}l{O|vl)q5Ky z@@sQ@x5fnp?F@dbsk?g9wd`D0n~!~#?@IjaY8e|F=0BC+bFz(h^~<*}mo3>c$(hf# z>&zONO`D2;{CjGj{_yE@wZG-L20UM$FWr~NebaK`%So@YvLp7s5`OhM>&4r*istJl z6bdghsynn#Bemd_QJ z%e~W)d2CtU)M---54wsoZAkl?HLvE4{*>^Lf*W@%pFDj&ar%6B@8Z*PFP95IiWN`+ zb9kch7LWR7^~5Yy*|}0$MUzjwHq!j?cERnvy?YGj6+HAbnDVKKQz9iTEhyG@7SH_i zT0Wdxr|P^^yR`O*bm)!lyf=S+X66XbR}r>P6TM!S#OU+t?T^oof6tl`wpe)D$@LR! zvbaE%B9FXgS8?v|NvijkY<_cpeetK4+!~r|7cAM*^uPRbv(48Z&3pc?SKVzQd&>O$ z&vl_KpN>91z4Le9|HZZL(Ps>o`v0GJTKwOnNtd{u&94x9zyG)Xwe`L}J}YkSu}iF4 z_W$?My**O4^Db@D+E;n5{9@GSBgx-Ce!4$@Q{F$V)PRVPITz#{iZ7SVn!WA#o@&D{H|dqZ75ewn=g@z10E$5fbXzy4^hdHdmK&F@3n z0jClU*8lG?U2VU(u=;O9kM`V2m$>@uf97QWp1J?u#PoT6zB*BVt{jdjJiA_E@A($H z+tMpOnwjS>-@RIRy?*ngO{ZG2=hU8CdhMIHzK!GCYZ;Bbwyv4kvkuLk>>uxtoo&2- z*F&ytc{c?%zi&;Ke_UT*XU^KH`sAs2(TO*UD;|Fp|0VPPom9_x@5kS&{{30LJ92xP z>g(%ky{gVksZIaTtX(r}>Y+wk_kS`8U&@eaYQ_ z8d`jRWp}T&`?z;+&BM?iMozW6em*xB;9*;NTWapN^($6Ha3PO|c^rOm+;H0yY2Fzc zqH%4@CmrIsurHb0)O7yho_PTWdD$K?r7kdJoZQvLwaLgh_p7Fr)#J%Q3ugyDT-ucr zUB76r;<^{dv^)a8waokRNa4{fPqiqY#gDpTC*^-%zV=A5(CN}iq90!D*f!ziGEjdq zQS+mWb;767FqW{`I$%VB}59Cr`ycy}4ZfWU2VP4$qhi zw^FJPKM+sjIabl#eR|E;@AqqsGcWQwC_G3%`|3Pff{63;6N~+q?N}mnsMGTN-?tN& zTrSxA^ZfqLe;x%~^mlVpTRx}op4_YZnqd=BoA0^)KreC$sP0`}sL%r~Jv= z(mOt0yWSd<@8zYP6gS_b(*BuD;hwMQ|0Opke{&bg_qm)B{dd}yzkeUU&-2#U#h8(q z_oOxbe@?Fd3=`d4Yv$AqcKYl0?XgI`$a^4teocbtZ4uGwfnjk|zw7|jKuecwY09oI zV^2Qbx-75ibMN$u=V!yqcHjN?;aAO$L&4MDW_16x&i}>u+xY(yVaAHmlc)FW{&JsT z%Qm-emd(XQ-#qL=BYU8n%c0mJv99OH|1T>KosZRyp6LC>^3917&WVepoinF=6aH{L zX%n;WgmrS0mrcvtwd-s_Za>@7%-r0C+qbKi%sf$lr6*D=TK<>+aeK>k$-*f@|C#eQ zT}xhG)?sg6xZ6JWsMwh!^QCW>otalB!pR95GOOtRJ$Hj}>$d3aIZx8B#~s%Z^M|4sU|1Js_}QxiG=E$@?x?Cp7N1s_|3F5dqc{LR+j*^ZOJ z{2e#-)=MOQwG{ZUd{3Qsv9kQ$|7EBC#@Bt^xOHB9#H2DE=2Q)P{nh(>#CD2`sK~!} zsE@lebJP3AKVRDJ8znuFVEDK3N&cUI|DwxQpPl=#Z1>u)_wL1I-!ei~#nkAqMc|m7=oGIq(Wy^Xy}WVzQlY2C$>nQa6<^tXCu~x=p4!BA zk>o!6c&-9a?s}+w^ZSmj+g<+0Uf(aTkIpv!{_h!E-LJ>oKVLMz;QfB)Opc#rGUNVT ze*^jE)u!AsQ!@YAd{E)Eeax-rrsnx^><=}&xwt0#^G-c?Y5Tv#yD{=y&4%~3uD0L4 z?C8zqcn9G zQlBn7G<(;rE0=v3*ZfLyy<{@8Lv|a}#<`wHZ-qMlt$g_=WBWB*&tujX=1(tK=4ag@ zANQ5p$apg+%O9IR50vEo9?ri|^*y+xtToZaIp5#*bBUV&T&@F$`R!cJK9kCxf4FRp zrAw_Sq5@6YQ7|b*X?aJ;PHn50jmd1j+pgrOnxA*|p6nP{rb(x$e#Fct!>(n*pw>_CX z#o5n1O!JT+Xj*xC%KfJ+xhj7DT01%B?6cB4J73hVlro$p?DtP>bDDf(5L@I;%a}iV zUu$T~AAGd`pW;KCr957zwHOO5WbS-DU~FA_cg~#}scl!^U9r@*|DUnEPu`>1^j?C& zf!OVTd$jBRXm8q7Jfrf%!!s5y4DQALvht3r>FSjZD8KdB!6Y({q@CJ zW^0olEqTc>Wm?#Vy0_xZ*Y>}eW0SpiU0LybSKjFDOY~DDUwm{E%I8>q&%`uu@rD&w zwANI9ylG#2lm9>e_T#5#6i$xZTEr^XKYh=iLv>%b@6-Eh67p^3q;E(5FOqn3{`88A zk1aEv$*B3=>u)+FWVCrx;qJ-HH{B3!Q)2t|c~aN)=?7h>$97+SxoG?H+17bG`_9|{ zE|`Anmh9ebU!=+{_Nr-XcfXJSr_Au`^{XFuYrh|#^Z0Ak+OO-*owL0b4lU0>?Vq;A zu_r$C`B*PCXjXfD?P`P3hg~LZVIpEF3ri>T@bEuSF*k2tv*yl=n_82~gs1ZlpZ2GpWdRyJQlIV%WsImJ23Y%jXoz&9DEZ7{Bh9%Cm~~*TpBV*|_5RvBH~jNn z7hS=4|HrkXpx%pxj31w6j$FHpSwE;VDL%h?j;Q?Cxf?c{f37lK^Yz=eE5Riu<9cRwuWZT{qNfMkp_hrB2i;vgxdd2dlObZ3IrDj^`nw$+$c#wY7{r|GW zXx*c#PkrWXvR@sxZo!r{r?jM2uD#;%d%t_wL;^i~ZXs?XO>X zY|)`io0Ic1-=CiWsCH?Nguwz>Cfmu`maulsgKRYe(m=1I*;%es3@|HJR<$i1&F2RuBx&-lmfVE$-M z-!ICAsuFLi&s1MZsEL~r^ykAW>6sRl_6)bmw|rb*zwgAVsoEJ?ISY30KJ4{vrpZ%= zeZ?ma{rg(VV5h&bM?!K|-s$)6pUyRpzqizk&CB_(*($fb1xvO}3A}ps&-F@fhKPR$ z+xPr#ti&tGBF2lwwXi=AK;nkMe&V5$#=ZVT*Uv;cdCR*90Fd*?l|Z z^RuWauT-pWd*-ccKX%M*lTq=>lP9;_&DkWn;KhzZBHBOIVg>zn)t+27>(%NFYJX>3 z-hTD|cmC{^Yg23Le+3tSCrBQu-h4m(#Xb+iyf^uMcfa3x{WtSIe+ioy_zI$f7e9V!{{{Q+GKbw2#;_-QYZfRn_duATl`oEmr z{LdGoS6SI?Pj5A^+`Rd2)cJEKeXDa^!pgqv;ESGhGGT*w>Cc*dcKzQgF3THVc>MP5 z%Wcc1Yia4RCOB0@EuA{QEhr$Yc4O1c_}Rx_)T%xBSfQz}xxfP!spf z`hmde7in*2O}+E$bZbf37Im5FuWEKT{@b%;(nLY8-pt%gsZWnq^h%orm=>`puXg`9 zdH#Q%>8D#WXWjYpKhLA;&y0=9j2T&3i}u?7{H+5Tr-Nn$4nv`MuSpt<7rC0Z%s1=N zbM`cdlK%2*;c9D-vNFE7^}roZ11}L&izyGCZVcJ`im!t zZdkEn?Y>(+>fippUd@{t-EAAMswn|p%kW|1x(R0A%6%SvdzYD;x#^nm<|3hQ*}0q6 z=5esN9@lE4Ai>GvJC$3HxILUI3w zmQSa=?#PvYdHME3NwC#Xqq=&h_(>|)BXR|YA&bK0m$ot23W%mczQ;=F(jsx4qAJ?7x5i;ahSy z&nvYY6!`FaZE3vQv2$~!KWwhMtHn@M^m(P6t=-#?Gb1f~?xiy^+>M=^b8ko5^j~-4 z_uAgQlE=IB(35AP0bzDZZ$Ca(e>1!6e?pJ>rTuT-#H?EF{Pyd&ZyV}zUs!!Djn2rs z$9G^xVepBQx(o~QUO(G%{hl=MvESmJTt>c=XZgOqw9UNi&y_8|*?)bWc6MQL z-_~o&=HDLg{d(;F+ONs||Eqj9o(sPi(0l!9QS@ua;up(iXJ%$@x#r#@GyB_(lxh3E zc5SVDHS_sW+ixwC_jMi?oOQMA=KlEYmt5H{f8t-%%IYptTXgDiQPJm_l^-6~ZZp5| zcZt&&lP_x3CdkgK%6xsTxAt3UzR896@lQ+- z8=T-=&Z-(58G3e&bKi^2^~`@OJ(sQ6F(vuge9)xe`%6EWUoPgiTe8k|z%7q{Jg7$#!D zqyDp1wMX8*bJ3wm84r85iQZ0Fuixoiz486_{NrUBYMyF#KbP&l9jK+4o3{Oy*KPf3 zCjTc_Q#{RU{o7T+&2xosW=Jb{zEZ21V0@k6ExAzJzB6kA9-S!g*^?-6&;Iv*>(9YHH_Zw!m8|>m zaeaYRZ0)!F1@`)!&#P)M+*vd(*t5vS`MO^l7ZHg9& zU-!!>#9@($mur`&$XnUDYvRM3oquZTomsHNLfX}!N>KZv+9amr``h$8V~;I4;4(R7 z%hn#>2`{ggotaVo=}t-R(XZ#{Ot3 zv~6PE=NscPB`-;v@7vuc zZF^d@^W@pn>gvlI?(DfR|IM5Xqoaw%eT&Opt3^dgW#(osTDny8t%y!r;)J<#y~E1% zZdz78dGci9)VZgBbY9GiKh`(@(4NPB%hzsgy>?CQR#fzjjf-2q$*$!*dXCu^G+LHy z`Q*alpX*ugCx4wje`DrjDJ$z+oNUY~>CcT)Z#DMFhTEHgR=Thi&)lf5W@&O3ncj-%Z7zG}cQTTs2j@;^+H%UyJ+i-#?vaz3%yO z`@OQ;Zy)|MdEd#NnZ-Xo{N0|BcgwHLPcL}6tcda23ybUbbnm)lTl}~#`fu30-?x?L zeEXW8EWvjF@4x>=M*`J9{!Ev@boZ)fV4OD`MJef3es<)q?UgXWnkT6&7 zEnMARGpnC)ZrN&f`PL<$=xF2IwP(M4`=+wR^uqi5(f_MvKK8TWUdq#F`|own{0;i^ z*HldZ_RVZl@u!(KUm1?|%x$?gtA6i4rQ$vdySEYSzdj4C-;<=Wb6d(h&dJO8U+(|U z;BWIyywCO_OPWlH!qvs@pU<4G-#)2;i;HW9;b#S#hv#E!V{P~UI_m3uD<0a20ChRq zxR+nM74|_;Y_i$nHMwg|PZ?Z@x_tR|^EE!6=)FE=Wn#j|!jmN&|NLWUY-qg3wX|eQ zVD+WmuKQt~-Z`~_E|)Vywph5{UcTYh%G}*|bG5exsD0gd^4`50Ec0)u$p5PO6${ER z)yq$m@Bh2J&-SL;m(z-6)_2S6%FD%Uexip+fSxWpZBcu_&e|0 z?)&#om#+WEyzk>$?=>!Mg38AYlAg?%^4x{1_6^VB2mkE%O!*eIy!P*H&h@eX_HNF| zyEX62kH!7Ab2p#gYmz%V`M9s=tf=DG`r@BXc6}F$lV9=CjfI(!LtMw_W;t8%x49F) z>{z#sPj1I^wQW~&Jgny(Ec-5dee;K1(VBXi#~*(@=Hn^0F}3)W-MaYgU9+v!l43~Ugt^QJ^9g- zze#Qx`o?iDWoyq5L8cePLDQIB)~&xvxbzh89uYR$Kkzd6_QKl#1A^fa4X z%4w z{(JuDebMo~-wPg`X)dskk+Jx^pyjdIn)vfir`OrP3<&|1HlS1isvum>od~|Fwe6g8 z4ZnujEY(jf@o$V~Rb0M!@!YZAXbJOmvlboFnX@iVN@|v-?zsaUXP!+ldFggs_id-q z#SL>O9ATMxBe$%sy8N84$3D-}oLx_5-&i93d(sD93(q}*f1iH-dE&&01xuH(U%CxXYr%xyee7Jn;(vfSr z(ve?}9PXVrL5#ho8SK%WQbB0~BCS<@HkUzcgMcXWO^vkPw-M^UnEPkaddu!f(YE_oe=1rU|Ok1{^ zwIAQBlq>!EdfmbP^$`c=9Dcs}e~+`IVG&Q{P0Nz<(oMP1x}aQr{r^WD-LuZcm;ZIz z-#^d(e(%YNpZ$2%9Yh5_{9d{C?wL#5;~s7epQkFpbK%OB3+tV_8l~1>oAv9LZrH@@ zw@kG;fBfY3g_t3YtsJN=c z^FBMTO_$Bht$99&^^E;X7eBkVA!>dzeagzrbkCm6xwT{B^tg(N>HmJ2#LkU%z8i{M zn(&q$6kVR3b5!=4^392}?H<0p;H%KO5EPuJ|Lx@|NNf=<2&p)=^3R@{W4(9VA3c)M zI<=`_h1ryQj8+|q7L)xGQ|J3>DZV_m&wkl!&1Z*i-F)h>ZRsN`+4{L5zh1?coY}wk zvo}MG-t}|;Hs8}Mes<>Jqi%h+2cUC|*YEq4wg24dvuB^qtA5A$;P3bQ&$r#q>%JKu z6LaS6_WScb)$G6TUtDZ_dt2_~x#jl~UtU`J<=eMqHvhie&R@P`$Bb#y#PoK**;Lo} zZgu**J3G(Jx1T@LIDOL8sjLrYTW{UEb;pJ)5>P@$iG8d>&jJLeJ z%-8$ZFVXOrebI0AqDr(G{It)i6`fXBd+BzwtH8-W>-XO}yFU+{d7g4yKiSfqcj3v? zrv`O@Bt+EK>h_jwxf&SrWZ{kz-AWv{daiwTS=P1bRrMp`l%&adZ#wl)PD&J-oct?J zsCahv^;;e}#-aZw=}uO?ccf2L==gs1Cr_RjxP- zmv8K=wFaF8czT+ych#8}7Z+>l>n~rqa^?NnKU$hPI#1f9^Ae8r9Ldz35)={=Qt<6& zdhxTF>7On*^MBlZ|8JhhubtaZojda% z^=A!bEVgbFUnelxO8AyI@4`SSyV#GMw|GQv&q%A-rE*!tT79yn@UaDF6@LBZrxV#ci_3xr$mdlg=cy8Sxt(Cv-ax2fO1(ci!3b-{Y&wK-;uR}8tl#gMti68EB=h?<#V3C4 zGCy_h+_QJP->1#5{l>UpqG^b%Jgk32?k)ryl1&;oCOZE7z|F21K|dI&Lc!)-*h+wn?_` zRP<8+eTvWScx3r~;ruvb+pinj{CT%-e!eXG^sCY{8&__7e7P>?_uE{puTysmet)@q ze$n5r*VXSn|5y>RA%Rgmu0qjEv+mpG`Gu!6mtVMeapUpdJGWc?|MPk6qS>n6(+VE< znqRtlRkZjFGr!G&9!X=+*|MH~ethCF1&rR)bS7#}Z4pS~zqzGQS=p_R$5&8NZ{NnN zlI_zA@Be>f{bYK7K+CzNkn8sqCNbzldqJ&JvgT^$+l}PHoiSIgT-i|bvq*-I-Ced+WU`vClC|~hqut`4UoM~jZMFQ-qeoLxQW!Rr zybNM$bh!06zW#6Ny^6=Y47YCIzAX2;z+#4Fv0CtQKUH({>3w~CVe8}0Zc06UV`H-W z{$J@5Y`@>{w+~+Cvv9?Vj(PLsUcGt+I(RW+dtU6R&u;y4XQyZeGk}i1eevc^%8?F1 znc6QGr%a!I`Ocj)pu>TeJfAjYib3_a9JgMn*3(ZHZQMAq-~Qi>e!E{BmrZ_O&1cwt z`|QJZdB4(9Q@i>7w{As&9QNw<>)&_V1e{!EJbX0!*fKS*t}YD?jfM~BJIl_(*Z*Pmd9B4V0@6@RxN$X`jlP2k0 zm^ClXJk4NA)8Y{RIQ_83u0GGw&ij38=U+@=)c+{k?b9wg-C%Nwwbi5}$CB6IFOPmH zl=0^Gqw}hXJs;mY=0y5+)l2+WG|Rn};+q~86=k)g*7C)IW>B%ea?Ki_8|kyuy2bUM zU5n0Nx_!I(%b(ohdMeu5-QsZ-jcsjgdHesCx%En=zK!2kQ@Niz-$t%~tDNQm&*j^< zPhY)m*Q)c6`7ECZtlRla>eQ)ILf=Zu%09hV+z%>Em+Gd>w6C|D9$O}wZ23otA#5^m?py=n>@>fv~c<*RGhF z1jzr}?XT&YnyR{wXZ}=`2ob$g7o+|!uX~HO4T8tIvwWrUA@drMQ_~8Vf4|wx&v&>n z=t04(C*mmq5i>fk**18t2i3XkzGv@l*;@MGd-<(PnH#!1l!CQX^m5yecI=t3WQFU| zZ8Nj1x9R>as}c0AzxB%hBJW05lfuiM5tn^bG%t1P{V(p$<5<4lW!b|Q+E-Hz=2krF zyi@snZrDZ8p6TrC>y|ED$hg+DEwSL&%jL!I_kN!=dGh3Kx`z!Swq#5UExCOAwzq-A zot6KtT)TGZ;zh=XNfTeadKD`dedMJ2{4=@R@1}{~H8D5;d^3Ii#?;edTdt*~q!c`C z760@){=ZdbBlm%&)8kHky&j(rR<^n3XOZ2%AIVnM){HYuv&FvOueYB$b7to6;xmTF z3qBqdPnKYd%HFkmw{YLdvuB^)tA77=(uadl7FV(oXxmT`VpMG^!XqeT6M2R`Y=PYB2POAQ`(r*<|nmHq$Jt{aj`0y+J z@XcvwrLL`sY+m`8D^K+o`gX1L+k-pJ7aresSU*enFh@{ms6*hy>1TM@+n6q2VQHSV zPER;}ny247y%jNT*-6=kQ^!ewH7o7PE-|zkY>Cfl$(X8s$*2l8f?PNP_kdc$~|3bV~c$ z?)M*g z!@TBq4v5FsByKId7McFBS^f{hVFOUL>u>inW&Y(ZPDK|lugLoCZu_r_sxCbmwlH(W zyKnaIt>Zyu7@|l^vhWg$7Mv%dXrkW~sv@+DbIC=o;JDB}x5Yf>Q>U`_$VK{OCi1mi z(m33B_^pbyu}9c4<}Jcoxc+)-nX#(b&fWAvtumUq@N!o8?Kl4aFU1;1a$c$r`_!8# z5mR!}_1d@D`THzY{({a}?z#NZCHw5v@c6UF=WT?I?_N08E4}m2r_+`H|9)qjVV*Cy zIqj_1&3U)qKI^l7mvC{B>y;~494vk&qzl)++x^~dnr<|kLs^+wcxwL*TF#I$zU{;FmrdMy9+kF-4R(CF zJ$H0%!$Lg_n6DVz>KAnL~d(|a81ALnw!fzD`5+RJ8E<| zz4+}dCAGH9A!Y}f6#+qhC6&0Kb} zOH_NsiWLj??6GL z<@amLPrbJNctm(k-LIDdeilMb9si6t5+3o?Z*Au)2+*3tBJuaw{avZrQuYTE^k-eT zzc_EZw(n^~x(Bn8@*nuh6 zy$#>0?QFaD@TJJ4srQz6ZS$O{CVV+;Qm*%(vRQ`i%VynLx-H1ZbZKeVtyv+@Rjc{i z_g8*?R(L|O{m7nYB~~A+_8P9=x^3I0f`^A@Y?*AE`tHuoYrnkp_fGkCqxAK)jagT< z)O=?hxwEr4aNA3lH`mt1dK*Z{O!&vz>{$2z_x;aTg8dEa|JC%_eDYZ4Kfmwr!vh99 z%lzk``||Sg&L5AuD?c1$uY5AmUFerd`Z<~GyKx?qd-ndw{Qvj6e^t$@Mbd{d?L|dJ z1?E+0#ZEl8Ds*+ww#8F6{n}ggHS5~C*xB3e^V|O^xb>G|e(kr&Q?;h1rZbjxCQ3Yc z{`~vRX#!3zJ?C=Ms)M;T*lkw{?4Kz6t1O&Pn>XO4!n6PB@6SDcvf|a={(8T!M$u_% zzui0{geGk`xkw=704vK*EukHY?s4xp#2x5RSSj+gYsZ2Zy{;V_D@4C&E!d$nTZfBF zqkF=JR+W_dlRb@o`;^ap-oI||>guXVK1R*=zkfazT)S(P-`rKttiD!VUBBnmlQ#b(-?4~%C5?Kk z6;mSDD76|NJALV6ccj5$rcaK-CUYB%vneXmgpTN3_90!_Mx!Lagd%1jm+PgbDP0Y+L-MV$^ z+S=&T+g`qWdGqPxoc#Rf*P`>Ef|_S5S9UJ$v+8=>Z$A%&mn~D1l9Kvy59{K8|BD~~#5s`<71BY6(?(05w0hnD>vPI zqh~p<<4?9l0+)%{?HhZR_RhKNxZheT+vp&7cM!qJHBdh6TURvRbJIuNnOG~rLv>mxydt5l;Cd zBJo;$I?GCft3vr5InkDL)pGccIn?r+sD>=PGRH%*SN=?}q3dzAUsX?czFamt>8)n) zvVupQ>TGYd*X?M^y}j*i0=`N{_()8~eME{uwbI<;@MQ7V`G zuM6!JpJ(5f5jm#v_51h9r{CWBqIuCU|K6U;<-ddkCB43WEq!B}YbADinXYu9kMxYX zP0OUSXB9Na%r4ZJurc!0+v1WUslL*U&HKtBi48(dyn9xA&&oKLBqdLsrANf{{~k># zkTK}{xNK3E_}!4xO`iVCJ5}z@_;hG$!OUqT!J4k>OJmE)#* zzdz%I*e$7tQh2f9AMw^ z>(%OPyMODR`E#cBaQ@r9UTyM8migSRhbHu`6|1eS{qwGTKd4#sc-ibcrP*gctt;QF z9abUycddNwmy5H0*Zq7tJ^8I=@iWlPH2Tw$w&dNl64Q@6^XlsA%AZfCgWBnzpPx_v z_vfc|Y23wZ>AlaCln(bEUAV7K&Bkj zE^3>3+vDzB`QiWx8VD)rx9MtEUd}0zfPW>y#~L16_}s4MYI|Ygpth<0)9g=|CZ;I* zOsELn_(E;xcF#A_)z)^;7QWNAiI&#s+@kHfajMPryNfq(HvVCgd1=Y4@7;N~FJ9c} ze0<--Hff8eQ-U)xG9L68pL;MZIxq3;EK}<%*Ux=gzQgF4LE<5nYipy!OMk!k;$59p zwZ;V0Ra&`x-XqiXmAt>-?bh#m%))AZv9Ru$@%)9mcUQOf6~0_Loz2yJ|DUJ&poGb` zC(c@HR#9;7DQ&@tw&yfMZ(h4qJ~nJ^X8HVrSp|@D#zc{YQcePEAjg@~O1m z`$A>k+XvH~uZpjHK55&UvNsjG{D0hix3T2qr3ar2kIROCt~)MQos%Wsys`3gTHVL) z_=f2VK2PkgNooIeQ*_Zvy>|J!9}TzVE1yh!AiDWY#=}5ey&VsjK;64_JD<&(#qIy+ z|8E`9bFKgH>P2tU`BC$rk^S9;ietUf$KTxC%vkYaVf&9~=KCWzzF4+$WoCPy;MIHg zB-sG+)Z^L?YA6?k$ zeq0aP>&(S}UN+<`S)uHa;<;{fqFc9Nz;lrq8^gt}OX=|CW$LMIIQepckIGZkTie%G ztf{!|(kI)ucw4RZ_QhrU)_*FQ^~92AUH<+H%RbF$zjSJt#P{-aQ}xJ=L$j`S9`mlFPn1cXx?42>aViv@Cx1rXb$>@j-TZo=J&+Uar@& ze6?cn48vqLhVOUF?@#E{o`2pr|DMgWv$KzXJT7nl;M?P4y^j|(^D!lyon?AZB#Hsl zXlpL6`F;C-+}8OQ7rPf<@>DlWJ2T_P_lqx=#?^d0+Vwkqb7Y^zqYlR7(cQn_@0SNP zuL{3hbPvD#4RosU^_XJb_chP0%TI1}b;){~v{9|-e~RugU0vx{uQPJiJU_6Lz2L_} z;|<#yjvn23H0b5pyS1L>$lHn%M`B=|G*`Q1T~GFt=3t;-(&ov=3eFVP+gy_ zyu4?i{wpspFTC>RRGw`BcQu;$cfyZEVR!S5Pko)cN1@u5>;3zWW;z zodaabJ{)8Zzw`gk=kxbdgPlRQ5O8vJ*!_L!KV6jh=e^JKz8jRkivdN~ot?$tAZ0s# z?A65P-73MqV&dc7V`Jqee_Zxi=XQ__5@=h!#@utt_XWrGe}34f9X(A>C^CDa*s;E| zpZU{twz|p$dEzCBZLWv)xv+xOVP~sQvyQ&$*t@ z(O9*zYR!V%cV|~LPuD0qt-HP8+067w=b!)lG=2XW$@Dn~ZNJ|+{OaoJmoHx?K04BQ zX1001`QDelSFT=dG%vk)egD6&bM5}=*Z=fBXY<)-na|8a6W!%bzK;8D_3zj9{mb&A z-rn5n>%OkG ze81=O45L&o2G9xok$Wl%&;EVi0UG?V|MQT4&)eMm#ap*dmCoDIxcl9%?smDVj;Y$= zk9O%jKHmQvR0e*2et!AZt)dO0+F=E+*KVKowfyPS@S-OZ-7np_b0&QMuh6)^ufjj? zzW=u`_4KrdyYx1vpMN%|_}s&<>+5YRE_Z;&0uTPXd-tx*pAUy+s^4q`dHHLwfpiy_tDgA0HjPQ*zmN&;P&g)8Fs?{tR@Szx|Jc z{Ght~<%<^yzrMT#wd3bhy;}J|G|;vCq>D>g|CHa;AH1(!x#P~FKH z{kRTtZrOTDD!EBSI$nqMxZ3Tdi)QaEo_)fKHSK)nk)sK*-pBlNKFTZoyv_d7@+qsW z?Nb zy;}Y9<;#a_HlI6GD8py_C4kTN%Z0An_Fu0A*L>`bU$S{~@$&w=*RLN3-I})V%Tj&D z4;TCErnt*hs%*_zwsGS`ZoM4~meqmEl*`wzhkv%%mUHuvt9a~@(D2x!I|?6Le7zFf zoYc1@{_m^sI|YY%O~3Co-uG?m`oQq;Jj!!6Cduno1nf~?CpYO`|pKiDNqWEs# z@4Q{RcL#5;{`GSC&r{+14*h&S|NO77ugheg8@R|3~>Xk(-w#)q{qYK;xf%*6$W<-@ZMkwz}Hd{CSg!iAU|kKmF@r9=btNOjxP+*D7c-w{o}{}`kH`DXJ$>Y?wG=(qM*TvH8DFk z<i@qey*5x=0wT`BGz62}+r+?m?n8;u;! zS;=+O9|ILnLQkZ`F>M!Z{ zL8YaoKC{hwKR!Ml93OukG%c{ZOgA?-w>rh9+9^3%d2{;tv@kqwfOJaEf%UHCM+oFRX6e3Pw{i>D*jK3 znKq@X;NR~qc7}*e6`$oK_QKEE?dUk6?Y=a!R&VDMVe6~!L&N{_Gu(VI(f`8{^|dcR z1wwb0PM={(iO9`8E9Wnh{CR0hP+g;k&da0kSK3Ib-Sb=5zx?Qw{@zVZa}I8EZoa>L zkA8jRzq!1tCJ1plb$-@}KXyD_==pwikcU%F3Qg0A+_b!X)A5qh(vMey{olS!oRXQJ z{~R=KuJ>~F^5yNU++uG&{F64%OL=^(cXx_T^TwK=Mbq@-_ucN-Rtk#Ubm983f7_@)>%n506BWwl zTw*)@W#6T5k`*&`9(2}iPp);7pV9hUevR?TTCLdb7qebizQ6f$nTv}{O1kT^sh{j- zx>%PjPF?uPb{0~Yb?}J${knbSq!YjN-&@scDFquOq&3Y}K0NzofqS<0mRv9Ey+4+1 zt37@DWvk8Bx6#-9RK6Uk-Xi*Io!z@nPV-J3bq947=iJ=1|KZ2|zqf7KB9gn4BnhaOISBLa}U~I{yx}{ElGAzVym(Rd=~$COdoQ8i@rzj;I`;c`vQOW#+*z zQ|HY~4&Jx;&#$A$=Gr{>3J&k==s0mg{HJyPr0oi7KiZk{kps$&W%(9^&P5X|KDz%% zGrM=`k;LH_7bAJpCSI8o6E?p}OLEfWdA}y<6nVbZw(R>P6)5m0@znGutYw{DCa;Wa@ZqV! zhs^}e78?ebw5=2_-g@=Uly9s4GBDTgY_5H)w^gQQ1OJsT41O*yPo_F%nj!04uj2QI zF~H*L6ki|H)W0j28Hn^AUh+|LPK27zTTP>jxrZ~SPZBnG>oLoxX4T49!IoDqP513t zZ}W87pWi3GgosxA_4R9UT2(oyD=B?C75H^OB>YGeIG`US{g@{w>=|;zjPrzYudkvMuGtXRiEHlQVKub{=Kf zX|^<1CgJimrMxGN6TV(5STp^SP~Lo>O&|Nx5AE~LRmv6meRa|*Vb58HYFp>tvHM%R zMSu1S?bJJ_9OrDd>d(Fu{7?CO!@Q@5>Ox$u4C z&6N8gudFSnsn|9O3kpi!)Vfkj1jQEr&*Gi~F=A=s;yn0^?RE7-5F0d zYJHngwr=aP7c-7Td<7+hloT!fe`_oHC(dd?O-X^*raiqP;J?f8;}hxQ_YIkgzpq!G z-n?v$vzT~J#GGKS1Dc%6d^j$}AKJdNd7He~|3GoGwQxu8^X-<*_-zEzieGhfcQ6vo%a zoMsj@znN#+GPdKV(+m%G-#(^&h%?)D)&8@x%bqS-dVPuiPJai zB@@0aU-j7Q_3BH~?-CF7f%13A)%VPkR@Qs%fn;k4Dfw^CkK5N-PMSG>?EUX%wshr^ z9?iWI=bo|T{%9`0G$}79#q-JUEnhFbk=fimEyN=4>Eq>J1@~)Qd@^h9 z+uKuewUv~Vl-(=-2fcj%&mkA$4+trFPA2#o=NFWmnZ*(=KJ!fGp3md)-`yW_Ilb<v+jkBH`-&XoHtZ$BIi`gHf*gBcs&F5N~G{gqfbSUBG6u zxQ^g5zs_vGC%Yz@?Kxq|zjc57&%KKFZ5SCSFDO~jB+pdV$s{1Ca zaOT|Cwf}7Fy>Ht#U;G*ncTzY{Rz`no?y1|MdLF;_ease+4c}qgxiRpg%;~AO4e<1eC3rQwY=hz?~P+ey2E4^?7zP$#nb%Q zt{zF&-|vFspBDVPsC2wTSJ_y1X39#>Um}4^U4NwQXmv^Q_u4(n<(B{2x36N`SZ(Td z`Ip2zG%D;mDSr3sA72-jlorj^OM1mE!z03cUZ4!>C#ptAweXi6Vw!QnSs^;EBze!S zi5WLLv%Tm4{;hkoY3aU$2UWUUFWrCU7p-=*yZO}Q{6n?c+p|Mgu79#|QL<;BrqQlV zN9KO2^*(BOQtyzUG*217P5o>8XA|z$2M7vIRGd_uaxl*>>5E;Xtj9ixKOyAAhdQ(W zDCux^F1hgIqcz&o8Xeg3t4H2V_~qVP(f4>JcnQ~Lh>H5} zS-C}~Co6y9bbAhOu}eQ{Bi>6bjc>kWKix;oec!&$dF%8xuuWdiethAD%Z-m^jql&^ z$=`2%VzYpt;6&T=VLyD1Rx35lK^;OpH^)o+P`lm4ZC_7&>`9W2)^aS=-63(Snpc0l z=7ze}snzonb7y;3mv4H`m0uqHdg~%rotMh1kGLHZjaK{Jqk2K5UtHdOQ@_F9WuG*> z_%HrZz0y0Yi4lbaF~|8S>nRC7MK zwInZJefs+4D@$#9dC!_$GdHe!6ZhnG)XLN5lZ`89NzY=dFAx+IyxDvyPv+9(-$I6s z)@7F!;Vx2AQraDQ^vGT z>sP^}l|R0z?aRD*cx@xkyS2sAGAAx=t~JfuxI9PVLBIhr-I<+@PTAt^vX;x)UVJIkk@mk-Z+M4&KOv1_3O$l=@Sw`AU0<{SuFTLZw^v=>J zDQo3Hwg1R>-=3HkVEOTwTbc`(9Ouj*mwwzddU@6Snnc&J4Vlps`}EAi4m=h=#&S7a zb$Q9EUk5bzGN{hs)4Ek&5;O4|L$I&v@@Y~Pt5$yc7}fLr{QV^%CBeJ$*k+$JOgqzZ zsr2Mk!>T_jMK`UgtgKE(d0*QlvAtuX*zu;ohrJygCpbcPN?6!UO|L{Pv({fZA{}q? zvn`_1>qpwQ`8AKlU(WDY*csn->1ybb?dKg93ybZknEU&s$-n4(+ur1USn-N~LC&Iv zWl5iW-&6~^8fWIu4Zfx)AO1z+qA*{1W<#@VBu>gdxq46~O!Vg3K8 zzOCQErn6g((&sZ5&XJLgy_@nn`h-aLmCDOLs=qf@{R27Wkc#lfteww2yhTJHMGKgm z_)uf^H0{YED)%D(^X9CV-80j7LXEI*`p56uYd`<1{Jra>fz)fYRZ%%hCT|gRGuw7? zAN>C&#JmAGc!-O{!Q8)#=4bvpYzxMV2 z(%j8uZ=>%0>kDSIc&VHJaCQ7&ud~1RJ(gX*DeZ04v3}{}vE_FyTNdB371ND6QvLt2 zJ>!li!t&2;-&dZWCpW31Ct~WQudD7ByWE0h2M}$vCUtSA-qWU6QzPzp{W<$4gVV=^ z^SIi*k7gU0q>`0t-TNoP^vGo5X#zrX+a3BAk1qPOKdl<&9aJK)GJcVbKCw{~u zR(xuat>2}6efG6e({y_~)t|7mcZ>a9!typGM}2zgb0IO2pZV+LYd&nW`THf_;2Mjk zjDRyuH2MsOk&LvEG>nuAHo{j=f#5YhB`t7mNEJH8Ar@6ztZVy!_3yk0F~A z9y;Co_pO|v;BEQ7!#khXRrvFJvOU~9|F=y2&(qF6vn(b~)ee92@?l5El@t2|Hyo@D z^VCIaKW+yY9P!9wlk=3O8Zm>+^HlrJ za$ivF>=Cn#SFW2E{CJrE=wck4x)=cip-va(0sUU1GQ zrWFq#t@&@`%?cX*)%001VcD&}K}9d~^+CxDh7Zq9R?ZJ^Pc{1JBDr5ytj^`S@XRo+ zTY7KP_vTl3UkGgxpZ0CT&dW!|fHfxq?F zq||Qxoc_0!KEP=9{ZcSrtJNyU9m>j|FdL@wT259*Q7(QQ`WwY)y|L8 ze9d;!{AW#H_}(nJ3;a7Ij`fu`R}J6pUsBODxOv)n}R)z zFJNl{_HXFkWp((>%-$XMB4iRSKU3Okt2bHgdGg}}QPXtZrmo-n$;8Csp26P=DScIS zIm^dOUmOX}I;0|P{G-goRo$w0s(Jgg`qW;<9dQhOj~__n-&*StFDo1UGUvYE=@o@N zveum0iAO)F_GIPVjQt<`rtIz8w|8p4-?jOChG|>=eZTB%?e$ex7tSfU%m1&CY54isKl#dvK%KZfGvfcf3fGC>H>Xort>|WI{3HMGcaP7yn*HN*{6CpD z)tAqj2gb+qA6Rm7GN|0)yk`61LGzlJjgxBZj_9cHE_SU4M zT<>9jE-WqoG#$F|4)&p#aIU!VEkHh07R(l1i~pX&27Zm2uVmbdHWvxM2( z=X?=U^Pe@PYLEK7iYE5|f6~L&NBPFa${MGidvZkBA2eIxT-K+gw9nwra8xd zwGz|$A-yAR=EUh8$qjvdZ=Y+kBA|L;rs)05r@F1pJf{l5RZEuYiumRC#VTN>{vQ=N?|tj~n)&Qz#l+5w(PO`MR3iVL?&E27lY?yiE9BM-T#GvQ z|AhOFCzJfyS|uJI>wP-GnUAweaa-=~V@Jj7=k&)EIA(41yrR4P-l^2-wUXCM4Ub*8 zaYG_zbLV8WWomPL=G)DEd3m{U=A|c!mhSUk@A~t+e%?{g1_dc8DT^NunrB)Try1;9 z>OK9_wP3%*yT87!{GESqPpk0#A|dnpe}dO+eNtqZc7EPjL3bHPZ*NV`mm81&JNG)S zUWecI%ZCZ`PWRoId4JbBJ^4R=f&a=cFZW-*Z=Kz?cb)3<9^81`$K91TYxZo*HyaMm zurAm8StED7^yg9ix`TU?<4*tLl`cChDloA=_M-K|E!Dk^sHNf@%Zu!H{xQ!>N%A$i z*_Lw2cSFhPZ~bhCBV^Wm?aEg2PL_$e&iJ@urGDS``OMowa*~@j&U`RGdvA-R&&nUi znz}Vb<9<9gd-%hnM?C*k`<7y!b9G%HSb>#`}dHvg~@NVh#;>W%AObOT4MBXVre;0IIxw_nc z_Se_eJ?yXF)BN}Qefb9Iyd4u?uiw8gtA2X?KhbaZ>+9<(Z?Da{ee2k@ZMrtQ3m6&f zcYSmd+rOow`u$$@8~<*-uW3K3ubcGIyZgsY|NM2AKA-!2`2GI_^WW|6*RTI+6t+I< zxfv?SF0T|M=taQq8URzV9oJ*py<(J+E?> zyZle-)!}QOoYLO!sWy4x?%lJE@7Jp3=H@zA*)?x9-v2eRT~_Rm-*MS;9frwjemwi4 z|6Ee)v-`Co;rF_AdiVa$`@X60v0Bkinfrg9nMdr+QmwCl6FBeR^I)CWT`il>+i^Ff zo}O0tEi(Q6v(<`9|DzTyJ>eqs;m}J1?d?-5P`X2RQXdC0c{Vfm+x-d1skNIg|Hydd*|uKkpSP~>JEg9_Q{~&=Gc%2MJ{7lrKEXNO)!(0g z`~5oW`@gPT-I)7s_y4-OudCx33*PONe|GDAjrz8I>(=#k>+P8kqjwyXHGOBBeSVuC ze|Y-7FY(qk_m+B3FS=WL{ra9-cX#)rrOqFt!$0@t*GztTdOGum$N&Ed{{Q#>zg)C^ z;USj19sjDVtgLqa{dT+Z!9n(&{~OsWE=%9Hc#+)M!J|{TctV8eUA3JjwRK+lA&omf znX2KPleO~47LSvUWp%T;T7Uhnvu7fWD||D6-5*p|P3@3%*v z=l{2n|9j(jMt=VD?fd`AzOVoPJ81jfC&Ke@EOhFa{k!LOVe0HhHJj3K;A9}Sf2^TV)v;H2lZr`tHP?I7$e|PS3uKalw zk2vR5JnEFaXP>1}_d2WY*XH?*1&=t@r-1lTIh;&eQp+}wYl7lKj1xmF)Jk2v7dnId$EM=+v;i~s9 zBw#|(wj;MrUYV!xQtcuif7nl^SuQqxoZq%iQ9J(0ZuTXK=;-4`2i_c(urCzi_3gc4 zdgb!%`>yHVw=u3eGH+w;@3L$8Hv+!iKh`@t={IQ29`k`hnR~U*W`_Q*|GxXY%H)$r zzIhklNNj&Q>9ZtPyG)V6*RNkiuge=`hkdBLyzE0%WcJR-efCTrwr&3_?d$6+`ujwR z(Vnks)tNU`d`!BwE_!>n+y3IVN88suS-E^(($iB@8Rl3X*!b;kdHl0;bGZ*V^V`~h z648}qx90Y&+~AXqGI&rhWvga?^{M-3`6fp$I%>Mq>>%^fPnoL@)jjT?bLhy7u9N25 zsvh}X2sSA>Htm>kRf*ZQd;jYU{v4UT%F{fxdF6+hE|+{&zN+i68BOHQKTxypIKpRqo(f4)2MsxHBB#8s^;HE z|GG2X`uieEe?OmJFW0a&`#RsR2qmShE2mXV)?wSWGTRj?Tc!LsrKaAtDx}2OYf-P~ zlp{-g1zo)^_QrQSTE1Upa{i*=7(vYkn#qs${&v-^_Fv7vf4lXsV--nr{#p2Z>I%JS zevxl-xzgoiSMP2mSIdaQGYo|fNc{R;y>fl_g4*cYd~;6*SpWTU+4B1xe*UcaUteEm zHqZ>55PWh;=hC;=cqfZYznl8^*N>lZKkxsK{k$*wR@tBZ(_{3Gzqq(K``*36IbE;I zp6Bm9XDxQ%F#rFl?ehP!eSdG=zCBn&HSZXHJTxUkvp;@`(A-0(nuKN7Z@(v>{WiaEd9Sgq^om>i zrvBy<$`?B6aB|(+ty{MBE#8`{!`HU$taL-K>HMPw)4nbf))MPB&5hR(VL0)(Th#5x zWxb#GiXL^EzPC;jXf<}uEdO^+QhiSxs2y`cxo=HneD+jbMJ4Cd1x~X*Y3ic{d&-Tc zp*$}qtEyaIwtiFE0z0MqD)N(lTh9*q)VpzF(ewwE(>vd0Y00hpb%lSbYj@r%-wCca zop)4J_OZtFgd06MyZGphkHT?=t>%-L`y?Jd*1INd@3LiY!`DX&zcHWl!&S*SwJ2rP z3jdlvk7EjtUT^ ze!TXHNpy&Wf6<&wPur)L!(Epj(mFdQb#LJGu6(cG(FS7O(T6MC+jbT|XWEc+(FGz`URx7syX3KiaT<@Xx(~yHkLq&r zmy&s>-u)SUex9xMk3UBq`}0)Q3r<`p_HU|wJez0z!MC1IGyfo^ZI_gaf)f{Zvg5=VVyk|c_?#?#dO2jO|4S2xi@ov%!aCl+qqtXxeXEGQl`uQ!oQhM?D&GxL z?e>OkiQTvN|K9`8BcwX)pHAU?e(KY0!)v<_ZL7J;QTFT4<)-u3W6Nu==GK4sE6+0j zyhZK534N!{D=(>hSSDZf>Ev>)yzjg3|4%$|{L{J1_c*}`_-MCy_}y>kcE5YH@%X>E z&s+RRZsV#*df0^?83;C@D3kH~qJ-TP{3z(dFIi zH!<+7TYLL*vlw`^4MI$0v`||bp!Rd_{BKE3?QSpMesYqW{HsILly#YtmXE91uFT9V z&Hss4pKW7WXBv^b;o5|g7AB@?N?(oCE_r^k&aw&*-WFdpYvrfZf>_^2GQL}096MIk z7d!XKmnh{Mpq+i7T`xbrnO^_!VsZb{yzkrh+aB7!?{6-{GXMGKPO8t}6MQ^3D~HE! zeeCXSkIL59zBN4f+}plB^VO7~`aPfh@^(I*Hdo4D*Y3+f{z)fO3Sy^!uYbV2W&8H! zdEf68pZ|F8`#<*Ma^*6|W&gJ+%7?Eldzydu$_VBYI=EpvomU#T{UTM^j)$qBww97@KSf)Bu=B$w^3a_Nyhdw7jP`MpZxf! z=wFdsHH}jz6HZ=oKPKXJTZ;Qwum5uq&E+fK&Y9f2QpEG|+vLa3XZY;fcukF~;!*gg zsY~|lnaUzP87FegV_|pJ($U zb`&V`+x$=vkN;EXXaASSukv+td6vyqi#Hn%|M+oKocY6zwY|B5aD9g`}st@^4rby%1PWk`8&J|N#o=iQT^y2VBc4zxGr5lU3 zAM@YUc~3t==2W*GN|9J`QmFF52X5t%if~oSSzdDH!rbOznyzDO58`VhuO^MfZ;~XEo@P4-AR`w zH49z#kPyyRpPbjT(&X+H?ae>H&E?m1Kb-Y`yl@9CY5F|>KhymGf5cC1JN^7~&G%c` zm6xUO@3?$CCoAjGB5wUB()a(Uy}q{o`ITVr%NB3c$^m&!fCiG_-lwHlQy;u4C)8W^3C!U>+2CZ3aUb%YR{&!aAET88v$Q*wN z+7}Ai769s=)_%VqzcFLk%9Wk-|Grs%W{#!tx7ylT+xNBatAD)ouRpda^|Zy`o_h9# zv#+l9$lK>FU*F#G=e6e28=?&Dx#wbDy;b{^(|bq!$9J)H(`$m)E(k|1GTXS-BQuhP zR_Z;?JrxwMwe(Pnr_t1Fp;_*e3bj=4yKomRy6jh(-xbZHzwg4q&)rrPWf#rnMQ)k; zd|FQO+he{u5j#4zW}7FUV4NAT@WO*jwU;L4J3XAaG=BYp6KWG{9?zfN`}O0gnm^z6 zeV=={w*Hs!`ue}GPhFEtw)nT>@s9udem5=ZihT$QG4cIBSfiq&o8O16i#a*VG&||` z-j}`kPtNn(9hiOZ$FYQ8{0+~ZrPu zak}5ls$`zyGRFP(|332V`*HMB)3k>P;eW1ycDvrIe)n)j^0TA+>c4DsPk!quto~_v z_4}uvr^lT-!YO>}*UHtawMC!V{PH+@Wzp*Y&+9FIzuBCTk->57$CF_HYc>0nloq}a znci0C_HYvSHJA764?US3o^*08QtSJKcK^=<>i+A)tS8;D`pA>9;2Yoj?8lh~olR3R z)_SeHag1f9@kOV3YqAZuIfUo4pSRyGnfxmw_g(t0xM?RRs~guIyC;!tup{oS_lzx* zeYSBPo2pUYx!&LY=@X;9>%VC3oHV!g|19x?+D9a~>i2)D-dOhEu$|{*;iWaP+xu9# z#V%aD=jWZR-7ZtaFXT3M+}x41G3TaHT*XJ%UAuQl*rxHY%a#OWHJ&Wks$KV*SK542)m1GiX=%{F%F+8v zB6L2z*?fLe(owFM>#2W!aLSb3Se=oRv*xA6y4RcP4zoo?M`hh}cWGOHN0~e6?P9yH z6BRA}>g(+pp2u5QPpS|9Qj|Zd;Kjj(9Y;OG_?sJ7@B660;2n3%M&&W`jQP*-!WRqM zm(|suRGoigW!?H+uj(02{5q|Aa`*mtOtX zuro^G{n{^^G!-AcwEcJK>o30F8yw{?F8zN&H*99g>F&C?%w<0F&P+Kux%~FWO*eD0 zs(fZ$yLK(Y>D;_+=k0!PIB)m+&CA3$8)833`_D00xGZV0kJ{md?Q&5c>wVZCS)9xJ z`##7eE^&|juW356GylFYn|xx2WYisTgEHk~Hw*;N>#MDs@=YDo1cTwjeZebVw4K-z zY<;Uw>-M#f+vfXZPfilvf8pql+dBPILXe=~|U>XzIp1W&M2{X1<%}78SL8V_`D?(IoB*9BSdWj{8>s zwz1ROe?i^u+=t>%GM+rv8gDjUe5ra!b8Ckh>rYP`(3-!dAK$g~N?o1reKYJzKe18h z#dojb!)NIyDw z=z&FBjh(#M_Jji|1v2fb-f?P^b5)|RpE;BszofQ$d3X%-UsrP>yI`q)PtP|CFa5X_ zR4dbLxYSUR$1m%Wug%9}`rkeVgI5bZF}N3B)NWUF&e$U7$WlIO-|fnU_M6#{gO)47 zB220Iv5Rne&B^y=X_EdMJpFfhuJd1Z?1Ae37UnGvjWnV<_k_sZG@F0kIQ<-B-25NX z8~*1x%lF0mZJoW_0on#`rlCHfU-`3bM> z+PE?I&&KaxzFfK;{mb1TG}P;o@1xN2V9lT4)n?|m`M)slmAKu!@ovdR{@OI5X+D|4 zkG^yN>PDVVGAc@$%xQAcWY*l=-#uWkdwWhSDNzhBV$v2RPH z+T(!uc=!1D_zm^>`TDkd@1C*EFq>;@+ar6~AvsyhNASdk^L4+Iau$9$a7H37>h593 z-)0FXSU640JZ^USRf^V`9nLgm&e>D6)m!z z6;U{)qoaeT{#b;LWK5LCBzCEdYR^UQPPs44+E@nQ=OBUjnm(Wb57Z~=KhAp>0-LecCYSUwk$B`?z2lb zcd}+zH-||3u*tN4(>v|>+pMzx@SO*1OZJC!-neu`C|~Eo&8r8!_4j(z*UPgN#Jh*QGt}ZSqJ3jvJ`)=Hq$H!96)c1AynV$Q?5ARE_JQs#kg{B-SSS4Dl zGC8|PazU(fqDOA+%}rlZlSDPuJQjBD(~8rYV3;6l&=)R}Y;epV?+(kZUB4=yy?lNn zd;Ln2?R^W^-d%XVbi*;m$wz0|Oh`Watgh#K!5N9;vz1Qyzxa46c@699Hs;Ms->=!K z6Thuz-@UjVP1))%FAOI(DM_>a;3;_fMaIv?C1pt=gLhwQN+f%P%=86I%x0)w_TJaM zobi?Ze&hdu9@OBj>8JcM>`Yq(S_~Y+a z@AWrrUCUgs;o4D&h}~(z*Tga;@1EGU_V&#^dnfDOF20e|wv6rZ)E5yl+>d9!zPah@ zr7IEsdimb@E25?MER3@%QrW9EL-`P>N?Ld!KI*+FD`;=yyl2U|0X8NDKYKyT7e$t8 zF4bw{k-Y7DZH;pJW(lqxORa_9^Bw;>^| zXwoK=xvOeJ_4jq=2hW>z`S$JeudZf$D{pvUvGi}0dw<&cy~{7%x#O{JUE{g3)4zDx z+T&y{w=azFI=ykJ?6Ka{Myq!A2m11E$nls-7|^2cOvj3XmyBo$A9y?lhTzNv3CTNyR~sjKV75z{r6$(|b%UzeHXZtszuoqYLN zUd;QmUp6MszEOU^@X71X7Jk+@m?YZ2zP^6(?q$|xC2DyWQx6^CTslQ2dBe5dJvZl- zt*efEH<7iviUYLLGU8AEu7d|R>RphoaaP*t&x*1jO1VAwuvz1lDYNE^eo58(D(T)Gx-c`CLrYTY-X}@n`;p5{QGB1Z&Sz8MoFZJ>co@IM#SAfo; zw%*$tQVi9&Q*LZZwLU#?^oO zIxbUd*^7M*;dhcwJ~ir@Z@`x9#lPoRU-r`v%6y5Zu5dy!KEGT$5863t*4fWo>JN0?fWq0 z^zEtNR%=yUc=CN}#__J)MXefUA7l4;XjuB$M=sm9ukYk!^^Iv~rK+l{Ztg18?(MBK zSR0W&!zNS7J1*+vrqt6n^XJ!QWUSDaJvfD{_fN2{KATo%W@g%z6>QtKuU)t~S(x|h z1k=(lWnZVcy_hy{Rc}__K?}ZXw}S4QMV$#*`=af}PQIz&)**P2>i)iouY8Ze)&gvK zsjOW8+}m9G-rlyQ9({bq!q@-!vTjGN8k8G?PrH3&nR)7MUw^gspH}) zc2^?*^odJtZ-caWpA<(%MMpRAynXxkONn@9X6C_-l01?|Y%($1a_@S@*Vh+#WUsXk z4hcAs{C6qu`J=3_q@!QFXv>YZe)<00q8srawv}#}vTR+EQREu)+)x8Q?3eC$r>Icbm;!X3Rm@A*pg`Dy=W{=R(k=GkYxv-di? zb=Cj*$dbSK_;KC@-ZjztC)Vsc@hx}nmv2#BB6}Cf9A7P{r7Np0EOJ}okL4Pr$3C+! zpW4qC=Klb+09H*}>~f1?{f;LZ7Lvd2gkPSnEBbJUTJ$Z~ttgA{5678BS_tbdyLmBH z_23nMKA$-z^Ult`_2T_|ebL($i-Pq-U+?~9@yA9+T2o!CP^Nin+f?oF%~hrPbLalu zvR!{+fX0Qpu}37-WtOXYoZT4L=u^_QA}G*r<@0&(@DM~T{bakSzpiD z#NO#G%)3*&JRyZDguH2abBoi=jG{9OrY$?Qg~Rc!$I1&!a!-eGwK^?fXpOk!YxGl1 zCVfW2YD0dcbx(a~ZThKOCu@7ey&gZXh%EY9quF`PYE8_}nNzi|C$5d2 z)p07~Q|VWWzUHlJKKnZ5PEY&(R-9k7>UZXe?}o1%Hg4%#eLRTc+)@2~8?SvjV|+fL z=dtW{>u~#zZ7v^q6EF2W1Go7z|74mSj1X_`Hr2Zpu|ZPivireviyl1DNZN4hWBQ(u zx1gFCR>Ym)c%TxTd`dWl?K)dhu=~%Z+`Ui4>SufXUba1V>f^9Xc2Apom$Z{!zSp0^ z)$nKKyg!FzU&|jp(wBewSnlD-1z!DEPNeeieyuc$RQI`Os1{an<@)v0m;L`6zc^j! z^?RD?y^314>!)9Ff>w!p2;GbS>1n=nQB-!!uHv^jrtX*1mnHQwALD%I=wR&A1#=Uq z;lSc&WV+18aoM+R=iRtmPHo$27G_}_kmYBTxa^WeN3Zfdy{k7}mTl?kxvamdQ~lHr zSF@+J(`B_c%{H9&Rl4fN4#Ajmk#%Pi)*da5-5{1M^L~fkURzt6uU8%?_W4h!5Z+mL z?O1TZ7ZyJkmlT)Id;51B3nvlelEy-Nc$KAkc457gNu(!K8b^n-;m zJtrTec>VWEE-pKGUKg}jI9TO9TetJYCz<7ZDVr;0qvx1!yei{*@k(Q9b9MiRdrqh& z=i#}NeP%3t_GRX+TdAF9)>BG^eJ>iOYFbR){`LB9$LcRL!j_$%A(r>tU;Am4+x9IF zEF^Wr>iM@%E1Z_ryP)Iq|C_tt|Ik>qmH)y1&AVUjRX^h3@gmlNMZ|HbxuC!iwncFh zx<#vZztWzzI_dbk(2X%W#8{SSEK>3kop{f>WkSoBeY-#Z+qiqP@n+TCC)H+8xPP6$ z{Mnm1mc?l|%4Vj|XAk9Y*s3RVyf5|P`P_6tvFU9GR#}mr(82s zL&Cz6KTkV*V|Tgzs#U5IzE&a9tgCv3R;}_~vCeGatqix)t(TXjPio z|Dl89b;LFutAP6q!RpsH-jScI^E{!AkHf3c&c(@fDPL!&Zh@LLyWz~a3$Js}xxG^~ zEqJPpy2FAMJ2>k9Zaq7zj{VwaBj@$kPd;6BYfJ9)-TNz*l$2JLe|ztg#*ikl^qWC< z#ZPPADU2tJ+N6(vnt_}OuUNdCa!~gI%V~?#evf^lPewkIejBvoWKZ(^*#Y;L1j#vH zk_n&slg(hJ&x%#+%A$5UZeqL1!piFOqJ;0a)tpIXn^W>{OnR`z%m3&?XV-{rU-&s< zRZ4z2aLi@g^&mjP>5!m^4BOmu3=Zs!b8RQNZ{kt%6!KBqJm=-IO^Xf{K5}t!xsnmu znG({e64L1rvcOc!)ke#ep-1V0(2Ca|YLET=j2yz?Ti~FS#`K-Hh0`f5rZ! z6`TJ;Y8?m}_&B|wtl9nd45QyY>fYr~_DwQR);t^~vnXp#vgYOsH?r&&=yoeE2<%UOOPoaKUks&iPqrf_p~fHyy86%gNuvHzbgTf_gW?_SkscJ zzc%xypQ0vHc56V|7vu#si~fS{mh=B)>@ z+U*w7&-Nm(PtW4wImacDDPMf`+m`u8+C3LiIt2x;O*6XPyD3-q@Pb{APoEfucV?)Z zIIg9yfBfd=o!1^nxvtbq-O#teChuff@_z2L^9jl#$yRB*H_o42TX$+3i)Y|AuO=17 zs%AOepx`Hh+FDuyqLO_L46-UN3``tceQuGG^?yM%$`*^&fh<CI0nWc#1(oqQn_F zo16 zQcuWiCOj!rJ?{YwZ8+@NXW2;uX>5$nmlw@Ur7R%@oDVrbrdvYvQR1J)0dQ zuYd1qab}Zzx>n=)%={|{t%`Ita}RW1&}&_l`}=7{LV|+QVx=oLOHB4_>Fa4WUd-6S zuXyEVZOh?{oQ0-N3#f<qBFiGQ-x-$~Uj-oN~^g5BQNl|Sd`zr1ky{$)jVxtRvc zmGjpfe|LTQLjT+A{>|e97h@peDs!`0!Lita-sRrX(HHuRB9?ATwoKb|amvi51@zxG+L(}QCSpy=H*Vy(>2P|=Wl8iU+KKy$Ln%XczHzY zU5*rgYxdsm%X$eTiS_&bPP?4D+<)$&4~^j!rt|dod^=YYWB0>r`R#kvuXFeOJhhtF zPCeYIxvB8_i`fPDL(P@7Oqg!>zjZ!uDg4KFZPn!)=gkeZ_$KQ~_H7i8ZR}aXJwZm8 ze{-Z$UZ7psJc|ZXYqJNldF>xn_)Xit+)J*aD!$C-}*QAusx37u{rMfl?js; zJ^t`ziZug6;6lL})qn3we0rk$Z{9TjHFI|}{JkBov3>oY>t}zIUQe6;cl-WNvQ|q| z7j0Q26KEcD#bI-fR1*_Z;pGLZ4L064DDlp3f3d;iiP+P}FK!0^$oi{Q^Xqi^34P5^ z-%VgmoD;mwG9MNyurG~xFTApD;#3ylH zODzf?iL?Zy_f6zao;G3j?DiKoG+J6)SDo^@Ir-%crphP6t3Ljl;cPH@&c|bR_MRVi z6#1X!>FnrO!MU-vzd&lk>dqHiYwH)bC0=-4czUYv#~({>Pn3~;|NiBb-N)+oIdR-E z{KN(d50{n}%bfg~6Pl)RYD(PvY-Ce^SjMORb70NK+eZ7(Og#~NkkN5fnMcBg`_F>z zr}55zWcHzLPWE*r+4#HvrL2~wu9EZb^mOp@VfwZ8eWPV^{xRP5b`4v1Z~u`y50*2Z z%sVI-^T=b;oRqAOi`Gh=j=UybE}0+Gx0J_k;*-i-n_eE+wSJp!i^JB7EuS_OIdGhw zamZ@kh8{&m4Q<`#n;A_T`!By|+WJ}4>A~LH^ADX3 z@0l)dJj>@sRfW0V+|zA-FD@7^sMEK*aP5v7z9%n5%qM~4_CU^28 zXGO)K+zzf@1_qmdPhX!nb^hSYKQVJOPaN#LWBhO4CV$z}mc8q*tv__6?r=b4Z0q%D zx*xtzd383lcAZQ24VO7~<=5^9XBq`134OR6{NK^bhl$}pirK^S&bte3zMDK!T6A%_ zuXzh=`vTV-rG52pWO*vSu;o~9x_m-qg2Ywb*0Ki9sxb+hO~@5PiudsO9Ps?tkQR_p{&CUcSewx7+Ko-~CftBERg+ z?B>7A`%m3o?4)e){u#UB*H48UoIJ-4S$@9oblt`kW|Ds`vSHy?{{PIaq*rb&6Wx-KFU9Vnc{S1GxYU4u5 z=)Bui2dn-DtiRsh(a|wW=(jmbs+oN#pG@>J>9>;@w|`A~xJ#6wVbduto9|z%Ps}kD z(XaW&u?|&pv!pyK#^y!bPzx);NUVr~% z5WMJ?b=9{km69dQ4633_BX<21XE>1Syspu4{rB%vX0`l#tAC_p9y0?&3L z{R)40%g4Oyj8Rwogwwe@_Xr2X#55_l_aD-kDf*XDvE;(*uhWD=tmZyrfA;QNV5QtC z+c%QAcedH?tDE)498@8>ym(@&sPo#X?#!)e`zs>k#kalv^JYE&>Fw)|I&(i;cvx2X z=F3Om&yLg33JL}WE6-WO{kxp!?4-`TSNFZ|*FO0W(Qxp= z^qnRxzii^?UU<0pW^v)yqs<#1|EP=k`$zVKrq%O{`w9gwN>pDIWoY=citEhZSF-cZ za59`pJI%c^)QS6!?K3r=*M*uWbPvYf!Nw5r!l=KR@1@2j^Z{X3<<@$(PH_0J^4WSR{3>L35H&-sF;uCS&dCkHRr z!JUts-q@B(tlqxG?8>Al4NKsp^ zsA=$p#EU&*3&@w?AF%`ShoA^YRA+AP<9}7#J+8^m}Q_xTl zn7=-@Yvp?TnB|`fo}bFAWz4SJ`+r^ZyKV2MIa?Phyq37NY|Ek6wbn|edYsEYZ3?Z; zS>LafY$JHK7;eZB9) zuioG^=He0}&KB-yULf@0VdQPYV(vL<9Us*$_wHRAxBc5iwqqQ=8@dHF^t6uMvt`$b z%$;I>fF;3fcHx5qi5!Xn5djT+vbU9NY+?jU9-p)cbzXJuewpyu$lc3cuiR57^!|vT zprEPdq?EtslotF-**^X7mXsZV+gh!@%9&1JsBPH4{KA5o(tXTUUk~vzA7^0rwe5A^ z%kaMA-1qAqT-@ip>%04cgGT*N>({wDu6*ujV5+%()q#$A%pZ>0>MJU#_|(~GCg%7o)o-ZC%&<&X(i-nHr&!7eDgdp0w!k1QFTx#<}{3oWt+8O^Ie(ux8Vt)t|$? zI(m*?a(||*W+TM#;m7p#<~tWiFTL?W<4Bu(;;*T~AKvhmJFAzhdMg`bd_mEaIapu5 z-SGUqK412-AGz!HO_(>M>%Dv}``h4X>zr=RewXzh&b^p=Q*v{g|G_uk=O46Q{qOdI z&)uL(cF*Q4#kjfu4D?=Kk)C_WXyfme-`A&V*WM~Sy6AV@LDs^PtBzlOGn}$R-4C~TE1tn|fc2y24BJOlcdW~1Wkna2*tmU_ z>ImG+mUMMn>5gYdcW2k+fBgD8zPS3Y5U6D>C>Z$p;e?OJuHVeesWD%+_s$em1GZTT z(z&;#o-DeosGz{$w)o;KPIo~bWfch?HjcRtv(J>Yw6;g)Pr7;9Ba=Jk=Ja*O_f9<5 z(|rD}@|koxq@v;T-e#NqV1wz*URB}tx5uV1JeV=}K=bc!Pm<5-J~$cvTv}FaVb<-u zL)DAQ)5I(PKA$_g#z=nllNl9zjQ%RNu&^b+eW&{)^|_kJG||V0uFW-gIq4yX3Cn_1 zC$4>!A4*I1R_pYrO}<=ssLA=m?K|f$Yz?($a44+Q+!yzsxooZl$6mkwb!%@W)!bJE zRjbL@&wv_6a{qGX-QF2n`!PXhPyW1`!;zCza&G)L@0(-Wx#<+wlB4R2le5&K)RsJ0 zF8lhmNQtnFKuf-S6|wN`z!Zfdu%FJ-nUDzKh{_{^jMb8-91v#{O{c& zQ(28BUoN!(Ju60L8M$O*?uQTkcUFNP^XkK;CoRM>)VMl+5W6hGM{{O#;CtXrK zoNYQ!fa(A4|Dl#I)OIWIYybbnd%Vbx`I^GoFGoVYWM5}ibUavk&LmiR+ktKV^*{N} z$CQg7YIZLCy+L!w4RU$>5# z@NnDv&DZZYXY0#${+Xmyv$an2+g!UQhP{k;FIy+vIU25Hp}=vtDyB>ST_xw^dGp^E z&G}XF-&wg1mXrjqwmQ!4WtB_I`nY86lCzH<-Hmv4DQLsG=sbxXCrX&BZ?et3ps1rG zl6!00v3Ymd-<0oL^QFo*C^%R^QnYiy0*1 zU7WYsXiEE1(D6C5GcZlRrHy_vu&JhBFNzE541o3Hbq$KL)g zr&Dv&MYE-%$G*!xx^Vp2(b?~&=Ue^XR4lBvzefL47k5bQzxVa|$v>0dD=BO87O$Jt zmT&f_<1G8!^h}SgzQeya|MTbD6}dTC`QOKH!WLEEra0gK_g25T{VKTXzlGooLAl$v~e-OSE6O*TB0S-YImri$tV$rFVpH)t}u zJv@9h-u%QKzo)6zQy5O2I=`~?L9ed0@R~;PX1V!Yi#7?h*EO~=d^z=|=gy)(QRnu2 z%aKg#I_34@=dGnP3`>miBrMqaYyNR{o%XhsQ&&>qk-z_OjZDesBh&LA?99IxoElL1 z<#Tx9XVJ$W-@WyBQZJcd|Cn>l{r$Yhi#I*7TYi47Yhk6PlGC9JYCD%6HjJD1ZNZ(o z%9HgQ-d_>idDm`hB2#`)lF*Z{htvJ4w)B6J$>!47_3hHc8+AGIZMLPeonP+fTPgYD z<4JyyZ!Yd-fB34K{qgPI)pPqEzy5AN``E8vpz$P7J9ia#v#oUZT&-lDmg~7sEiO#) zS@reCtRlY+sgowY_vKvft;lj_63gb3J*%{oot&Bi0|PlZJohaZ6%p!LW1L?2>`i3K zmb}i669pbjT?z6FPZliB@b-JQ^j6qqORY`MGLCJE-@oklg9s<(rYc2ZtM(xh1(YyQZ5sZ0=Z`y$h@pYQ#_TX&;v?wRW;Ma9_% zPk4Q~vXzDH@yXVFE8Z19KVQ(>v*}B+ja8uEtIFLHG z%KWDE_m`b3Km9V7t}Br$VP*(DmbK>o_O*=Z%fvD`K&`mX;WeF-&g#laDm>;qGR@n= ztKz<8J=<_HV{Qo}!-M^=r#-&8{(kAL_x9QQ9A7U9u`xj^INdoJs=fO@|?Z++qgf09y;NjeYltWY4bnSGSB#-`I3W$rGeSk@ zo;~upCV52th~x6jY|kUov(08JI66f|X(=sMVo2OCxQu7l#`E5Df4a?WcfWi6Z_w>{ z+i4f3t@-pMAGGvLN|4dRNw6e2p6j*x-aR6R#Tz$qto9T|`TNm=I+FAO+<&J%x6~lvqZ=5}~-{wCL-8pT|ADNo%nZ2jq z?tl9)IBvg!-p36(n|9*AQp2Zc0 zm+KzgwygO+QKkL8l*@DF)F!d`>A!xJeox!psHQIZv|-VqIqCfy?oKhE2#_7 zOzr8Sl2U!#k7V=3j<>ikiskm!oPB6h($%x6@f%pVc-~#(&%c*;l3`MKOhe%LGe>S7 zvY9V;`u??d_a04n=Iw(_vDMxFZ2cc022kIH z**gBoMLWgDgD>XYlVd3O@RsTzD)6sW^~vsa{6`g{g=us{H^AG&#ySeuxQpk`5WtcwbM@Oe80#k zTeYOT9)2tUO%w?C4+riEFaX-3hvEFXPF#GulQrc=pd@|F{cI7G`AEvUxw~ zS@P?+=I#A&yt@`iM_-d>@bK~5BJbF=szp>KeP&+FeTU-8zaq&umvMJ8n!32SJhxAO zxJ``jel3gfy@1aJ>yE@(sjBI4-DKUz&3Ci(&w|@;MX!E)Be*R`*2`+)BYX8~!zy1lP$?Mk@5b(q?v7)of7_Gq9BtnC;=5=?>C5FmUZ0Sw z_rG}XQSa)BQ|C8NnZa_$?oZU8UD?I~&Ko?cl2&PD_o#ehQ+@hw^OHGt<=c*Z?3-t+x_)^kQ|hb7fBjeP+*1b~d00_-(egLD!Q13@ z#@jM}TlOhuHs#IPez$+^nVQ8s6%%D1RjO1klg`d9-W=I)MzOR*0`1#V`VAXYpdjG(s zw^EM$w*SY^V6g6dg5`{(u?r$yI&4=QxqQ9t(_dvPouI8}!?L&-ZmDc%Vc>aN$C+@J zXX~HyTZntH(BZ=ZqOz=uFLHPq9nLY+^s>&#@4spMZpHJ5vhR&qL8Ba(pLufh zu72<2@_hT_oy(tom0N55pue{MXHHJ^P1X1lnpW-YVrM>Q$)`tJf3d1glii$Bb|Wra z|BeN_Y>@GU=qaH7bkq^GM;AMdKOEk6KU>H4@)ZeRw|f7Dj&n6n9KCW~{@9)M_m1vO zUjFb{W3r%#KnLU8szit7aW_g5*z@N8kLXpMC3T8@_5MT3!f6K=wRO|Ggoa{znnSp_>+456CPg73^6y)3MFiQd4Mk@B>d6$z4Z%AFR|{} z6diA~^Mmge&pg%l`@g6BWxFS1mwcWLRB*fhPElKa^ZR+bhuiWS7Ct+2%t@xT!iXvlLqR ztoHJ$_stLLVV$AMnYLMS>C)7W?ta&Zh#BlxFJ;@ggQggx5@$(grCob_vrE!hotXhN zVE$8k|CjGmQdFO&8qD%Bc=45km*=3mz5ch8Gt4$VyjUvdpI!3a@r1VCfeFj=9E(b9 zrrCef`(kAan#B3CD}RyJVOCS$-~RGP&y>$QA{@W3G4k;8gl{Ka3(AT$+U4$kbp3yH z!#{riOp&EW{pMSDADtbRoU}i2N9hL_o8Mn|uUN6F=;rgiqci)&--m6VjS&Sd>tGkt&djz4-XC3U}2pQ}~YhOBSw;9LDOt;So$PqmHO0#mqmbv0A76=J${|Gp$wH zj0|@#->x>P>%S)Zq%>VJ;ahrSQ}m?8k1r~kGJ9SuWN4Vb?KV^XHUc*n(Pob%6ULF2-*?nSg2_M6SrK!>VO}%=ruSCcFuU-H9O@gGSY5K*?$(MrS&g-2B z&RyOA9prOR+ilV3xqP#vZEnrBJ+*E1C;xT7vMpb~UbSV)-u>HjEqV7%WZ+1Qj(V=m z(&E>?;DN#nA2k(~BZ?XZ99DB3e0)qUMK4uURTW&gP_bdc74zdQwThX{)meMiyxJTR zXPYl4NiVDOT6b!Za_8M95mbEss;o5t2B%_4wa#-X7YC!87yX$$}B%WmzCj5?)_N4Gb`Wcm~UX)w&u<* zz71^uVya(yZ2w!GTIRM}>?K3P{=PQ{SMJH#{ueX>`t}>cUPkflZ`mT&pNwz+Zt>;g zSLC$1oVV;E+hvX0leAtOExqlw>EH9!8+CFYn*4Bch} zj=X76_{hXZO;~BM(#2JwQiqfey$Q6Ml_B+e{kdHCf_v*`{+c6m`%kL1pkQF}vl*}b zi+))ICSSE&%ll5Qc(Rsq^YXZuKNI)-JJBL3QGD^K-MrYhwR?`m#XX&87<|!4ap}2a zy}N%l@3H&-YxirLd6Ue%-6K<3m+k#%;FBiI@ZhcF|3j>WXJQKXadL4?x!$WbIsW;g zRBd_l4WC^-db&z)fB(GI`{`G8wX;RHzc;SVcWk)Fz!34}x7Sb0bt&9d-Q6A2m?vF( z|64lrSk}&d-PgYF&*&9ho4Hs0wfzS+hI_vYC+_+8;)tY2r)R+}|Mi!X@15m8^|pM? z%r$p1Ctng`w)$GMv-VU&US9j0J^;l_l?>}rt{9L+K`u8b70|lC;eJRtv_>`o(a~=C9$p7gZa>f7kE*$G$V9&vE_n`uDYx{eE*g zcXVX5@9PXK+>v)6!)Jfdp7YP%pPS}v{qbM_e`W?1mt#p!AHQE5|65M)_jVtTgTj;3 z5|3RtsrP%&x4%pwvwIjC6z~2{J{YUNLuaF?pitXued*xk#h}V;-tS+v2co)OJhqQ@n(JLAubdmAqs{5|!NgP*VT=JR(K%}>6z?t7cRU}ojB&GFM0fF?r>R(Q*AuND8Z ziN*c=Jf<~EpU>O>G44faReRlbo_P(`$NiWYLc+oyE`4uT^n%&-*z6e_JW4WeiZN^` z`<@m$|9;tjPKF&DO5KmNxJG@;Zs;***id)h?9Ya`=z#@zJK{vk$H=`sQTWd{<-hs<=@xyF0`!u2OGeA zoOB^=THqv^rYM`}UBTB4Th(6on0fQ9xtZ0nf#v>_xz_Dx%+?k@IH1TN^rh;w{k@l8 ztX$k&t)?_>N;$ic{oRdQleAX%r9XdDpl8~vdbQ?nM@PqtKMJ0&9!RyD72mru`^pZL z78bUZa+~kYIqj3xX{Mvn5BKDJc0I`M2@Z`|4U$FA!*THlS@>K@>rFmG3x*}NGg*5Bq@b=`SX{1u1X&o`obEWXwqm{kcH{{$@;kg=>5S}OXqgSX%5_!gfp zXI`*uzPaWUOOSN&{wj9m>e#kz;nk|j3*60u5wuX z`}p0a%g@g}@~P81C-US$O58T*XY-aht-q{nXC(De(9ol!%hf4G=aKT_!c6z-XA|q* zRzK*QX#OB4QEn6W=Ynkp{FbdhPw1YTZoE$GYsOv1>%0=Z;mhrt?7#hO-QWMlwJuX| zm9LwM%dv!l?f+g}+{K)rd;QC^uJh7g=41y21-7y7*E?wM9uuB?zw4D(%WZl(Y zUh9Fz&>s6{#RxeyJ25a+`^&96ELolYYj%IqV{Yz=Qqx=R&5Ygf`)lfrngVveC-WSA zDpWwz866W04$L~3b;%A{B+_wLd?7pb|T-E-vZI0;<>(BT}lz&XH zjJ^>5I{e}Cx6(17v9A4X7jD?q!}=IM4KkYDr@X$EdvDv;8q;ZS1)~dkoquX3a_?j0 z;_eCvjN?3+lR5jW5QA}7xA%nk^ZS=PQL+5tR%(;o(myBEox_2zXCwQ!9o$ns>a6a6 za-r<6bospoWhJGoPfy-U8TSBH92qi-urab@qIsXCG)D@D)t}W zo*K^3AR2xBTH>;Of%BiQ=AERW@%5itx?`pxn_Zdky*+OYEf06cEq7nO#b^ETPg}cQ zdGS=$XvOU)HN#PR&h*JEHA* z-d#KYa))cG>Wp8<4&SJK6tMPreEhx0trr#_kdD~ACg$Ujvk?~Qa#3naKqbt%yu~45 zk&V0UtFGlT-0Qq!tg(8HLq>o>(&5Dcfw7&w>}4x{y|Jw1Nay}MK|-{BMnUwk*^A@m zC+C8?2oKbkCqJzH4D!3gm#WvrE_dIj+>?wke_xklzwP|u!uye11)}-i9-Ff|@7UUA zb*s0VD<1pL`1R{>-tm?F-}nEzh8q2wH(gPa?%l0w;%HJD>ooJDnLh6nHW zmmd^JaHy)1`u5hA;q+l4A2s2mq(up9%oMGE>j+I27P*-&bG%JUx_8&xn!0^f;n53v z({HwPbabrPSje+tt>Ig9fc1k!#vFMZR0-5Hf>bKQez;)ol2sy`SA?$EN2`6fK#%)y?GZH1?JEfmX^KztOGdzWvL$j_wY(!b(lP z^!W!??Z5VLZYcM}sq-I~$#_mG_;AM1(j(>Zzqc#al<}ne&iy`r#)W*1gxa;YPsN%} zVU9e0;r&9*9p5fZ1l7k|{C(Y%LS#O5aTh#!RcnmT^{FyC?Z~XIJa;cf`1Q86_K`vH>?|xh_LP)ve0lUILxbJ-^Pf&u z+`Ku}PO`nDgM(qxq$Zmep~ms`_cBAn!!x-uGE}@@yZz%c?e)K^y}qXXXl35;=Hhln zhUMqyy8h}pXyBbz@88|gaW1*McVFPS9VV~$F8_Fszx$8vQnusgVWYl9%cHmF`N_{W zetyrY_xGpMpBWgeZm*v+<)Znv(zn~BZu?E!dhfbx{a3T{()A2 zm{|P&_o#5Ts@m)&^Cag!`Kn(ReQb7}i_4V-v$B`P)WO;l6YV8qrg}Cla|y}4ZMIdK zn=kjPS#~ss!z6_@7tNhsBpA(nYFO%&UVBGKqxf5n9z)}oYr2eyvff)mrft}?b)l8| z*Puu?uj+rLxz1aALERU=cN zWL|X2+n#fE)xqZv^u@QnR9avE>vVbDTy9VU{UAKBKB+e^;nEXa^>vrt)K_+DA`5lD zW$_%E_R;Nz@jZu03ohTxkMrEXe%FD)iK(clNReg2tZ7`%4F`9v-+O1u63$(P7Ryc- zue<*mv|HSF_Se@Px65*SC5)w%kM&Huz1)B9C+`PmzXsV?(&j-Hy@ zy`ku-l1}tD)kB95+uZv;+5g_5Q&YP?92I|m_1BMm5{uQs<88T)_xBCzC8aE}A3tGhBmSkWnE%G)o9djj z2`hcSiKqVPTXIfEIdbzQj|M;X8E4Y|?9Ekg+3+s$ujWqO8*Y?!u} z=-HlfsIaoew@kJ@*?Pb0vsLSt=cXqM2L9dsa#{ApjmgzJZL_Wf=*0Y3>;8LN?(EJh zS45sXdj@v&;ki3@MA&@2;#{;l`S>>uKE74clLaSco2KpiSTM)bex2KPv$wV{ZWg?o zWqJC3@P}^a^uEIe8@t(UL03bCBRPLrFxv@-;7cCTEJ3rkB|nq8UK^XfFHo#%(vz8| zYIAO8wWRvbz2G=W#beUbnw&t(Q)kRMISXIhT5CLMve3fIFJ=0*O+J5AxZFE!y%F2h z5*ejWbI+W)_Tt`NV}=DAHgGT)Bp#BmKYwcbyqZsrF0QV>s-;}chWpOUoAI*^)^7q; zGAAz_be*Y^dRuJ9;1$LdP<5Bhe-5~v{cvYpR%Rl3~KN$=To}QZj{=UD?$WZ(1i%V40 zs`=^9q?_4dyEZ1b{|32Y_Th4_@429H1{luTQ!=llXzJ6W3*R2h-#qudw&ga_M$MiZ*!?SV=aRYVA-PX4&OLhq zwCv`2js3qjb5|^ksVUT7vTPXxL*0*u;!mDEOT4{Jwn0hQFW4;ooc+XEvzRvD>}i*) z;&NMj@qVyU);$yX|Eqjz&$NItIdojs<%-ISDNpA;SQ0a3Q|{~N;M;By|5sP)oLm@d ze9~%?ZNTwqKac6m)IGi-ZO=sE`y2-n3=|A30wjBrXRitVls0{4-j>f-rybd}{p!sc zncIEIoa)Jffwdc1uS@j0{rU4bpP^x@_H_n^OP8Y;g|C;Zn;Rcn^7a;|`TZJOh6j`V z|8?iyF8fvO<+4PvUVepZnJqY+pu{JB=S8zWcTN-ZDOmk9IHIGB!Q7kPDwV z*Dd0<>e8hrPTMY@8`0ZddZuKt?17uRK5u&>5c7E5{^hqjR_HY~H5n8=5nwp*>+9^m zhzJ&jh>b~G@1#FEVpumjKK8{|t34kM?O$;Hb-}MMl6!tUlKwYONO0$2i)g45K-3~N z=jZP^S6r=G?m5$*{hEPTyWJtV3yWj6zg0U~yQW^HRQ&sK)kU8#PEceP6cpskXv*!A zwQjVn{>I4Q)-Ts~;DE#avm3YN?ft4&^6m~J!-pS_&oA1t<;?wHB_(xzQAwvl*Uc7I_j8)moc-pZ<){B#)!(Eu zn9Jv=pWEnnx_qIzj;!OAA3ie-#26AxW^E{X>c1-2d)gWn1{XKCgcB1S>t@F1E?v6x z(Y)$Bc7~e&fB7T!{tB=6@9c;X;M0aB2M~Sb#>*{@Cg;37Z{C`;>d55R+j>*}p0^Vd zS!njEDDc%%<7xlSHRY*rcu(kMX=!V{_31`LQ??4{q$Tq_0|O0SlHNQfR)djPFpC zjMt=kMLh*irUtooe%Zr2_b|;+Jt^d`tm5D?VNJc0veSiy$}`)u>+k>eeM*Oi^S^bGgNixHx>2J?uJL@*`4h(lLvr*(|_K^va{= zrRmAH4*RN{lrmVH={)tV+s5?*4Jri*{}V&P!cNUB(Q!1NWZJZ1dCp1LS^#&aj0_DU zvmZ@<33Z|)R6&ctx9>b0|sRml-hc4htfx_vgNj0dGeFgE37OFt;{ zibtn3-bv8oQB|hxHkp*gxz_wo7#S8aUy9!DQdnrHrLFxmD9kCMibF9VF0OCQnw*qv znQJ*t6&9Uaa%)?0i_-_+DKE`DQ@px@k6Obk9Vi=_KxtuHbdt7gq> zDRM1BEU*X7>bRYMpi|tv-ss+qou^BbGmY+Q7@f2eD+##V%+Q}?{?z-v=}E^B<|0V;H0cx!rrs0ma0%v77K!PdTyT32ovEs(9`yHIuOWH5I{BSn>cH*{sPbaA?ShR>~XXWz=69m?Cy$O^(etD@` zbnmj5>H5?9K=~;1P>bQGUz1d|v);sqhPH}ohb4b{vU=hSiGFYWx83pee;3b7f4TSR z>G0(5?`loI&9?hnRatwuP4|->D{JdlEBi&yT%vn|;tHp~bhCJuU3~q8^v6$I*clm$ z?dllU>qZCo8>=sB`*fm3az^o0lN9kMiMOQrlP@>Qf=Y`_lkMm4KP%h!j)k2i@z>PH zhO53il;qyz+b9@#;q{jj`kF@;8mn(e{C^*`aK2z&%YXTi<-mn(r41QYt?T*zP0UdVXoMmKH1xe*U#vZnyg_zt`=O3|uG(T1QrOZsvopGE86CeD>DJsKr|`#YS&)E{Ra-I_FMB+AaF`cdqQvtUwQ2hov@t0XI~di{qd)`_x%1}_5ZH6tv|ngV}JVN z)z7&F1x;nya-WIqIQ{BTZggObm2{a*#9Ci3L0?6MWpkSE_lz^;_y69=JgF7m z+63FcClKc^nw_*dfV8K3s!(W=`H{HeDI z)IYxF?eEQw>yPV(`yF{aInTXl%k$KOb3Hpf4{UP3@A&=8w^hfJ4=ERVw$IzK#M%Fh zlpX8idHb2G{p40%-nd6pTrgDsv03YD^Nsfn&dmSFl5|*hy`zhV1Ze4@lG#ST;^&{w z+uHqq_5EkK^gg@$$L!>4{?sTcEn0ST!Pz@ZzHXA+Bjd8Nw2ik}yv??r#vYlZa(k}E z!c!5+CbJTZW+j?2-u{1&cW>N--A7k53bsrTVAj&=WoS6iz;L?G>T67n&AFUl=iAe- z`&TaaoAlc8`@^~aSHD$X-@^!G3_ z==}J)+s$0A@_EF$%$lurqH5oy+fKb&Wi@sBgV$?+TF#H(Ut@Ru?fdE1*S`}|N(L1m z44?&kf92;j<+^|SRUP%U>Ad(Sx8&-5bF?*&fQLli&$+hjUf;{Nzc&jo3IFCjd^z}? z!|f?yrFL}%4gz5||KxUU+4ASWl?-`ElxIEkeuJb#;R<*Q?>5Lb@msf z_g&`bo>~35&{kAlP-zhtFZmz#O*B98_S7q_HMcj5 z9xwJ+-oAoCvC$DU9_N@@IQQB4=ku#;{zYE7{`q_~IF{zEpRe!Ya^;Ie3~TQJ&rap@ zxActeWiWZo*)D5*=R~rG(LRpEyWSi!HWd=Ct*QbS9Gh4+OLp}1xI{)uR>j;9l{U|F zEh#a%wdM4Nv|WudTNd->e*7czaM|0u+1qndA99u|@CjaZjfvsW+r7q~K|xzvdbauh zr&s@hO0={yGuR?d`&x4EQB-O&tDgI3F59b|%5%47)k=F+C3U;m$}yVr$#63m%=G>7 zK7Zcw3wbL(o~TCbA=kMEnmOZ%zzu`l_z z;m4!93tyZmtgLoQ(b;zPx0vU}LXS?*1KyY49rs;t`{Zk3)@d;jCWiC%f9_zv-+$gd|L3n7>E9Lm>h=i; z23}q~S;2C@=8}_4k1KCWmTusklX7%pctk+|(qCJ*2OL|(VL5?~q2-*=jARo@!;%|M zC#WR+m7kq>;q}FBv2C{5eJneVOxC>l)Gj9s7 zjVg7&zt36sJ#XBN&FS`0TVM5st=*OU=}C0R?O)&J_3}S|@lQ=%dj9x_BY%F%pZxv) z-rn=C|8}k@+mdf-x>Y*JEhuWS-1?o}eBB3D#7&F8|NqB#d5ho)w^tln4BAH)GPf!3 z!1d_O#ryWx&Hnv)=eqj+XaD~C>Eu(fWKW%u{_XX}EAv6c(5&B|mzupl&wV{|lg{+e zum?NW-*`noa8Tk^+*x6MB4y?=j|?okldzf&R4ps;=i11QIZPp^y8cjT}6ceUsI{$JJq zDoFQu0q|mgw|c`;6;KdjtEg-|^j* z!qUXV#KhIHH!Hr-=BNu-kU!?KeoGF z?2L1}wcDeQ`tk08k(>+)Cj?%6{m5Say8Xrn4Tb~OtHrEzCmS!k9}sh8+3GvjIAzu1 zjSjs|z8V(evSrV_*nsZ`+K<)!m6Isv=Bct}NO<*{Klyv7bKLpU!MK7z5_Eorra7zc zHSzD>U(YHV7F)Pr}1=7|yg z-WRnNvaag6YEkjbLM;CeXTIKlnby>E*%hEEaL{sT?njd@Dw#2^-01nq{t@GW=im2q zoPS?=@#VgU!BqCVUJtFO!{SzKH zzKz)SRD8|9YTGlDo}1q(acb{RJAd@5IRCM}$G;1|elAy7{$kGY-@A(sJ9wXZ^ypJi z≫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ⅅs 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≷So@P0jibDH? z&F&?yC$dkN#J+eFpC4%WRKR7kqXfs3=g${!Si+_FF!#XfD-2&QNgP^meet$sZBBlI zXPYiONXXo~=F(PyplumbC-hW)KkHglBNTN+ML}~NE0ZbXrEllw)$`A{{Xg$)?c?Ly z-F;)%UQX_LWiGS5cfTO>uCJ~^G2BBOSApAz0Kn|or(&% zS0z?Q;&02bH8Tpg#q?IIpLe;hw^u+=s&CPzBpI7pmivG9F=cQ2|LoIG>6UMcN|U^8 zY#!V7NLxs)6^?dVzWVUbHQhf_k5|>~cvZZ8-NvBj(J^67Q#5TE7*@*edi*c5JkjHo z!j>L?wqzd3>Bbu$&bQx~a@6RFSX|l88n2E2uP93Juzj%UH~j0KaQ|fUrEP(=?Vef| zv%lpX{=*($kmbMlTEd+Jfinz#WbwSYC$5_$Bq%4<_G(sE%9GT@=MV4xsJUxyQTDIJ z+4|m|I@??2hxaeP+d8qfUC~gD(R8cnjtRAbtGBN^+-_gn6%{LcP4^$8@-LpFUB0Ue z-~Vy{^Q&g6+so&=CK@c4kNX_+OpgtF_VtIq$3pXLcS~($ zGw++*#p%4x?Y*C^pzuQ1fCK@pRaz6L&F$N(&Y$piUGI%e_3S)sulY~h%k#I@oo^nv z$}alWm!+S-e*63N=s%ClJy+*zNB-AaXW8|FW9{9y-eEN@>Gl;zmlmDfTWt31p6Ttr zxv3T3nx`Kul*!wh#wItT&fIEC7JJ|0fS9nRVDa+_-)^6OkaSLU_wzU2=h+$d{5nva zG5ZSJ#feczTrvb@SGJnnc~VjR{p3>3rhnf3iRF4tq_XT2=G5QuyPwub)No?c}}s`E9nApMPTg z;o5((2hVf&Cq3I!pL{O2|G~P~|5|sfh?wJH-Ksu)PeZLbzml028@F7Q;A6JFrl_UI zwl!OS{9%3G^w*BF(r>$$pKqV^HTBt%=#5`G%^4ZI!|Qs|@715o{3*ZlW!=m7k{>Ik zY22)jxD<0sTTu0U_{on`*Kb>X@7VPF`5HgJ?+kkGE#Pvv@cc)&9}y~+%QYnac09It zS`)bD)X~V?ZGW~dSRgQUYUnfR85?63&EP%%v7@*5;LOYE6D8!ktNeIPD^@HJ@6)_~ zNw7PSM>DlPbN!q%dlXDw&jq!l|41ySmtwlP>#XJ+Sy2LU?O&thZDbN2jfYj7yZ zy(}4fyX4s2>-YQ2_f<)+uibcJ<)rimx8^51#3~Yg-K}`CtbTT`cSqmxt+TUjy289e(c9@e(Bws`Jm&tkf;I+_2=s~gPae!s+**_T@T zEuWuzwFWj#N;dtF)9UBT5ruQ^W$yon(&avIPpk`!h@qM=>pQfwZK3pg$$-d2c z_g2|K+sW?_NXPH(WsTP>i?Um~{(gOarGWmu-y&DEF0XD_(BSap?H%q~>+gqj!~Ksh z`G2>iZ|yB>-P!hY)|&@>s(gKaEC00pTX;?u>Yk~~mz>`+?W3o}wbxoU#@T%D=Kkj} zdwcWMmK@E_wHsdbuD`f(>({^CT>UQd&#ioM*;4eo|6cCR_v_f^uladOYrgsIVAWI4 zb@v3$ul-oFx3d1>uO+i$CGukzp_?+Qp$as6Z@e@iOI8 zCIu|~a+fD@PO_fXXF4qtwA-QA(aA|>-=9k+yVoyUCT4!WMn5Zi?)j$a#)XfrR(!em zd&!r3d)q(!`MloqrTM)I!M#h&5c4m$Oyp54-FDT@BVaW+vK_PyDR1Q=Y6}qqj9mpn(Ltq4O8p? z^*k2OIsf9~)$6ynN=u0}^?KL4eJ_h;WDpG%{ZV;)y+!3mlZv=jxwpHLK6P|*@bMf9 zHkNl@pvIuDQ+;-w?ZnFOXOH$KFJH7|j|iyfzu8k9u-f#+&3)4ATmdA zo#Be>x9!sN=e~C~ztg=u&92RAF5mvQ5&h2TeT#N&lggbORPcGn%L{HUidIhD`SCwl z_U6k!o3wdi5DPo&6t&CeHZn6t5y2< z-JCD_dp^BSU;1U9@b8b$@8xQ&)^I-EGHplVm#;7Gt__PscC0FWd8|Cg;vx*6BsYjOTt#vRB>@BT#t=VfIB(?Nc@zU4#CseO@%Squ$Qc4z(7VVvJB7^7EMS1g{d2ha1 zuDkh9+Dpr8qJV6>m|>?!Pw(*q@BRu(i8MX=AvVJ>t?SFgA5Pa?Wh`nX7CI`vxVlkY zFJ_sg_$>{Iz3vPt}`t|wQ+K+8Q6_0-g zRMjllvUi)O=8W?HF)7bdlVAUnm9S1wi8`XDWaZRtnqSvGPj=VCnlPzQ@CVZl2`Ge;|k~eZhiZ=A-g;B#-@^8g;TaYU6357S6nW-o6pv1*@q5;ExEIs zwrnX02@COB`ZRSLFB@}Lm)F4q6XF9}KK#m1QB!4FBhw(4AS0o^>sE*H?Zl#W4||O7 zp1pKwXSCR~PDtnvr?RE?2;}4(D@86Z0er-+t%$p}qYn$BOSM!tW zPQ~Nx0V^wPe!t1dxwVCNy8i8XPnDJjFaK8YW+VH8u+@QKVSVrS$LCH>e{rF)qqnzk z<(#EUpXxnT<~U@mTnuJ5nmUM*JFyUkOx;>$Dk4QapgZ`8k<;Jh2us7rqC zpYZAN_C*Vh)XcfCvXp&I^dDxSWFdpZ6IW;0)G%Fp7xDhWy*KrL*`>BhZH}wsu+NRm z-uAXRbbiv`+xCho8WOTm+YV0=6khwO;&%;bB;ixnXV4hR+PEG1|GwGg)cqIV(&O)x zM$7ZVQOuTOe6ck{x)Y=bS=LvMUIKR;vkl%{Q-nhXuSySIDD zYs*Y5wB+{JpW9xm&j0AZ%fn`$d)}Ed+3)#g*~G;3@yp!*#V=i#30>FslkWb>Z>PTW z|MzP#HM`1oM$W4|9d~$B`n{uD0!|uiRC%(F>Jzw|8|JuDr za*jRR(;t6aRyhCQBunmtpKb2V+sm-K|Go3Er#iEr3Z?I6I*s@fyJ z;Nk-R<#8H1x|=eON55Se^z^fs*Y)&x+xYyu@q+R1`=_|A{1@}`*YvsbyWjkY*?hl< zTi^V};g_9Tg2NtiY^&cQx7YfsOZ&99A8tA8HyE}(x2q9-|NjT)7dBglhUb-@2M-Fx z*V-{WcszgqmS4Gd4g^kme0E~-@wM|5(=}@AA8#$Jcz@FMlKb6U_J4=!@6|B9+$kAW zx&GBf`L9)b4}baz&A=LeYcy=_J{+rPer!=7)4q}4-_6fa&uV$ek$d{v7#OO`UbM|= zis`9J5c1MK_2K!w+#i2hzcVs4@A{rEa$I`pZE@B4{7YY-K4l;7y-Mt|Tm172AJa~C zbWW;z-sOAk{bbiEZ|pDd+}2)tKHO#H$Eo_;m)|=u{eFJM!SKb{@DL9&WgF z<^-|QggHxn4cfO^h+k6kewKN9&nMNKKYHi$Bh@bEWJGY>+T!b2;IW~Q`}j>;F^Pc4 z$S&{5$Q7L+ZWE`ZuU_=z9ffv^5xzsV%~>yrh3=?1Wa>v`!4L?w%q9C z2M6}?eU`B<6N;}%lqqO!YkPE5e16HvZ-0KCcU)`s%UdtvgBcgsnfN!XEG!CYYEldZ z@9wbv`SCca{r|Sy+b^%}6l8g5cg(OuuuxJ?uJ6DChsWI75&_Y{JbY}6ljPOq&kG!x z>c4g!pSiuYcUP^fv}p5E|2>_D@4q>6*!Z1mL_x;nsk&R8%kR|wecK?A^5KS%_TOHadrab8-Bq0<$wttUTP@Z;n5jRC8#SX4aY z_|(nKz_9qYbZFi&j>KgpU#)VicU<=QbyM(k-M>TcynPsMY^vY=<&%->Mp3IRCB7>! zTz+j{{Ag_lM=t|I&Gv`xtEX29%sc)&zWR!V@(tITuQhu+h0fpJ8=SVtxBFVd0)tP_ zK9%R5s?q=dwp!=cu^)}*N+wLj@8{%hkJ0R0yX33s?fT6>Cvq~pDzR#pPutVFemXzb z_4Im+`1}X_ej!wo^z7R zFQ0#OW@+)IZK?M4otL_d7!FMPYrW+DZMCgs8Nr%Ua^j^v|IF~HjohETxTG%FJ?6QA z&budq!b`tSt^fC??5C7harXKtHu08TJ?mZmY_!eg*!Qo_`Q`ree;@u-=y=A&KU>x) zeWQR(KuVuR-=$||Z&qBg*qoYfAD%Pw+{rC-XWrbfLG{-q0|gTk7Fnxp&H(`nHh!72 z)u_L)m9f-RG<33LxSp;f&==8lUHjA|n+N0QUOilm% zkB_Mr7Sv^2KK9j~FMnU96vKi&dzh|X-Im(Mm~e5?_X%@z|0tJUT9R#0^hBV&EPqd7 z*OLpI>;Eg(e81}-Ryk?1@X~JuXJ>t#Vf?(Z{r|oC|HjkLcPn(XC1(GbG;?C-j299u zEp1%4s(8)>VCza9hJRbly-zV8Hw50@T=F|Xik4O ztNFu)g5_mXo^8v{pLFec{l|I@P5rI2%dcOwy~O>z(|KK++uI1))bpKx`O<6F-QMXq ztJZSQcYzkRR*Nm+k-@F1+IE|E|Lw0g^M0KhwPn-HewyHa7#o#=0$#r;k{;qxurch9BsxvyRJkF)FVmsad4ulpgeb(a;xfh&R6 zZ`R&>BLA}iU3_OwoV>z!;5>h{dq74_%S_4f=7OLn;Myt;QjZJ$N1PTLn54vxQJQDwVs zr)F!MUAs5vQ_WKi!+k~U@j3o?k6yo@ukrW$PJ0`9mWweDaw{#nJ8r9N6*s?}woNBA zW6sS@K^r#)+Np1QaAaGm+{e(Yf`Sc^JZ^>Z7dek}uouXbShf9Gqw^#+Rr<3;PqXLd zJw2RF=9^3`BI2rkpE6%k;VjU5R=!>$HOR7W@|?^$3&U0y9OgY{pJkqZ@0~$@YO3h7 zv(?UC`#+sB=HTJkGSgg3OQ`s{lyQ76m7e>|zU-k2gMy98ot4H1<~?SY$upPWxlvqW zuW-i6>+OxZiU0QV{e5d-RufjYZHt`ZnFE`T%zpm+`onseZJD3MpDgTMQ>1e4=8xp< zA5&AOo6WtTr6{TVo5%FuzVz-#$3@Z^nF~Cxp1k~8dmK=^pKbi-FSt-!`;m>sl-2TSsOY6% zJI|PG&b{h1UqD9U$%h|a3sZhyx^dp!`Bre{jTM=T*KMDf{^zM?4-@jILKw=IA7==6K@Js-dCTyHPWa&b<8^{k!gD?dGYcS$w6Nvdb_mb0HC zpKT3VYM7h8$hgNw_lDrr0+&FkpX~a4$1VieoIjmo*fGnL?Zb+TuP4rq?`cpFeYBXF z)mv@$GcWU`Su;7gXFi>*iSi6yfECo zU#{=Rj|heXyGrX5E-lHHd3Jw8qVc~U$=vI9rkMlc$_+Qs_>-^XH$mGj34$)OiU9dO=^0zihIS16->uh3(8*R z+vAnHtm5$JRm=2D98Ii1b4Y8?-)+vz-JNhQm;Z6w#oz;Ow&8l-y~&x&WpAxo zxq9lg%D(Nl-o5?2cS7mKhyRK+OWlQD-b=ZBZ|w!?F99F5&g^_E=&4lmIPbe`epUIa z&XvmQi4pG)W=Kxw$#t1>x1V?2oOR2uuMc(d&J?@-bB)RBw_(SNi^bNgp9@ZM*>i7r z{rd6n%(N39w**UEt2SU*5L+bu#=i7~R{y%V_S^A$_*aY9HNW7{UDm%#?mGW&vDMrD zfZ7C>wF_V8*6giO^17N{ZyCSzDP&+xxJwo>dgzDXiqzOTjT0JlcS$6PWV=G zyK(Lb?Q`yX%=m)c{SIAze|B>b#|)*GnX9f}PriCB{*IlSb7tP#sgs^(cP@Xd?fqw? zZ7F+v{r-jUep%D@rA*2GrN{0rm3f`pcQtd#-<(wkZrr?n$V_I%tB!Me%M|>4xIQv4 z+}%}vw4t$fVc6=0K`RgN@I0!YGc%iaK@v~fDy})!;SFEzSVd-@Ii09AZ)a8S)2l}I z{Eo8iBKaJP0s~iu{CFzyUX?-h=Ose4Of4Sv zC#Er6S*7sUqvi3Ek6n%j?Jsd2x^FSDjO+WJUmR@bq?B73m>PDLpPQDlX|HESfd-Qa z@ATWe{Jh0G?q19>oyc|b%ta3Mh1r-j}bmg3e63j}I@K5D=5?_$-Nf7k0l-C>oZs#P|JuU~$xzTf`S&F*g+>vhUs zx^7%Q51eec`3>*(KQg+WBRW;g`}IV=w2g8$wJgnPy+`?_!w)7HI4r*Q;MwZs$;UU{ z-}rCt{DQX+3gxEW4X)W)b8p4@eKq^;9lHKod1>G(`|n}Zw!>z7gyO$*|T48 z;WE1gJJ#Gtj9dQn)8yxCciPB%_4DtsytiWQ=C!ASf}%5k{QcW@sebp%(m~|wtmL-5WO^I-B+hQ5|_-#Tp1>9-}d$O zeQAab>EG*amR1T%=wNH%r>przkR|cSnWe=uzCFqP z@nGfApfj(kmz_DXZgI8LS{_!_){1|Nf9Aa{{|{$H9n!@y&^-yqD@IPUtgF1c>Tft#HsU+ zm7zOLq$^VHC;s^Ga(m3Sw=cgIr(RpEYFfILgO_XL?z_{^U%y@PYtPG9rI&U^y`8md z?jBnM2_C-BaeAi?*RHqiYCV1bn6kNTL-g_U4hz&6oP*gDGhQix29Wr5=R7uf(z5-- z(NC3|?S4P{StSha+;;xEGyCg$!wJ@6JH3l5?56D7uQhe$eSxViQx1gB-~Q|ixWIW< zaroYSHLJbnp1t>N1htfG<#}`c!*il~*_YktWtd_1t7`N9sp`Da{9Ch= zoa-<4C2jC9RtukKSoOf*p|eD@qgU~Rp4UB`b5+^X46N=;NE|4%k$8MyL6cO~lk`-l z#aiZdf2KKwacV!}DLZGRD}G4uw1T!edv|G*f)w+-=MyIvOYSaze>^n&>+uzVhbK%B zXg@vubMCYGhRK`0w7)rT|DSDZ)Z0%R?f(Cf_L*(QXAW{~l`eO-Ui8@4(NR&&Z;#afzwiJ4KYy>5eOur?UYY-P>Xq+pH=R_P z+`{1L!O_CPv`|IBY)Zg_H-T{rSWhimY1l=&F1bb7XQ#+Z*%rgYj^Xz z`2vgH^7QMJ=SlvUa_+!E_RTdfxn8~2zPa(Sdr|lCg*u!PyQ(eL2{1i)czvD$bN-y< z#O=#x?UI_6dp1HhY?9FAiod6~AHG$WEt$h`X;N(Ip36JiqpRQNulbSnj_2KuANpyP z$C@56=ljXj&iUCtgF8$o<(BXM{EsiUt}?LQD6wYm)^+Nim~8jHSu#b*Qc*KuZpOX) z8PEUOJxzJSvemDwYMQ0&o8LRPr7&N&`y~GF+au?gs#EeiYHqovELm23qv2uA-y`fY z)lW~ZxxH&4Z?%Bj#Vh;!e%QEQ{^zzi;-lelGR(Sg_>zjSX*Z*!No1bO-%vCGb zKiw?9|J8-M(ruqZExvEJEm`(Cb4z{Pp}*fNx4d63Ft_&^k4IphdFvS-v$)f@g7{*t ze+?<$klLTR_Di$asUK73PHsyVeZC|}#;~X*I-t+^aqlMf`wKEIt$9-V+HtyGY)tOX zOMka~c(qmYeQoF|-LL&FcR4Ojoa0})=leX{*yTqT&2;wsS$r+>Tk6uKw|~4`{!=k^ z&4!yLc{`uxKa+Reey_^*FZsVdF5V7MzNo}58tX=|444_wU>9Vezo4Wd6Uwb+uyI<`z@_KZC&)i zZCusY9A@VwKhwX@zIR>qsb8<<_F5*KdU0sZpTBQ1Gc+tWZG^1_I8~Nsyx#bCne~dR zudh71b13Y!%jbV?yEk>^UNOJ5IfCz{t-*@Ywr{d2e)&4LWiEX?wOVV(`=#{-Cn}SF zRNeDoFuH8?$8I3$d@yF*CFfv@+4_7JkpReBTss`rV)FN6&O6 zU&~(lCg<$p-mu>f_rKxlDXd;`CwF3FW1hsk+a=O{r+m_q8QL22A~qxzRy)L6mLFRE z``+&t@AnoxR}b*uxVUc4b))%pzeG(ZwxE3wH;C0mr z@$25xbe>-gzt6NFe*e8a9}WpWdHR&;!}tC6ewCFEr1QKqxwvD+k9LdeKVP@|-?=TB z;suX7(~EvSH8&`J#{YmrYuD#<`wJd*vY(sr(#b`;zo)71q59cuY3GeeKfR=+zi-IB z?N-ft*kF40vf0qb7+pXdbX`6^6%e#`eoLthxPtx$SrJX*@RBDmR6zCsp5ZbgaL|uuHs*)&0P^O<%Q{ zugRKfeE7(}eb%q2YdMkZ4pm-O?ceNG68>Iv?#tME7L@(3-?(z*(A95mCRax8DY;~lZ%oAUWLj`uc$NqiEuXla)S?1*5uh#^R zn~QAxQZ3SVzu0pAudZe9kN@NP{_$?u#<_2ImoZG3KlQj`E&KcM|BL>@5<~~66ySdP zN9gT+{__0uKMu^XdphGjqruY^C!bB|$UpnyM&hy;EzegMywBfJy6m%N;J?bu{{80{ zSJt<_$l1~$nd)@L?eTiu&1bK@(mG#dmwNu1(`$F`)N1QhS5qvWF&)1U$ae05^zj^4 zFY^muU1s%&RL_$?{5IBL`}^2$^M4-u{@2)M-VAZ4k~z0-S=s&hz|F9${QapJhRU_C z=9EtRo8)%A^j_uj#b)`h7q-t!`Cax~_^-QM=Kcl0-fmaj^Y7R0wd=Aa*xF@``X2Y& z_g?nf-JltK?&;F$_a0o27vGq4G;80FBsTH53e)mC9~bOAcenh$PfbnD?BCig8FP<+ zo%;EEeCD@o#-#@?T>PrWv-qIkGUdZQoDa`ePCjR_eD42-J5tZ>s~CA++G-@k*2n#R zq+9%Jma*Q_+0h@)|9f?Jsd#eRuee}~xrPr#F3B7Y|FffF-Onvq)mi8N_NtoQb=$mF za&{hfuI=o-`&>6qm_PM;(q2Z}-^I5!27li@f8nnm?fPe4u0FRzCE;%Oa=-kodo%9e z&-i}L{Qb!ZoDYVjPGD>d}hD6XKwM#^0HaiPW_W!+`20+ z^?7&r&HBj;zn%^)dq3rN*&gHj6=B~pgEfDzPIQ4+x&aS zGpV%WJSQuZU5@Pe_sja(mz(MSpChJCnsmrhU6%jA_xt}{B5!^(%U`~1S)29y64qlT z=C^Iy7G(Lx#@en9U;lV|yx7)==TpP)Jz3mu$G%{JLcizaW7~J`cj`#6Xq)MjXtAi2 zm-(})rYfuN<-2XWLmJmFZ?S0Tu}u;Azwc>bpM0fG=SR-E*BP^pr7n*eZueJzWo>9on3z~ z_47BOf+e;8Z>Mfgx>#d;H@4u?&Y0q7sSi$gefsf#Uhc-T+2{83yqtVq(NuHkQLFIz z@2uXPHeZvqao+a7w)3}@|Nj*)bKxzO^@rDPp6kE(?`NTR`_Ee^)mMv@J^o!^fADYk zy_3)T_Z==&e!6dxz`uyUsmlw4?#)bXs^N9fe7a-%lWDcb3eJ|Z?Vs_~A@}F$n&cn) z(sEx5wX1o}pMHH+Wpy`qcHhr7<)^(1c}zrpulgRi*I!*zo%_xAD>k#k;y&8Oo&I?8 z-D928m)|?NT>A8Mb;Pa`R_8XJluJuKrlh6@g>IE@&a z1?%~S&h9}of)mz#eir`z)8Bl1wyXcvuNM3GdX;OBMTLZB=gBj_t}n0oayNa=jU7_4 z+b2$+>3#oQ?TpPY(&tsax39asp? z99FQ`o-WATR(Rv!;fp4{?f-wftgik2Z@avtc@59!_*o~}H`}M4owhYXC#>ze{Hc@4 z{s!~S{w91|e&*lTc7^*F|6Y&#eOq$RzpK`ubd@pd*wyryLoXEDjg$Z7XnhZxIDO{f zi|u_+KQy){NwBT2`=@qUeg5Tze{b*F+*AGUbGh7}UwRDhc0b}fH={r+{_NjrvDI29 zPoGKsG~=;E$pwZ}tF=y?JmGeEi`eb%Z-0BszV`CQ6kLB=^YKTuimJ+|<(t+NB#;j%r)xZYOQrz^M0)3(RZ9e23aEA{gTctntyXkF89{2TT_;%UfS;--}Y6y zDNkb0SKrhB<3!Ki-=4Am9>@3Z%6G1_zb)J=`1Vk39q04!i*3&>2Q}CfzsLLvH}QRZ z@qabL>Z4q7hXYuJ-reW7y7_aJ?Kkr|w;tEbnlr;CFOBc!%Se#dCQm$jVBX)ePw#T? z`qX}Z?&))t6qP{a1YF-<#FW zw~l?;t@n7d`~8LKf#pF$lP$03p3qu8RXY54toU*Ju=xdVP5zbr%#E>otHi+eUGBt# zd(6=>%Zu_;SO5KW-hKV1jI%-OY+o1s`>?zC@3o&#+VyvS`IjA?t3BsdcD;3T=+hdVZvXF_94!1jrcB$Dvs2~BQR9an z7XQ7Ln~}wHBg~}!{-U2%i}!*n36ApWi+XpSPcNvozxDd_qjhU)tnGE@p1))|?ytGO?yVs6{OJY%YW>*XykBQKuXOdQ?<{-Q3C#5jXf!{VGKF(yd7AY5Ee3I4 zonETze!Fa4bJQ@kBKJZ;XqZJ?i^I-&QRV!HHkvy)IoW*l^t@pb(B>q`CXi7fq1+NX zxyRhe<(9jA?YZ3TcOAUEjDnZXJF$BGzy3pqYWS?r)HVKkw_E=59U1AzeYbOVJ+@hP z=3{KDz}wSuD_;MREw@>ipiy%7z=hl^*Fy!S-#WZeXUD^*Eghxy`mqNdY<4%SJoB+f zu84*G`wQ>sdy;}C2VdZAw!K;%vAtB;UU%MU>G-|3m#OP}mrXJHbSQae#i^e%_Maly zzP$1eixTTS+dCyZbVJrgC8fe=T!fB*&}N<>t1Zt#Cfyal7oe< zwaPbDeU1Xv3CrzkPX4;oyY`#5u4?b?d3&d?e}4ASr%Z9fq6-|GE*akp4?eqSt9QlQ z?(LQ3&)fwitJc|m+rGKt-{J5X`~QTmvw7R!W0@k-YRP(|M0)nN+-I{ZH&=Z7D}Hm= z=AI`UY+-g^?jQg8XLuTnn!`d?O4tDCKlz5519=c)<$q`%1G}qUBbCdoa)xkV_*Ne7b-upgU_il#DNTx)cEO|Wp=dqvd zsi)O__unkqlkC&fW65cz?Ej#yiv3|i+Mb!_-^Gm|_m=0jI)2xCDRag4GS9_8ljeoh zSHAN6`}p5(`yKtGYi9B?9NBu=qWiOa9b1F)znavDTemkZR@8aRaZzwrneMaW^7|Pc z#Q(3F$Sz-VC;4YH|Gk5j&*!uyO7zH7%1l=CeUM+jo3-KN$Y536m?b8=$JzIKNF z!S45UNxw?|ColiCx$G^|qsNaUcNUqd&nZX?c>U#VwZQ)0cU2hn{V7`J9wwd7%=YE+ zY5n_*4?u15K5IFiUHMKfQI3vI5w|$Mzn{B(ncDB*uy(%}ssH-4b2M1HEON|xPo27( zb8E}QWy{Tx~{Pm5xUwu|FCkR8A0=v4l@0x$JA6T;BH+YvG4RRzV#Pz*F9QDGyq3S? z;jh10-zU2Nw&ua zq!@p9`g`>J{+(2BbacT64f&@MN{4I%`)@Yg>o~f?@nTQnvn?NUFN*GYxi?tXRl@U_ zwBn+J()oMX`<9FJS-+D|^OfR1@aHGDZBw3-qNZl&>vg;5fH1e7g?7T-&FAN(`ThU# z_z&NUxdL-%-u~L6d@{}{iEDTH^^KXqth~LPFWjU~uKf9;%63-Pr2Ey1R*l>2K5DqQ zpE!NSaQW%gT1vOX6oU+e7odKKTj zS+}0gYYx(MovwGZj;ZVokHdALj3CVyeS&+YNLD?b`dj_MUz6{qQT#DNP9<|xy{B!? zx#`8Q%=fqKVz-;exBR{T|6YH=`Gligp;M+zVJbK#x!j=cPhj0^-&rL(mzUpWF5Z@Z z|K#@jb=MdE68OQO_YwrapJ;wyz1tw`?+BdFE)_!&6nv6Q)h`@(L3?>$Yk!@9c0hh40_jw#t5( z@m^NqO3*ENMHly~&%V{yW(z8}C2oznxqbbt^LD?jF5O+U^X9Q;emk~?t62|^iqC)W zu>JkB7mNE-4mAAhk*^o&xA|l~uln8mj9G2#UdPn`%{4KedCSCkNeu3}S)f>Yv#~8` z=hB69zO@&*tgqnbo;qogPhz5-^tJqNF^UIPc-!UfbU(IbgZtXE#rKcv&h|cIvT5GS z6yBhqNgn>*2eaNBbYgB(UUsthgVs~2tW%OFgcCB>FDQ%RxVX^n$AjX$y*t71tmC>E zDH-A6cUHx4X`kEdzDCj5$Tx)-+H4)d8Grs{o%n8*fKvzanND}P<0~B7KhE!uUz*~+ z^1fAA_tf3`f3@4K=dFm|kfiu}Ti%NY^SHoSP_adTT@MtU%;5oz=HH|pS6#in&4A~8 zDX;qk&){I=-K)RdNY`3_W3t$zfSOxI-xkN`MP`|#p63e;+{isex#5^Wz^Qw?5^pqT zPT91OC!mehS+Z_--nH+yyiPk>+*`|`sI+p~vbKKve@&au&tnTTIx}VW^ZEbvi=Y2H zHUD3U^@agiIuW1*tfB9wcI|#OLyTh&8P9{`%VG&bqkpC_ZXkp62hmc*}Zt(_g&|T zf`f&pPTgJmIB3qFBWt!?3Cs8!lpwKA$Mlq7#1fI(U*D4M?&@729VeMT<#FsK!zrwX zH!z(|bDt}jwB?h;(2oO3tItzWKvOVs;iv)?^iHv1i4#PWp; z6<2Kg^YZrh4`yqhZz*}n_3y`V`-zh#IemW@d-9CW@7yHm;I3J-q{7z4$iB?uPz=xzd3t;M#;seLdd}#ns2#buCi@1@*?DjMHQ9J% z8iLwV_6Rz02$mVw|C|>W++OhKM6zY#7ZMnlkYL0i)NkP=z}xYv19MP6O~Mmpee`X8PBjTWHr=wLnfx;1xc>YG(JI)i*~%*tM& zasO0b?(EF0RjjilEixL8Z*7AG95gL-@XoSb+?{SF(Vt`TJFx8eW}PeB_PECtt-f3p zeed_v-)=w7_dS+j;@ZA&fsC`e=6MFG+3P0Ho$MD^H%)nc@59;0kEMs(WNX|v-81cE zuLUS8PP1q~o0FG!EG^qD@vwo^#onk{v%YOAcIRYf`=YF?%j=t&AhGVXG}L~Wa|FMd zobNHN@Tu14-udQ7e8jDy>R-1D{1t_RqR;(WceQr&!-~`ghHtj=9Co;DQk`o2xVJI! zMc)Al+3rpJqKWeEr#_t6u=vlH!`7F3ABL8luSlNp861JyJil*D>g$N*ox*mi?GT$u zaL640q9CQVhdZ8q@aa_tsX=ndqB+mzzHAlSyuanct7(O4^_!ouoI3HisxYPXW8C%U zqVvO_p74JhcYX1j6FJEnGkEMvG{RP271V!xXW8nFn>OX<=xaL%Tb-Kt@tE=D-cK68 z-%m_`CjHdVKko>qVvE4WWox$dY`SC=AXaj>>8McqGR>|oZp)G*9BVi|Us&~>xF;6$ z8Ke#rlh9!4Sdn5X<0#t}eW3mOo`m?hJcrl55!HUQ@yy~krwktNf3te&u6=($%j`L6 zUEZ@lb)Amsg3JZ4t-9-?yDrJ*TD3J5yo-y9GTOUq>BQN~7JsQK=00b(=XS}y%m22$ zns@hD!4@US{1ySHjvL1H_n5*DUbrx&^_d#82}A4JNOik|T|r?yIo}kLPJ${)Bu8-w z8gFrsOm#Zvw)jKl>9rRRl-Az*^mcmw1IIgWplblvow>8lNS0=$ZOw4ZYL z6tUg42=nmtRJ2=c9lFZAR7+ZRb*%;GceA~5wwIn(yjfjdHhWrgKPWZ?&ziUwY|!2j zxmiO;jQjVuYa1#)GG%3-e*1Z9v4{81v*O4uQEcfDo%Qhh%B=c4=Aiit2jMQZqT)*yuU?$|@^-fG({=M5^GjNp zW;;j0>rIG@Ix?1P+TRSdG2XCa)7qA(ZQF&TuF1^bRNW@C_-W#XTbH)6&(ATL@miuy z+2h!}U&r3A-PA9+ROHR=-TkXpX_=%ZXz<2nN_ZJ>erB=#b?i5pAE)AP8v0kttAmoK zi~aBXN~a_x&X0vEs*#@F-ir42{X2H36czO!Nz&X9FRF3=wJ7I4c*6`7kcurGbz#4| zfA`A1pKY_xQE%;Dwj_x*_XD1*Q{6XoF3Z#qF`IohcZK@;x7#mFdtWp^_DKFF$>&L_ z@#eO+y|4COeO9-F{o#@&DwF5Udp7YY`(cNjkBVb_rO%b${J^#CW8K$x3+^-sJ8>u` zc{(}SczT{(vUKU9*SskyOD0X6*yp(Cua(o$$rC2@1kJi#+MMoY1M&vAAcPQtd$%NL zwa%HV*0JrwIlIeVHhhm_EvMIL307qT4{sJymjxgcOKob!@hRj?CI^xO!|LH z2#AZfuX`Qxe)YELrE@Lrwmp+FIi!8L_x0Tao7=)~?shI>_Tx}&=}?W`B~tXEVV{cH zv5E8Md8MVb)ix%|Zwk`nzGRGqOL=($@!3$(gi}dBx3l(TX z;tHDKIRv?zPE|a9GWVw16d!ZlZC9PjW=(r#J=4)V&(VHu>XS_Fr_+`lJ7Dm>ai*@; zij^x6>M59JWM}~ONgWk!4=NJU)58G@#VB2ua_Qmlx{X5r{SJqp;TW&_t z9go|))8$p8z1|))?>it}Z<+OGX8xY%KdxjX&V%~3)9I#iUTxjG(yUe9H@25EU;S;? ze39ds!7L|^i)GK})T_R)+cn{N{NGvsnE5(O%9Hx`)E~6``i1*v(zU34Gqz3(_TO)C z>8@qMiRb?Ccu_KIHMtT}oprh(RCoJTJ4G$mqpoi>Zui-K?9INR!OQG?aG!1U&F$*F zYp&>&n3!-*0c8U#)59PC&uR9T%Dc`cb@obFK4Xxl_gNQn{nJx^-&$++ZAYigxAn{a z>S=51K5bdtfA{`fj+>9q+a3PVDf~z8_xH>HAFV7rQo9(o7QkKp^#{AHDvE}k!T$f5 zm(Q=|)YQz(iP_(!{lB7U$!^gwFHJt%9G%5|a}G>Mbe}MFu6I$8R`s`#O|{XS_I3YF z@7Mg4yLz=+`EKZ@;!l-t=US$*t%%N>ac)toeR+kw-tJ#vewJ_fbK~ldZfd<#a5ggW zZLq7F8*hnFlo}U*6DXnoV`B({=>f=p`ZSBI@tY4GVJU;DfhYL?y-BeyKnAZ z-ZfRbF8SX1%`?7V_9?k5R`mPR&+awf?DoMExy1&{cON9;%q#COyVaatHT9`(``#@v z<@?*3Kb_)u9Lu+N{=BufkN027%*y#Rqx<$-V_w&)G`5*9Gr!$V@p>pT^HlokQ`Xk~ z`|EyMt9|0xBjCg#*d4R;Gf)3cDXYxP*g%z8ksqhr{t&Y0Z-kDRpT$d^b9*0TZQA@< z>F(UJ;vXj#@BHy;_KS;~*Pq`s=MGa*5x0cN6N6=QD+TNKf3KRR8!0fc&Z^g{sOk8I zoW;j{dORNZuIcjk;E3qkQoKCAH>k_^{~99$d?m#{{a8{1^nSRr#?OU zfAxO_p<6e?RybvD{<=W=d+C%-{Ia2OfsJVm%S?_J1g^WC@$%)$FK@yes#dX{UBN6B z_(Cq)IG#8BLEm*D`}P0&Jl|+&OsLlpapJhRvy!L#<;UN73ody0`Z7*3;F)ckcRi!} zz+3V8HK+WG>r75>H8oAV)qP>lzf-Hv{7Gwze0Og#`}CN~N|#@cd^L{-y3arHrTc%s zUTn47F6+0iHYgt}Jm38PIII0+-S7F2Z=LpA zx~8P~$S<3!Gc4;rxy-BmlrMX)f9vY$hS|rC*G=!0snt2DxssvA{LZ;CSTYdwRij$Gi-FR?<>zSh&(lmY0BTZ^y{rFVH)3Oi!k0Un#TP7^ls18wp}lF9sKoG+UEJ} z+*{Il85s*U?wht_i--vC0`sOz47};OsoyT|mj4&0`nVUA;$GV{=Y9C$8?M3QynIuU z_RO0%HC7)jTzKJI!|hb>X`e1uzi%&O+UoCb zAKv|Md;a6(^9y!(_ji2Ly;Ju$mCsx3?9%-I3u`_dtpEAs@bwiM_umCBuRd>gr{?zJ zFRyA1G&M8ll-?7y`E}u};LH4=Aft8}D=C>qhS=R-mG&=~aj%wbQ{CMzzPG2(V~^Z&bS&5Cu}rl!AF+}o~x>8_!uNLg=*c$3gt zP%xkR*x~l|>sFi3KknLn{{2<{(ER+`mUVZlCQhAtdTIFGQ?=!BvO%}!KK(3y_SWYg z@OH~ zo0^yeM8~%;bddbEP}yL6w|jKk?Q2nWyi-~|KykM5K*me+*qPHguUroe*qJT4>)r#2 zRhNG6a%j0+ZfwuGVBx;L|9ijb>sdUPxL5Vqvj1T(pGe!f&)=)_A6(*A`*`W|{|}tI z7;kLKl;yuuJU7y==*5E;q+}Bnpt529YRk+A{?!(XG-G@qRT4A}kFo8?! z!?80m!cSh;ZC$$O7T1*}kw^dUvU@5fU3~XOP@exn>)RJhT;0;x+8&w(v;=+oos@U` zLg@xcE@t;-(n||gKbod{JexhLru6-MaQ9O&ssH=??GLA!`rlk{5n|lSyPM%|9qWRq zU2*~s4eH0hB-3oV3e9VxK-ky{2^wWKY4N+^q zSgojEvRmblM<1eyib^uQ)8w&uuq~* z`@}JsD6gGHpDf}^4=>1ho~P4!vgD+{A|EfWG?#38kxckA>GyA|zn`$a;AV6W9Jwb; zV;R3Kkebg^!8K{J(8Vd6;)`GG+PN-6{{6rAmGdjZvSVC+3F(%6E@nUL>+86Fxk;~d z-Y@IqW3uOu@vh$a``YQ7n|B*Mc^j=G#wTBC!k|6vuUBlW?tZ-=je4=wmsWp2C?Zm3 z+T5IU_WiPXr$evbY}ftyy0`wp_V{|9s@SEOHD8_vJ$m$L=FhY4HZ}iyF=NLW=>7fXD-{O+j;x`27>VZ+w-h44SIWd6~FJ)J@oV6 z+^S!#F;!RNZ*DI)PxrHxX}DL*R`hA*{`3zQ4xc=&f5?ER?43sHzdJYg{QuS+^6r-8 zwpz|5d;8n-ZrC%kw#Hg~{lYC-c*KH>YxjjaS6m`rs@45@C~a5wKQt@r8|&TY50(2; z9xcg~u_>_FS;=~1*6f=*H}^dCu75b0KQ8(5F;mCwS1)dxmXmT}!eNFJCv|f+#_h1H zpR6|jU}^n6`3C-bm7VqW#r3OS`&fTg(%bn+jNxAWZ`XPMuQM~ge*gZX#rvl0AAjZ7 zecgR#XYEoE;XeDRD=#m*yfj*WN>gq1_YIYoqvqAU(c6}iulVQFf8Iyujz;8wk zTmIgUF(+yzY`zo(T{dEfFeu;lxAb1QkLA}I2Dkp1C)(fdl_}bNG2!$x-e)D#*V#I8 z?a|bElf~wdqkHp0*53jRjW?(E*4H<#yUYJ6a@wqEj`#mbetBy@W3vBGTYvj9_4##Q z+WhzSoXP2%`C&KT%ls{#-se?xZ6|w9KL22mcb-e;JkPYb#&O7WbcUHID=G{a?Z9Tnt_iEWM?tZV}XYtY}Z~x1rZ8>q`8`dsa zlJf7*^?HL_)|W$Tm~5-QEpUleZx@}9d;I6P%=b+} zd9Pb8OuK1+hq?03qw*5wrJ6dkS`!bqZA$rQ^m{^Z-xkwT2kvYOy}Thx=f;L4jR3dJ z(T};D!_&U>YR~R_Uj3wttLXjwqG&bH5JJSmKWoinJU_j0+~H-s-o3>6;?~=WCfQ=! zrk-82;zxwBg?q^YznZzF_gJqdZM?y}FRku#pvUWFOO{nnnH+rS)|K{)$!fDMf3BOy zdf-v3eQAu^!i_qMU0F#d7eL^ zq-@;X)04x-XE&wrv42)@{M4X3b?1ZAF8GFqvhF|gyHEDEcc9nAnNyt|6T{i~tfu^E zajBc}xAlHm+0^$Bo<9Ho&@lgq;A4rR6M_t9{(TEJ%Z+$ie)rk4zTGQj-+e#-a>`}B z2X|hEU%qqY$Q}88X?JI(UNOHC9CBxFvbvw5uI=P6Uv%F6xNRKs<#(samFum!^Z#VN ze>`#O+~cX?_uZVFl)S~yr=MI@c_rli;_~~AGPeIz))W?k3b5mQ|3BJfKd0er+UMJT zNl8ZiHea_{*7(Qf^4iyYSDkIX*735=7poQa$;W(^6cr~HFOT<)iLufD_xqvQ9_6>% z>dOzzxhJcTpb|5G|EpJf{}{cucI&t8+w(_>PtM|u4ByH8|3%yu6$cCocuaTHy)D}R z^-!fv-JgHjt5$!XGwi;-)K(aS+FKYT5NS| z)4JHV53So)uWwsi-}d|4-ur6BZP|@Q?>6r@u?3~#j;wE|Ii9cIfBS1gqP)|wy0r=X zAFk>aiiq{QXZAg`x5}6Ca9QCeQ89Vq%(JZGf92KZ)tE87zP|RsTY=42*Tn6dv1?b< zq)C$)BmUgJWA-)m$_&m2J03=DIx3fN>B^N8i(2iCU!CCOk*ku(d^z*Y?cKY5-@0E~ z*Cl)9>a__|<~S9GpFc2r$rBO1-LJwn|9KbvKk>C#c-ri|yD^dJ+j2hg?pdjE-_P}D z+4;9`Z{2)$VB)=6_Dj3pD=?U?i$B_1Z`FQlR@VHgYdb7{eUm;j&o;E~_R2Ln-%r*| znKLPkt?JC*m(lxX|ID2IOTzDA-Tyh~=GK{phKk;)`TH~H=98HZpT0Gp_jqIaJyrev z9dG8;9P_uBsc&Chy?@*FS>NpB(&tr6hGom}-zk>8fBx5*OM2B-i4d@6To5+v{zdPd^@Bq0%)Na6mvZsG|6Qi5 zr)}B!{-K!s`~w#fl^HkO%vlq)amCSH5C8l*`|F#qvG&;=A15=j-RqGxKl$hEY}3b+ z#a_35uE@Ey<5;@ID)srlC)oXEySOylUvKXxF`mN@TGRiZV}HM|XPxyX_H3!2eLWTz z6{bAC9k=K$a^-WjKwgj2X4&59TbIh@#HI&ymS-is-{ds&qvr1N_X{^Jym&Q?`}MAE z545ZgNARpqoMUt9+#3_Gh0<1Lv(GAj?lG?5NZmg(EGERIFpx29F&|H_+9bm%R~O5l z`go-JLA3Qd+p_n$&vz@TvYULnkgicFwbonv!>y#UZe; zy#HrAkMz+cC(~#A-NdIP< zSM|kj{_IB<`;7DVzvOBvWZQpaQ%j2rsM^@iXqp|a|M+itoXP3Ke6nx1_ui{zGy3_Y znBm68y;JtzE!^rqf!!hUWtv>&2eks0RG+zKwmsFG{_E}e;#Rz4?fmC8&ZS@P@!fp4 zXMWnO``0%<_T!N7u}Zt6Qe5?I`#)t$ZZBnn}l`r{c0*}wWe9l37vrYN7%DwhkXI#>1 zzBCM zJ9~Fun)B{*e!%Yh_YR>uv(@d-|6F$T>1i>2gXP7axvW=&zg@m>-?Z=d>J}b-%KfbF zxaISBR)@qu^ZliL)`_z$|K2*?AG|l;zx%Cj{4Z|R=xdkPR_D9PS~9M_dTXKcl%1QS z)-G9|esTH#1ix8DdhR_|Yz=#>S64jT*>1H)zPFe6kID0FHNRPId2x!&Y`p15H?`V* zHQHPxVe`a*A#B}`-rUsaKijTfJifT*x!Jv{zc(jbd&zOJsOE0zHk6oZOZ>qyw}NHs z4qfi8Z}e`I7S>DM$-ikkx!1O|XXlv@YhUktJFWP51^cHROjSHnmaSO3w)DQFJ40`A z^tW6SbMxfQH#bDQefxUX*}~0d?`?ax=Vn^kK0}-K*+r+9J$^HFZqex)Wk{1?p62<2 znB@s<_g_4#IV;q@j%SwCHo^G;cak#J2|T>EI6XdZ_w&qcQ*$4F4WIYq_Imp_AM7mJ zXRcbiGVSIhR=Lw

Gln?-Kp;&bmXeyvebj`URc4^tZ?XFc-V)199Za?}o*ZS0s=ijug zxAOPsKrGiBL|l`9i} zZkpQn#{8aS{u}c%Ys9pxzrS0&$!O-ECLbL)Th5T=g(olax;yk&f9U_TYwfeid{K}N zq2bv-Ys2SVXYON&kG&q~HB<7-BjK)#Q`lCuX3Hzyda*se{?U<-wTv5%9i2F9mfv@| zT8lRwg+B9&_*{?P-T84^yQa>oW3SiS+)Vs?>a_l%^7)MnI)768?(1-VuAArjeqXbP zk5Af-4&~ZSkB&46Z9gz`(IdGj@9((PIU2_9{>t=VuKB#j*LKfWQZ(#jWNzPF^07up zc=E}Ux(o@Yr+t;ZbpF}1w0CiK@Zvh!>9^l}gT zq}c4kO*{FQ3TJpMh}c;9cvi#d*>{?rnyl~HWYMPa>e5lUl(dZz70(~XJKd@a3(Gsw zq_C&`kRk5e8@ovL=?x<-C5$hSC?%}xoETR&zoGix<9;|ia%NA|GIkS@5ktC>!U9!)=Ju@ zEwZ%z_ClB`O_IT)=uM%aWX0yKM?@d9N9EWhnoDN}tXWSVZ|0qg(O zc53~O?yJ_W>?;wsy0VYqumG#Frlw?eOw8=-{(hc!*S~FFwQ*zPdb|4LI_0nL%}#9Z z+a}JVBsOK?YqNdxzgh+__f=Ql-q6_WzM*ENc7~d*ZTG^%ZcWM;F4`J*?e>uAj}^7P zwP$ZZ_ce@YVB?ySscY@){nR1qT*>1TZjW;gThI1w*cKIYefio0HAeR(*ixfUUnqUv zYnYn0Bk+{yiOG{D`M9OEB{Q>0nU&~Boa#!vai?v2(dj*p?-lM>JwJ~%N()qe-FV35 zP?mOJW8kJ#!@Ixbm}ea=Jt|QBahsCc)Tw#T&R(DQaFzYt)=MU8GWA~VtoM3~xc6`# zJ8|*&A`@Qc>$lhXzg<}JTFv;zx(zF&ckn*lRCP5;N?JN%-RFY}wtcVNfI$+k@SZoP9GjwUfCJTpJYt9>Kz_~LD5 zRZX5&zkWomUC3&QR&o3|yX2AOd23KYcej#QU-rRR-yyo~zmG-ZmMwW2xj)YySu9ff z`&;6{rg%e8cd}ZbFM0Nj|NXaiRegKAT1``vv9-}P|Ijkk3ognZugn&-TDQjX-THm+ zr~Uu#-;@Uq^T(CBPkbuU7$US3kpe3plF&d>T-*j;+ue-4vFS{NTQ8(;F#O|7z*ju&LESZ~}uT}$H)Q^LF7 zO2-AXL7lNfAD3U){$D^yc(SI(i==h?OHUu`_)?vH(rsSF6SKJ5kAZ%6Prv)jG@EpnGqp*CY%6Ynn0 zE$fU;t5-Oh&ydV_$jpnZnKLu*&No9v#YVl@t`n!vAKiH*;M`g(<4+cwpK7>E_x;

TUQ|pw*(tU(`t3pE$eWcV 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%0ACj&q8}?#Li69YQA?%S1p^x7g_n` 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

g#4d{<~gG`n>#(fA_-PdN0WM4=O13Y(4is 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�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𝔢}@L7JreaLU^}HJ-8k<+QE)&82KDzHGSu_;UQ8M%_f-Io03% z-M(BpQgGqzkG)?W1VTAp#6&&TEae=z6lIr-;QU3BhdWxwA~t~1WwVgG*4{B2)@ zpT#$v*&k~Df0wP?-FNRJwohNQzkbgD_uWrV#~*qc8`N9-xl{fCe|?!`-H*+uKQzye zdo;Czg{jfOz-&VMn!qos%o%>9M4e#WImvxiZtf zuy%9>oI82zT3D`XRq*|}+)Hh3S^pmpio5sTNbBQ6uL#yl-CrlEp5CG=(z-3pFd=&W zpVX%sbAr0{YKyM#St@_3n3bvD=!nFniIE*<)H09Pw|q5w|MHOCkpOe3s;

n1M8DgI4ie-$HN=e%+- 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 O7(8A5T-G@yGywodxSaa{ literal 0 HcmV?d00001 diff --git a/packages/vinefeeder/src/vinefeeder/images/vinefeeder3.png b/packages/vinefeeder/src/vinefeeder/images/vinefeeder3.png new file mode 100644 index 0000000000000000000000000000000000000000..25684ffcfb3ada6d358c48f46866e4d61e5125a6 GIT binary patch literal 793583 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ÐwQ}N|R;JW9A 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