From ba3a728728a31acafe426de842d3cbb39cf087ce Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 17:02:07 -0500 Subject: [PATCH 01/11] dspy.asyncify --- dsp/utils/settings.py | 1 + dspy/__init__.py | 6 +- dspy/utils/asyncify.py | 33 + poetry.lock | 1658 +++++++++++------- pyproject.toml | 16 +- requirements-dev.txt | 2 +- requirements.txt | 2 + tests/conftest.py | 5 + tests/predict/test_chain_of_thought.py | 2 +- tests/predict/test_multi_chain_comparison.py | 47 +- tests/predict/test_program_of_thought.py | 2 +- tests/utils/test_asyncify.py | 54 + 12 files changed, 1134 insertions(+), 694 deletions(-) create mode 100644 dspy/utils/asyncify.py create mode 100644 tests/utils/test_asyncify.py diff --git a/dsp/utils/settings.py b/dsp/utils/settings.py index 009c7b6c9c..621d4fb737 100644 --- a/dsp/utils/settings.py +++ b/dsp/utils/settings.py @@ -24,6 +24,7 @@ experimental=False, backoff_time=10, callbacks=[], + async_max_workers=8, ) diff --git a/dspy/__init__.py b/dspy/__init__.py index 3ba977eb8d..28e0a352b2 100644 --- a/dspy/__init__.py +++ b/dspy/__init__.py @@ -7,11 +7,13 @@ from .signatures import * # Functional must be imported after primitives, predict and signatures -from .functional import * # isort: skip +from .functional import * # isort: skip from dspy.evaluate import Evaluate # isort: skip from dspy.clients import * # isort: skip from dspy.adapters import * # isort: skip from dspy.utils.logging_utils import configure_dspy_loggers, disable_logging, enable_logging +from dspy.utils.asyncify import asyncify + settings = dsp.settings configure_dspy_loggers(__name__) @@ -71,4 +73,4 @@ BetterTogether = dspy.teleprompt.BetterTogether COPRO = dspy.teleprompt.COPRO MIPROv2 = dspy.teleprompt.MIPROv2 -Ensemble = dspy.teleprompt.Ensemble \ No newline at end of file +Ensemble = dspy.teleprompt.Ensemble diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py new file mode 100644 index 0000000000..6c19e30978 --- /dev/null +++ b/dspy/utils/asyncify.py @@ -0,0 +1,33 @@ +import sys +from typing import Awaitable, Optional, TypeVar, Callable + +from anyio import CapacityLimiter +from asyncer import asyncify as __asyncify + +if sys.version_info >= (3, 10): + from typing import ParamSpec +else: + from typing_extensions import ParamSpec + +T_Retval = TypeVar("T_Retval") +T_ParamSpec = ParamSpec("T_ParamSpec") +T = TypeVar("T") + + +class AsyncLimiter: + _limiter: Optional[CapacityLimiter] = None + + @classmethod + def get(cls): + import dspy + + if cls._limiter is None or cls._limiter.total_tokens != dspy.settings.max_async_workers: + cls._limiter = CapacityLimiter(dspy.settings.max_async_workers) + + return cls._limiter + + +def asyncify( + program: Callable[T_ParamSpec, T_Retval], +) -> Callable[T_ParamSpec, Awaitable[T_Retval]]: + return __asyncify(program, abandon_on_cancel=True, limiter=AsyncLimiter.get()) diff --git a/poetry.lock b/poetry.lock index 88441a414e..6dd9eaaf72 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,112 +13,98 @@ files = [ [[package]] name = "aiohttp" -version = "3.10.10" +version = "3.11.2" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68"}, - {file = "aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257"}, - {file = "aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a"}, - {file = "aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94"}, - {file = "aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205"}, - {file = "aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628"}, - {file = "aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b"}, - {file = "aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8"}, - {file = "aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b"}, - {file = "aiohttp-3.10.10-cp38-cp38-win32.whl", hash = "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c"}, - {file = "aiohttp-3.10.10-cp38-cp38-win_amd64.whl", hash = "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91"}, - {file = "aiohttp-3.10.10-cp39-cp39-win32.whl", hash = "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983"}, - {file = "aiohttp-3.10.10-cp39-cp39-win_amd64.whl", hash = "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23"}, - {file = "aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a"}, + {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:783741f534c14957fbe657d62a34b947ec06db23d45a2fd4a8aeb73d9c84d7e6"}, + {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:435f7a08d8aa42371a94e7c141205a9cb092ba551084b5e0c57492e6673601a3"}, + {file = "aiohttp-3.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c681f34e2814bc6e1eef49752b338061b94a42c92734d0be9513447d3f83718c"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73a664478ae1ea011b5a710fb100b115ca8b2146864fa0ce4143ff944df714b8"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1d06c8fd8b453c3e553c956bd3b8395100401060430572174bb7876dd95ad49"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b1f4844909321ef2c1cee50ddeccbd6018cd8c8d1ddddda3f553e94a5859497"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdc6f8dce09281ae534eaf08a54f0d38612398375f28dad733a8885f3bf9b978"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2d942421cf3a1d1eceae8fa192f1fbfb74eb9d3e207d35ad2696bd2ce2c987c"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:08ebe7a1d6c1e5ca766d68407280d69658f5f98821c2ba6c41c63cabfed159af"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2793d3297f3e49015140e6d3ea26142c967e07998e2fb00b6ee8d041138fbc4e"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4a23475d8d5c56e447b7752a1e2ac267c1f723f765e406c81feddcd16cdc97bc"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:556564d89e2f4a6e8fe000894c03e4e84cf0b6cfa5674e425db122633ee244d1"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57993f406ce3f114b2a6756d7809be3ffd0cc40f33e8f8b9a4aa1b027fd4e3eb"}, + {file = "aiohttp-3.11.2-cp310-cp310-win32.whl", hash = "sha256:177b000efaf8d2f7012c649e8aee5b0bf488677b1162be5e7511aa4f9d567607"}, + {file = "aiohttp-3.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:ff5d22eece44528023254b595c670dfcf9733ac6af74c4b6cb4f6a784dc3870c"}, + {file = "aiohttp-3.11.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50e0aee4adc9abcd2109c618a8d1b2c93b85ac277b24a003ab147d91e068b06d"}, + {file = "aiohttp-3.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9aa4e68f1e4f303971ec42976fb170204fb5092de199034b57199a1747e78a2d"}, + {file = "aiohttp-3.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d84930b4145991214602372edd7305fc76b700220db79ac0dd57d3afd0f0a1ca"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ec8afd362356b8798c8caa806e91deb3f0602d8ffae8e91d2d3ced2a90c35e"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb0544a0e8294a5a5e20d3cacdaaa9a911d7c0a9150f5264aef36e7d8fdfa07e"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7b0a1618060e3f5aa73d3526ca2108a16a1b6bf86612cd0bb2ddcbef9879d06"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d878a0186023ac391861958035174d0486f3259cabf8fd94e591985468da3ea"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e33a7eddcd07545ccf5c3ab230f60314a17dc33e285475e8405e26e21f02660"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4d7fad8c456d180a6d2f44c41cfab4b80e2e81451815825097db48b8293f59d5"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d954ba0eae7f33884d27dc00629ca4389d249eb8d26ca07c30911257cae8c96"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:afa55e863224e664a782effa62245df73fdfc55aee539bed6efacf35f6d4e4b7"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:10a5f91c319d9d4afba812f72984816b5fcd20742232ff7ecc1610ffbf3fc64d"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6e8e19a80ba194db5c06915a9df23c0c06e0e9ca9a4db9386a6056cca555a027"}, + {file = "aiohttp-3.11.2-cp311-cp311-win32.whl", hash = "sha256:9c8d1db4f65bbc9d75b7b271d68fb996f1c8c81a525263862477d93611856c2d"}, + {file = "aiohttp-3.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:2adb967454e10e69478ba4a8d8afbba48a7c7a8619216b7c807f8481cc66ddfb"}, + {file = "aiohttp-3.11.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f833a80d9de9307d736b6af58c235b17ef7f90ebea7b9c49cd274dec7a66a2f1"}, + {file = "aiohttp-3.11.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:382f853516664d2ebfc75dc01da4a10fdef5edcb335fe7b45cf471ce758ecb18"}, + {file = "aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3a2bcf6c81639a165da93469e1e0aff67c956721f3fa9c0560f07dd1e505116"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de3b4d5fb5d69749104b880a157f38baeea7765c93d9cd3837cedd5b84729e10"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a90a0dc4b054b5af299a900bf950fe8f9e3e54322bc405005f30aa5cacc5c98"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32334f35824811dd20a12cc90825d000e6b50faaeaa71408d42269151a66140d"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cba0b8d25aa2d450762f3dd6df85498f5e7c3ad0ddeb516ef2b03510f0eea32"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bbb2dbc2701ab7e9307ca3a8fa4999c5b28246968e0a0202a5afabf48a42e22"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97fba98fc5d9ccd3d33909e898d00f2494d6a9eec7cbda3d030632e2c8bb4d00"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0ebdf5087e2ce903d8220cc45dcece90c2199ae4395fd83ca616fcc81010db2c"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:122768e3ae9ce74f981b46edefea9c6e5a40aea38aba3ac50168e6370459bf20"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5587da333b7d280a312715b843d43e734652aa382cba824a84a67c81f75b338b"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:85de9904bc360fd29a98885d2bfcbd4e02ab33c53353cb70607f2bea2cb92468"}, + {file = "aiohttp-3.11.2-cp312-cp312-win32.whl", hash = "sha256:b470de64d17156c37e91effc109d3b032b39867000e2c126732fe01d034441f9"}, + {file = "aiohttp-3.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:3f617a48b70f4843d54f52440ea1e58da6bdab07b391a3a6aed8d3b311a4cc04"}, + {file = "aiohttp-3.11.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d90b5a3b0f32a5fecf5dd83d828713986c019585f5cddf40d288ff77f366615"}, + {file = "aiohttp-3.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d23854e5867650d40cba54d49956aad8081452aa80b2cf0d8c310633f4f48510"}, + {file = "aiohttp-3.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:486273d3b5af75a80c31c311988931bdd2a4b96a74d5c7f422bad948f99988ef"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9075313f8e41b481e4cb10af405054564b0247dc335db5398ed05f8ec38787e2"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44b69c69c194ffacbc50165911cf023a4b1b06422d1e1199d3aea82eac17004e"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b339d91ac9060bd6ecdc595a82dc151045e5d74f566e0864ef3f2ba0887fec42"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64e8f5178958a9954043bc8cd10a5ae97352c3f2fc99aa01f2aebb0026010910"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3129151378f858cdc4a0a4df355c9a0d060ab49e2eea7e62e9f085bac100551b"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:14eb6c628432720e41b4fab1ada879d56cfe7034159849e083eb536b4c2afa99"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e57a10aacedcf24666f4c90d03e599f71d172d1c5e00dcf48205c445806745b0"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:66e58a2e8c7609a3545c4b38fb8b01a6b8346c4862e529534f7674c5265a97b8"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9b6d15adc9768ff167614ca853f7eeb6ee5f1d55d5660e3af85ce6744fed2b82"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2914061f5ca573f990ec14191e6998752fa8fe50d518e3405410353c3f44aa5d"}, + {file = "aiohttp-3.11.2-cp313-cp313-win32.whl", hash = "sha256:1c2496182e577042e0e07a328d91c949da9e77a2047c7291071e734cd7a6e780"}, + {file = "aiohttp-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:cccb2937bece1310c5c0163d0406aba170a2e5fb1f0444d7b0e7fdc9bd6bb713"}, + {file = "aiohttp-3.11.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:994cb893936dd2e1803655ae8667a45066bfd53360b148e22b4e3325cc5ea7a3"}, + {file = "aiohttp-3.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3666c750b73ce463a413692e3a57c60f7089e2d9116a2aa5a0f0eaf2ae325148"}, + {file = "aiohttp-3.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6ad9a7d2a3a0f235184426425f80bd3b26c66b24fd5fddecde66be30c01ebe6e"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c979fc92aba66730b66099cd5becb42d869a26c0011119bc1c2478408a8bf7a"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:766d0ebf8703d28f854f945982aa09224d5a27a29594c70d921c43c3930fe7ac"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79efd1ee3827b2f16797e14b1e45021206c3271249b4d0025014466d416d7413"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d6e069b882c1fdcbe5577dc4be372eda705180197140577a4cddb648c29d22e"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e9a766c346b2ed7e88937919d84ed64b4ef489dad1d8939f806ee52901dc142"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2b02a68b9445c70d7f5c8b578c5f5e5866b1d67ca23eb9e8bc8658ae9e3e2c74"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:374baefcb1b6275f350da605951f5f02487a9bc84a574a7d5b696439fabd49a3"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d2f991c18132f3e505c108147925372ffe4549173b7c258cf227df1c5977a635"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:34f37c59b12bc3afc52bab6fcd9cd3be82ff01c4598a84cbea934ccb3a9c54a0"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:33af11eca7bb0f5c6ffaf5e7d9d2336c2448f9c6279b93abdd6f3c35f9ee321f"}, + {file = "aiohttp-3.11.2-cp39-cp39-win32.whl", hash = "sha256:83a70e22e0f6222effe7f29fdeba6c6023f9595e59a0479edacfbd7de4b77bb7"}, + {file = "aiohttp-3.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:c28c1677ea33ccb8b14330560094cc44d3ff4fad617a544fd18beb90403fe0f1"}, + {file = "aiohttp-3.11.2.tar.gz", hash = "sha256:68d1f46f9387db3785508f5225d3acbc5825ca13d9c29f2b5cce203d5863eb79"}, ] [package.dependencies] aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.12.0,<2.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] @@ -150,13 +136,13 @@ files = [ [[package]] name = "alembic" -version = "1.13.3" +version = "1.14.0" description = "A database migration tool for SQLAlchemy." optional = false python-versions = ">=3.8" files = [ - {file = "alembic-1.13.3-py3-none-any.whl", hash = "sha256:908e905976d15235fae59c9ac42c4c5b75cfcefe3d27c0fbf7ae15a37715d80e"}, - {file = "alembic-1.13.3.tar.gz", hash = "sha256:203503117415561e203aa14541740643a611f641517f0209fcae63e9fa09f1a2"}, + {file = "alembic-1.14.0-py3-none-any.whl", hash = "sha256:99bd884ca390466db5e27ffccff1d179ec5c05c965cfefc0607e69f9e411cb25"}, + {file = "alembic-1.14.0.tar.gz", hash = "sha256:b00892b53b3642d0b8dbedba234dbf1924b69be83a9a769d5a624b01094e304b"}, ] [package.dependencies] @@ -180,13 +166,13 @@ files = [ [[package]] name = "anthropic" -version = "0.38.0" +version = "0.39.0" description = "The official Python library for the anthropic API" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anthropic-0.38.0-py3-none-any.whl", hash = "sha256:2c8117b53da7051d8ab65f4e8e05925bd53c53380183115802ace77bde14d4eb"}, - {file = "anthropic-0.38.0.tar.gz", hash = "sha256:417e1bdecc2e3b5a1f122be950d6ac570bba62d1cdefb33efbac3797413ec5f1"}, + {file = "anthropic-0.39.0-py3-none-any.whl", hash = "sha256:ea17093ae0ce0e1768b0c46501d6086b5bcd74ff39d68cd2d6396374e9de7c09"}, + {file = "anthropic-0.39.0.tar.gz", hash = "sha256:94671cc80765f9ce693f76d63a97ee9bef4c2d6063c044e983d21a2e262f63ba"}, ] [package.dependencies] @@ -196,7 +182,6 @@ httpx = ">=0.23.0,<1" jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" -tokenizers = ">=0.13.0" typing-extensions = ">=4.7,<5" [package.extras] @@ -264,6 +249,23 @@ tornado = ["tornado (>=4.3)"] twisted = ["twisted"] zookeeper = ["kazoo"] +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = true +python-versions = ">=3.8" +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + [[package]] name = "asn1crypto" version = "1.5.1" @@ -295,25 +297,30 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "async-timeout" -version = "4.0.3" +version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] [[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." +name = "asyncer" +version = "0.0.8" +description = "Asyncer, async and await, focused on developer experience." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, + {file = "asyncer-0.0.8-py3-none-any.whl", hash = "sha256:5920d48fc99c8f8f0f1576e1882f5022885589c5fcbc46ce4224ec3e53776eeb"}, + {file = "asyncer-0.0.8.tar.gz", hash = "sha256:a589d980f57e20efb07ed91d0dbe67f1d2fd343e7142c66d3a099f05c620739c"}, ] +[package.dependencies] +anyio = ">=3.4.0,<5.0" +typing_extensions = {version = ">=4.8.0", markers = "python_version < \"3.10\""} + [[package]] name = "attrs" version = "24.2.0" @@ -504,17 +511,17 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.35.54" +version = "1.35.63" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.35.54-py3-none-any.whl", hash = "sha256:2d5e160b614db55fbee7981001c54476cb827c441cef65b2fcb2c52a62019909"}, - {file = "boto3-1.35.54.tar.gz", hash = "sha256:7d9c359bbbc858a60b51c86328db813353c8bd1940212cdbd0a7da835291c2e1"}, + {file = "boto3-1.35.63-py3-none-any.whl", hash = "sha256:d0f938d4f6f392b6ffc5e75fff14a42e5bbb5228675a0367c8af55398abadbec"}, + {file = "boto3-1.35.63.tar.gz", hash = "sha256:deb593d9a0fb240deb4c43e4da8e6626d7c36be7b2fd2fe28f49d44d395b7de0"}, ] [package.dependencies] -botocore = ">=1.35.54,<1.36.0" +botocore = ">=1.35.63,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -523,13 +530,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.54" +version = "1.35.63" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.35.54-py3-none-any.whl", hash = "sha256:9cca1811094b6cdc144c2c063a3ec2db6d7c88194b04d4277cd34fc8e3473aff"}, - {file = "botocore-1.35.54.tar.gz", hash = "sha256:131bb59ce59c8a939b31e8e647242d70cf11d32d4529fa4dca01feea1e891a76"}, + {file = "botocore-1.35.63-py3-none-any.whl", hash = "sha256:0ca1200694a4c0a3fa846795d8e8a08404c214e21195eb9e010c4b8a4ca78a4a"}, + {file = "botocore-1.35.63.tar.gz", hash = "sha256:2b8196bab0a997d206c3d490b52e779ef47dffb68c57c685443f77293aca1589"}, ] [package.dependencies] @@ -543,6 +550,31 @@ urllib3 = [ [package.extras] crt = ["awscrt (==0.22.0)"] +[[package]] +name = "build" +version = "1.2.2.post1" +description = "A simple, correct Python build frontend" +optional = true +python-versions = ">=3.8" +files = [ + {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, + {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "os_name == \"nt\""} +importlib-metadata = {version = ">=4.6", markers = "python_full_version < \"3.10.2\""} +packaging = ">=19.1" +pyproject_hooks = "*" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] +test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] +typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] +uv = ["uv (>=0.1.18)"] +virtualenv = ["virtualenv (>=20.0.35)"] + [[package]] name = "cachetools" version = "5.5.0" @@ -808,29 +840,39 @@ numpy = "*" [[package]] name = "chromadb" -version = "0.4.14" +version = "0.4.24" description = "Chroma." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "chromadb-0.4.14-py3-none-any.whl", hash = "sha256:c1b59bdfb4b35a40bad0b8927c5ed757adf191ff9db2b9a384dc46a76e1ff10f"}, - {file = "chromadb-0.4.14.tar.gz", hash = "sha256:0fcef603bcf9c854305020c3f8d368c09b1545d48bd2bceefd51861090f87dad"}, + {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, + {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, ] [package.dependencies] bcrypt = ">=4.0.1" +build = ">=1.0.3" chroma-hnswlib = "0.7.3" fastapi = ">=0.95.2" grpcio = ">=1.58.0" importlib-resources = "*" -numpy = {version = ">=1.22.5", markers = "python_version >= \"3.8\""} +kubernetes = ">=28.1.0" +mmh3 = ">=4.0.1" +numpy = ">=1.22.5" onnxruntime = ">=1.14.1" +opentelemetry-api = ">=1.2.0" +opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" +opentelemetry-instrumentation-fastapi = ">=0.41b0" +opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" overrides = ">=7.3.1" posthog = ">=2.4.0" pulsar-client = ">=3.1.0" pydantic = ">=1.9" pypika = ">=0.48.9" +PyYAML = ">=6.0.0" requests = ">=2.28" +tenacity = ">=8.2.3" tokenizers = ">=0.13.2" tqdm = ">=4.65.0" typer = ">=0.9.0" @@ -1039,37 +1081,37 @@ vision = ["Pillow (>=9.4.0)"] [[package]] name = "debugpy" -version = "1.8.7" +version = "1.8.8" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, - {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, - {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, - {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, - {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, - {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, - {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, - {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, - {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, - {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, - {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, - {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, - {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, - {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, - {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, - {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, - {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, - {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, - {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, - {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, - {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, - {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, - {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, - {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, - {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, - {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, + {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, + {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, + {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, + {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, + {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, + {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, + {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, + {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, + {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, + {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, + {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, + {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, + {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, + {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, + {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, + {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, + {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, + {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, + {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, + {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, + {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, + {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, + {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, + {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, + {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, + {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, ] [[package]] @@ -1085,20 +1127,20 @@ files = [ [[package]] name = "deprecated" -version = "1.2.14" +version = "1.2.15" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, + {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, + {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] [[package]] name = "deprecation" @@ -1204,6 +1246,17 @@ files = [ {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, ] +[[package]] +name = "durationpy" +version = "0.9" +description = "Module for converting between datetime.timedelta and Go's Duration strings." +optional = true +python-versions = "*" +files = [ + {file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"}, + {file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"}, +] + [[package]] name = "email-validator" version = "2.2.0" @@ -1343,13 +1396,13 @@ pydantic = {version = ">=1.8.0", extras = ["email"]} [[package]] name = "fastembed" -version = "0.4.1" +version = "0.4.2" description = "Fast, light, accurate library built for retrieval embedding generation" optional = true python-versions = "<3.13,>=3.8.0" files = [ - {file = "fastembed-0.4.1-py3-none-any.whl", hash = "sha256:f75f02468aafa8de474844f9fbaa89683a3dcfd76521fa83cfc3efc885db61f3"}, - {file = "fastembed-0.4.1.tar.gz", hash = "sha256:d5dcfffc3554dca48caf16eec35e38c20544c58e396a5d215f238d40c8442718"}, + {file = "fastembed-0.4.2-py3-none-any.whl", hash = "sha256:b72a5bde7261fa01a4dd74c234f97eff6f6e869307aadaed1c6e37dc9fc80a0a"}, + {file = "fastembed-0.4.2.tar.gz", hash = "sha256:4065344ed795c2c860f31953ab9ead91291ce77952a3f7823ae64e3c8dc1a21c"}, ] [package.dependencies] @@ -1357,11 +1410,11 @@ huggingface-hub = ">=0.20,<1.0" loguru = ">=0.7.2,<0.8.0" mmh3 = ">=4.1.0,<5.0.0" numpy = [ - {version = ">=1.21,<2", markers = "python_version < \"3.12\""}, - {version = ">=1.26,<2", markers = "python_version >= \"3.12\""}, + {version = ">=1.21", markers = "python_version < \"3.12\""}, + {version = ">=1.26", markers = "python_version >= \"3.12\""}, ] onnx = ">=1.15.0,<2.0.0" -onnxruntime = ">=1.17.0,<2.0.0" +onnxruntime = ">=1.17.0,<1.20.0" pillow = ">=10.3.0,<11.0.0" py-rust-stemmers = ">=0.1.0,<0.2.0" requests = ">=2.31,<3.0" @@ -1586,6 +1639,46 @@ python-dateutil = ">=2.8.1" [package.extras] dev = ["flake8", "markdown", "twine", "wheel"] +[[package]] +name = "google-auth" +version = "2.36.0" +description = "Google Authentication Library" +optional = true +python-versions = ">=3.7" +files = [ + {file = "google_auth-2.36.0-py2.py3-none-any.whl", hash = "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb"}, + {file = "google_auth-2.36.0.tar.gz", hash = "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography", "pyopenssl"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.66.0" +description = "Common protobufs used in Google APIs" +optional = true +python-versions = ">=3.7" +files = [ + {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, + {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, +] + +[package.dependencies] +protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + [[package]] name = "greenlet" version = "3.1.1" @@ -1916,13 +2009,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -2076,13 +2169,13 @@ files = [ [[package]] name = "identify" -version = "2.6.1" +version = "2.6.2" description = "File identification library for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, + {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, + {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, ] [package.extras] @@ -2241,22 +2334,22 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" @@ -2277,84 +2370,84 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.7.0" +version = "0.7.1" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.7.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e14027f61101b3f5e173095d9ecf95c1cac03ffe45a849279bde1d97e559e314"}, - {file = "jiter-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:979ec4711c2e37ac949561858bd42028884c9799516a923e1ff0b501ef341a4a"}, - {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:662d5d3cca58ad6af7a3c6226b641c8655de5beebcb686bfde0df0f21421aafa"}, - {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d89008fb47043a469f97ad90840b97ba54e7c3d62dc7cbb6cbf938bd0caf71d"}, - {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8b16c35c846a323ce9067170d5ab8c31ea3dbcab59c4f7608bbbf20c2c3b43f"}, - {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e82daaa1b0a68704f9029b81e664a5a9de3e466c2cbaabcda5875f961702e7"}, - {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43a87a9f586636e1f0dd3651a91f79b491ea0d9fd7cbbf4f5c463eebdc48bda7"}, - {file = "jiter-0.7.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ec05b1615f96cc3e4901678bc863958611584072967d9962f9e571d60711d52"}, - {file = "jiter-0.7.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5cb97e35370bde7aa0d232a7f910f5a0fbbc96bc0a7dbaa044fd5cd6bcd7ec3"}, - {file = "jiter-0.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb316dacaf48c8c187cea75d0d7f835f299137e6fdd13f691dff8f92914015c7"}, - {file = "jiter-0.7.0-cp310-none-win32.whl", hash = "sha256:243f38eb4072763c54de95b14ad283610e0cd3bf26393870db04e520f60eebb3"}, - {file = "jiter-0.7.0-cp310-none-win_amd64.whl", hash = "sha256:2221d5603c139f6764c54e37e7c6960c469cbcd76928fb10d15023ba5903f94b"}, - {file = "jiter-0.7.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:91cec0ad755bd786c9f769ce8d843af955df6a8e56b17658771b2d5cb34a3ff8"}, - {file = "jiter-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:feba70a28a27d962e353e978dbb6afd798e711c04cb0b4c5e77e9d3779033a1a"}, - {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d866ec066c3616cacb8535dbda38bb1d470b17b25f0317c4540182bc886ce2"}, - {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7a7a00b6f9f18289dd563596f97ecaba6c777501a8ba04bf98e03087bcbc60"}, - {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9aaf564094c7db8687f2660605e099f3d3e6ea5e7135498486674fcb78e29165"}, - {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4d27e09825c1b3c7a667adb500ce8b840e8fc9f630da8454b44cdd4fb0081bb"}, - {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ca7c287da9c1d56dda88da1d08855a787dbb09a7e2bd13c66a2e288700bd7c7"}, - {file = "jiter-0.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db19a6d160f093cbc8cd5ea2abad420b686f6c0e5fb4f7b41941ebc6a4f83cda"}, - {file = "jiter-0.7.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e46a63c7f877cf7441ffc821c28287cfb9f533ae6ed707bde15e7d4dfafa7ae"}, - {file = "jiter-0.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ba426fa7ff21cb119fa544b75dd3fbee6a70e55a5829709c0338d07ccd30e6d"}, - {file = "jiter-0.7.0-cp311-none-win32.whl", hash = "sha256:c07f55a64912b0c7982377831210836d2ea92b7bd343fca67a32212dd72e38e0"}, - {file = "jiter-0.7.0-cp311-none-win_amd64.whl", hash = "sha256:ed27b2c43e1b5f6c7fedc5c11d4d8bfa627de42d1143d87e39e2e83ddefd861a"}, - {file = "jiter-0.7.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac7930bcaaeb1e229e35c91c04ed2e9f39025b86ee9fc3141706bbf6fff4aeeb"}, - {file = "jiter-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:571feae3e7c901a8eedde9fd2865b0dfc1432fb15cab8c675a8444f7d11b7c5d"}, - {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8af4df8a262fa2778b68c2a03b6e9d1cb4d43d02bea6976d46be77a3a331af1"}, - {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd028d4165097a611eb0c7494d8c1f2aebd46f73ca3200f02a175a9c9a6f22f5"}, - {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6b487247c7836810091e9455efe56a52ec51bfa3a222237e1587d04d3e04527"}, - {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6d28a92f28814e1a9f2824dc11f4e17e1df1f44dc4fdeb94c5450d34bcb2602"}, - {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90443994bbafe134f0b34201dad3ebe1c769f0599004084e046fb249ad912425"}, - {file = "jiter-0.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f9abf464f9faac652542ce8360cea8e68fba2b78350e8a170248f9bcc228702a"}, - {file = "jiter-0.7.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db7a8d99fc5f842f7d2852f06ccaed066532292c41723e5dff670c339b649f88"}, - {file = "jiter-0.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:15cf691ebd8693b70c94627d6b748f01e6d697d9a6e9f2bc310934fcfb7cf25e"}, - {file = "jiter-0.7.0-cp312-none-win32.whl", hash = "sha256:9dcd54fa422fb66ca398bec296fed5f58e756aa0589496011cfea2abb5be38a5"}, - {file = "jiter-0.7.0-cp312-none-win_amd64.whl", hash = "sha256:cc989951f73f9375b8eacd571baaa057f3d7d11b7ce6f67b9d54642e7475bfad"}, - {file = "jiter-0.7.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:24cecd18df540963cd27c08ca5ce1d0179f229ff78066d9eecbe5add29361340"}, - {file = "jiter-0.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d41b46236b90b043cca73785674c23d2a67d16f226394079d0953f94e765ed76"}, - {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b160db0987171365c153e406a45dcab0ee613ae3508a77bfff42515cb4ce4d6e"}, - {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1c8d91e0f0bd78602eaa081332e8ee4f512c000716f5bc54e9a037306d693a7"}, - {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:997706c683195eeff192d2e5285ce64d2a610414f37da3a3f2625dcf8517cf90"}, - {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ea52a8a0ff0229ab2920284079becd2bae0688d432fca94857ece83bb49c541"}, - {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d77449d2738cf74752bb35d75ee431af457e741124d1db5e112890023572c7c"}, - {file = "jiter-0.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8203519907a1d81d6cb00902c98e27c2d0bf25ce0323c50ca594d30f5f1fbcf"}, - {file = "jiter-0.7.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41d15ccc53931c822dd7f1aebf09faa3cda2d7b48a76ef304c7dbc19d1302e51"}, - {file = "jiter-0.7.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:febf3179b2fabf71fbd2fd52acb8594163bb173348b388649567a548f356dbf6"}, - {file = "jiter-0.7.0-cp313-none-win32.whl", hash = "sha256:4a8e2d866e7eda19f012444e01b55079d8e1c4c30346aaac4b97e80c54e2d6d3"}, - {file = "jiter-0.7.0-cp313-none-win_amd64.whl", hash = "sha256:7417c2b928062c496f381fb0cb50412eee5ad1d8b53dbc0e011ce45bb2de522c"}, - {file = "jiter-0.7.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9c62c737b5368e51e74960a08fe1adc807bd270227291daede78db24d5fbf556"}, - {file = "jiter-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e4640722b1bef0f6e342fe4606aafaae0eb4f4be5c84355bb6867f34400f6688"}, - {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f367488c3b9453eab285424c61098faa1cab37bb49425e69c8dca34f2dfe7d69"}, - {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0cf5d42beb3514236459454e3287db53d9c4d56c4ebaa3e9d0efe81b19495129"}, - {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc5190ea1113ee6f7252fa8a5fe5a6515422e378356c950a03bbde5cafbdbaab"}, - {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ee47a149d698796a87abe445fc8dee21ed880f09469700c76c8d84e0d11efd"}, - {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48592c26ea72d3e71aa4bea0a93454df907d80638c3046bb0705507b6704c0d7"}, - {file = "jiter-0.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:79fef541199bd91cfe8a74529ecccb8eaf1aca38ad899ea582ebbd4854af1e51"}, - {file = "jiter-0.7.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d1ef6bb66041f2514739240568136c81b9dcc64fd14a43691c17ea793b6535c0"}, - {file = "jiter-0.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aca4d950863b1c238e315bf159466e064c98743eef3bd0ff9617e48ff63a4715"}, - {file = "jiter-0.7.0-cp38-none-win32.whl", hash = "sha256:897745f230350dcedb8d1ebe53e33568d48ea122c25e6784402b6e4e88169be7"}, - {file = "jiter-0.7.0-cp38-none-win_amd64.whl", hash = "sha256:b928c76a422ef3d0c85c5e98c498ce3421b313c5246199541e125b52953e1bc0"}, - {file = "jiter-0.7.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c9b669ff6f8ba08270dee9ccf858d3b0203b42314a428a1676762f2d390fbb64"}, - {file = "jiter-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5be919bacd73ca93801c3042bce6e95cb9c555a45ca83617b9b6c89df03b9c2"}, - {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a282e1e8a396dabcea82d64f9d05acf7efcf81ecdd925b967020dcb0e671c103"}, - {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:17ecb1a578a56e97a043c72b463776b5ea30343125308f667fb8fce4b3796735"}, - {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b6045fa0527129218cdcd8a8b839f678219686055f31ebab35f87d354d9c36e"}, - {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:189cc4262a92e33c19d4fd24018f5890e4e6da5b2581f0059938877943f8298c"}, - {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c138414839effbf30d185e30475c6dc8a16411a1e3681e5fd4605ab1233ac67a"}, - {file = "jiter-0.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2791604acef33da6b72d5ecf885a32384bcaf9aa1e4be32737f3b8b9588eef6a"}, - {file = "jiter-0.7.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae60ec89037a78d60bbf3d8b127f1567769c8fa24886e0abed3f622791dea478"}, - {file = "jiter-0.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:836f03dea312967635233d826f783309b98cfd9ccc76ac776e224cfcef577862"}, - {file = "jiter-0.7.0-cp39-none-win32.whl", hash = "sha256:ebc30ae2ce4bc4986e1764c404b4ea1924f926abf02ce92516485098f8545374"}, - {file = "jiter-0.7.0-cp39-none-win_amd64.whl", hash = "sha256:abf596f951370c648f37aa9899deab296c42a3829736e598b0dd10b08f77a44d"}, - {file = "jiter-0.7.0.tar.gz", hash = "sha256:c061d9738535497b5509f8970584f20de1e900806b239a39a9994fc191dad630"}, + {file = "jiter-0.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:262e96d06696b673fad6f257e6a0abb6e873dc22818ca0e0600f4a1189eb334f"}, + {file = "jiter-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be6de02939aac5be97eb437f45cfd279b1dc9de358b13ea6e040e63a3221c40d"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935f10b802bc1ce2b2f61843e498c7720aa7f4e4bb7797aa8121eab017293c3d"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9cd3cccccabf5064e4bb3099c87bf67db94f805c1e62d1aefd2b7476e90e0ee2"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aa919ebfc5f7b027cc368fe3964c0015e1963b92e1db382419dadb098a05192"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ae2d01e82c94491ce4d6f461a837f63b6c4e6dd5bb082553a70c509034ff3d4"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f9568cd66dbbdab67ae1b4c99f3f7da1228c5682d65913e3f5f95586b3cb9a9"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ecbf4e20ec2c26512736284dc1a3f8ed79b6ca7188e3b99032757ad48db97dc"}, + {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b1a0508fddc70ce00b872e463b387d49308ef02b0787992ca471c8d4ba1c0fa1"}, + {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f84c9996664c460f24213ff1e5881530abd8fafd82058d39af3682d5fd2d6316"}, + {file = "jiter-0.7.1-cp310-none-win32.whl", hash = "sha256:c915e1a1960976ba4dfe06551ea87063b2d5b4d30759012210099e712a414d9f"}, + {file = "jiter-0.7.1-cp310-none-win_amd64.whl", hash = "sha256:75bf3b7fdc5c0faa6ffffcf8028a1f974d126bac86d96490d1b51b3210aa0f3f"}, + {file = "jiter-0.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ad04a23a91f3d10d69d6c87a5f4471b61c2c5cd6e112e85136594a02043f462c"}, + {file = "jiter-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e47a554de88dff701226bb5722b7f1b6bccd0b98f1748459b7e56acac2707a5"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e44fff69c814a2e96a20b4ecee3e2365e9b15cf5fe4e00869d18396daa91dab"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df0a1d05081541b45743c965436f8b5a1048d6fd726e4a030113a2699a6046ea"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f22cf8f236a645cb6d8ffe2a64edb5d2b66fb148bf7c75eea0cb36d17014a7bc"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8589f50b728ea4bf22e0632eefa125c8aa9c38ed202a5ee6ca371f05eeb3ff"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f20de711224f2ca2dbb166a8d512f6ff48c9c38cc06b51f796520eb4722cc2ce"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a9803396032117b85ec8cbf008a54590644a062fedd0425cbdb95e4b2b60479"}, + {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3d8bae77c82741032e9d89a4026479061aba6e646de3bf5f2fc1ae2bbd9d06e0"}, + {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3dc9939e576bbc68c813fc82f6620353ed68c194c7bcf3d58dc822591ec12490"}, + {file = "jiter-0.7.1-cp311-none-win32.whl", hash = "sha256:f7605d24cd6fab156ec89e7924578e21604feee9c4f1e9da34d8b67f63e54892"}, + {file = "jiter-0.7.1-cp311-none-win_amd64.whl", hash = "sha256:f3ea649e7751a1a29ea5ecc03c4ada0a833846c59c6da75d747899f9b48b7282"}, + {file = "jiter-0.7.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ad36a1155cbd92e7a084a568f7dc6023497df781adf2390c345dd77a120905ca"}, + {file = "jiter-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7ba52e6aaed2dc5c81a3d9b5e4ab95b039c4592c66ac973879ba57c3506492bb"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7de0b6f6728b678540c7927587e23f715284596724be203af952418acb8a2d"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9463b62bd53c2fb85529c700c6a3beb2ee54fde8bef714b150601616dcb184a6"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:627164ec01d28af56e1f549da84caf0fe06da3880ebc7b7ee1ca15df106ae172"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25d0e5bf64e368b0aa9e0a559c3ab2f9b67e35fe7269e8a0d81f48bbd10e8963"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c244261306f08f8008b3087059601997016549cb8bb23cf4317a4827f07b7d74"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ded4e4b75b68b843b7cea5cd7c55f738c20e1394c68c2cb10adb655526c5f1b"}, + {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:80dae4f1889b9d09e5f4de6b58c490d9c8ce7730e35e0b8643ab62b1538f095c"}, + {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5970cf8ec943b51bce7f4b98d2e1ed3ada170c2a789e2db3cb484486591a176a"}, + {file = "jiter-0.7.1-cp312-none-win32.whl", hash = "sha256:701d90220d6ecb3125d46853c8ca8a5bc158de8c49af60fd706475a49fee157e"}, + {file = "jiter-0.7.1-cp312-none-win_amd64.whl", hash = "sha256:7824c3ecf9ecf3321c37f4e4d4411aad49c666ee5bc2a937071bdd80917e4533"}, + {file = "jiter-0.7.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:097676a37778ba3c80cb53f34abd6943ceb0848263c21bf423ae98b090f6c6ba"}, + {file = "jiter-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3298af506d4271257c0a8f48668b0f47048d69351675dd8500f22420d4eec378"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12fd88cfe6067e2199964839c19bd2b422ca3fd792949b8f44bb8a4e7d21946a"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dacca921efcd21939123c8ea8883a54b9fa7f6545c8019ffcf4f762985b6d0c8"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de3674a5fe1f6713a746d25ad9c32cd32fadc824e64b9d6159b3b34fd9134143"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65df9dbae6d67e0788a05b4bad5706ad40f6f911e0137eb416b9eead6ba6f044"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ba9a358d59a0a55cccaa4957e6ae10b1a25ffdabda863c0343c51817610501d"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576eb0f0c6207e9ede2b11ec01d9c2182973986514f9c60bc3b3b5d5798c8f50"}, + {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e550e29cdf3577d2c970a18f3959e6b8646fd60ef1b0507e5947dc73703b5627"}, + {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:81d968dbf3ce0db2e0e4dec6b0a0d5d94f846ee84caf779b07cab49f5325ae43"}, + {file = "jiter-0.7.1-cp313-none-win32.whl", hash = "sha256:f892e547e6e79a1506eb571a676cf2f480a4533675f834e9ae98de84f9b941ac"}, + {file = "jiter-0.7.1-cp313-none-win_amd64.whl", hash = "sha256:0302f0940b1455b2a7fb0409b8d5b31183db70d2b07fd177906d83bf941385d1"}, + {file = "jiter-0.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c65a3ce72b679958b79d556473f192a4dfc5895e8cc1030c9f4e434690906076"}, + {file = "jiter-0.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e80052d3db39f9bb8eb86d207a1be3d9ecee5e05fdec31380817f9609ad38e60"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a497859c4f3f7acd71c8bd89a6f9cf753ebacacf5e3e799138b8e1843084e3"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1288bc22b9e36854a0536ba83666c3b1fb066b811019d7b682c9cf0269cdf9f"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b096ca72dd38ef35675e1d3b01785874315182243ef7aea9752cb62266ad516f"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8dbbd52c50b605af13dbee1a08373c520e6fcc6b5d32f17738875847fea4e2cd"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af29c5c6eb2517e71ffa15c7ae9509fa5e833ec2a99319ac88cc271eca865519"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f114a4df1e40c03c0efbf974b376ed57756a1141eb27d04baee0680c5af3d424"}, + {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:191fbaee7cf46a9dd9b817547bf556facde50f83199d07fc48ebeff4082f9df4"}, + {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e2b445e5ee627fb4ee6bbceeb486251e60a0c881a8e12398dfdff47c56f0723"}, + {file = "jiter-0.7.1-cp38-none-win32.whl", hash = "sha256:47ac4c3cf8135c83e64755b7276339b26cd3c7ddadf9e67306ace4832b283edf"}, + {file = "jiter-0.7.1-cp38-none-win_amd64.whl", hash = "sha256:60b49c245cd90cde4794f5c30f123ee06ccf42fb8730a019a2870cd005653ebd"}, + {file = "jiter-0.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8f212eeacc7203256f526f550d105d8efa24605828382cd7d296b703181ff11d"}, + {file = "jiter-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d9e247079d88c00e75e297e6cb3a18a039ebcd79fefc43be9ba4eb7fb43eb726"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0aacaa56360139c53dcf352992b0331f4057a0373bbffd43f64ba0c32d2d155"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc1b55314ca97dbb6c48d9144323896e9c1a25d41c65bcb9550b3e0c270ca560"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f281aae41b47e90deb70e7386558e877a8e62e1693e0086f37d015fa1c102289"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:93c20d2730a84d43f7c0b6fb2579dc54335db742a59cf9776d0b80e99d587382"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e81ccccd8069110e150613496deafa10da2f6ff322a707cbec2b0d52a87b9671"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7d5e85766eff4c9be481d77e2226b4c259999cb6862ccac5ef6621d3c8dcce"}, + {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f52ce5799df5b6975439ecb16b1e879d7655e1685b6e3758c9b1b97696313bfb"}, + {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0c91a0304373fdf97d56f88356a010bba442e6d995eb7773cbe32885b71cdd8"}, + {file = "jiter-0.7.1-cp39-none-win32.whl", hash = "sha256:5c08adf93e41ce2755970e8aa95262298afe2bf58897fb9653c47cd93c3c6cdc"}, + {file = "jiter-0.7.1-cp39-none-win_amd64.whl", hash = "sha256:6592f4067c74176e5f369228fb2995ed01400c9e8e1225fb73417183a5e635f0"}, + {file = "jiter-0.7.1.tar.gz", hash = "sha256:448cf4f74f7363c34cdef26214da527e8eeffd88ba06d0b80b485ad0667baf5d"}, ] [[package]] @@ -2381,13 +2474,13 @@ files = [ [[package]] name = "json-repair" -version = "0.30.0" +version = "0.30.2" description = "A package to repair broken json strings" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "json_repair-0.30.0-py3-none-any.whl", hash = "sha256:bda4a5552dc12085c6363ff5acfcdb0c9cafc629989a2112081b7e205828228d"}, - {file = "json_repair-0.30.0.tar.gz", hash = "sha256:24f12087a0e385ed47207eab1fca12bffd473e48db5bb803793d6c4fd97377ce"}, + {file = "json_repair-0.30.2-py3-none-any.whl", hash = "sha256:824d7ab208f5daadf7925e362979870ba91f9a5e6242d59f7073c7171abe27b5"}, + {file = "json_repair-0.30.2.tar.gz", hash = "sha256:aa244f0d91e81c9587b2b6981a5657a7d4fadb20051f74bc6110f1ca6a963fb9"}, ] [[package]] @@ -2427,13 +2520,13 @@ referencing = ">=0.31.0" [[package]] name = "jupyter-cache" -version = "1.0.0" +version = "1.0.1" description = "A defined interface for working with a cache of jupyter notebooks." optional = true python-versions = ">=3.9" files = [ - {file = "jupyter_cache-1.0.0-py3-none-any.whl", hash = "sha256:594b1c4e29b488b36547e12477645f489dbdc62cc939b2408df5679f79245078"}, - {file = "jupyter_cache-1.0.0.tar.gz", hash = "sha256:d0fa7d7533cd5798198d8889318269a8c1382ed3b22f622c09a9356521f48687"}, + {file = "jupyter_cache-1.0.1-py3-none-any.whl", hash = "sha256:9c3cafd825ba7da8b5830485343091143dff903e4d8c69db9349b728b140abf6"}, + {file = "jupyter_cache-1.0.1.tar.gz", hash = "sha256:16e808eb19e3fb67a223db906e131ea6e01f03aa27f49a7214ce6a5fec186fb9"}, ] [package.dependencies] @@ -2450,7 +2543,7 @@ tabulate = "*" cli = ["click-log"] code-style = ["pre-commit (>=2.12)"] rtd = ["ipykernel", "jupytext", "myst-nb", "nbdime", "sphinx-book-theme", "sphinx-copybutton"] -testing = ["coverage", "ipykernel", "jupytext", "matplotlib", "nbdime", "nbformat (>=5.1)", "numpy", "pandas", "pytest (>=6,<8)", "pytest-cov", "pytest-regressions", "sympy"] +testing = ["coverage", "ipykernel", "jupytext", "matplotlib", "nbdime", "nbformat (>=5.1)", "numpy", "pandas", "pytest (>=6)", "pytest-cov", "pytest-regressions", "sympy"] [[package]] name = "jupyter-client" @@ -2495,6 +2588,33 @@ traitlets = ">=5.3" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] +[[package]] +name = "kubernetes" +version = "31.0.0" +description = "Kubernetes python client" +optional = true +python-versions = ">=3.6" +files = [ + {file = "kubernetes-31.0.0-py2.py3-none-any.whl", hash = "sha256:bf141e2d380c8520eada8b351f4e319ffee9636328c137aa432bc486ca1200e1"}, + {file = "kubernetes-31.0.0.tar.gz", hash = "sha256:28945de906c8c259c1ebe62703b56a03b714049372196f854105afe4e6d014c0"}, +] + +[package.dependencies] +certifi = ">=14.05.14" +durationpy = ">=0.7" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + [[package]] name = "lancedb" version = "0.11.0" @@ -2588,13 +2708,13 @@ tornado = "*" [[package]] name = "llama-cloud" -version = "0.1.4" +version = "0.1.5" description = "" optional = true python-versions = "<4,>=3.8" files = [ - {file = "llama_cloud-0.1.4-py3-none-any.whl", hash = "sha256:cfca6c4e0a87468b922d732f0f313a2ecd3a8e0bf74382ee80829ce49dcbc5e0"}, - {file = "llama_cloud-0.1.4.tar.gz", hash = "sha256:6f0155979bd96160951cb812c48836f1face037bc79ccfd8d185b18ef4c9faf8"}, + {file = "llama_cloud-0.1.5-py3-none-any.whl", hash = "sha256:15605022520d04bd6ef6a46c0cbde833f301d652286d34fca02b4c44e2a7a2aa"}, + {file = "llama_cloud-0.1.5.tar.gz", hash = "sha256:8ce1db36754a6a46c8511561dbc040a2e89ba4ca1cf4edfb6ce382a5240f6cb6"}, ] [package.dependencies] @@ -2724,13 +2844,13 @@ llama-index-core = ">=0.10.48.post1,<0.11.0" [[package]] name = "llama-index-legacy" -version = "0.9.48.post3" +version = "0.9.48.post4" description = "Interface between LLMs and your data" optional = true python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index_legacy-0.9.48.post3-py3-none-any.whl", hash = "sha256:04221320d84d96ba9ee3e21e5055bd8527cbd769e8f1c60cf0368ed907e012a2"}, - {file = "llama_index_legacy-0.9.48.post3.tar.gz", hash = "sha256:f6969f1085efb0abebd6367e46f3512020f3f6b9c086f458a519830dd61e8206"}, + {file = "llama_index_legacy-0.9.48.post4-py3-none-any.whl", hash = "sha256:4b817d7c343fb5f7f00c4410eff519f320013b8d5f24c4fedcf270c471f92038"}, + {file = "llama_index_legacy-0.9.48.post4.tar.gz", hash = "sha256:f8a9764e7e134a52bfef5e53d2d62561bfc01fc09874c51cc001df6f5302ae30"}, ] [package.dependencies] @@ -3270,13 +3390,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.43" +version = "9.5.44" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.43-py3-none-any.whl", hash = "sha256:4aae0664c456fd12837a3192e0225c17960ba8bf55d7f0a7daef7e4b0b914a34"}, - {file = "mkdocs_material-9.5.43.tar.gz", hash = "sha256:83be7ff30b65a1e4930dfa4ab911e75780a3afc9583d162692e434581cb46979"}, + {file = "mkdocs_material-9.5.44-py3-none-any.whl", hash = "sha256:47015f9c167d58a5ff5e682da37441fc4d66a1c79334bfc08d774763cacf69ca"}, + {file = "mkdocs_material-9.5.44.tar.gz", hash = "sha256:f3a6c968e524166b3f3ed1fb97d3ed3e0091183b0545cedf7156a2a6804c56c0"}, ] [package.dependencies] @@ -3310,13 +3430,13 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.26.2" +version = "0.27.0" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" files = [ - {file = "mkdocstrings-0.26.2-py3-none-any.whl", hash = "sha256:1248f3228464f3b8d1a15bd91249ce1701fe3104ac517a5f167a0e01ca850ba5"}, - {file = "mkdocstrings-0.26.2.tar.gz", hash = "sha256:34a8b50f1e6cfd29546c6c09fbe02154adfb0b361bb758834bf56aa284ba876e"}, + {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, + {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, ] [package.dependencies] @@ -4034,32 +4154,36 @@ reference = ["Pillow", "google-re2"] [[package]] name = "onnxruntime" -version = "1.20.0" +version = "1.19.2" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = true python-versions = "*" files = [ - {file = "onnxruntime-1.20.0-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:2ac38bc6cbf7bb8527ded58711af6ef2c8c59d070f0fde58f83824422526922a"}, - {file = "onnxruntime-1.20.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cfd5a22abc11b273ec76fa773e22db19b749e27bf1ed05dd50d207f1817aae1"}, - {file = "onnxruntime-1.20.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b5daee2d03909b589f1a9ab24c325cc3c33ab7f736228158784fb1a97a92308"}, - {file = "onnxruntime-1.20.0-cp310-cp310-win32.whl", hash = "sha256:e1eb08c13f91f830eb8df4f4e17a2a2652d1165f50bbed4f28f2afbf425c55d7"}, - {file = "onnxruntime-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfcc1d21a12076bcc213441b405c48e1f21dedb36943e31eb93cb7a12b34678e"}, - {file = "onnxruntime-1.20.0-cp311-cp311-macosx_13_0_universal2.whl", hash = "sha256:3398354e9145c68edc09dbc72265401150027e76716ae758e8d9b52e6a7ddca0"}, - {file = "onnxruntime-1.20.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a831b720d0a7be8241a230cb06f592e8bb66652d7cea54ce02d83769651fdee"}, - {file = "onnxruntime-1.20.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:041fefe60af844ebd90f344c84f908201490555cd0a6d78dd0a7acdc27b59972"}, - {file = "onnxruntime-1.20.0-cp311-cp311-win32.whl", hash = "sha256:83da64d2824809d0f6977db8bfc5091f742c26f09dfd66a3934e673780f5f87a"}, - {file = "onnxruntime-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:bfa390046332f5fca6f8af8c9d17164621ac52e66b11518e187278b19364800c"}, - {file = "onnxruntime-1.20.0-cp312-cp312-macosx_13_0_universal2.whl", hash = "sha256:97c2b91bfea063f9c3457422d28a336bfd2859001cd880645adfa7184e29dd79"}, - {file = "onnxruntime-1.20.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51e7b34e398089c4ed8d0f50722d7a64a4d5f11b38c4a42576458a03c6dbc72e"}, - {file = "onnxruntime-1.20.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e259378ff2843321e0bf4552adcbee48822c91d77d42dde78b87dcdf10ad01f"}, - {file = "onnxruntime-1.20.0-cp312-cp312-win32.whl", hash = "sha256:428abc1f7d8eb425887e2b7726044f2af7b5a098359455e7d2d92343f04ad0ff"}, - {file = "onnxruntime-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:d5f23cbfeb546e16ffea81c28d2e796a53197fdc6c92540648e2aa53a7c7a637"}, - {file = "onnxruntime-1.20.0-cp313-cp313-macosx_13_0_universal2.whl", hash = "sha256:95b91126bc3e1754868da1d3d2d08a7a10279b8ff5cea5e34e92fbe3fd691dcf"}, - {file = "onnxruntime-1.20.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d57c10d7729347d6663f32b3f569f33d69a95e150d37ff6af4be9b9ab1ffdc25"}, - {file = "onnxruntime-1.20.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9c38735dac127d0eeb957ec312c8f1ae90ecae2779a55b2fa279aa7bd116cbd"}, - {file = "onnxruntime-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:25514cec4ea251d492aa1e38a7395d8801e64a4c940a154aef84cfad97ae4628"}, - {file = "onnxruntime-1.20.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:640ad9ea72d322f0325a51544eddb54f4fa843c4348573c88a9cb44f46678f3f"}, - {file = "onnxruntime-1.20.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc4e7c10c98c1f407835448c26a7e14ebff3234f131e1fbc53bd9500c828df89"}, + {file = "onnxruntime-1.19.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:84fa57369c06cadd3c2a538ae2a26d76d583e7c34bdecd5769d71ca5c0fc750e"}, + {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdc471a66df0c1cdef774accef69e9f2ca168c851ab5e4f2f3341512c7ef4666"}, + {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3a4ce906105d99ebbe817f536d50a91ed8a4d1592553f49b3c23c4be2560ae6"}, + {file = "onnxruntime-1.19.2-cp310-cp310-win32.whl", hash = "sha256:4b3d723cc154c8ddeb9f6d0a8c0d6243774c6b5930847cc83170bfe4678fafb3"}, + {file = "onnxruntime-1.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:17ed7382d2c58d4b7354fb2b301ff30b9bf308a1c7eac9546449cd122d21cae5"}, + {file = "onnxruntime-1.19.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d863e8acdc7232d705d49e41087e10b274c42f09e259016a46f32c34e06dc4fd"}, + {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1dfe4f660a71b31caa81fc298a25f9612815215a47b286236e61d540350d7b6"}, + {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a36511dc07c5c964b916697e42e366fa43c48cdb3d3503578d78cef30417cb84"}, + {file = "onnxruntime-1.19.2-cp311-cp311-win32.whl", hash = "sha256:50cbb8dc69d6befad4746a69760e5b00cc3ff0a59c6c3fb27f8afa20e2cab7e7"}, + {file = "onnxruntime-1.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:1c3e5d415b78337fa0b1b75291e9ea9fb2a4c1f148eb5811e7212fed02cfffa8"}, + {file = "onnxruntime-1.19.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:68e7051bef9cfefcbb858d2d2646536829894d72a4130c24019219442b1dd2ed"}, + {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d366fbcc205ce68a8a3bde2185fd15c604d9645888703785b61ef174265168"}, + {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:477b93df4db467e9cbf34051662a4b27c18e131fa1836e05974eae0d6e4cf29b"}, + {file = "onnxruntime-1.19.2-cp312-cp312-win32.whl", hash = "sha256:9a174073dc5608fad05f7cf7f320b52e8035e73d80b0a23c80f840e5a97c0147"}, + {file = "onnxruntime-1.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:190103273ea4507638ffc31d66a980594b237874b65379e273125150eb044857"}, + {file = "onnxruntime-1.19.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:636bc1d4cc051d40bc52e1f9da87fbb9c57d9d47164695dfb1c41646ea51ea66"}, + {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5bd8b875757ea941cbcfe01582970cc299893d1b65bd56731e326a8333f638a3"}, + {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2046fc9560f97947bbc1acbe4c6d48585ef0f12742744307d3364b131ac5778"}, + {file = "onnxruntime-1.19.2-cp38-cp38-win32.whl", hash = "sha256:31c12840b1cde4ac1f7d27d540c44e13e34f2345cf3642762d2a3333621abb6a"}, + {file = "onnxruntime-1.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:016229660adea180e9a32ce218b95f8f84860a200f0f13b50070d7d90e92956c"}, + {file = "onnxruntime-1.19.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:006c8d326835c017a9e9f74c9c77ebb570a71174a1e89fe078b29a557d9c3848"}, + {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df2a94179a42d530b936f154615b54748239c2908ee44f0d722cb4df10670f68"}, + {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fae4b4de45894b9ce7ae418c5484cbf0341db6813effec01bb2216091c52f7fb"}, + {file = "onnxruntime-1.19.2-cp39-cp39-win32.whl", hash = "sha256:dc5430f473e8706fff837ae01323be9dcfddd3ea471c900a91fa7c9b807ec5d3"}, + {file = "onnxruntime-1.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:38475e29a95c5f6c62c2c603d69fc7d4c6ccbf4df602bd567b86ae1138881c49"}, ] [package.dependencies] @@ -4072,13 +4196,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.53.0" +version = "1.54.4" description = "The official Python library for the openai API" optional = false -python-versions = ">=3.7.1" +python-versions = ">=3.8" files = [ - {file = "openai-1.53.0-py3-none-any.whl", hash = "sha256:20f408c32fc5cb66e60c6882c994cdca580a5648e10045cd840734194f033418"}, - {file = "openai-1.53.0.tar.gz", hash = "sha256:be2c4e77721b166cce8130e544178b7d579f751b4b074ffbaade3854b6f85ec5"}, + {file = "openai-1.54.4-py3-none-any.whl", hash = "sha256:0d95cef99346bf9b6d7fbf57faf61a673924c3e34fa8af84c9ffe04660673a7e"}, + {file = "openai-1.54.4.tar.gz", hash = "sha256:50f3656e45401c54e973fa05dc29f3f0b0d19348d685b2f7ddb4d92bf7b1b6bf"}, ] [package.dependencies] @@ -4094,6 +4218,170 @@ typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +[[package]] +name = "opentelemetry-api" +version = "1.28.1" +description = "OpenTelemetry Python API" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_api-1.28.1-py3-none-any.whl", hash = "sha256:bfe86c95576cf19a914497f439fd79c9553a38de0adbdc26f7cfc46b0c00b16c"}, + {file = "opentelemetry_api-1.28.1.tar.gz", hash = "sha256:6fa7295a12c707f5aebef82da3d9ec5afe6992f3e42bfe7bec0339a44b3518e7"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<=8.5.0" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.28.1" +description = "OpenTelemetry Protobuf encoding" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_common-1.28.1-py3-none-any.whl", hash = "sha256:56ea6cf28c90f767733f046a54525dc7271a25faff86b1955e5252b55f4e007f"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.28.1.tar.gz", hash = "sha256:6e55e7f5d59296cc87a74c08b8e0ddf87403f73a62302ec7ee042c1a1f4a8f70"}, +] + +[package.dependencies] +opentelemetry-proto = "1.28.1" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.28.1" +description = "OpenTelemetry Collector Protobuf over gRPC Exporter" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_grpc-1.28.1-py3-none-any.whl", hash = "sha256:fd494b9dd7869975138cef68d52ed45b9ca584c1fa31bef2d01ecfd537445dfa"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.28.1.tar.gz", hash = "sha256:9c84a103734d0c9cf9a4ba973d9c15c21996a554ab2bbd6208b3925873912642"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +googleapis-common-protos = ">=1.52,<2.0" +grpcio = ">=1.63.2,<2.0.0" +opentelemetry-api = ">=1.15,<2.0" +opentelemetry-exporter-otlp-proto-common = "1.28.1" +opentelemetry-proto = "1.28.1" +opentelemetry-sdk = ">=1.28.1,<1.29.0" + +[[package]] +name = "opentelemetry-instrumentation" +version = "0.49b1" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.49b1-py3-none-any.whl", hash = "sha256:0a9d3821736104013693ef3b8a9d29b41f2f3a81ee2d8c9288b52d62bae5747c"}, + {file = "opentelemetry_instrumentation-0.49b1.tar.gz", hash = "sha256:2d0e41181b7957ba061bb436b969ad90545ac3eba65f290830009b4264d2824e"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.4,<2.0" +opentelemetry-semantic-conventions = "0.49b1" +packaging = ">=18.0" +wrapt = ">=1.0.0,<2.0.0" + +[[package]] +name = "opentelemetry-instrumentation-asgi" +version = "0.49b1" +description = "ASGI instrumentation for OpenTelemetry" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_asgi-0.49b1-py3-none-any.whl", hash = "sha256:8dcbc438cb138789fcb20ae38b6e7f23088e066d77b54bae205c5744856603c6"}, + {file = "opentelemetry_instrumentation_asgi-0.49b1.tar.gz", hash = "sha256:d1a2b4cb76490be28bcad3c0f562c4b3c84157148c922ca298bb04ed9e36c005"}, +] + +[package.dependencies] +asgiref = ">=3.0,<4.0" +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.49b1" +opentelemetry-semantic-conventions = "0.49b1" +opentelemetry-util-http = "0.49b1" + +[package.extras] +instruments = ["asgiref (>=3.0,<4.0)"] + +[[package]] +name = "opentelemetry-instrumentation-fastapi" +version = "0.49b1" +description = "OpenTelemetry FastAPI Instrumentation" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_fastapi-0.49b1-py3-none-any.whl", hash = "sha256:3398940102c8ef613b9c55fc4f179cc92413de456f6bec6eeb1995270de2b087"}, + {file = "opentelemetry_instrumentation_fastapi-0.49b1.tar.gz", hash = "sha256:13d9d4d70b4bb831468b8e40807353731cad7fbfaeedde0070d93bcb2c417b07"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.49b1" +opentelemetry-instrumentation-asgi = "0.49b1" +opentelemetry-semantic-conventions = "0.49b1" +opentelemetry-util-http = "0.49b1" + +[package.extras] +instruments = ["fastapi (>=0.58,<1.0)"] + +[[package]] +name = "opentelemetry-proto" +version = "1.28.1" +description = "OpenTelemetry Python Proto" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_proto-1.28.1-py3-none-any.whl", hash = "sha256:cb406ec69f1d11439e60fb43c6b744783fc8ee4deecdab61b3e29f112b0602f9"}, + {file = "opentelemetry_proto-1.28.1.tar.gz", hash = "sha256:6f9e9d9958822ab3e3cdcd2a24806d62aa10282349fd4338aafe32c69c87fc15"}, +] + +[package.dependencies] +protobuf = ">=5.0,<6.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.28.1" +description = "OpenTelemetry Python SDK" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_sdk-1.28.1-py3-none-any.whl", hash = "sha256:72aad7f5fcbe37113c4ab4899f6cdeb6ac77ed3e62f25a85e3627b12583dad0f"}, + {file = "opentelemetry_sdk-1.28.1.tar.gz", hash = "sha256:100fa371b2046ffba6a340c18f0b2a0463acad7461e5177e126693b613a6ca57"}, +] + +[package.dependencies] +opentelemetry-api = "1.28.1" +opentelemetry-semantic-conventions = "0.49b1" +typing-extensions = ">=3.7.4" + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.49b1" +description = "OpenTelemetry Semantic Conventions" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_semantic_conventions-0.49b1-py3-none-any.whl", hash = "sha256:dd6f3ac8169d2198c752e1a63f827e5f5e110ae9b0ce33f2aad9a3baf0739743"}, + {file = "opentelemetry_semantic_conventions-0.49b1.tar.gz", hash = "sha256:91817883b159ffb94c2ca9548509c4fe0aafce7c24f437aa6ac3fc613aa9a758"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +opentelemetry-api = "1.28.1" + +[[package]] +name = "opentelemetry-util-http" +version = "0.49b1" +description = "Web util for OpenTelemetry" +optional = true +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_util_http-0.49b1-py3-none-any.whl", hash = "sha256:0290b942f7888b6310df6803e52e12f4043b8f224db0659f62dc7b70059eb94f"}, + {file = "opentelemetry_util_http-0.49b1.tar.gz", hash = "sha256:6c2bc6f7e20e286dbdfcccb9d895fa290ec9d7c596cdf2e06bf1d8e434b2edd0"}, +] + [[package]] name = "optuna" version = "3.6.1" @@ -4201,13 +4489,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -4842,7 +5130,7 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, @@ -4967,6 +5255,31 @@ files = [ [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] +[[package]] +name = "pyasn1" +version = "0.6.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, + {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.1" +description = "A collection of ASN.1-based protocols modules" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, + {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.7.0" + [[package]] name = "pycparser" version = "2.22" @@ -5326,6 +5639,17 @@ files = [ {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, ] +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +description = "Wrappers to call pyproject.toml-based build backend hooks." +optional = true +python-versions = ">=3.7" +files = [ + {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, + {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, +] + [[package]] name = "pyreadline3" version = "3.5.4" @@ -5342,27 +5666,25 @@ dev = ["build", "flake8", "mypy", "pytest", "twine"] [[package]] name = "pytest" -version = "6.2.5" +version = "8.3.3" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, ] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-mock" @@ -5855,6 +6177,24 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = true +python-versions = ">=3.4" +files = [ + {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, + {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + [[package]] name = "retry" version = "0.9.2" @@ -5891,114 +6231,101 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.20.1" +version = "0.21.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad"}, - {file = "rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f"}, - {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14511a539afee6f9ab492b543060c7491c99924314977a55c98bfa2ee29ce78c"}, - {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ccb8ac2d3c71cda472b75af42818981bdacf48d2e21c36331b50b4f16930163"}, - {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c142b88039b92e7e0cb2552e8967077e3179b22359e945574f5e2764c3953dcf"}, - {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f19169781dddae7478a32301b499b2858bc52fc45a112955e798ee307e294977"}, - {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13c56de6518e14b9bf6edde23c4c39dac5b48dcf04160ea7bce8fca8397cdf86"}, - {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:925d176a549f4832c6f69fa6026071294ab5910e82a0fe6c6228fce17b0706bd"}, - {file = "rpds_py-0.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:78f0b6877bfce7a3d1ff150391354a410c55d3cdce386f862926a4958ad5ab7e"}, - {file = "rpds_py-0.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3dd645e2b0dcb0fd05bf58e2e54c13875847687d0b71941ad2e757e5d89d4356"}, - {file = "rpds_py-0.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4f676e21db2f8c72ff0936f895271e7a700aa1f8d31b40e4e43442ba94973899"}, - {file = "rpds_py-0.20.1-cp310-none-win32.whl", hash = "sha256:648386ddd1e19b4a6abab69139b002bc49ebf065b596119f8f37c38e9ecee8ff"}, - {file = "rpds_py-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:d9ecb51120de61e4604650666d1f2b68444d46ae18fd492245a08f53ad2b7711"}, - {file = "rpds_py-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:762703bdd2b30983c1d9e62b4c88664df4a8a4d5ec0e9253b0231171f18f6d75"}, - {file = "rpds_py-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0b581f47257a9fce535c4567782a8976002d6b8afa2c39ff616edf87cbeff712"}, - {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:842c19a6ce894493563c3bd00d81d5100e8e57d70209e84d5491940fdb8b9e3a"}, - {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42cbde7789f5c0bcd6816cb29808e36c01b960fb5d29f11e052215aa85497c93"}, - {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c8e9340ce5a52f95fa7d3b552b35c7e8f3874d74a03a8a69279fd5fca5dc751"}, - {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ba6f89cac95c0900d932c9efb7f0fb6ca47f6687feec41abcb1bd5e2bd45535"}, - {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a916087371afd9648e1962e67403c53f9c49ca47b9680adbeef79da3a7811b0"}, - {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:200a23239781f46149e6a415f1e870c5ef1e712939fe8fa63035cd053ac2638e"}, - {file = "rpds_py-0.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58b1d5dd591973d426cbb2da5e27ba0339209832b2f3315928c9790e13f159e8"}, - {file = "rpds_py-0.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6b73c67850ca7cae0f6c56f71e356d7e9fa25958d3e18a64927c2d930859b8e4"}, - {file = "rpds_py-0.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d8761c3c891cc51e90bc9926d6d2f59b27beaf86c74622c8979380a29cc23ac3"}, - {file = "rpds_py-0.20.1-cp311-none-win32.whl", hash = "sha256:cd945871335a639275eee904caef90041568ce3b42f402c6959b460d25ae8732"}, - {file = "rpds_py-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:7e21b7031e17c6b0e445f42ccc77f79a97e2687023c5746bfb7a9e45e0921b84"}, - {file = "rpds_py-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:36785be22066966a27348444b40389f8444671630063edfb1a2eb04318721e17"}, - {file = "rpds_py-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:142c0a5124d9bd0e2976089484af5c74f47bd3298f2ed651ef54ea728d2ea42c"}, - {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbddc10776ca7ebf2a299c41a4dde8ea0d8e3547bfd731cb87af2e8f5bf8962d"}, - {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15a842bb369e00295392e7ce192de9dcbf136954614124a667f9f9f17d6a216f"}, - {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be5ef2f1fc586a7372bfc355986226484e06d1dc4f9402539872c8bb99e34b01"}, - {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbcf360c9e3399b056a238523146ea77eeb2a596ce263b8814c900263e46031a"}, - {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd27a66740ffd621d20b9a2f2b5ee4129a56e27bfb9458a3bcc2e45794c96cb"}, - {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0b937b2a1988f184a3e9e577adaa8aede21ec0b38320d6009e02bd026db04fa"}, - {file = "rpds_py-0.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6889469bfdc1eddf489729b471303739bf04555bb151fe8875931f8564309afc"}, - {file = "rpds_py-0.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:19b73643c802f4eaf13d97f7855d0fb527fbc92ab7013c4ad0e13a6ae0ed23bd"}, - {file = "rpds_py-0.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3c6afcf2338e7f374e8edc765c79fbcb4061d02b15dd5f8f314a4af2bdc7feb5"}, - {file = "rpds_py-0.20.1-cp312-none-win32.whl", hash = "sha256:dc73505153798c6f74854aba69cc75953888cf9866465196889c7cdd351e720c"}, - {file = "rpds_py-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:8bbe951244a838a51289ee53a6bae3a07f26d4e179b96fc7ddd3301caf0518eb"}, - {file = "rpds_py-0.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6ca91093a4a8da4afae7fe6a222c3b53ee4eef433ebfee4d54978a103435159e"}, - {file = "rpds_py-0.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b9c2fe36d1f758b28121bef29ed1dee9b7a2453e997528e7d1ac99b94892527c"}, - {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f009c69bc8c53db5dfab72ac760895dc1f2bc1b62ab7408b253c8d1ec52459fc"}, - {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6740a3e8d43a32629bb9b009017ea5b9e713b7210ba48ac8d4cb6d99d86c8ee8"}, - {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32b922e13d4c0080d03e7b62991ad7f5007d9cd74e239c4b16bc85ae8b70252d"}, - {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe00a9057d100e69b4ae4a094203a708d65b0f345ed546fdef86498bf5390982"}, - {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fe9b04b6fa685bd39237d45fad89ba19e9163a1ccaa16611a812e682913496"}, - {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa7ac11e294304e615b43f8c441fee5d40094275ed7311f3420d805fde9b07b4"}, - {file = "rpds_py-0.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aa97af1558a9bef4025f8f5d8c60d712e0a3b13a2fe875511defc6ee77a1ab7"}, - {file = "rpds_py-0.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:483b29f6f7ffa6af845107d4efe2e3fa8fb2693de8657bc1849f674296ff6a5a"}, - {file = "rpds_py-0.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37fe0f12aebb6a0e3e17bb4cd356b1286d2d18d2e93b2d39fe647138458b4bcb"}, - {file = "rpds_py-0.20.1-cp313-none-win32.whl", hash = "sha256:a624cc00ef2158e04188df5e3016385b9353638139a06fb77057b3498f794782"}, - {file = "rpds_py-0.20.1-cp313-none-win_amd64.whl", hash = "sha256:b71b8666eeea69d6363248822078c075bac6ed135faa9216aa85f295ff009b1e"}, - {file = "rpds_py-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5b48e790e0355865197ad0aca8cde3d8ede347831e1959e158369eb3493d2191"}, - {file = "rpds_py-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3e310838a5801795207c66c73ea903deda321e6146d6f282e85fa7e3e4854804"}, - {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2249280b870e6a42c0d972339e9cc22ee98730a99cd7f2f727549af80dd5a963"}, - {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e79059d67bea28b53d255c1437b25391653263f0e69cd7dec170d778fdbca95e"}, - {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b431c777c9653e569986ecf69ff4a5dba281cded16043d348bf9ba505486f36"}, - {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da584ff96ec95e97925174eb8237e32f626e7a1a97888cdd27ee2f1f24dd0ad8"}, - {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a0629ec053fc013808a85178524e3cb63a61dbc35b22499870194a63578fb9"}, - {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fbf15aff64a163db29a91ed0868af181d6f68ec1a3a7d5afcfe4501252840bad"}, - {file = "rpds_py-0.20.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:07924c1b938798797d60c6308fa8ad3b3f0201802f82e4a2c41bb3fafb44cc28"}, - {file = "rpds_py-0.20.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4a5a844f68776a7715ecb30843b453f07ac89bad393431efbf7accca3ef599c1"}, - {file = "rpds_py-0.20.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:518d2ca43c358929bf08f9079b617f1c2ca6e8848f83c1225c88caeac46e6cbc"}, - {file = "rpds_py-0.20.1-cp38-none-win32.whl", hash = "sha256:3aea7eed3e55119635a74bbeb80b35e776bafccb70d97e8ff838816c124539f1"}, - {file = "rpds_py-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:7dca7081e9a0c3b6490a145593f6fe3173a94197f2cb9891183ef75e9d64c425"}, - {file = "rpds_py-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b41b6321805c472f66990c2849e152aff7bc359eb92f781e3f606609eac877ad"}, - {file = "rpds_py-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a90c373ea2975519b58dece25853dbcb9779b05cc46b4819cb1917e3b3215b6"}, - {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16d4477bcb9fbbd7b5b0e4a5d9b493e42026c0bf1f06f723a9353f5153e75d30"}, - {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84b8382a90539910b53a6307f7c35697bc7e6ffb25d9c1d4e998a13e842a5e83"}, - {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4888e117dd41b9d34194d9e31631af70d3d526efc363085e3089ab1a62c32ed1"}, - {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5265505b3d61a0f56618c9b941dc54dc334dc6e660f1592d112cd103d914a6db"}, - {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e75ba609dba23f2c95b776efb9dd3f0b78a76a151e96f96cc5b6b1b0004de66f"}, - {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1791ff70bc975b098fe6ecf04356a10e9e2bd7dc21fa7351c1742fdeb9b4966f"}, - {file = "rpds_py-0.20.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d126b52e4a473d40232ec2052a8b232270ed1f8c9571aaf33f73a14cc298c24f"}, - {file = "rpds_py-0.20.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c14937af98c4cc362a1d4374806204dd51b1e12dded1ae30645c298e5a5c4cb1"}, - {file = "rpds_py-0.20.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3d089d0b88996df627693639d123c8158cff41c0651f646cd8fd292c7da90eaf"}, - {file = "rpds_py-0.20.1-cp39-none-win32.whl", hash = "sha256:653647b8838cf83b2e7e6a0364f49af96deec64d2a6578324db58380cff82aca"}, - {file = "rpds_py-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:fa41a64ac5b08b292906e248549ab48b69c5428f3987b09689ab2441f267d04d"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a07ced2b22f0cf0b55a6a510078174c31b6d8544f3bc00c2bcee52b3d613f74"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:68cb0a499f2c4a088fd2f521453e22ed3527154136a855c62e148b7883b99f9a"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3060d885657abc549b2a0f8e1b79699290e5d83845141717c6c90c2df38311"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95f3b65d2392e1c5cec27cff08fdc0080270d5a1a4b2ea1d51d5f4a2620ff08d"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cc3712a4b0b76a1d45a9302dd2f53ff339614b1c29603a911318f2357b04dd2"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d4eea0761e37485c9b81400437adb11c40e13ef513375bbd6973e34100aeb06"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f5179583d7a6cdb981151dd349786cbc318bab54963a192692d945dd3f6435d"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fbb0ffc754490aff6dabbf28064be47f0f9ca0b9755976f945214965b3ace7e"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a94e52537a0e0a85429eda9e49f272ada715506d3b2431f64b8a3e34eb5f3e75"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:92b68b79c0da2a980b1c4197e56ac3dd0c8a149b4603747c4378914a68706979"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:93da1d3db08a827eda74356f9f58884adb254e59b6664f64cc04cdff2cc19b0d"}, - {file = "rpds_py-0.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:754bbed1a4ca48479e9d4182a561d001bbf81543876cdded6f695ec3d465846b"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ca449520e7484534a2a44faf629362cae62b660601432d04c482283c47eaebab"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9c4cb04a16b0f199a8c9bf807269b2f63b7b5b11425e4a6bd44bd6961d28282c"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63804105143c7e24cee7db89e37cb3f3941f8e80c4379a0b355c52a52b6780"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:55cd1fa4ecfa6d9f14fbd97ac24803e6f73e897c738f771a9fe038f2f11ff07c"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f8f741b6292c86059ed175d80eefa80997125b7c478fb8769fd9ac8943a16c0"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fc212779bf8411667234b3cdd34d53de6c2b8b8b958e1e12cb473a5f367c338"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ad56edabcdb428c2e33bbf24f255fe2b43253b7d13a2cdbf05de955217313e6"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a3a1e9ee9728b2c1734f65d6a1d376c6f2f6fdcc13bb007a08cc4b1ff576dc5"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e13de156137b7095442b288e72f33503a469aa1980ed856b43c353ac86390519"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:07f59760ef99f31422c49038964b31c4dfcfeb5d2384ebfc71058a7c9adae2d2"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:59240685e7da61fb78f65a9f07f8108e36a83317c53f7b276b4175dc44151684"}, - {file = "rpds_py-0.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:83cba698cfb3c2c5a7c3c6bac12fe6c6a51aae69513726be6411076185a8b24a"}, - {file = "rpds_py-0.20.1.tar.gz", hash = "sha256:e1791c4aabd117653530dccd24108fa03cc6baf21f58b950d0a73c3b3b29a350"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, + {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, + {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, + {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, + {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, + {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, + {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, + {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, + {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, + {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, + {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, + {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, ] [[package]] @@ -6016,6 +6343,20 @@ files = [ click = ">=5" redis = ">=3.5" +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = true +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + [[package]] name = "ruff" version = "0.3.7" @@ -6204,13 +6545,13 @@ files = [ [[package]] name = "sentry-sdk" -version = "2.17.0" +version = "2.18.0" description = "Python client for Sentry (https://sentry.io)" optional = true python-versions = ">=3.6" files = [ - {file = "sentry_sdk-2.17.0-py2.py3-none-any.whl", hash = "sha256:625955884b862cc58748920f9e21efdfb8e0d4f98cca4ab0d3918576d5b606ad"}, - {file = "sentry_sdk-2.17.0.tar.gz", hash = "sha256:dd0a05352b78ffeacced73a94e86f38b32e2eae15fff5f30ca5abb568a72eacf"}, + {file = "sentry_sdk-2.18.0-py2.py3-none-any.whl", hash = "sha256:ee70e27d1bbe4cd52a38e1bd28a5fadb9b17bc29d91b5f2b97ae29c0a7610442"}, + {file = "sentry_sdk-2.18.0.tar.gz", hash = "sha256:0dc21febd1ab35c648391c664df96f5f79fb0d92d7d4225cd9832e53a617cafd"}, ] [package.dependencies] @@ -6238,9 +6579,11 @@ httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] huggingface-hub = ["huggingface-hub (>=0.22)"] langchain = ["langchain (>=0.0.210)"] +launchdarkly = ["launchdarkly-server-sdk (>=9.8.0)"] litestar = ["litestar (>=2.0.0)"] loguru = ["loguru (>=0.5)"] openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] +openfeature = ["openfeature-sdk (>=0.7.1)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] opentelemetry-experimental = ["opentelemetry-distro"] pure-eval = ["asttokens", "executing", "pure-eval"] @@ -6256,23 +6599,23 @@ tornado = ["tornado (>=6)"] [[package]] name = "setuptools" -version = "75.3.0" +version = "75.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, - {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, + {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, + {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.12.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "shellingham" @@ -6379,13 +6722,13 @@ secure-local-storage = ["keyring (>=23.1.0,<26.0.0)"] [[package]] name = "snowflake-snowpark-python" -version = "1.24.0" +version = "1.25.0" description = "Snowflake Snowpark for Python" optional = true python-versions = "<3.12,>=3.8" files = [ - {file = "snowflake_snowpark_python-1.24.0-py3-none-any.whl", hash = "sha256:d84e0709c4fda710bef99c201a4a83aa6489c2850e3a26f12c20e96d727c337a"}, - {file = "snowflake_snowpark_python-1.24.0.tar.gz", hash = "sha256:cd8bae93f08f210b57b6ce9c12bca251dd062de57031a496411ac5bfd7fa1105"}, + {file = "snowflake_snowpark_python-1.25.0-py3-none-any.whl", hash = "sha256:0b965308eb88568cbe6865164fb5441a336d9cf55bc603291f64ebfe799018d1"}, + {file = "snowflake_snowpark_python-1.25.0.tar.gz", hash = "sha256:184b9f6873b4c318af2727c707000998c9f6e24542036e536d86c2e314549e47"}, ] [package.dependencies] @@ -6393,20 +6736,22 @@ cloudpickle = [ {version = ">=1.6.0,<2.1.0 || >2.1.0,<2.2.0 || >2.2.0,<=2.2.1", markers = "python_version < \"3.11\""}, {version = "2.2.1", markers = "python_version ~= \"3.11\""}, ] +protobuf = ">=3.20,<6" pyyaml = "*" setuptools = ">=40.6.0" -snowflake-connector-python = ">=3.10.0,<4.0.0" +snowflake-connector-python = ">=3.12.0,<4.0.0" typing-extensions = ">=4.1.0,<5.0.0" +tzlocal = "*" wheel = "*" [package.extras] -development = ["cachetools", "coverage", "decorator", "graphviz", "matplotlib", "openpyxl", "pre-commit", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "sphinx (==5.0.2)"] +development = ["cachetools", "coverage", "decorator", "graphviz", "lxml", "matplotlib", "mypy-protobuf", "openpyxl", "pre-commit", "protoc-wheel-0 (==21.1)", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "sphinx (==5.0.2)"] localtest = ["pandas", "requests"] -modin = ["modin (==0.28.1)", "snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)"] -modin-development = ["cachetools", "coverage", "decorator", "graphviz", "matplotlib", "modin (==0.28.1)", "openpyxl", "pre-commit", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-learn (==1.5.2)", "scipy", "snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)", "sphinx (==5.0.2)", "statsmodels"] +modin = ["modin (==0.30.1)", "snowflake-connector-python[pandas] (>=3.12.0,<4.0.0)"] +modin-development = ["cachetools", "coverage", "decorator", "graphviz", "lxml", "matplotlib", "modin (==0.30.1)", "mypy-protobuf", "openpyxl", "pre-commit", "protoc-wheel-0 (==21.1)", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-learn (==1.5.2)", "scipy", "snowflake-connector-python[pandas] (>=3.12.0,<4.0.0)", "sphinx (==5.0.2)", "statsmodels"] opentelemetry = ["opentelemetry-api (>=1.0.0,<2.0.0)", "opentelemetry-sdk (>=1.0.0,<2.0.0)"] -pandas = ["snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)"] -secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=3.10.0,<4.0.0)"] +pandas = ["snowflake-connector-python[pandas] (>=3.12.0,<4.0.0)"] +secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=3.12.0,<4.0.0)"] [[package]] name = "sortedcontainers" @@ -6898,111 +7243,123 @@ blobfile = ["blobfile (>=2)"] [[package]] name = "tokenizers" -version = "0.20.1" +version = "0.20.3" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:439261da7c0a5c88bda97acb284d49fbdaf67e9d3b623c0bfd107512d22787a9"}, - {file = "tokenizers-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03dae629d99068b1ea5416d50de0fea13008f04129cc79af77a2a6392792d93c"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b61f561f329ffe4b28367798b89d60c4abf3f815d37413b6352bc6412a359867"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec870fce1ee5248a10be69f7a8408a234d6f2109f8ea827b4f7ecdbf08c9fd15"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d388d1ea8b7447da784e32e3b86a75cce55887e3b22b31c19d0b186b1c677800"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299c85c1d21135bc01542237979bf25c32efa0d66595dd0069ae259b97fb2dbe"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e96f6c14c9752bb82145636b614d5a78e9cde95edfbe0a85dad0dd5ddd6ec95c"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9e95ad49c932b80abfbfeaf63b155761e695ad9f8a58c52a47d962d76e310f"}, - {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f22dee205329a636148c325921c73cf3e412e87d31f4d9c3153b302a0200057b"}, - {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2ffd9a8895575ac636d44500c66dffaef133823b6b25067604fa73bbc5ec09d"}, - {file = "tokenizers-0.20.1-cp310-none-win32.whl", hash = "sha256:2847843c53f445e0f19ea842a4e48b89dd0db4e62ba6e1e47a2749d6ec11f50d"}, - {file = "tokenizers-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:f9aa93eacd865f2798b9e62f7ce4533cfff4f5fbd50c02926a78e81c74e432cd"}, - {file = "tokenizers-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4a717dcb08f2dabbf27ae4b6b20cbbb2ad7ed78ce05a829fae100ff4b3c7ff15"}, - {file = "tokenizers-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f84dad1ff1863c648d80628b1b55353d16303431283e4efbb6ab1af56a75832"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c8f3afa16a5130a81ab5079c589226273ec618949cce79b46d96e59a84f61"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d10766473954397e2d370f215ebed1cc46dcf6fd3906a2a116aa1d6219bfedc3"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9300fac73ddc7e4b0330acbdda4efaabf74929a4a61e119a32a181f534a11b47"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ecaf7b0e39caeb1aa6dd6e0975c405716c82c1312b55ac4f716ef563a906969"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5170be9ec942f3d1d317817ced8d749b3e1202670865e4fd465e35d8c259de83"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f1ae08fa9aea5891cbd69df29913e11d3841798e0bfb1ff78b78e4e7ea0a4"}, - {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ee86d4095d3542d73579e953c2e5e07d9321af2ffea6ecc097d16d538a2dea16"}, - {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:86dcd08da163912e17b27bbaba5efdc71b4fbffb841530fdb74c5707f3c49216"}, - {file = "tokenizers-0.20.1-cp311-none-win32.whl", hash = "sha256:9af2dc4ee97d037bc6b05fa4429ddc87532c706316c5e11ce2f0596dfcfa77af"}, - {file = "tokenizers-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:899152a78b095559c287b4c6d0099469573bb2055347bb8154db106651296f39"}, - {file = "tokenizers-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:407ab666b38e02228fa785e81f7cf79ef929f104bcccf68a64525a54a93ceac9"}, - {file = "tokenizers-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f13a2d16032ebc8bd812eb8099b035ac65887d8f0c207261472803b9633cf3e"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e98eee4dca22849fbb56a80acaa899eec5b72055d79637dd6aa15d5e4b8628c9"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47c1bcdd61e61136087459cb9e0b069ff23b5568b008265e5cbc927eae3387ce"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128c1110e950534426e2274837fc06b118ab5f2fa61c3436e60e0aada0ccfd67"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2e2d47a819d2954f2c1cd0ad51bb58ffac6f53a872d5d82d65d79bf76b9896d"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdd67a0e3503a9a7cf8bc5a4a49cdde5fa5bada09a51e4c7e1c73900297539bd"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b93d2e26d04da337ac407acec8b5d081d8d135e3e5066a88edd5bdb5aff89"}, - {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0c6a796ddcd9a19ad13cf146997cd5895a421fe6aec8fd970d69f9117bddb45c"}, - {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3ea919687aa7001a8ff1ba36ac64f165c4e89035f57998fa6cedcfd877be619d"}, - {file = "tokenizers-0.20.1-cp312-none-win32.whl", hash = "sha256:6d3ac5c1f48358ffe20086bf065e843c0d0a9fce0d7f0f45d5f2f9fba3609ca5"}, - {file = "tokenizers-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:b0874481aea54a178f2bccc45aa2d0c99cd3f79143a0948af6a9a21dcc49173b"}, - {file = "tokenizers-0.20.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:96af92e833bd44760fb17f23f402e07a66339c1dcbe17d79a9b55bb0cc4f038e"}, - {file = "tokenizers-0.20.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:65f34e5b731a262dfa562820818533c38ce32a45864437f3d9c82f26c139ca7f"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17f98fccb5c12ab1ce1f471731a9cd86df5d4bd2cf2880c5a66b229802d96145"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8c0fc3542cf9370bf92c932eb71bdeb33d2d4aeeb4126d9fd567b60bd04cb30"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b39356df4575d37f9b187bb623aab5abb7b62c8cb702867a1768002f814800c"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfdad27b0e50544f6b838895a373db6114b85112ba5c0cefadffa78d6daae563"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:094663dd0e85ee2e573126918747bdb40044a848fde388efb5b09d57bc74c680"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e4cf033a2aa207d7ac790e91adca598b679999710a632c4a494aab0fc3a1b2"}, - {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9310951c92c9fb91660de0c19a923c432f110dbfad1a2d429fbc44fa956bf64f"}, - {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05e41e302c315bd2ed86c02e917bf03a6cf7d2f652c9cee1a0eb0d0f1ca0d32c"}, - {file = "tokenizers-0.20.1-cp37-none-win32.whl", hash = "sha256:212231ab7dfcdc879baf4892ca87c726259fa7c887e1688e3f3cead384d8c305"}, - {file = "tokenizers-0.20.1-cp37-none-win_amd64.whl", hash = "sha256:896195eb9dfdc85c8c052e29947169c1fcbe75a254c4b5792cdbd451587bce85"}, - {file = "tokenizers-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:741fb22788482d09d68e73ece1495cfc6d9b29a06c37b3df90564a9cfa688e6d"}, - {file = "tokenizers-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10be14ebd8082086a342d969e17fc2d6edc856c59dbdbddd25f158fa40eaf043"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514cf279b22fa1ae0bc08e143458c74ad3b56cd078b319464959685a35c53d5e"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a647c5b7cb896d6430cf3e01b4e9a2d77f719c84cefcef825d404830c2071da2"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cdf379219e1e1dd432091058dab325a2e6235ebb23e0aec8d0508567c90cd01"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ba72260449e16c4c2f6f3252823b059fbf2d31b32617e582003f2b18b415c39"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910b96ed87316e4277b23c7bcaf667ce849c7cc379a453fa179e7e09290eeb25"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53975a6694428a0586534cc1354b2408d4e010a3103117f617cbb550299797c"}, - {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:07c4b7be58da142b0730cc4e5fd66bb7bf6f57f4986ddda73833cd39efef8a01"}, - {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b605c540753e62199bf15cf69c333e934077ef2350262af2ccada46026f83d1c"}, - {file = "tokenizers-0.20.1-cp38-none-win32.whl", hash = "sha256:88b3bc76ab4db1ab95ead623d49c95205411e26302cf9f74203e762ac7e85685"}, - {file = "tokenizers-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:d412a74cf5b3f68a90c615611a5aa4478bb303d1c65961d22db45001df68afcb"}, - {file = "tokenizers-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a25dcb2f41a0a6aac31999e6c96a75e9152fa0127af8ece46c2f784f23b8197a"}, - {file = "tokenizers-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a12c3cebb8c92e9c35a23ab10d3852aee522f385c28d0b4fe48c0b7527d59762"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e18da58cf115b7c40de973609c35bde95856012ba42a41ee919c77935af251"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f326a1ac51ae909b9760e34671c26cd0dfe15662f447302a9d5bb2d872bab8ab"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b4872647ea6f25224e2833b044b0b19084e39400e8ead3cfe751238b0802140"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce6238a3311bb8e4c15b12600927d35c267b92a52c881ef5717a900ca14793f7"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57b7a8880b208866508b06ce365dc631e7a2472a3faa24daa430d046fb56c885"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a908c69c2897a68f412aa05ba38bfa87a02980df70f5a72fa8490479308b1f2d"}, - {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:da1001aa46f4490099c82e2facc4fbc06a6a32bf7de3918ba798010954b775e0"}, - {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c097390e2f0ed0a5c5d569e6669dd4e9fff7b31c6a5ce6e9c66a61687197de"}, - {file = "tokenizers-0.20.1-cp39-none-win32.whl", hash = "sha256:3d4d218573a3d8b121a1f8c801029d70444ffb6d8f129d4cca1c7b672ee4a24c"}, - {file = "tokenizers-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:37d1e6f616c84fceefa7c6484a01df05caf1e207669121c66213cb5b2911d653"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48689da7a395df41114f516208d6550e3e905e1239cc5ad386686d9358e9cef0"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:712f90ea33f9bd2586b4a90d697c26d56d0a22fd3c91104c5858c4b5b6489a79"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:359eceb6a620c965988fc559cebc0a98db26713758ec4df43fb76d41486a8ed5"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d3caf244ce89d24c87545aafc3448be15870096e796c703a0d68547187192e1"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b03cf8b9a32254b1bf8a305fb95c6daf1baae0c1f93b27f2b08c9759f41dee"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:218e5a3561561ea0f0ef1559c6d95b825308dbec23fb55b70b92589e7ff2e1e8"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f40df5e0294a95131cc5f0e0eb91fe86d88837abfbee46b9b3610b09860195a7"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:08aaa0d72bb65058e8c4b0455f61b840b156c557e2aca57627056624c3a93976"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:998700177b45f70afeb206ad22c08d9e5f3a80639dae1032bf41e8cbc4dada4b"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62f7fbd3c2c38b179556d879edae442b45f68312019c3a6013e56c3947a4e648"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31e87fca4f6bbf5cc67481b562147fe932f73d5602734de7dd18a8f2eee9c6dd"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:956f21d359ae29dd51ca5726d2c9a44ffafa041c623f5aa33749da87cfa809b9"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1fbbaf17a393c78d8aedb6a334097c91cb4119a9ced4764ab8cfdc8d254dc9f9"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ebe63e31f9c1a970c53866d814e35ec2ec26fda03097c486f82f3891cee60830"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:81970b80b8ac126910295f8aab2d7ef962009ea39e0d86d304769493f69aaa1e"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130e35e76f9337ed6c31be386e75d4925ea807055acf18ca1a9b0eec03d8fe23"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd28a8614f5c82a54ab2463554e84ad79526c5184cf4573bbac2efbbbcead457"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9041ee665d0fa7f5c4ccf0f81f5e6b7087f797f85b143c094126fc2611fec9d0"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:62eb9daea2a2c06bcd8113a5824af8ef8ee7405d3a71123ba4d52c79bb3d9f1a"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f861889707b54a9ab1204030b65fd6c22bdd4a95205deec7994dc22a8baa2ea4"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:89d5c337d74ea6e5e7dc8af124cf177be843bbb9ca6e58c01f75ea103c12c8a9"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0b7f515c83397e73292accdbbbedc62264e070bae9682f06061e2ddce67cacaf"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0305fc1ec6b1e5052d30d9c1d5c807081a7bd0cae46a33d03117082e91908c"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc611e6ac0fa00a41de19c3bf6391a05ea201d2d22b757d63f5491ec0e67faa"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5ffe0d7f7bfcfa3b2585776ecf11da2e01c317027c8573c78ebcb8985279e23"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e7edb8ec12c100d5458d15b1e47c0eb30ad606a05641f19af7563bc3d1608c14"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:de291633fb9303555793cc544d4a86e858da529b7d0b752bcaf721ae1d74b2c9"}, - {file = "tokenizers-0.20.1.tar.gz", hash = "sha256:84edcc7cdeeee45ceedb65d518fffb77aec69311c9c8e30f77ad84da3025f002"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, + {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, + {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, + {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, + {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, + {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, + {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, + {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, + {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, + {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, + {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, + {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, + {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, + {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, + {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, + {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, ] [package.dependencies] @@ -7013,26 +7370,15 @@ dev = ["tokenizers[testing]"] docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, ] [[package]] @@ -7120,13 +7466,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.6" +version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.6-py3-none-any.whl", hash = "sha256:223e8b5359c2efc4b30555531f09e9f2f3589bcd7fdd389271191031b49b7a63"}, - {file = "tqdm-4.66.6.tar.gz", hash = "sha256:4bdd694238bef1485ce839d67967ab50af8f9272aab687c0d7702a01da0be090"}, + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, ] [package.dependencies] @@ -7134,6 +7480,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -7155,13 +7502,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.1" +version = "4.46.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.46.1-py3-none-any.whl", hash = "sha256:f77b251a648fd32e3d14b5e7e27c913b7c29154940f519e4c8c3aa6061df0f05"}, - {file = "transformers-4.46.1.tar.gz", hash = "sha256:16d79927d772edaf218820a96f9254e2211f9cd7fb3c308562d2d636c964a68c"}, + {file = "transformers-4.46.2-py3-none-any.whl", hash = "sha256:c921f4406b78e6518c97b618c5acd1cf8a4f2315b6b727f4bf9e01496eef849c"}, + {file = "transformers-4.46.2.tar.gz", hash = "sha256:3d85410881e1c074be767877bf33c83231ec11529f274a6044ecb20c157ba14e"}, ] [package.dependencies] @@ -7246,13 +7593,13 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "typer" -version = "0.12.5" +version = "0.13.0" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ - {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, - {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, + {file = "typer-0.13.0-py3-none-any.whl", hash = "sha256:d85fe0b777b2517cc99c8055ed735452f2659cd45e451507c76f48ce5c1d00e2"}, + {file = "typer-0.13.0.tar.gz", hash = "sha256:f1c7198347939361eec90139ffa0fd8b3df3a2259d5852a0f7400e476d95985c"}, ] [package.dependencies] @@ -7692,13 +8039,13 @@ files = [ [[package]] name = "weaviate-client" -version = "4.9.2" +version = "4.9.3" description = "A python native Weaviate client" optional = true python-versions = ">=3.9" files = [ - {file = "weaviate_client-4.9.2-py3-none-any.whl", hash = "sha256:7cebbfea29b7aa79354b728bfa8682bdf7183031a2cf749563dbed6a7b7fa6db"}, - {file = "weaviate_client-4.9.2.tar.gz", hash = "sha256:963484383218e0f8bd101f3dd8d2590056a7ca2853e8e0a987fa43ef4e7e4499"}, + {file = "weaviate_client-4.9.3-py3-none-any.whl", hash = "sha256:a39cf15ddc2dfe9fb6728f41206ab1f72b1b5f116417c58c5baab91eb40f1f32"}, + {file = "weaviate_client-4.9.3.tar.gz", hash = "sha256:5fbc3c054fa21fad6e435e43ed9f349fd2ee93bc35b6b4665188d41ffa528d2c"}, ] [package.dependencies] @@ -7711,110 +8058,109 @@ pydantic = ">=2.5.0,<3.0.0" requests = ">=2.30.0,<3.0.0" validators = "0.34.0" +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = true +python-versions = ">=3.8" +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "websockets" -version = "13.1" +version = "14.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, - {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, - {file = "websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f779498eeec470295a2b1a5d97aa1bc9814ecd25e1eb637bd9d1c73a327387f6"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676df3fe46956fbb0437d8800cd5f2b6d41143b6e7e842e60554398432cf29b"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7affedeb43a70351bb811dadf49493c9cfd1ed94c9c70095fd177e9cc1541fa"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1971e62d2caa443e57588e1d82d15f663b29ff9dfe7446d9964a4b6f12c1e700"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5f2e75431f8dc4a47f31565a6e1355fb4f2ecaa99d6b89737527ea917066e26c"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58cf7e75dbf7e566088b07e36ea2e3e2bd5676e22216e4cad108d4df4a7402a0"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90d6dec6be2c7d03378a574de87af9b1efea77d0c52a8301dd831ece938452f"}, - {file = "websockets-13.1-cp310-cp310-win32.whl", hash = "sha256:730f42125ccb14602f455155084f978bd9e8e57e89b569b4d7f0f0c17a448ffe"}, - {file = "websockets-13.1-cp310-cp310-win_amd64.whl", hash = "sha256:5993260f483d05a9737073be197371940c01b257cc45ae3f1d5d7adb371b266a"}, - {file = "websockets-13.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:61fc0dfcda609cda0fc9fe7977694c0c59cf9d749fbb17f4e9483929e3c48a19"}, - {file = "websockets-13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ceec59f59d092c5007e815def4ebb80c2de330e9588e101cf8bd94c143ec78a5"}, - {file = "websockets-13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1dca61c6db1166c48b95198c0b7d9c990b30c756fc2923cc66f68d17dc558fd"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308e20f22c2c77f3f39caca508e765f8725020b84aa963474e18c59accbf4c02"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d516c325e6540e8a57b94abefc3459d7dab8ce52ac75c96cad5549e187e3a7"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c6e35319b46b99e168eb98472d6c7d8634ee37750d7693656dc766395df096"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f9fee94ebafbc3117c30be1844ed01a3b177bb6e39088bc6b2fa1dc15572084"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7c1e90228c2f5cdde263253fa5db63e6653f1c00e7ec64108065a0b9713fa1b3"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6548f29b0e401eea2b967b2fdc1c7c7b5ebb3eeb470ed23a54cd45ef078a0db9"}, - {file = "websockets-13.1-cp311-cp311-win32.whl", hash = "sha256:c11d4d16e133f6df8916cc5b7e3e96ee4c44c936717d684a94f48f82edb7c92f"}, - {file = "websockets-13.1-cp311-cp311-win_amd64.whl", hash = "sha256:d04f13a1d75cb2b8382bdc16ae6fa58c97337253826dfe136195b7f89f661557"}, - {file = "websockets-13.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d75baf00138f80b48f1eac72ad1535aac0b6461265a0bcad391fc5aba875cfc"}, - {file = "websockets-13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9b6f347deb3dcfbfde1c20baa21c2ac0751afaa73e64e5b693bb2b848efeaa49"}, - {file = "websockets-13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de58647e3f9c42f13f90ac7e5f58900c80a39019848c5547bc691693098ae1bd"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1b54689e38d1279a51d11e3467dd2f3a50f5f2e879012ce8f2d6943f00e83f0"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf1781ef73c073e6b0f90af841aaf98501f975d306bbf6221683dd594ccc52b6"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d23b88b9388ed85c6faf0e74d8dec4f4d3baf3ecf20a65a47b836d56260d4b9"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3c78383585f47ccb0fcf186dcb8a43f5438bd7d8f47d69e0b56f71bf431a0a68"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d6d300f8ec35c24025ceb9b9019ae9040c1ab2f01cddc2bcc0b518af31c75c14"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9dcaf8b0cc72a392760bb8755922c03e17a5a54e08cca58e8b74f6902b433cf"}, - {file = "websockets-13.1-cp312-cp312-win32.whl", hash = "sha256:2f85cf4f2a1ba8f602298a853cec8526c2ca42a9a4b947ec236eaedb8f2dc80c"}, - {file = "websockets-13.1-cp312-cp312-win_amd64.whl", hash = "sha256:38377f8b0cdeee97c552d20cf1865695fcd56aba155ad1b4ca8779a5b6ef4ac3"}, - {file = "websockets-13.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a9ab1e71d3d2e54a0aa646ab6d4eebfaa5f416fe78dfe4da2839525dc5d765c6"}, - {file = "websockets-13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b9d7439d7fab4dce00570bb906875734df13d9faa4b48e261c440a5fec6d9708"}, - {file = "websockets-13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327b74e915cf13c5931334c61e1a41040e365d380f812513a255aa804b183418"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:325b1ccdbf5e5725fdcb1b0e9ad4d2545056479d0eee392c291c1bf76206435a"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:346bee67a65f189e0e33f520f253d5147ab76ae42493804319b5716e46dddf0f"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91a0fa841646320ec0d3accdff5b757b06e2e5c86ba32af2e0815c96c7a603c5"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18503d2c5f3943e93819238bf20df71982d193f73dcecd26c94514f417f6b135"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9cd1af7e18e5221d2878378fbc287a14cd527fdd5939ed56a18df8a31136bb2"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:70c5be9f416aa72aab7a2a76c90ae0a4fe2755c1816c153c1a2bcc3333ce4ce6"}, - {file = "websockets-13.1-cp313-cp313-win32.whl", hash = "sha256:624459daabeb310d3815b276c1adef475b3e6804abaf2d9d2c061c319f7f187d"}, - {file = "websockets-13.1-cp313-cp313-win_amd64.whl", hash = "sha256:c518e84bb59c2baae725accd355c8dc517b4a3ed8db88b4bc93c78dae2974bf2"}, - {file = "websockets-13.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c7934fd0e920e70468e676fe7f1b7261c1efa0d6c037c6722278ca0228ad9d0d"}, - {file = "websockets-13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:149e622dc48c10ccc3d2760e5f36753db9cacf3ad7bc7bbbfd7d9c819e286f23"}, - {file = "websockets-13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a569eb1b05d72f9bce2ebd28a1ce2054311b66677fcd46cf36204ad23acead8c"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95df24ca1e1bd93bbca51d94dd049a984609687cb2fb08a7f2c56ac84e9816ea"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8dbb1bf0c0a4ae8b40bdc9be7f644e2f3fb4e8a9aca7145bfa510d4a374eeb7"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035233b7531fb92a76beefcbf479504db8c72eb3bff41da55aecce3a0f729e54"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e4450fc83a3df53dec45922b576e91e94f5578d06436871dce3a6be38e40f5db"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:463e1c6ec853202dd3657f156123d6b4dad0c546ea2e2e38be2b3f7c5b8e7295"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6d6855bbe70119872c05107e38fbc7f96b1d8cb047d95c2c50869a46c65a8e96"}, - {file = "websockets-13.1-cp38-cp38-win32.whl", hash = "sha256:204e5107f43095012b00f1451374693267adbb832d29966a01ecc4ce1db26faf"}, - {file = "websockets-13.1-cp38-cp38-win_amd64.whl", hash = "sha256:485307243237328c022bc908b90e4457d0daa8b5cf4b3723fd3c4a8012fce4c6"}, - {file = "websockets-13.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b37c184f8b976f0c0a231a5f3d6efe10807d41ccbe4488df8c74174805eea7d"}, - {file = "websockets-13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:163e7277e1a0bd9fb3c8842a71661ad19c6aa7bb3d6678dc7f89b17fbcc4aeb7"}, - {file = "websockets-13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b889dbd1342820cc210ba44307cf75ae5f2f96226c0038094455a96e64fb07a"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:586a356928692c1fed0eca68b4d1c2cbbd1ca2acf2ac7e7ebd3b9052582deefa"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7bd6abf1e070a6b72bfeb71049d6ad286852e285f146682bf30d0296f5fbadfa"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2aad13a200e5934f5a6767492fb07151e1de1d6079c003ab31e1823733ae79"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:df01aea34b6e9e33572c35cd16bae5a47785e7d5c8cb2b54b2acdb9678315a17"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e54affdeb21026329fb0744ad187cf812f7d3c2aa702a5edb562b325191fcab6"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9ef8aa8bdbac47f4968a5d66462a2a0935d044bf35c0e5a8af152d58516dbeb5"}, - {file = "websockets-13.1-cp39-cp39-win32.whl", hash = "sha256:deeb929efe52bed518f6eb2ddc00cc496366a14c726005726ad62c2dd9017a3c"}, - {file = "websockets-13.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c65ffa900e7cc958cd088b9a9157a8141c991f8c53d11087e6fb7277a03f81d"}, - {file = "websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5dd6da9bec02735931fccec99d97c29f47cc61f644264eb995ad6c0c27667238"}, - {file = "websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2510c09d8e8df777177ee3d40cd35450dc169a81e747455cc4197e63f7e7bfe5"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1c3cf67185543730888b20682fb186fc8d0fa6f07ccc3ef4390831ab4b388d9"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcc03c8b72267e97b49149e4863d57c2d77f13fae12066622dc78fe322490fe6"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004280a140f220c812e65f36944a9ca92d766b6cc4560be652a0a3883a79ed8a"}, - {file = "websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23"}, - {file = "websockets-13.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9156c45750b37337f7b0b00e6248991a047be4aa44554c9886fe6bdd605aab3b"}, - {file = "websockets-13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80c421e07973a89fbdd93e6f2003c17d20b69010458d3a8e37fb47874bd67d51"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82d0ba76371769d6a4e56f7e83bb8e81846d17a6190971e38b5de108bde9b0d7"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9875a0143f07d74dc5e1ded1c4581f0d9f7ab86c78994e2ed9e95050073c94d"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11e38ad8922c7961447f35c7b17bffa15de4d17c70abd07bfbe12d6faa3e027"}, - {file = "websockets-13.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4059f790b6ae8768471cddb65d3c4fe4792b0ab48e154c9f0a04cefaabcd5978"}, - {file = "websockets-13.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:25c35bf84bf7c7369d247f0b8cfa157f989862c49104c5cf85cb5436a641d93e"}, - {file = "websockets-13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:83f91d8a9bb404b8c2c41a707ac7f7f75b9442a0a876df295de27251a856ad09"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a43cfdcddd07f4ca2b1afb459824dd3c6d53a51410636a2c7fc97b9a8cf4842"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a2ef1381632a2f0cb4efeff34efa97901c9fbc118e01951ad7cfc10601a9bb"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bf774c754c35dbb487360b12c5727adab887f1622b8aed5755880a21c4a20"}, - {file = "websockets-13.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:95858ca14a9f6fa8413d29e0a585b31b278388aa775b8a81fa24830123874678"}, - {file = "websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f"}, - {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, + {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, + {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, + {file = "websockets-14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434"}, + {file = "websockets-14.1-cp310-cp310-win32.whl", hash = "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10"}, + {file = "websockets-14.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e"}, + {file = "websockets-14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512"}, + {file = "websockets-14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac"}, + {file = "websockets-14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23"}, + {file = "websockets-14.1-cp311-cp311-win32.whl", hash = "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e"}, + {file = "websockets-14.1-cp311-cp311-win_amd64.whl", hash = "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09"}, + {file = "websockets-14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed"}, + {file = "websockets-14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d"}, + {file = "websockets-14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05"}, + {file = "websockets-14.1-cp312-cp312-win32.whl", hash = "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0"}, + {file = "websockets-14.1-cp312-cp312-win_amd64.whl", hash = "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f"}, + {file = "websockets-14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9"}, + {file = "websockets-14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b"}, + {file = "websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a"}, + {file = "websockets-14.1-cp313-cp313-win32.whl", hash = "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6"}, + {file = "websockets-14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0"}, + {file = "websockets-14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a"}, + {file = "websockets-14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6"}, + {file = "websockets-14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc"}, + {file = "websockets-14.1-cp39-cp39-win32.whl", hash = "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4"}, + {file = "websockets-14.1-cp39-cp39-win_amd64.whl", hash = "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979"}, + {file = "websockets-14.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8"}, + {file = "websockets-14.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7"}, + {file = "websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d"}, + {file = "websockets-14.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370"}, + {file = "websockets-14.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1"}, + {file = "websockets-14.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5"}, + {file = "websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e"}, + {file = "websockets-14.1.tar.gz", hash = "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8"}, ] [[package]] name = "wheel" -version = "0.44.0" +version = "0.45.0" description = "A built-package format for Python" optional = true python-versions = ">=3.8" files = [ - {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, - {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, + {file = "wheel-0.45.0-py3-none-any.whl", hash = "sha256:52f0baa5e6522155090a09c6bd95718cc46956d1b51d537ea5454249edb671c7"}, + {file = "wheel-0.45.0.tar.gz", hash = "sha256:a57353941a3183b3d5365346b567a260a0602a0f8a635926a7dede41b94c674a"}, ] [package.extras] @@ -8143,13 +8489,13 @@ propcache = ">=0.2.0" [[package]] name = "zipp" -version = "3.20.2" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] @@ -8177,4 +8523,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "22dfbbe02db1c0fcb0f13cbcf4083f54dd7218d7dd2b43a0b1e8dbeed9ae5002" +content-hash = "0675fa1dd1f44d63bafaffc6c2dfb384f2d016cfa20db379c19515ca182e867c" diff --git a/pyproject.toml b/pyproject.toml index a9cb43a43c..2e53c31b41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,12 +20,10 @@ classifiers = [ "Programming Language :: Python :: 3", # removed 3.8 "Programming Language :: Python :: 3.9", ] - # We have both project and tool.poetry.dependencies. Should we remove one? # tool.poetry.dependencies is a convenience thing for poetry users. # project dependencies function similarly to requirements.txt, # `pip install .` will pull from pyproject.toml dependencies - dependencies = [ "backoff~=2.2", "joblib~=1.3", @@ -44,6 +42,8 @@ dependencies = [ "diskcache", "json-repair", "tenacity>=8.2.3", + "anyio==4.6.2.post1", + "asyncer==0.0.8", ] [project.optional-dependencies] @@ -86,9 +86,8 @@ readme = "README.md" homepage = "https://github.com/stanfordnlp/dspy" repository = "https://github.com/stanfordnlp/dspy" keywords = ["dspy", "ai", "language models", "llm", "openai"] -# may be a bit much - +# may be a bit much [tool.poetry.dependencies] python = ">=3.9,<3.13" pydantic = "^2.0" @@ -134,17 +133,14 @@ jinja2 = "^3.1.3" magicattr = "^0.1.6" litellm = "1.51.0" diskcache = "^5.6.0" - redis = "^5.1.1" falkordb = "^1.0.9" - - json-repair = "^0.30.0" tenacity = ">=8.2.3" - +asyncer = "0.0.8" [tool.poetry.group.dev.dependencies] -pytest = "^6.2.5" +pytest = "^8.3.3" transformers = "^4.38.2" torch = "^2.2.1" pytest-mock = "^3.12.0" @@ -233,11 +229,9 @@ select = [ "F", # Pyflakes "E", # Pycodestyle ] - ignore = [ "E501", # Line too long ] - # Allow fix for all enabled rules (when `--fix`) is provided. fixable = ["ALL"] unfixable = [] diff --git a/requirements-dev.txt b/requirements-dev.txt index 561b14cf52..98d89e732d 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,6 +1,6 @@ black==24.2.0 pre-commit==3.7.0 -pytest==8.2.1 +pytest==8.3.3 pytest-env==1.1.3 pytest-mock==3.12.0 ruff==0.3.0 diff --git a/requirements.txt b/requirements.txt index e8078b8118..eb99bc5296 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,5 @@ requests tenacity>=8.2.3 tqdm ujson +anyio==4.6.2.post1 +asyncer==0.0.8 diff --git a/tests/conftest.py b/tests/conftest.py index 0bb74ac90e..9470a79c58 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,3 +11,8 @@ def clear_settings(): yield dspy.settings.configure(**DEFAULT_CONFIG, inherit_config=False) + + +@pytest.fixture +def anyio_backend(): + return "asyncio" diff --git a/tests/predict/test_chain_of_thought.py b/tests/predict/test_chain_of_thought.py index 2451bef664..d7869b7e8e 100644 --- a/tests/predict/test_chain_of_thought.py +++ b/tests/predict/test_chain_of_thought.py @@ -1,4 +1,4 @@ -import textwrap +import pytest import dspy from dspy import ChainOfThought diff --git a/tests/predict/test_multi_chain_comparison.py b/tests/predict/test_multi_chain_comparison.py index 8354f64d07..e5da9fd433 100644 --- a/tests/predict/test_multi_chain_comparison.py +++ b/tests/predict/test_multi_chain_comparison.py @@ -1,30 +1,33 @@ +import pytest import dspy from dspy.utils.dummies import DummyLM -def test_basic_example(): - class BasicQA(dspy.Signature): - """Answer questions with short factoid answers.""" - - question = dspy.InputField() - answer = dspy.OutputField(desc="often between 1 and 5 words") - - # Example completions generated by a model for reference - completions = [ - dspy.Prediction( - rationale="I recall that during clear days, the sky often appears this color.", - answer="blue", - ), - dspy.Prediction( - rationale="Based on common knowledge, I believe the sky is typically seen as this color.", - answer="green", - ), - dspy.Prediction( - rationale="From images and depictions in media, the sky is frequently represented with this hue.", - answer="blue", - ), - ] +class BasicQA(dspy.Signature): + """Answer questions with short factoid answers.""" + + question = dspy.InputField() + answer = dspy.OutputField(desc="often between 1 and 5 words") + +# Example completions generated by a model for reference +completions = [ + dspy.Prediction( + rationale="I recall that during clear days, the sky often appears this color.", + answer="blue", + ), + dspy.Prediction( + rationale="Based on common knowledge, I believe the sky is typically seen as this color.", + answer="green", + ), + dspy.Prediction( + rationale="From images and depictions in media, the sky is frequently represented with this hue.", + answer="blue", + ), +] + + +def test_basic_example(): # Pass signature to MultiChainComparison module compare_answers = dspy.MultiChainComparison(BasicQA) diff --git a/tests/predict/test_program_of_thought.py b/tests/predict/test_program_of_thought.py index 007c4e664b..b936a4a8bc 100644 --- a/tests/predict/test_program_of_thought.py +++ b/tests/predict/test_program_of_thought.py @@ -1,4 +1,4 @@ -import textwrap +import pytest import dspy from dspy import ProgramOfThought, Signature diff --git a/tests/utils/test_asyncify.py b/tests/utils/test_asyncify.py new file mode 100644 index 0000000000..01a109a934 --- /dev/null +++ b/tests/utils/test_asyncify.py @@ -0,0 +1,54 @@ +from time import time, sleep +import asyncio + +import pytest + +import dspy +from dspy.utils.asyncify import AsyncLimiter + + +@pytest.mark.anyio +async def test_async_limiter(): + standard_limiter = AsyncLimiter.get() + assert standard_limiter.total_tokens == 8, "Default async capacity should be 8" + assert AsyncLimiter.get() == standard_limiter, "AsyncLimiter should be a singleton" + + dspy.settings.configure(async_capacity=16) + assert AsyncLimiter.get() != standard_limiter, "AsyncLimiter should be a new singleton" + assert AsyncLimiter.get().total_tokens == 16, "Async capacity should be 16" + assert AsyncLimiter.get() == AsyncLimiter.get(), "AsyncLimiter should be a singleton" + + +@pytest.mark.anyio +async def test_asyncify(): + def the_answer_to_life_the_universe_and_everything(wait: float): + sleep(wait) + return 42 + + the_question = dspy.asyncify(the_answer_to_life_the_universe_and_everything) + + async def run_n_tasks(n: int, wait: float): + await asyncio.gather(*[the_question(wait) for _ in range(n)]) + + def set_async_capacity(capacity: int): + dspy.settings.configure(async_capacity=capacity) + + async def assert_capacity(capacity: int, wait: float = 0.01, buffer: float = 0.1): + set_async_capacity(capacity) + t1 = time() + await run_n_tasks(capacity, wait) + t2 = time() + assert t2 - t1 < wait + buffer + + t3 = time() + await run_n_tasks(capacity * 1, wait) + t4 = time() + assert t4 - t3 < (wait + buffer) * 2 + + await assert_capacity(1) + await assert_capacity(2) + await assert_capacity(4) + await assert_capacity(8) + await assert_capacity(16) + await assert_capacity(32) + await assert_capacity(64) From ef459cc58e9e201eab7703862ad247ad05fad07d Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 17:52:44 -0500 Subject: [PATCH 02/11] Address some comments --- dspy/utils/asyncify.py | 4 +-- tests/predict/test_chain_of_thought.py | 2 -- tests/predict/test_multi_chain_comparison.py | 1 - tests/predict/test_predict.py | 33 +++++++++----------- tests/predict/test_program_of_thought.py | 2 -- 5 files changed, 16 insertions(+), 26 deletions(-) diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py index 6c19e30978..6872057605 100644 --- a/dspy/utils/asyncify.py +++ b/dspy/utils/asyncify.py @@ -2,7 +2,7 @@ from typing import Awaitable, Optional, TypeVar, Callable from anyio import CapacityLimiter -from asyncer import asyncify as __asyncify +import asyncer if sys.version_info >= (3, 10): from typing import ParamSpec @@ -30,4 +30,4 @@ def get(cls): def asyncify( program: Callable[T_ParamSpec, T_Retval], ) -> Callable[T_ParamSpec, Awaitable[T_Retval]]: - return __asyncify(program, abandon_on_cancel=True, limiter=AsyncLimiter.get()) + return asyncer.asyncify(program, abandon_on_cancel=True, limiter=AsyncLimiter.get()) diff --git a/tests/predict/test_chain_of_thought.py b/tests/predict/test_chain_of_thought.py index d7869b7e8e..04f73bb513 100644 --- a/tests/predict/test_chain_of_thought.py +++ b/tests/predict/test_chain_of_thought.py @@ -1,5 +1,3 @@ -import pytest - import dspy from dspy import ChainOfThought from dspy.utils import DummyLM diff --git a/tests/predict/test_multi_chain_comparison.py b/tests/predict/test_multi_chain_comparison.py index e5da9fd433..39f7c18cc7 100644 --- a/tests/predict/test_multi_chain_comparison.py +++ b/tests/predict/test_multi_chain_comparison.py @@ -1,4 +1,3 @@ -import pytest import dspy from dspy.utils.dummies import DummyLM diff --git a/tests/predict/test_predict.py b/tests/predict/test_predict.py index 3fb4fce4e1..7f3aa43306 100644 --- a/tests/predict/test_predict.py +++ b/tests/predict/test_predict.py @@ -1,5 +1,4 @@ import copy -import textwrap import pydantic import ujson @@ -126,9 +125,11 @@ class Output(pydantic.BaseModel): # Demos don't need to keep the same types after saving and loading the state. assert new_instance.demos[0]["input"] == original_instance.demos[0].input.model_dump_json() + def test_signature_fields_after_dump_and_load_state(tmp_path): class CustomSignature(dspy.Signature): """I am just an instruction.""" + sentence = dspy.InputField(desc="I am an innocent input!") sentiment = dspy.OutputField() @@ -138,6 +139,7 @@ class CustomSignature(dspy.Signature): class CustomSignature2(dspy.Signature): """I am not a pure instruction.""" + sentence = dspy.InputField(desc="I am a malicious input!") sentiment = dspy.OutputField(desc="I am a malicious output!", prefix="I am a prefix!") @@ -220,46 +222,39 @@ class OutputOnlySignature(dspy.Signature): assert predictor().output == "short answer" - def test_chainable_load(tmp_path): """Test both traditional and chainable load methods.""" - + file_path = tmp_path / "test_chainable.json" - - + original = Predict("question -> answer") original.demos = [{"question": "test", "answer": "response"}] original.save(file_path) - - + traditional = Predict("question -> answer") traditional.load(file_path) assert traditional.demos == original.demos - - + chainable = Predict("question -> answer").load(file_path, return_self=True) - assert chainable is not None + assert chainable is not None assert chainable.demos == original.demos - - + assert chainable.signature.dump_state() == original.signature.dump_state() - - + result = Predict("question -> answer").load(file_path) assert result is None + def test_load_state_chaining(): """Test that load_state returns self for chaining.""" original = Predict("question -> answer") original.demos = [{"question": "test", "answer": "response"}] state = original.dump_state() - - + new_instance = Predict("question -> answer").load_state(state) assert new_instance is not None assert new_instance.demos == original.demos - - + legacy_instance = Predict("question -> answer").load_state(state, use_legacy_loading=True) assert legacy_instance is not None - assert legacy_instance.demos == original.demos \ No newline at end of file + assert legacy_instance.demos == original.demos diff --git a/tests/predict/test_program_of_thought.py b/tests/predict/test_program_of_thought.py index b936a4a8bc..b03b7356ce 100644 --- a/tests/predict/test_program_of_thought.py +++ b/tests/predict/test_program_of_thought.py @@ -1,5 +1,3 @@ -import pytest - import dspy from dspy import ProgramOfThought, Signature from dspy.utils import DummyLM From fc33ba3efe33261fbaabcb5acb40113e63dc666c Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 17:59:48 -0500 Subject: [PATCH 03/11] Remove types from asyncify --- dspy/utils/asyncify.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py index 6872057605..59bc5ee5e4 100644 --- a/dspy/utils/asyncify.py +++ b/dspy/utils/asyncify.py @@ -1,5 +1,5 @@ import sys -from typing import Awaitable, Optional, TypeVar, Callable +from typing import Optional, TypeVar from anyio import CapacityLimiter import asyncer @@ -27,7 +27,5 @@ def get(cls): return cls._limiter -def asyncify( - program: Callable[T_ParamSpec, T_Retval], -) -> Callable[T_ParamSpec, Awaitable[T_Retval]]: +def asyncify(program): return asyncer.asyncify(program, abandon_on_cancel=True, limiter=AsyncLimiter.get()) From c55581737d041e487855c01043f2b7d5f92777f1 Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 18:00:57 -0500 Subject: [PATCH 04/11] Fix typo --- dspy/utils/asyncify.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py index 59bc5ee5e4..f26b3c77fb 100644 --- a/dspy/utils/asyncify.py +++ b/dspy/utils/asyncify.py @@ -21,8 +21,8 @@ class AsyncLimiter: def get(cls): import dspy - if cls._limiter is None or cls._limiter.total_tokens != dspy.settings.max_async_workers: - cls._limiter = CapacityLimiter(dspy.settings.max_async_workers) + if cls._limiter is None or cls._limiter.total_tokens != dspy.settings.async_max_workers: + cls._limiter = CapacityLimiter(dspy.settings.async_max_workers) return cls._limiter From 1a5e04fbc00e2d29a71e7f185758d67d72097b90 Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 18:03:53 -0500 Subject: [PATCH 05/11] Relax anyio version req --- pyproject.toml | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2e53c31b41..ae10d1ad88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ dependencies = [ "diskcache", "json-repair", "tenacity>=8.2.3", - "anyio==4.6.2.post1", + "anyio", "asyncer==0.0.8", ] diff --git a/requirements.txt b/requirements.txt index eb99bc5296..31874b1c9a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,5 +15,5 @@ requests tenacity>=8.2.3 tqdm ujson -anyio==4.6.2.post1 +anyio asyncer==0.0.8 From 764eb2d73f56de661afa4bf8720ff75b51ddf5dc Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 18:03:59 -0500 Subject: [PATCH 06/11] Remove unnecessary imports --- dspy/utils/asyncify.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py index f26b3c77fb..837b54cfc7 100644 --- a/dspy/utils/asyncify.py +++ b/dspy/utils/asyncify.py @@ -1,18 +1,8 @@ -import sys -from typing import Optional, TypeVar +from typing import Optional from anyio import CapacityLimiter import asyncer -if sys.version_info >= (3, 10): - from typing import ParamSpec -else: - from typing_extensions import ParamSpec - -T_Retval = TypeVar("T_Retval") -T_ParamSpec = ParamSpec("T_ParamSpec") -T = TypeVar("T") - class AsyncLimiter: _limiter: Optional[CapacityLimiter] = None From 8d16e610961255bfe5a27400656af6eb2140a942 Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 18:06:36 -0500 Subject: [PATCH 07/11] Fix test --- dspy/utils/asyncify.py | 4 +++- tests/utils/test_asyncify.py | 28 ++++++++++------------------ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py index 837b54cfc7..797862fbe1 100644 --- a/dspy/utils/asyncify.py +++ b/dspy/utils/asyncify.py @@ -11,8 +11,10 @@ class AsyncLimiter: def get(cls): import dspy - if cls._limiter is None or cls._limiter.total_tokens != dspy.settings.async_max_workers: + if cls._limiter is None: cls._limiter = CapacityLimiter(dspy.settings.async_max_workers) + elif cls._limiter.total_tokens != dspy.settings.async_max_workers: + cls._limiter.total_tokens = dspy.settings.async_max_workers return cls._limiter diff --git a/tests/utils/test_asyncify.py b/tests/utils/test_asyncify.py index 01a109a934..18670046fa 100644 --- a/tests/utils/test_asyncify.py +++ b/tests/utils/test_asyncify.py @@ -9,12 +9,12 @@ @pytest.mark.anyio async def test_async_limiter(): - standard_limiter = AsyncLimiter.get() - assert standard_limiter.total_tokens == 8, "Default async capacity should be 8" - assert AsyncLimiter.get() == standard_limiter, "AsyncLimiter should be a singleton" + limiter = AsyncLimiter.get() + assert limiter.total_tokens == 8, "Default async capacity should be 8" + assert AsyncLimiter.get() == limiter, "AsyncLimiter should be a singleton" - dspy.settings.configure(async_capacity=16) - assert AsyncLimiter.get() != standard_limiter, "AsyncLimiter should be a new singleton" + dspy.settings.configure(async_max_workers=16) + assert AsyncLimiter.get() == limiter, "AsyncLimiter should be a singleton" assert AsyncLimiter.get().total_tokens == 16, "Async capacity should be 16" assert AsyncLimiter.get() == AsyncLimiter.get(), "AsyncLimiter should be a singleton" @@ -25,16 +25,13 @@ def the_answer_to_life_the_universe_and_everything(wait: float): sleep(wait) return 42 - the_question = dspy.asyncify(the_answer_to_life_the_universe_and_everything) + ask_the_question = dspy.asyncify(the_answer_to_life_the_universe_and_everything) async def run_n_tasks(n: int, wait: float): - await asyncio.gather(*[the_question(wait) for _ in range(n)]) - - def set_async_capacity(capacity: int): - dspy.settings.configure(async_capacity=capacity) + await asyncio.gather(*[ask_the_question(wait) for _ in range(n)]) async def assert_capacity(capacity: int, wait: float = 0.01, buffer: float = 0.1): - set_async_capacity(capacity) + dspy.settings.configure(async_max_workers=capacity) t1 = time() await run_n_tasks(capacity, wait) t2 = time() @@ -45,10 +42,5 @@ async def assert_capacity(capacity: int, wait: float = 0.01, buffer: float = 0.1 t4 = time() assert t4 - t3 < (wait + buffer) * 2 - await assert_capacity(1) - await assert_capacity(2) - await assert_capacity(4) - await assert_capacity(8) - await assert_capacity(16) - await assert_capacity(32) - await assert_capacity(64) + for n in [1, 2, 4, 8, 16, 32, 64]: + await assert_capacity(n) From 2be56c1e88c6632a5bb17db9a9a647125f4f11c8 Mon Sep 17 00:00:00 2001 From: Cyrus Nouroozi Date: Fri, 15 Nov 2024 18:10:03 -0500 Subject: [PATCH 08/11] Simplify limiter --- dspy/utils/asyncify.py | 30 +++++++++++++++++------------- tests/utils/test_asyncify.py | 12 ++++++------ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/dspy/utils/asyncify.py b/dspy/utils/asyncify.py index 797862fbe1..8cd8062987 100644 --- a/dspy/utils/asyncify.py +++ b/dspy/utils/asyncify.py @@ -1,23 +1,27 @@ -from typing import Optional - from anyio import CapacityLimiter import asyncer -class AsyncLimiter: - _limiter: Optional[CapacityLimiter] = None +_limiter = None + + +def get_async_max_workers(): + import dspy + + return dspy.settings.async_max_workers + - @classmethod - def get(cls): - import dspy +def get_limiter(): + async_max_workers = get_async_max_workers() - if cls._limiter is None: - cls._limiter = CapacityLimiter(dspy.settings.async_max_workers) - elif cls._limiter.total_tokens != dspy.settings.async_max_workers: - cls._limiter.total_tokens = dspy.settings.async_max_workers + global _limiter + if _limiter is None: + _limiter = CapacityLimiter(async_max_workers) + elif _limiter.total_tokens != async_max_workers: + _limiter.total_tokens = async_max_workers - return cls._limiter + return _limiter def asyncify(program): - return asyncer.asyncify(program, abandon_on_cancel=True, limiter=AsyncLimiter.get()) + return asyncer.asyncify(program, abandon_on_cancel=True, limiter=get_limiter()) diff --git a/tests/utils/test_asyncify.py b/tests/utils/test_asyncify.py index 18670046fa..75f9ddd286 100644 --- a/tests/utils/test_asyncify.py +++ b/tests/utils/test_asyncify.py @@ -4,19 +4,19 @@ import pytest import dspy -from dspy.utils.asyncify import AsyncLimiter +from dspy.utils.asyncify import get_limiter @pytest.mark.anyio async def test_async_limiter(): - limiter = AsyncLimiter.get() + limiter = get_limiter() assert limiter.total_tokens == 8, "Default async capacity should be 8" - assert AsyncLimiter.get() == limiter, "AsyncLimiter should be a singleton" + assert get_limiter() == limiter, "AsyncLimiter should be a singleton" dspy.settings.configure(async_max_workers=16) - assert AsyncLimiter.get() == limiter, "AsyncLimiter should be a singleton" - assert AsyncLimiter.get().total_tokens == 16, "Async capacity should be 16" - assert AsyncLimiter.get() == AsyncLimiter.get(), "AsyncLimiter should be a singleton" + assert get_limiter() == limiter, "AsyncLimiter should be a singleton" + assert get_limiter().total_tokens == 16, "Async capacity should be 16" + assert get_limiter() == get_limiter(), "AsyncLimiter should be a singleton" @pytest.mark.anyio From d9c92a5f48fa8a73ff465301de63199a29083843 Mon Sep 17 00:00:00 2001 From: Chen Qian Date: Fri, 15 Nov 2024 15:33:08 -0800 Subject: [PATCH 09/11] Add deployment guide (#1804) * Add deployment guide * move files * add sync * Update doc to use asyncify --------- Co-authored-by: Cyrus Nouroozi --- .../tutorials/deployment/deploy_dspy_model.md | 181 ++++++++++++++++++ .../tutorials/deployment/dspy_mlflow_ui.png | Bin 0 -> 156032 bytes 2 files changed, 181 insertions(+) create mode 100644 docs/docs/tutorials/deployment/deploy_dspy_model.md create mode 100644 docs/docs/tutorials/deployment/dspy_mlflow_ui.png diff --git a/docs/docs/tutorials/deployment/deploy_dspy_model.md b/docs/docs/tutorials/deployment/deploy_dspy_model.md new file mode 100644 index 0000000000..a174dc7f87 --- /dev/null +++ b/docs/docs/tutorials/deployment/deploy_dspy_model.md @@ -0,0 +1,181 @@ +# Deploy DSPy Model + +This guide demonstrates two popular approaches to deploy your DSPy models in production: + +1. FastAPI - For simple, lightweight deployments with direct model access +2. MLflow - For production-grade deployments with model versioning and management + +## Deploying with FastAPI + +FastAPI offers a quick and straightforward way to serve your DSPy model as a REST API. This approach is ideal when you have direct access to your model code and need a lightweight deployment solution. + +Before we get started, let's install the required libraries: + +```bash +pip install fastapi uvicorn +``` + +And remember to set your OpenAI API key which is used by our example: + +```bash +export OPENAI_API_KEY="your-openai-api-key" +``` + +Here's a minimal example of a DSPy model: + +```python +import dspy + +lm = dspy.LM("openai/gpt-4o-mini") +dspy.settings.configure(lm=lm) +dspy_model = dspy.ChainOfThought("question -> answer") +``` + +Create a FastAPI application to serve this model: + +```python +from fastapi import FastAPI, HTTPException +from pydantic import BaseModel + +import dspy + +app = FastAPI( + title="DSPy Model API", + description="A simple API serving a DSPy Chain of Thought model", + version="1.0.0" +) + +# Define request model for better documentation and validation +class Question(BaseModel): + text: str + +# Configure your language model and Chain of Thought +lm = dspy.LM("openai/gpt-4o-mini") +dspy.settings.configure(lm=lm, async_max_workers=4) # default is 8 +dspy_model = dspy.asyncify(dspy.ChainOfThought("question -> answer")) + +@app.post("/predict") +async def predict(question: Question): + try: + result = await dspy_model(question=question.text) + return { + "status": "success", + "data": result.toDict() + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) +``` + +Save your code in a file, e.g., `fastapi_dspy.py`. Then you can run the app with: + +```bash +uvicorn fastapi_dspy:app --reload +``` + +It will start a local server at `http://127.0.0.1:8000/`. You can test it with the python code below: + +```python +import requests + +response = requests.post( + "http://127.0.0.1:8000/predict", + json={"text": "What is the capital of France?"} +) +print(response.json()) +``` + +You should see the response like below: + +```json +{'status': 'success', 'data': {'reasoning': 'The capital of France is a well-known fact, commonly taught in geography classes and referenced in various contexts. Paris is recognized globally as the capital city, serving as the political, cultural, and economic center of the country.', 'answer': 'The capital of France is Paris.'}} +``` + +## Deploying with MLflow + +We recommend deploying with MLflow if you are looking for a solution to package your DSPy model and deploy in an isolated environment. +MLflow is a popular platform for managing machine learning workflows, including model versioning, tracking, and deployment. + +Let's first install the required libraries: + +```bash +pip install mlflow>=2.18.0 +``` + +Let's spin up the MLflow tracking server, where we will store our DSPy model. The command below will start a local server at +`http://127.0.0.1:5000/`. + +```bash +mlflow ui +``` + +Then we can define the DSPy model and log it to the MLflow server. "log" is an overloaded term in MLflow, basically it means +we store the model information along with environment requirements in the MLflow server. See the code below: + +```python +import dspy +import mlflow + +mlflow.set_tracking_uri("http://127.0.0.1:5000/") +mlflow.set_experiment("deploy_dspy_model") + +lm = dspy.LM("openai/gpt-4o-mini") +dspy.settings.configure(lm=lm) +dspy_model = dspy.ChainOfThought("question -> answer") + +with mlflow.start_run(): + mlflow.dspy.log_model( + dspy_model, + "dspy_model", + input_example={"messages": [{"role": "user", "content": "What is LLM agent?"}]}, + task="llm/v1/chat", + ) +``` + +We recommend you to set `task="llm/v1/chat"` so that the deployed model automatically takes input and generate output in +the same format as the OpenAI chat API, which is a common interface for LLM applications nowadays. Save the code above in +a file, e.g., `mlflow_dspy.py`, and run it. + +After you logged the model, you can view the saved information in MLflow UI. Open `http://127.0.0.1:5000/` and select +the `deploy_dspy_model` experiment, then select the run your just created, under the `Artifacts` tab, you should see the +logged model information, similar to the following screenshot: + +![MLflow UI](./dspy_mlflow_ui.png) + +Grab your run id from UI (or the console print when you execute `mlflow_dspy.py`), now you can deploy the logged model +with the following command: + +```bash +mlflow models serve -m runs:/{run_id}/model -p 6000 +``` + +After the model is deployed, you can test it with the following command: + +```bash +curl http://127.0.0.1:6000/invocations -H "Content-Type:application/json" --data '{"messages": [{"content": "what is 2 + 2?", "role": "user"}]}' +``` + +You should see the response like below: + +```json +{"choices": [{"index": 0, "message": {"role": "assistant", "content": "{\"reasoning\": \"The question asks for the sum of 2 and 2. To find the answer, we simply add the two numbers together: 2 + 2 = 4.\", \"answer\": \"4\"}"}, "finish_reason": "stop"}]} +``` + +For complete guide on how to deploy a DSPy model with MLflow, and how to customize the deployment, please refer to the +[MLflow documentation](https://mlflow.org/docs/latest/llms/dspy/index.html). + +### Best Practices for MLflow Deployment + +1. **Environment Management**: Always specify your Python dependencies in a `conda.yaml` or `requirements.txt` file. +2. **Model Versioning**: Use meaningful tags and descriptions for your model versions. +3. **Input Validation**: Define clear input schemas and examples. +4. **Monitoring**: Set up proper logging and monitoring for production deployments. + +For production deployments, consider using MLflow with containerization: + +```bash +mlflow models build-docker -m "runs:/{run_id}/model" -n "dspy-model" +docker run -p 6000:8080 dspy-model +``` + +For a complete guide on production deployment options and best practices, refer to the +[MLflow documentation](https://mlflow.org/docs/latest/llms/dspy/index.html). diff --git a/docs/docs/tutorials/deployment/dspy_mlflow_ui.png b/docs/docs/tutorials/deployment/dspy_mlflow_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..fb0e571055cc2ad37bec0c28f264759e9f55b387 GIT binary patch literal 156032 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

XgIRpIQdSx%>(5&p!vG z^Cb*;%qtO|=;9yvzdW z`I`D0s^_&brJ^>N6z_I!gFd^xW>08XSm_Xi=^6iCVM;SO*KJx7SoA{h7B9wcS(o{u zT|~~7>0Dl8eNZ^HiF+}lqx41juJN+ihS#<6RJnbLjlo?vV`;hcR=T`77SZU%JMK@% zS%RVEW?Jcvjjd~-bH)9B{X6e4zOOpRClpg3n&5(k_nWlHJaxvFukxs|ybt!t`)137 z&|EvITCy$G76cPgA&nxAmEZQN_6O5U6%pboq80$<>DZRDfuHOuzl&U4r=0UUDz_B- znBSdRB~|*@>W115h9*wV7QDtH$AW6q@sqXsHz( zHYz?97c}fMu9MKvQ_DN&{{k*f+oS(lFKj)k^c8c_Q$-9@tkQRxWWS?qP7u=gGa&SG z5@hV0q9M9a)c3aSxrLB@_sWk8-8azoj*$+Ng@?=BMqSTOrGeY^STRFGDp4uBrxXdG zy3){wg&FnF=WOFxZ~-0YhCp-|p@2%tfsEP`AyeyS--QpT0b)a8Z4P~&uZyT$)SOIPd!t<463D6R*1EWyFMc|+TcDWZ8^8DU?kX1#jS8=vfKq$8 zq3u`eO&FzoL!IkY*=L0EUnX{S`LHCh;e4ad_W22gNRanUgNZ-&-c$YR%Q)^W#v$3e zY`rsdk-c3^ts?B!90zZ6iV8 z>6K7ZY|yOd^raNItB@Me;72`s*C1Du5=gTNaoH7tUyM!6@{h=%c=5Hm$v@-CAn;A`{3tFcXdBL9=`68d?VoGI-1!r+xNN_)3Vu6yKRb$C@uj~^P;NhD0icMk-FZIH;+vW^S#ww~ zJ0*UdjSsaND`%o68mVLzJH(lzV=dH{?ho~Bkd^XRc6Zv1 zJ1GSAs+xx6>QqeMA1s56ol?w=Tr}vk-=p?_5^8(?=jCzCOfd$c6~_4HCc7Zh7oq;| zM!{#Gan4mL(NV>c(2Yn*L<8-*cWM_!^g^OyF{HJKs`ygZQS$dUXQr@%oSIaf${J8!#AE+dOrvpjehA7qB z+4JW@-9uH?scAg%RBauXf|s0i@wU1;R}Xup9ZBm$_%kMqPK@znfvdcJh!*rf6{J*A zI*-+X7Hf1XRHdj75nfugv4=TWJK{b2WqwVG%K+&PV%aQpmjZh}rU5^a07rkE@V^pz34&&LPPU>f z`mZ6kJo{xfXDSbt3^2%&NaE_Fs6endHSDYSRB~A0YT&EDMfa`hQ`;J_Zu$&iQh!4T zP?tWj&ma2U>1#0A{AdehgH@5)!ZVSj>+pwS)R86PqHf|y)8a{or7MNnJiCpMSnyp0 z_8oe7dep51(uiNoo38EWOLK%v1UxH2r~BrM^cqn3wHlY_wz`ukhEF0R@S3m(6A--a zHwJZ>Pb9+0?5%0GHFr50>vg$vT3_|Y%4AC_Nk?_6V;>(65(bp`k6iX@`{HtvnLKCo z=NjG@CpM-2<%e>DLDwVoHnqoHbymXni@%?wRECKTT@vy;laGr>;lX*7uLJCmAmy9Y z7>l#;v%8R2fcetE4p3WuCq=`Wv)zUld55AtRq zR(d;EU1mRa9no2(#%G;ar{(A4N^888Z=LhG2Kdo`5+!IU_KnvC^$v9pX+gc+RK+0T z^Dm1!+@>uBy!mZ5<;F=q43f%+TVf(y z{-FLEiuUPgN8h*HOD(eKe#JP_HpzimEeLK+1UN}*>;qN`UONA4dp452;-9f%2%e>E zFNXz@@>z$OQ2)07-t7_ZoMBZBqyMN?)Vd_hcAHT)G+sk3Tcv6JeF zqxlNuV_ka-8~WV1E^46+lxaRbUK^7x+;!iFrb-y>fd%f5ZMa zj*QkPHMUONm+<{j0nVZwRnmzUtI|+CVM`QQliT^_WmGFoq0IM5dCq_m?u*cG;iuN3 zhRLNJO@9OQgTiHU2(H6qROF}wmA(qv#qnlURu)oQ)SA;3ipQilETS zYQ}dhLbGL#Kcu+owV>M9y>E?C=8T|D$`04gtBYjx%y9r*bzLu^E(3Ig^RM)Sffp$` zOqdvADV=>syserReO~<1(4T8Hf5bwGt<>okv1i3ZT0qP1v5t(APR@?z@#KC$IIZtQ zUJCL0+a%EAVN~xY{J|sRsrKdV`|yV8qznjIF$%kBdzL%=>I4((mB}!}3h}51#YpjADOl zJ(~RRkvtqMXh7lGvP=ADKIu1hvtD;tYnxq$wo5>Ss%hzaCYk}j*jGaw%UD3>kG`{a z=VzQk%cd>{)O#S>vu|+a#1wIR|8h4_J5(GjEm<4D|D%3L!1yAUUL@s%tn<+Lmpw=8 z_u8poL(`V4jArJ7Y?BUYqiBvlpi*n<^|6l?fSM)63>T4eXuY zK31Y9QV3AM-H0t0GVuPkm2bgVE|1>yZ=wH>bpLOf3TT;oEP>WnuTugW)ax%)?#IT{ z@&)~Xn>ntXclN*wi6y@$-|1Qh7+WZrdYhz?0ehPlWWJqN$$^kJXvW-td9PgFjc@|f zKYQzgQqC&2Xt{d*ilfsm~8@yfi~r{nsWG6L`N*1TsvI!v?uDXJfk#TV1F-5sVg{ zR$JfVen5f=?}WvDR+J5dW=b=9Wj_F?ReQv#vx)^SBqEbU#Euow&M`QE3V?)!K)yZ*Z=C6<_l7H^+>JtJk+%6W^Gl&BjkS-R?%g4A z)196_{02UWeNZf1zX*0yup~j44W`!9CKQe6F_Ud3-dZlQQrSP=ElpDPio^(AdUckf z@q<3iFgBT>+bh7-y-pk?tKzLMmq+4;%LO&i_)A4K-0@8MZD5TgBJWc~fS-YwH(Y!qh=yTy-l@A|2=zM)Ezf;Q~mP-X2`7B2n$S^c-+#tPN< z9rI|w2QZWW4?MBVjrb!b%R(WvlB&jlr9GD zi@s=?(E1PRNl13g1Xd&TlsfloU%$M(oL5h%-q_*PQ5@KcIH;Xq`~D;H`p7R``Saab zEDamRbHtvM_a<4p2z89%9^sy{P&V6wm4z})oqEL`saCw>!po8w(FXQ+m(!D@9vM)= zH+Lfeca!RC%c<8lZ}H|Sa3@jTElsP|%w_povg{jc*{kHG*>!zNA_{l_D$Q*^|8NUG z%bXXn2q>fOnvFj%GFNhWlwT&$IPigAovuD(lQ3S;BUyaX7tO%BU)%wB!8ma{EjfT1 zM7|0gWap1afc;cvxU^7G_%S8%Uhx4~*@gas+2b$&l?_bueSi3M6t+rv@JES;t?wz( z%PI|i3UVY)&!XE5er`Iesy(CI;atn&4UTr1R???>F~J?l(c6{QU|5<-8;H7sHMQd{ zs0!tSP4N3;xn-=#WY6!=zB^+`(Dpf-UjWiO&wbL9XE^P>c#Z$U!I!w;X`uU*f){S{ z*lT_Ze}gU;kF#$jy?H+a0y5tq1B)*rnoE`w@p+CeEt_;np9N9Ddj)hURoB*TPoI^68cAulSYx6;^ElcFF z@4l&_Tf?dKry+JJKDsTLrqwyiNAx zFJ_K@cb4%w!@HtxPqp4^e9X*%Ck?k5YRW4-CU{_F-;fko*Gf(g;MP6%+zH~v`&@5 zG3x#5z~Tb=5Mpuo^EPDLiP+A9K6KJ&ZD0I`c;}wD}4tM(G+*jaBr3|1!nR<50KwE{d?p5i`9!5}0kgJcN&zq4#QLVCL_H<@QSOg zGK%nT1vMk5krRNSGHuVI58Tm736qQsdX%VR9Dzdpx3meF4!A~gX*Zj0?XSm%(t%Ab zAE`^Jmes$ujTo``Qqsr6_9f7w4*+;>)DpnPO(E&XRlc0g3sGLP`Cx_25H~b)Gya=dVxN3%72?^L|8r_ z{FYVBbcPOV3qgGQ$;b9Mu%Eo^%|w+#AC^&>+iyC-DKkY3LLaLGS8QfbtvM}7T3=YT zwGSO8$1NyfCMD~c#~RY0dGh*MrX_Yh_zFIvg*GBDBR*cU!C$?+Js5L$jgww}rvtUx zEV{odUv+~brc2R+PL7%?C{Z}od*T@|9%Ve*P-T< zoj^ySJ|Fu*R((g3$|+ghzyAPh^Pz4^VZ@TdjEzF`|2%z*b%%(Yk;^55+M~wvoIoCn z^wKZ2|!I*8O)++X&`S9t5qIP9pE9o8UXB~?})duZvc zyAvv9XC3+B!^r@G8!J;7%ip}Qa5rZp+`9vjx1=`oUt|eNd$wEi^HA9WqCYlx3ZX~g zZbahA$_$T3?4yO}_pWgtiF`QgitNL$2$7V2Ip{;EIvk^5A;q8-wTvdS-{!KN^$PSnMBKmeyZJ13OH6|tO!>LP#qIg`S^Zlggi?RQU4U|&MY^`$o56v z{@YMOuCSNQUv$|>@{(*0SqsiL)}ry7x7)t~5>h1IMQ%sBQg8h<8`Z71sO!Z+kzTJF z;usWFUyr62P}D(2WS^Is+Hvuug7?4Z8aOl&n}^K&oxyf?{Ol@6(^F$VtD@}BTW{Ar zlZicrOU*OGg%3%uPcEO=fXX)F6Rk+FOs^5UtbU8lbs6+b*=~dPgxqHB?bUxpL1yhi zG(h6sQLrVA;L2<{y1@|^z>+38890xp7tu8?W>SL)6WWey!1*9xFAW_@c|P)yq*_hm zgv{&5-VzeWUz2zAMG7}S9Y@<0T8q&)f6R`FBi)65k8 za5=A1(y_X2zfM(Cs$i<%EDe&e-DyF`S>-b<%>#DCfA)nGYj*|h{&e|Si3d^0Hc)=h z?6H%c3wNml`I}|3Y)_~_Mep?9OnmZjJZ^F543=9U-er?O1rr5Ft-HTEQU(@R5Fow#n%rQQKjU(QG!jq3eaIm-gxDy>R;wZL;qqil<2&8Q z@xA6(!#S2T0L+yk#B_UV$TOt0S-0`%18#O%#)26W*+47qE6}s8_7mn&+F07R<)2Zj zy$MF+U`Wfxc`l{Y5FV_p1@D3GJ7fQt?eL1T&yuH*4^8i8OSEO)hf8BLig)!3%=^(D zMzxI#&(raK0m7^R=P`!VZ$GuGKYN!XN>zg=f||LN6herqqa;_8|GZFy5WYH|%7tII zo%tTQCcXb>DI;lj$-CBI+M~+6sQYE!KJ`lXL8edbtjAoO8Hq|Pg@0p<#{-~3BCmc} zw0MjRc!$^jsFYJ9rmM+-OnOAVFOsZo()Kc&VK@U1nz8(;5jA5_I|i$nZ2;KMA?kI2 zDMXuWd6*Js=)^^m3{-uH;+s}m!{6M7pqr>h!O6P9D}@99SEd3uuw`DGZh>Z0)#KSl zCy2q1qcv|NRl^c0an|HQWt_}L3NvZwqT!YV;B>urSOp!H{1x$HyoTA=Ts-~qBp#P1 zrG!4z94Awj(_neuF1>{G6VZ6w2R25D7quioJOv|uVtyvB0#oXQfBdk6 zL%6WThk2*;WrUXMbPO;wTP{7 z3FnKjexCab|JRT(yKP#V7T6*Zhe#$hPm+eUl9~d09ihwn=P6i@2`U{!lm=>rAFoqJ zU_3v?LELcwf}-((_BV!v?1|+D4z*~p9T7FU-l~O{ED2Jzl3|}^4d-We?8~@OoS+1J zWxkC88Wi0WRXM$SAu7%O-w|iZ&a(?*0G9FNmFo+_^_404*rUQ8<0=k}$-zPjSOzwI zVB{ec)p`{qCm_EPPvZJ6TIPv!lur=TTixfQF)bA0PofhW-bSU8p;$H zJW;`ggn?+&XhG9re()s4m*};4op{X37k;}gdi!enX_i*ksHc;WvoBjOF@uLlTE-P_ zNIiM_oGSD^PYM(0r*nXQ_S+}mNJGNGlOgGHzE^U@%DBm!g7N-`ShK_&Wr&|ZMWxtW zx3Uo=Nf`UmRzJN>Z>=3Y~8h6%Y(hW!;0CGd;@*D}ABFw3|h+Avk^ zng9G}hBwEw)z`n@Yo!!r1w%!aOxAQl7^RD;x%Q3!q&GRBsh{5@1LwJ8&VAyNy zWT(O)L6PnHyEEfMCV&!il+sd2H9QdBPrQWkkT6PKDdWIiT2<#NlA<|-<2K?42K>RIvuiie`-otZRo!P6q`z`HjP zot0pr^u@Q0i2(%GU-8Vh^-J$`BRYs_7bg(B}ME(Eu!e#sMx3jQB(S zhG`S~&bm8gEp|7DkL-jaCQk3nDXpmBEylrn1)GJEe9e>bjevaB95CPu^qZQ6yST@I z$aBG*6Rp?C6nAAaHyM_D`4S1F^26?}oKt8Q?!!|jl?mBueD>GK&1paSD?s-+@FZb^10^7&w{*1jh8P*gr__fM5e1aC7a@eVH4>Jixfsq zaJ}dZIcDrDZOvq=O?}MBw9CMQ2)0TXW?kvy@>I;Cbkk71R4%wq-}hL=>2vW*0-v97 zYCzllj!(4lAS+HNJ^?}EY*N0-$-0+aI$hVwSC&Dx<`sRGG;cRIZt!@(PB}SeJq*9r zPQ7ZMJL8ZBAxTD??*cxZtwk4ejNRhGrW5kG-x@U})#+^x5VoTnxfN9Hze}k)mJ6tR zWiTSSTE)tp!*GZYLb5>w%r|Z0Vt;!$v5cXap^y+VD=TQT2Vk2(Bw1%>_kGRpzZ-<| z`c0Z?Qw{5%Qx13*(&DI7mMp8D;KxAQn~h+f%wwZI&(~J1T*>?l8?sUW#7Se44Sb>+ z95V$dD9T@^)*YY6O3}a3t~FKxGYxv+MsA=U#})Q)P~Rcl+VLqc0XHvgkI&=~S>`uA zyJva?BAr{4)jqRDgL57=kI6owxwFAWaP~Kbz^#N43LbDf>zpE<7L>+cGPYpn{O zB3qqNOANtxx;f5z;+m*fc9)6jP_G7xcoF~rxWuIF*(RXEd8Mfn5v!ghzcU9K;Yzllm)_`bO6NzNX0=z^75*#pK-x($oj$jyiyDvP|yTK#Sr z^GE)O4@ivVdGS)X_UkGizn)y&59*X6H4WSq4d`1HdIjSMZbp#uH=y8abtX{QfFtUy z3KPV{l%mr?CB&9*hwK-d#c2=IU5|e0s+myDhryp;U6uMtcH^G=?IV;mgT@D%0d5!Z zIyZy>ImaUWCAr`hm~?cFyNn$#ju+5I$l7Pw`K#&YtW2Jk?Y?Pf;>23z0>?}msS1pL zMGHs3v((f)=nYXk+)p+m{^uu0$IwIWKrB6B?0{H7JXnmAyRMnx@0`MC?^>c5J z-t%Q1=bit=drMEvV+AtD0t$`wRu|u#S6|YBLQj!KhHvm8br&~l#DxR)qna!I0y01$ zO>_ek8h?gFp(DQn%_L1M;DRb8HBX%OATHzd6>99VFQqlreo8ij_R)Mdxn$Vk--%V% z2=s1>h!0oOVQUSq!qR#z?gu5s=*%#`qu^;Y$OH*!*x=Ipe0YTp&rxA@MpHbLZ*0Ga zApJU2(lK6vHbdogZ_RAX=rK%cm)Qr?tX)G8VNj)N(&CK}8dtE&m(EEFkt8n7ygpjw z*BZS;QhfoQnOuF3%#W_Ft#r7A=I@Ea85Ue~Jww_pXusPG(ji27ZCw=SnmLI<8F+>r zB`kyDy}1`#dD235F*49x$j_?d?B!6Pr=1{J6PSTZq4u|CDzMSy?UWj(k;S(iE!l;f zlvmJ^;fP&kF#BPqnr|JtS|M=O#@VdcXw0WWShxOTeQ_ zLZ8@SEZmszeX#g2s>jbc5V+YJpCQE#xN-LN%^*kGJ6zZQj%M&n0`3ERz|D6*EN))4 z@#Nu9Hc12tR7>6#bhO1f(~BX9aFOHqTx0!g1N6|XmlwTcV)xe%;vf|)@`epb8!~aw zILJpFyC{9MVR$2n;#lVr?x9567&LF!^jn86O~u88O}^tW*6dQc%8uz-jPbO;EBrux z3H9}!eBR>+RHM_qV@7wU;fLT;%|rcb-H_rgPl=Ve_hV|NE?X6TcdZO7yP3IY7vrDz zRPHTOuMudTi4iAc(o863TwQ(t>UBLP->(~AlSM?G`t#F{V#m1)+Pl`N-Ar5)9rl_B z+=WBc65BuGw*6VRdH2jt4M$EpEV)f;DN({DHpGdFbB$J#5~jz0b^j=hio-|EyDRzr zj6VW1M|SR4TOb}mPxqbpsPOo!AgdPFE{8DCVV-T$VIX$$D?i>9N6dORMw{E#J$ z@w54Y7gUISp6s=8y1I)F%P$HJYbC@)eLLn5Ize)VNYL7 z55ZI1fG}?8}HE&(LLx(#2^`f^? z1b0kVPKAx?qrli5dAJr4_wrba3HmyI{R%VrZt(fP`k??LGN8 z#dI<=z7`vceXuqoG_#5z-JqqUg$D6^g~Xt~p<*5@NIqhPUOw^ME`tDTz7@y1D`kyu zMK<`TVOssxL3BqFk$HJ=xYQf^%<>z$uKlt7?&hmBSBGXEI}}*`wDnHKkf04z8hpht zB8PA!yNL~yzUgqket{@N%^A2s4pJ!m>WmhzU^a~bc`H~V=(x{*L64i+ps-1Wc>3kd zJQieb@_2tsw+atL3x(&+t?GiW0&$a&caz~6QC}9bGkSFxpd)#$Q59P3r3it>>SZ!l z-sw?>4b8my1ylujRKf>>FX0-1r*DC6Z?PbYzkior2L^a73PLNOadA$xuPteK_@Vit zKqpAh(X*EQBIitPHD{%DK_LxBXc;%T~qgr&A997gO= zWeJvptey^iB+{o3?)Z^_5)DVmZK3KKN%`pyUj-3~2VxS$gFQqiU~0G|z!{rl$_T`# zFZGB|O>P1Bn>cePrmtGlv3a(bW7sJpy2URP$f65TA3v7?7D9s%CBLU(Z+?Fl@D-(1zW{bsnP>~CE%6v&W)KP z<;shhYkqMmpwBa;;;+^}B~ggLyA$ejF1Gp<2P=ZRh?#_qQ2%SvRxCkeSgtrDz;l2w`R8BW%vEU*uVp?;cXzLLgy`W_O6DD-v?Ns~IzQs(}y z+WUEbQ2x{F2*3(50LoM4c5MibBMyIApFI^Yka_o*0`_PS!rw>WdnF%t#fg8%BK^l= zIl}3d_o-+#K+ zD}a&F|3?TgQ%b=5PwSBHr~^Fw|0p29KTfBH3wYv-8rdMGd*a_a?dUvkLI1NSVi4S3 z{@MO3ush*@{MZ6E$0b2I1>z90xgJITf9(v1^B%tY(QU%@*pT|ET|xoiD{tIqg*0aL zUZ#|r-QrJm;(|uu-(8#7#kb^n?esc~iiX-AcG+y{Cn9h0)LQ9oAjfZW@C%egHb_GA z1my5I2G=}=)XoBID)riXIxM{4Ho1ut-c)Q#(6@9nhyoEQAnK9@df_;4wk1e&_yeo0 z>*%lP`j9KNkY&S`%L;XAYwbg$N5Z8I0>VTUV1}F@RQOs$bCDhjNkQBjA=~;}TKuAW z>$A=EzR`>x%gvInqki`Brl;d@`qwh{{zld&e^5YI?8d-{LOIV%DbwNkKc@}Fcl{X%yVqk!ERWKycZAE~vG?97(wLOr00{W> z1UP?E(x_NDUb^U~R|(&*sre`YrN&9%eE9T#i2CZdsGjfd-KD!rTBSi&kS=Lyq?@Is z1*B`0Zk2B7hNY!fC8VVr1O%jW>3A0WJm24a?O%K6&YYQha?ZK)M(aVRo9p?cm)ty0 zHKzd05dxlyZ1CAsiG*g`x13d4IJ#eas{&}=Dk6CrdWr{LIs?wpT)u8p#W;mm4;)5| zO6&1huc>Q1`_xv3E)e{;DTA;3_4XvteLL=x29&mgWj{SUQP)E`e0RO$Qbuc$k#YZ{ zkkw$ie_40$zO?4+3vDMt$N>YK-Bo#PPr%9X{!PBLM^D*LXON3Z9}J}NK%Xud)lXAP zrDiqAQ!1?r7Icj9{d2BALi2P#6{yqvn!dVX*Ur{tyT)r`!Hq%aVoZkoCOP%+J*(x2$&a_vl5;Bk5g#=4Wq)v}pq<5scs!UD?&mgcIRi~gx>9hR{f zr?ueS#g3|Jrh#gH@4K6+Q@?j>%M=|ZLh$uJnfQwmJ}1kFNA_j-Fy~7D6Dv>e!-^kE zi@UDIXJ^CNp2mK39k3_UZkz#Zxs_Kx=rQid#cnKZa{~Q6886P}3IKC{>@yS{;CY36 zT?86f0{F5Gg>-lRPRa5%B7?}0s`U1kNnJ~;*cvD0JvaUZu(fA#D2VG++eCw(%FUZSLY>Z6%jV)+ipk4HQzV0 zgIo35vljEcqWLQuVWm?Z@UK(Ja=Rrh*)Y&fVY9nh37l?cwtl;G+pzCv(p{}5x7ce- z96(Q%MWklt%D{w7lbIy^HQiu1w)yrN5#A^}1Lat&HR=Fag8Vouj?6DY6b@;~k1b|9 zBPx;`(pt~89&kW#x-Z?t!h|u}%JeVxyCtcXzgyBRu(7-G5;sf5g2dLTx288j{$J~~oO;~gjJ|?_dj|@T!Moia!jAvrQ@Z9wFyfLm{ zhhc*Kte}}whF&+`t1|rX*wXCzCNq#jXRmNhmYBAop&>0M?0BZAN%IRBpn;|k?CC$#b zMonu_a;5RCxPzc{JS~usC+e+{j#-0RcujtS%e^w(K>#>b#39vkZVTHPPWhgTD-KT3 z8?!!km3sAT{}Z)%bFSMJYMkK9b-O44#s+TO& z01hmQ$Yn|g3{P01-RQHRw7 zd~p^~)}7fsMqN~|B%;phBUDfvj72p9hmhqyq`9yA*p3H2jEAkXZE^EbjG#~BOxPr! zm_;QR-)q6?ZJJx z)6to76AufE%0MLK;d_t+n;RE9H6-yewsf+uudoUqc0Cen>4Y}t1kL12u8B=o2+27k z#|MibU<)oj9Vef1K@KM2=^C+{QHBbyb3y$bXB=z=iWOFDBC`DO(81I`M>dRmbNUiW zhV-$0(UiGAP`aZzAdzT@r8Nl`21q+!LPH7}_)Fshs*fpAd_~T@*7j_;OYXkWi|*%{ zbmj%$leH6(xsyx+>2S_eHbm9CeKVLN_Pw1Dl89KBY*VO0t`?eJy|F>Hxi7E*0^&47 zanR`#x+?)18#yxnssVbaqRqB`68m)T&iL}fWr!%2!JYwwJ~vL|Vh{}8-igCE8m27$ zrom4rA<1JcoK@+7E8R;~n640TvS_IJxBuHgtHu~UiDOJK=~H+!FJB@aY_WqDa*>xg zoc;d10B|f)Hs#X%WO2^=3hKxUw|0jblkmftYbhF@Db275=Nn<6>*Wm?FvF4Foe2Rf zx9Wr7ZcNkbGKS{k08w{`8eD%cT+0COZ%Klc2h}A{OI-5RX$kG>u9hM_orcOrhtrVZ zct33t7>y_d8&(^;>b&LN1^^}@Pgl5xQSqm)k=e=hO26!YT#D^Z-hH3ss98#9mC^(-)Y4YNEzJU2H>```~Qzs2BxQ*zz z@4JI(UUKROFK+ji)epwOc~3XF|5oQVI`ea1eHk*PHP|;J!Y2j8cjyduRn0)0HZKtK zKbNpzEY@_Ef7`GQ!L^Iajp);6sU;-=Y?{LG9Rq5%7TlYZ1y0TfpYzlKnn=D+2WCoA zf1OWkt5fyk69q)LhSS){iM_3S8Ago{77H6;%@zPA1(X{# z;i6%|h$OOA3mVt4yOhhC9@V!2`sr2Hk~A9;Z(ainO+7eQ+ERJaS(TwBX&N&H#-BCz zrtBGGxAUYGT8NI{`S^nG#hVb))eb5I9c1XEj>KTXMw5gRUq#(u`KC|`C{c^M9;1|h zD<90^w)UpSADT%>OVyR{ja6+~U*>fl+PNXqoYA(H_ca>|Y+pj3Zf!IVSWP*5;oms@ zQGeeevlGsbvQufS0BhuFi`QkfHs6ZqXrO}Rj5O00HMsYWJO(+KkB`jphspEqS9+Hr z!7kk#w&16rohJ6mlz{bU{e7?%c`-%D=__i;)sp42_jnb=|Ez}-w8<%=MFCpE@JO)> zsQDwp#cCJr3I0VPD@+#vi3E9&Eo)=%@8pV56UoNfFTsZ*wM*=H)mY zO~Hb#DXbCF{{jFY!)SVkI+D?08T|w>sjD6D%oivg%cCGw?8k1g zy2Vj9uDBs_H17SF_O+@2OVbS{PX*3$GWiMJAZrj4ACg+)FQg;E9^grmX zhLN9m?-T$yxJJofo@-)eKSVC5uTE$!T|NUv$RO;Wp5d$dE#IwHa}4SlG@h9Xh|X3A z3J_!=fru8cd>rk z6~jj^NUp|&<*G<>N*y5xMCp;~r68cr3o;>~hX4#03BU_zuL8J5)#3UR`CZCz|K7lb z5#CF}ZxKA$Xy5_UqlfSbrUcaKYkcz%;lQ0xQWcpTST#GgFfq3Al@jQx7O*UE91B$5>tfOk>Y4a=H;Dq$HG@&U z)L-otw|{hgh~m)c!u$~Izl1uv5a_wIfAxv7scG$!-N!XuKm36)U98FVKt9N!i~}Nz z4a3tY0@yicfF8){4|8n`{VdKwwo z(fRr&%=uTKsMne5#4Fj%yRkg7ASuo^QNs!U#rE@+ei7|@0uFTh(JK4xO9@|_<1x9< zXm3M`|JG!oNt%cIg+rf$R|#Kbp!QfqPlBR@L?xxV6@Fr{B4N}?@y9S2P8tY_M-@5x zn@$pCg$!0Yeh)=RSR{0qm6>Q$HQG{o)U-6n?|Z^pF7ujaSu3tjOxpTXN2p^NFh3xF zs5_CMb$h?K_XvQXvC4J!3H-1NsAD&W12F!>%f$sDa9-N8@^56KM?rIFjI-VAv+Po6 z^MxggC7RNod}FZ_uy7uHHbYZp;%90)l@%_7ZF~~>Rnd5Ul#x0o~gC_=X*kyOoBG7+!ER4}7hv;Du>%Kzy>=@S{0qr+fVomS|BpTV8 zxXyO9)w=-Jy5_m53XwYBrxkw&Wf*CdGc-&Aa(U_Cu)jyY;**&jL~Th{keU>|l#>>7Bvewn-TlreEw`^Q{mV5Bzm^DOa`Ez-RCc(s+R;CB>a zL>~!CyIJHC$>rN*;)uYlZD)NfkX`Dd%Ap+o4lZwd=M&{E{1dgrwI#s8=z%D-E#H%+ zHzG|7ZUR1qmlA>PGpbz9d>_5Fq6VW3crRD!Q!F^v3^{_r`-xHtXHN* zy7zLRZ3qNnM?Qn>bX}-z{6UHs4D{fS(mzl};-I|~byCZwfU!Xb>;jD6=zfy|qS)|1 zx?zD%^@`BEdRxK4ZI6mOic_GGN{?-y9#e^lH`iLYsvC9~#Du|6nQk~TD%z|j&eZ%- z*AQ*l#`LJ{dwpRY#%>kGR3ngFkbCy|&uNe65W5tL(VDN_O@GY`NsVJl)U$RTH$I9> zKXiWj+4FAD_ECFO{5}#45fVQ(A-KK6xp8(ar`#eFg|NPY8YUYXmI;KSs5M-_2;+&dF zDfb{9l6A$|=&Ngawn=XHTOhY1!@f@g{ z+Q_wm?@m!v8WkM5TXJaScBK*5N9SM%oEw!CZDfb6JQr}rWZNZQnPLv4-%Or=G-wsH z4$b`e79!R44XM_SaZ(I^+b7!sw{3PxIGYaD`RRC06|!gg*UMi5YmwN&ZqW$*QTvz& zHJfXNR-VHaF8>=3=U5+i(4sq24es=JTy!yJ_UXV=^UwJ4Z>SX}^vcM<^*U2Tf9>ej zaMAmW-X7Sz(T(tb=H>MQ1l26VA8~C5{>FXID0Z|{ekzt@v&RHt=2Z2VvDF}I%6eBw ztI9o4(9II9uEvdmgT~pTa+O8|BO?p^VH3XkWs$FmYy5V^b=#v)x``V zaH{=zc`{=8)S??b)@7T@qQm4VB+1<~xH@~Y{@=S8`3{==`j|#m&0swAfTMnm1iY+M zw2cWD$EK7^{?4xo!f7ei(SJK@hsN1e|M~`AZ&5Ij&pk2l`zctrtL{82E35$<%q5F6 zzIzJJP2dx6z(`d>jpjDTUr8I`Ta0JlpiTz_~fhPA0?-OyT=UR#2aXwJLB`*Y`eX@q3$Kn#9vvb+V5qM*nl(Y zpmmpQ=F26T zL27S56S&l>SFvtDiYp>9oI$Nh@ZMcu2q!0jg$@EWiNN}(&sjkYd)c>I+z?Tg7j|-n zuQQ>U1q|fxuvh4DD6{2lOI@{rBm&3fd}N`-(k9)BJ?lZJJLoU1`!s&EfYDylw3q~j zt!(i_7GjS<Z8T1hI#$4E zZ@uyAA}ZtWZyD9$9(Au(wKWM*`hHO$My;-+wj=2+gc>L`f<9u1Bv1ZOgui>?Bwfi! zJ2FImrfdE*O%49fT3`}`7k`DMsF~@IOX3<~IG{1qCN{E+TGN6%puLE1%D5$}@VAWX zOjk+`&4kBfsO1?b(<1EM6obN$03eA!+2k%1l8zgZvh#~YZTWw&$EB#5Nw!6#J9X|CD+WM8~H4~IQ6{J(Z#Iw!*s-jh;vY{W= zZ^we>pAoPAqb=N;947aylO__UOmAbpn>{c97_Sf-sVm7A?%JK0dV=I5*G%iD#>={7 z;M*S!O~sT95GLc8L(v6@xee`e<2n~!7-moOUIzqqM{9rjw+)DVkynkYmNk!xw@?({ zwCgJ@t%tRv9dGEQW2U7gi@63Jx~ku6Rw#t0_&sR(10V`hyK|SlD(Tfn3gd)MQndL3 z>k7=zi0>v029KnrYI?hoXsefm&s5II7u~vg7y^O^-AoD#xW~h<9G0%{p1mm=Q#E|X ze6ul-QC%fkXVayiit+@Gj7QX$fjUD(U@{tM9^Nh=6DX~i>Sq2gH{!Iz%$bwJkW;N9 zc)kibi6B=KP^V*iGZ{a1Ee}sj-BO9u8vWydId~moqP&T)R#9Y3ym$CmXakD4%6?~A z_zFtvn9eBdHl(ktX5G<7GfXRUEU`3_J5+K2|BwLW^+VidX4Q)~5uPA7JN!;iu10p} zLkA6gqT;KM8%V|6a%y>_*fPzzuLBisn%e-gM`oV^|L7e7l5@I2O9I|Tp{CHCMaogP zJ6^qCd-ZobY?UwgF@2N?IhR-EMYLw}s`7HY)ChO$_DIi9zrC@IClQw);%*r?z9F|f z$F1m`#OVdit`HmP3XdP6Ju(`|S_`3DFV21a(;is^u@u*t? zyP+h&?q|qM7oZ3mc69xA!8w(!PJL6NF*$n!Tbi4h>qpP2u$t6yFKyBWh@_JVd!|Ms&~C65C6{SdEBm*PjZlTW^zY+LngdW#8u zz0l%9G&JBBnU0Ul`V7w7>Mi(8bUwpF!cLW<3|Kw#L3ZQetbYCux^TnQHeRaR5G83d z&bhd+J;Ee&WqfB97yQ+1uhrJp)_dT;r=q0^-;bi|$)}f=ePdB_EgUV=4L^nI--HpidElV1!xw9nkXtpyTL24knJ-U)lkAPRW|180Ef_w~yp07`5 zKLMD`;OqK2osP zx+R8QoH$eY?iMm3F+1Q8KE%Y>jM)85NHC}}C;RU)63ALwur%{kT(70Z>9GY}Jq?5) zlJS% z7FwH|jow-12PQpZgk$eqj17wT)Og=X4Tx1CSW~{Hl0Z^5s7Y7kH%bYorlXKcI<5+B zTEl^5gnR(mC-Kba<#aS-yC%SHYGHtRi>^m!xca{rjiaLsZ5pvWq92ws z1tJS{c4SJ+XX#D$Nz8jurwvCYeD-r!ahE7o8n9rMVP`&pI!e2n`UDd05d#qxvjIv< z{emqokZW6t4|6pR7h-{bc2!pDGq*6wQTO+FVG{8oTNpkR{8+O~e1O2aObYAR87Ek3 z=B_>SOI_2)7g^{?hpe4n39` zi@L|qD+jcL|1cao0jwq)MQ5Mx=}rH8t86$Q3w?2i=O0Vs0nM_|b>kMjj^b=Ff#sq( z)6FBF<$!}m9^-Ql%^M$CJ0liN4WA8!g?+>1mS@j6yYtT%3vO)EfhvlrM()%ECy3tA zN4ws}hR4=8bNxa<{+b;6`OB0W9Sj~@C)0ux>#N}z`JO2R?}mffx<8vA1#o@7y^1BX zV^>W&FsFVFU3adS>hK6#lCW-Aha$yvsekv(^UadK!YzAMivGW33npi} zX1=y%&b%flvW&W`L)7X6`Byq#WQZC5%t_d)s?A(1r$VDvGj+MlG(0aj@JCHKK083f z?jRFu5+=8sS@cG`<_B_W!yy?Itpk}s;*|QdkT|5$R^LS$J841`luBx4A1CutFQ`IO zTSIFD<63SoPWwHApN7OD_?U1(;5nk1bn>Nip;7oK_g1sWrUCI~GL~h^5xG?` zzWagRYd_!53Wc*=B8To-`cKs9&_OoOe){P?d@w?n-sJDeu=3m#!MU_GSBNP#>a+rI za->@}1u1%VV0fPw=1TiXWwCH1+WLUEp)6>?MB84jaA(D$R&S#>2bq%_*4R6DNqFag z;g8?{{O+Xu$z3bwW(r?zKxr!8)C_N*)=OiTn;zXUpvMsZmu>zvT+11Nrn9$bUbxTq z_iX}C+rD$7fjA}L!tx^7#kb8}_(-+&r5iNBwu(7j!y<2V7E(&#TlES$<1za=-s8EY zZjVZfpD}c>_z_RTPJdhjZ;^#9-bloai&~!#354iI{V}ai7Cj{EZlA{)f-Lq+2=k~t zg?DBE3`aB_qR(sHTKko`YgpG@za@i!N%WB6foPh%osN4I#f6+ME$roV=io;=_SxiK znNNV@F_t8J*vmqTW=tZa28ryUiJt zskH>EUuojTQ2*OYfZIv*BRR#;!IKb`_*6*_62+3Y*XbaK0VkbMdQ#LBYO(RLIVJ8i z3dk_lL-q);<`Wlyro%2) zJ9F%tJ&(EG^ludFS&S!-xfH3fu*KDh$MC=CGEz9me!$U({_?<$D5DNaUlbMy#m9=U zr?4=hdS|xs{ha94JIQt4ffBdUOIfyPijvdQyT*^=#uM6K8E=M5gxw3yW8TjjrCdTb zsQQDar$C&6SSwHpNZ#n#w-FO4TkofA@E6gH5@78PV=2(I;!nQJ0Dsuo)-s2pwPUZ)CMug6qgB6vYYd^pJ9<)Gnz>QsVN-L%uan4j4w`qI zgxer<{!}xTT?51iV@|S}`fJ28wYdJ;BRnUz$mSstbz{17=<+|B0Mt%tSWRw@bN)#= zNP~5sY9NGA(?EvY;2E-n9hWq)Q9%6Wr@zHpRVS*35-Lq1ixiqSR-m2sgnbK~0+#gM zB-eFs9)3s`O5v%hSG;Yy)(GM$iLS0;uyo%t$?8y0iXn287A~s|OY_#eh4SL_p94dw z0L`LD;bEm$1zEYiE27~-L@nvQguFmGWQhad3o!~O&Ab>yk+rbKN(-Ty+%^g57vXvl$gMWyPbb5$TKs@3a zF>|wI>;;B#d4c4+Cqu<7z36RXh}kn#%7>c1K3o{Y2CfBY*pel5>;P~y8&t^#O5q70 zQ6&2Wn$!*z@kR1#Mdp!(I(&{i#WJpP@^jh#?5!F#ZGCNYzfv=sxAHYK%T24Q{-RCi zi~{V9f8lu6F=s9bJzFEOSv~qP#8X?7EB2W8@LCKq!8^n~DFhp9!`5Jd#Ov4R{gFU> zaA}bW3pK@YBe{naA8aaYTz=@Kdt0IYqPpO1@>XU}g<<4hUM<;GoLi1PZtl)29U;eA zh5EsW&O$Q7X5t9;{d%F-N=`(vmETvNoiVLUpyE8tED|5~8<_~K{MFnIFr0|yJ{7B6_x68`5=gM10yQvrp>X`W~3{nddkG=~y8d|`sCOPhx_xBYlrD^VaYyxlr7*2CPJ-8Ked=98`hMWjhOR-GMg zrlqAxE}?L@MaYm#3~m?TnU=WdO-$g}NV8@?6qUfy(e4v`YlIL@_M%5U9t&ktK#y75 zs(6B}kYeXw>4DnLM(uBNhVWnuc7k>GuWq&n-y_NZSAPTFkU{pf0iP&CGK6y&2VA%Z&KR)$Wd#(eS^uSsYN=u5S zTIJ!;hHY*JeU5@;8$u(f3)W*oKWHYYx$`%e&UkZ`52EHIIpk+SDmF|>YMl0T-U#u# z0GN~x^p(EnYC_1%HMD6UVTT#$0N-I?KRr$UOoN14f;+DuR-*K zWKvT@$dPBrQlX~Q?kx{HHjPL!Zk>=$(=k4hPU6eoN3D&;5rD@Q@9r)3ER@u61))5- zI}v-giL0jqd^0@_SQUc2)JN4b%p*j|JhS|y#lnb4@-dbKzeMk4jnotY7cgLXuJOoDV*61-;Dp387 z@eLixcgQjgY}j$Tyh$~-`5Wc_rv&lm3t0(q{~Dcbndv3g&@!8ty(Rp$z!s;Os1n zD&0#o!~$gi`!BIfs$Fk6Iq?huyf#f0c?LiwPk9D4fN}ZNZkdo!3D!>(n^qK9*1Q8B7LmW=#wcVN<4{^@)SETpu$}WBj)N{f!B8#sQ0bQgnR$uQ>hpodCSt6%&@=;FEmCIgZG_XR@!Ti2fp|DPh2Qpgz(fDcKr0>bAQ!$wrHcd;Id!KlCiXM z-SAdT?#3bVKmP|4mKgOGRUBn9!DXY&AQHsMWzVc^qvBAzi_eD9##UA4Q8e>$@(1~u z{?K!qW9Bp7nr@*t$)y~g^Q%*)dkuxi4==Pgcn44Q6x-(I&&w0k5F)w-T1CR!Vp2YJ ze`|Sf)@?R4K@ZFh0P5%@GlXjO25VCJw)S(w^J(_NJ>Dr@{A?)GsFCZqDN0Zf5n6mI z($f{$q6n6vv^pC6*#o>~g+trf9W{K>zACvQD9JR-My#yJC5l@D9T;@4fshww3Kv@SN2|Xbqh`7p za;p(*jx0c&@JXfq1aVRVZG3Zq7%S4{X-6%*cZTSda6*tMesXqmMrPNM~2yQTjkg+ST zxf*|}u83|Yn7|C+ExO_^rs*ttjGAmYl+dU`rKbF5Ei&@PmJs|O8W0p}g{ik3`L=bQ zEVdTDD{pLtJzY8UIe#U5{fKWnBjEAe4i=pkx+cB{v6X$909To#NF!h3HTc>y{4#31tQDfP;}1!X6h z43JU3St}4k<%mqa##}KHyv}R=2dd~!ZlXIqOOQO(E_lNAX}dQv?9+@1E$_A_8 z|JUCi4oKw(y3XrF{HVv_Gef|<>Mx?2P10o8Gx;xUU--}0t*nE_`ZMa7kYC>DfjZ=t#Zi$@Rv%%Fk zEZ8Zpc(kI0PBV)xe^o1#t~#2YNcKO|RgaqwhDySRqHQ|QbcgV7#$*mkze>10va`QB z-oG(ZsIgk?8Nca@mv?e>lFP{cx_}?^Bb~%5)$z8Vz|2qKej$l}phZ*T3?Vr@nSTtMo!!oM${QNhNkyhqlA9FDQir$%`=hFQF|Hs~NYlq*Z~p z8{xh`Gd-8)g6q~L+%V!>`Su0I{ktMi`lTFxydJ~npo*F`xQULLeKbcYB5syCs^J&) zKrAO(c`F>W?rQwjiVU1w_JWvAp&{YvyEPodI+?B#ZPBx1PkxiPejj58>~~^ho@HG( ztdaG8ol_iLR1`kzH)9}#@mfN?w%tVA*O~Im?hLleg0k;~G*q&(XOt*4CH$_@o06QJ1+JhjRug^!Iu_I@kM0vt<Wwcd;pY}4EB8oI9H%rXGH<)?sYdNUadRlB~QQlc1U1@!Db9~gC28y z|3uAwNVemae~!x8tv8?Joj5l&9j*drC)Y0~eb6V+Tte9Q>t!D;p*J=IiNt6%4OK{{>+c3Z0= zaq`?AXOn`a7XkMEY0#UYJ6XHSsM>7~-6L|aJ?hR67n_*_jW1)xm|@Hs>0f2gV*5i~ zy!_L~?J2+c2UwASB`gwq(=Xn>vtWCa)s&A`?!e#t{44T&{MPy@qPZOrBn}h& z{skV~F+o!Ou5|t)aBk3l2kOJcOF?1lyZgajc3LABY%ZqmH>=@#VmDyVI=MPHcM}mR>?k%7Wr# zDswSvxuy1^tai-hdCl74Yw%Csu%HjBeyR6#|Bgn*4U|Dq_X4(<8X9h^kif21gI{3T z+wp6V{Y7&hbqZGYE<7J5=Ykj;HO&^)LA5V1Q%_ru*(v%m2Ehgw+6epMbdLgcs@j4v z2mSPU5-#KK6W!T-w!oHe&P6Rwt-e{z5YLMh=Mz#3BX~QKY&qnqUcv~AqoNtJK$-q& zy0g4|OD2I3D{Q@w)oA|SLY+nWcwrXEO0n6wAS^MWaQtF7yO@RJF*IpWO_0YoUX1Ls{UKX)f&)oI@3rBjb$E&sM{K|{rax&r`tICJko^i4xkeY@T(2Q~ z^a&)o9&tb)b&J+L@S>a2f?fK6$s$|(2ohYKvdjs|1%-K|yV27#h*g-6a-&68e^U7I zo1^@w8>h^uqjPiUhX$OS3*>=e%6z}pf+Ro=c_bFiV=`C(lTh=iS=6TT2LXfk(H>F_ z^-!@=US*)~%b#EUt`*Y~9UIuB#0|)YG6rMa2~t|p2R)R*Y$euUha9$47)(kOK_~55XjR$|9wXf>BUeD*L(t(bQ**68_F?Cb7pwr5rbHr%NNr_NEeuFW z8RccZ5PfKSS->Cs%Jp+5y3^OkF4R@HSOM63O|$eCJ#lYcCp%Jy-WAqEl*%^F=HE@G zc~(%h!u)F%5tZbtr(fL~RNQ0-{2Q)8lNL`oO9={~C0hv3R`AV7QW(czbL=v#S2na{#2*1!8V0rEL4m3EWms zaA`4{vCh*J6YZP#7+7b9IO+gNlK6{LK;5y{);%8`v4Pum9fhoCv8rs43thN}w~l!z znNH4Im8lqIb%v z7M&>8$`0cZD{>ZL2jMlPAn6cr)$MvQk*lnxiVaU6j>@U(y|}JIN?^S zw1GnoYvq7&obo(Ma12n@g&V^;dw6+=#J-g3WGca*ZHh`)hYqv0ayaRVJPeE!ypE4h zM<=IKvd0j4vB=TMQJ;=uxj5GaHb}X~@{dZ2t*E3Thm!v1hP!Sa%2Nxchm{*@M%HdC zIhA~sdnaN=YE1*|zVo#CVuP;oGkn8>h=%qsb6aIhN|BQpQLG(UNeNqmF8q{&f?^P* zxfqHV^Y|_c7q`wlEI6uddsjQA*2A^s^U;5Pg-r0&@tdt3WLqg*p6y8AH5A49ef_SOqh0zi9z^F$(|@>3f>(QQqM;?(WV|CTA=uMzOn|kDq=rC?>&?fI zdY^gc;VvPV~h zY0pf14?nwm1ko0Jb5&ZTf_v-#af5r2&u)g`QIT|+XEBs({q{$}pU!BHDn@l>IP>|1 z(ReeyyI5;KyOU*Y`8K`X8lqVRe#&cY{h6H6)Gwgji&<&B=PR^iQ`^VhUDfep%eUzr zQ@!&b$A32V3oA$`j0_B5mw~JPgfCReuQu7YHJ;)TEYbWFyOu}}3+st9vZk)1!zpa# zU3Fgc8fU9A#g(W@ETjKA@4AZonzP^;><@R}(zUhkRU=8Te8ZWs4+*tW6pmfRcKGFq zOe?#H_zNQEPS1OQLO|pb$SXjpb^rX^v|ardF(gFU9Nd>8a(n$Qm z{{p(V)}YYGG=P`z`Jm=y#92LAsIC^S(H{$W-Ey^d&sq!B; zK-tFQ<2qvUm3%$6p5R-$d+gVTW%^wQ(m54_@Xfkt&|x%~Md+~@2GBFsp74N&onkKv z2vw>NQUa4dLJKb<#`*1}Y*orwEN8_9=LgY?q`LD*p3i376&LuI`|A57^1Vrj)*9X$ z@z}SRRgBQ}RpO?8{N#jP5P8<0(8bEltbkPE`CJ#K!a(017#Hn-@jh8S#y}%Wa$2(^ zDCzNYX36oK*3se5=AKh5wgNrD=S@(q$Qp|I&PO3oD|CTNORrbT!sLG{#w&N$gLWl} zKJSnXY9$uN{8UmA(Mx`vihi`xcbcSv8C+X=LJ2~|LxZ3b>%ZmY6O)k?b$}a z(xF5(WJkXBJttf7OC3_LK32TqBB>FeeHCc&AzmK-2jc$OWJfN!SZ?9djdSZJCABCS zo(yKHO`^z-WL>gD55!@)t4f-ql6p>J#~AnD!o$ETJN?s1BW-1W z`e+Uaj&FW8)2T{-nFBDL)I>U*dx*;HlvF^;{m&8#GrDHjWAg)Y(=?vT#y@m*OeU;P zI9Sckr^%_Ru_+OCmX>EmL+s(NlcohtF_4>LiNvx^8#@j#a=LMU>9=qK^^~VFGuwo1@*q)T2${k}!n~=2wtHEEj$-Li4Fk&%hwfD- z>ndSSQ{Q6hRWTofc!TxV&7@F+kFZlHjgsqd_l8gAP&q|dA1C+L>9;^9j?JSjIkonm zK}0z;wA#b&Hz2g&;=ZC;vGhbRRaq*|OsLA158_O|D&u8_E7tVU?QOu$ILPCD>|)?Q zHT9AWtsI#zD}Kj!)cGBpobd`Dm=`MRM?-v)sRh?^dmDL9?uM!7q5cdwHhxa-$+zT; z^lPw@lg?~|J~z4h0>w*225sWMdQ^|VxhkmDnZX*BKX2(31!lLd@-f*oejnEL7z{k!$q$wTuz~8y#P~adSjnDW!02@yN1l=H;^6gR-|EZ&BScq>JN@p>^DF$qhRfsDyKg5u z*MG{{Alf-2g%`UcRi*Yjk`C z1b(s}Gk-r_=*mcjpp=S_PeFHT<&j(^WBg?L|G4_%P&Xjvu6_$$r+?gBnVn0Tb}ZFW^6Y;06goQPsFX+pJtMcVw9+^- zf)1UERL;B|+@^Tc0^wVv@%(~XY$6f40D0}>RO@q9rKV<)b)}+rx^gz096*C$wf$hhbN zqd>##gAA{e{Yg~>0gkjX4;|DMrBihypV`7>gIf^a3 z`%v|R`6@Ez6hXIg6-je(@YNxzJZ2(0wiE*v$AcpjHkLqXtRy@&Gu4m5g_2ouM_jaC zy^!vN*eNxUpx7FS<~Z>(Ko5~tF_}Pr(oUE3 zQFfLpXuMi7^Xg#4bWBi`148sE;lb^%wl{j1Q%^AowN&!0a+H-k6cL@@x_;YFv2H(H zVg~0%QT4iRkGpaomo9-B_X7@`I!Tlky?^vJXHuno;d#x3u01oQsEFtV(|L{)K$OcP zMzV>}r@U#+9osqE161=xEIz{&QeM$bkhiM=XCaZ5jPVO82B_o@^7SXsKY1Z((J%vb z+BMuL36~fcerq92WK|WhCWxs`Xd-m;%Z_+ErHe2G;M}w+qc9AcpQa%1_ey6g7g7s_ zS=LM#Q`kplM|t}q))(OfkX8&Bpiq5jYtFequU8b20$|v3pjlQ)(0ib)a(nh0gG$Zf zhp24KFO767%yP=bbP%fXYkeWg2x$5bmj7ld4W)P~fDUS8V6w=q21w6!A^21RV~QG3 zl@Yv~F~*&H1#!XU0DH!{+q~|oQS1u{RXQqcCpEG6tANdO8J(^iH=kjYr!ql>YSiTs z6`D=`1n~KfqEh)NY&}4kU_n*H$eJ@*8IiN)x88(z-~|6RHnlLA>(XchUWN(+<|d3m z_9umRodHVfigNJaCpoze9Wsrd9BA1-TZVi7xxfgD$<&-C_%yV)uy4WrQUA6O0dElNU8J=JetQlf+`bcX^}IE+f;s?3S-8f^0FBgq z$STbYCQ*y2mP*Hpi5|M40ZBIZl7ZUDH1vU5&MiwFti^<3uVvYx!i*(Sw4m*(L1r9u z`~l&8vTx6hL2M)mO3Yw$td$CyQuOU(x_<+<;D8dh4vP(=IBlZr5Sr9FtrW| z)|Fs!xv#Uh_(sF#C5N1Cny=!L`;42nzAWD{L76GP>UK)>^IRrOq_BOw)*jG?<1jnx zkg~Ch^^FLfHTENZv9Un6CFFl~e;oNrn|`p62ehX9fU5O1A^^<$+U&){lxLU!F=Gf! zLOJG)sIv_(dVBsu1RPyVwM~_h!)6NRA$TkPa$CuuSCiT z;peglGz(#^uwtr?q=`at(9xUE-@7VYDhi#8xowiTyP8P69thN$1#qPj{mH- zLL#t9qsB4sp?T!HFR!kdgUD2^!NmsK)N}1LrrZ{ zpL=s0V;CyH5b^d9?5gI8ibTs4A{p-Ee{8NcFKdpPGGQ$ zaN8EjI6Slo$hTh=igIMhTuuz$Qtq4*HL85r}R*AM1B}JPPV3DFfj7YuF*w5M| zb&$L$8ig91!L{EQKb|YSkqx&kXJl*K8Qh6EHK`A8Qok z3LZh%rtv@(4nE$k;{H)5!baU3q=vT9_5OY&p*;8yx$iIV5&^TB>o(tCAi>7%nE#lH ze4nyK>?Xe+K1f+Yhz6eUFUnblILP(g{8}#K!&#)>W3M5f-8!6K(mQ$Cbm691iGNJ# zzeswFJN3Jsn?ipa+&;;ZY|}A0eo{Zt#E0zbdG9E?B478|%OZd*k;?#7cr&-n^ogY6Y zJ*V{;)q7$X`)O zmWloV@HzcGvmnSZ$oyU+BmEbSk@f**j7x^JZix8INFd@t;#?XLxw}+$?_7a3V3HZO zKSb1%{tZC*Api~*f&R~5^m`)x+4cF*#FPV zMGy4=djHQMCI!|k6M?o2p_2Bs{>*#+UlSSPh^-?kICCLF_nU*~f8VYfAR>g=Upy(Q zeW*invefmz*WYqLPYMHMkk@c27Gx3?I}izL3DG{$2OQ*9V;N_gwl!9ZoLF5+Z2xOs z9l`P_4-oj5n%gQ4GYoRPTSHgtFRunILX>Jy(NI9bA04%Z#PWy=*D*fl{&71ok;2!6 zc0olXa5XNt3C7fj6N;^|1E+xnh$0AH_V<5bn<>5~2jqj~=9md9*|QdYP8S+=_}x}l$sqMw({_l9!R z8p*g2hwy^IMU+d=pQ!7eo0U5f288jJGNianVH>Fhm9Z>fD}m*lqklFfI&B8Hwo zpMMWoUNoSG-VX!mr#eb;{Vh4%Qr7#GLlDevN|W)p+ct75;Timi&UaR{b5OyP5k3`t z0a+>E**p#o!ymfz7pWTt0O=aIujGiw&1`aQFOLe7Tfd^%%0|j1O$B3D{?OfF<;_d)y{Q@)!%5HA#LMlsfpFVHdsdr_Q5_D} zHeDIjX>Iu@Uq7ie=QZh&K(bC&gI3SvO5V^RKYQ%Y@p7F8w5-)pvsVA2!-a>3jC>_q zy9^&bF-OzNoY<&NX_Najpk1>LX&}j*g8C}L>SYgs&NI>X<&iRcg@-Or8y6Q833O$5A~>4`n-mUl>_4p>92e z{u2L5Uz??s*@0kmz(EBMCKOt{L+~qsuH5{eAFod;U5<^nhyOUwjxKcKgqV_18_gRw zoqA>9gy?JVG=SexxgPVfD5jc3_!O!wzS;to%} zz3`}AJSOY|FASQtEu0~^@sSw4zxL6_lcz(1EuOVauAeE@E*)UqGd{Yu3Hyt=oDudt z&9@3_BT_6VJD6G}6?WGOU){KTnfg9nW*N0rXHC!?Myu4qI$Q`!y6-55^~wVW9|N!w z*LoM9$emp4&8&@ksdN!pZd!6t?J|sPTXA`Q0t;V>xwE>SAanLnn%xZQezU503<63T zid_tDXjj8t6;v&!%~aPG+C_C67BQl3u|kW|BV6aqogFlju)@XD zH?lvL&;1-o(~Q})x^^Uir5#Y-U(hQt&_hTM>g?hX}E}n z6rQ(N{_wzoFg-o}MIsCv<4msj5S`Mv%rdxqdHw6b`9IE(L~LmVnq)rtY7%r6EmWu< zK*qpQ+U_&x)o#|4LX`MK$7@QDrR&HLBbpxCJ27GTaxJ-0nqG|utMXg{8>G-lW0DsBGSdD{e%hyBGAJzl;H%$U(BFX<;2?;RZuLl+P;7Y zAr+NZFEPlp)L1WcCifQ^FEuDHa(-zlV2)`aUIypOo+l`m!PMxNL0G}7Iw9M^v0rFv zGc4pu@>+Wp3RC^voJKv_P$S}|p4tC?pF6WaunMJh04+OrnOSLUQ?U-r;Je5aHkzhDwO>t=n#w0Tyxy!mhWB{g2yhV@p-XFyU6Dx5XIZZ_hY(b}Xf zqqd|gKdK+Z)lgyZzMj5RC4t=Rrs2V{yW(eXNFed~+z+Z?W{>gvsWlNxr7A!*v^oEp zB89zr0}hj3-cAf=T@Ij*fwN9y4NRdii?Il`_?4#M*D+}LSSkL^DwT@fz*q5RRC&z~ z59Sia{sCDQT&*Jhn#USDAhlexKj5xy#ty1Y2-(Cgm?Lb~xzMcIGu$;1&j1n`DkkQzBe z1!b5AnQ`(Md#Ip-NNq${zk@@L!@t*=R5s-bBME@Q@8ceDmnMK860{34tD>H9usVQj zoHT`Jm`w4{^}OP=q*~H!wxFOR?SMK3m*Hild{p@-=%Y)!MkadTH?%17fB>0Qo&>QhABS$A9X7z{!@-|WxU)X7d8S2NbB)BaD z*5vqppm?b=!LgEwYP&G{ftz@DzsV-+Qzp)+?g$PMyncr6anN14ySs>jsXtOzWussk zpX3ySF>kY_uJ|SCt554)Qg1Y#;xc|^eY)`oKa`;9BbI((E*I@V=O+sLVGr4g{eY|H zLo+g?fQunPi(Fg?je*CTv#+{gfT*1ZRXa6RzVPVQeFZXu0ZJgg{3>H6Kji%U+WLOj zNzr*UE%3ND8_XrBbXORU*>d*hZ2R67Gofaq$57S;-oiXeDpDw`HP`ysLUWadE^L$Q z*wy@D^D~oQ$YP6JA4a!DG~r#F6)9Jn7Hd8oWh_}^+f3;)KIiF3M`V(%E5%#HQ?hyE z%~wNe^+NQsY-qPRyaG)miPco)Fm@zTK|jQS zZ3X#TeiMPrTix61d9(eW{z+;&29e}%Nc3lvcw3`qO$tFL*=*iA*5uYoQVaGfYER6H zC3^Y0PlEa$B&lPuwLYgssIORxFx|Kb)7l zc@S?Tjs?&9w{1G*u;7gRh?F1;m~VI4&s7hG_S$7|u~KM~i_sq8ePWlgE=ZMmUWQ3eBvY+H5OZ@}*AeuNdYl7~b=-I!L-JQu6_;w!kg1mcyY#w`s0;rR@) zP(3xY9UHDE@iJHr2kvf-y&-j#$&NpS6c_3Cj@@0!)of|k#NPB(O2xOnqOwC!LXYWj zm1q5z2?No(uO!ifGDApMry&w&+fz3{To1T^8C^Sv5Jwrok5?Xpzv{6q-f~bww@~|smi&~D$VI@mVy3UluK>#iCCQ-_G+W(t zd`scrs%6kUex#EA{ahzwTWh652W)$mfelA&BHOxo^VFJ?6*41c8kvq3ci0U5Sx;re zzH+LOL6-;nztP5tD-Gm8@wx2x>@`6XZPH!%XdPE`KvPO?Un@=|^M~8Vc}^rGpg_x8?5T{*57|`L!uuzF z?HEs7OSI<0-?$GEK!rQX;#n5);h$1+wIz`>G+=h@imt?wB+o;`HcW@J7pe`?H-+{X zTB;e)-h4i5f0c<{7Sf(VV8G=6oz-MMIWu7Qr@DLAL0xD{np_0?=ihIz-`8@$?{myi zlKd54uoYdd_gD~$487jWe$b;weEy}t)cN!i6U`};gY0D(=`%ONP1@Ri3j`DWY(mwB(F1vVe{;W*a3JQJ zf6;Jy381lR|Eg-NVnA~L!Q1=?-s;bau&zgYNP_^jBIVCWK!4)*!8U;Y_>+%)T?>w2 z4*iSb%8g2f^{;G4?_Wy(yz+?&A@C2cRT)Utg#=Umud#piImD;I5wws0Hd28?_8&E7 zSdh~HKzNuD=k$M3e3TQAO#VU00z?dI!8(MxW~m)ak9RX2>lCP5qNPbo{VMrW+kPRR z8T0Jz{#x0vJ9Px8A18*U1)!hPBN}ppNN{H;)Fc8;`nSSjLc)O4dLG~SVPJ`fh6{L;h@G5YF4@8ndm}S7Lo%e~H_Onp54Il1D=X=f%2bL|r z0%^MJT~r?=;l%`g;*p4$UECwgQW3MScqK1vK_3+?F}w5Yz6(}F z9ooa+k}!tAq)~p&pl$&WUv5n{o%Nl!MyS^19{H%1+)e5?wEw7QYkzo7i&zUva(cZ} zhygcmzEQ85x@$=#c_U*d>ed2?{uepq2pb^N_2kJ0 zC3Jgd{Jvws``OI*fqei^0`^B1k{;0;A=cFZJhlHG0}BQ`1}?}NekC2ELoQw@h&3%4 zG6Q=afOG_)W0amQN$N=>7psJdda8v|?2O&FD)g__k_JisC@cuCp9x!*G~GQ}*2wbC zC=Y+XfEAR7*sYmsC0f83j!%r!FY>;&FnUk70Su+C1uMrP`x$~1rzaur&e_|M>v_<_ zgTT=po9Qo~BMi97{Ba}X<^=SkK@8PLMmwiNym?#C9J&BvY&$jJKT?{)omTyC<+LB% zch>XX`_l?j?B6F9fQ2^lJLQF^xb0~}xEZ;jNPB+ZwvK7Mr zaG?P~g#%FBaL?8-qrcKZ_7~piP98SyjQtOr={cwqsMUyc@2C7z&>HJaQWp1YWq%!8zC0P1AV0w1j_auq;3Z@5b$piZmJaNJN4O?EVW3tYUu?b zi32dnVp;DBvEk-9gTd~6F+C2x-CRz==PUqBvjzcl4jCv6BxVomsHv$jzt2Qg76Em> zPXd8=y09TOLHE--PW1P!ds@V0K%LQ+u)nBd5`Tzbp+gMXxgYb2=-!shN8Zlt2`tw7 z)OWaRO11^qTX~EfU!Q&7BYpIF$fchYyfb$?dU3}2=#d}RLaCllwXV^vX;0(Nmg?Ht0vi&hw*?(>7xV6U7HaMmSRl9OpCfYlV!ge2AK)}qoi*gv zHE-O0*4gFCSg6PzXttWKiJ1!9sHLA4xSu0HMsxM5lz&;eC-g8GIAj!yEe3aUwnE;}00N!OX-Fojdtjru$PV6nS*^`!d`fV(4%e z4lz;RpWSiaRCZ)vn(r(J&Vf?gaAMW|9z`)Z5)2AK!+f1M1c zsY_5OF&GZ=2FgOrVxOMmN&w&kKrym4)BVo(D<9^{D>c;UrbBcyLQ|E!Ho*P1{Z^E? z0XD-C^Kr2^=b0BSTM_#e??Jf=jTgzadUWY)Lk$+RX z?BFrv3jt7>qTsA!n0Qo+dVT^q2hA6zz?Nj(s5*3W73oHXqWx8a*?(V)3*j=WT|C#L z$`}xqed#2owz^hmhzdG=(P-L>x?i^a28fo~bZ=`z-uWQ&-JrhiiL=J`OhjlaAsaPx zId6APJ4=(v^!*>sCAsHZbqN?R%ed-eUZTB|hP*K>YN*@y*Ndm=6EUqPeGjHy=L~KS zA@5+xtIV@R@x79|o+#a%67|7jhg4wiplncl+Y#ijkJ3*@R zcha!rpFQypNnh0j3`EG3V8dzZgv|6CFDhJQVI4;RycyVbUg=%3n78>eJ?&5Q)X-X6 z*zVYU#{U--G66WY`t*uZ<4WJWZ6N;%hl zEUK}k)jD20c5Mtg?T!>ZSw-$=2e6cifD$u&PFhH7A_-7l3GcU4QKD>!>jjDnq@ziq z+#Gq>EBP)F#V}hm(AxS?P2l}9OVc0}9dXHkiAl28ux=EX(X^g+z<%m_BM$TBu6LV_ zO1OESWbx@yP21w`o0B`gQW+^zSEFb%ALEkn=fY%A9sJtQOIiMSN1ybh+DzjxcrKQI z5Jr43o%c!PA}G$cA4ht^C908Lw0@Cvgjdl>(wx?D22OXOAKi1$FGk#(qp(%Gt7+ zQO7^#$)0SiF6WKm1?Y*cum=tG*6|J>M#7hfJ;oUM%_6;-n{=O()*KkLJ|<1fyhHcZ?>p z2Un(T;l7jm=^rAe%<%hAlG-K(0VNiIwEUu9{MCI|KQ>slMqm_fjh)uV(RVD^kgLa# z`EiSdGyw`W$+E>JxNvK$xz;a_P4^}%Fq^@tDX-+RXkqa6AO`l$D!h;sXvR zfN0EscTfPh4S?bOo_L=)| zXzF7fXnK{_=I#vIz14Dm9h^7W_2z0J+LrOG!%**+@xbYT`@wl*TQtQlipRkIp?426 zqRb2;sp;n5$?y#ciwLbcSOs>LC{x%?JNGeACZTY~4`Xi+u;c`sL7fbM6+-g4MoUdn zC#GHYmK8Xks9^sAt%1XzAJ}+1g6M!33;&ucB%c>3gg?Y=KDwm`-W$gLQ|AGWS6)R6 zyfgE6R|jNC{OSJ;lRpL~60qKY!E@i$y{+;C9PvuvuMtLz3K$lDQF}7~fWG{-RWKn` z?GNwO6%sl-qVB=p^9r8o{nki>0R9X71V;J4qYM1d-u>VPXj<9xo(2HbX-Bsx<&N5W zeFDhd>2$ItTgP^(3fi-8LjTZ3rdQnMVfpeyXUb#>4OL;a!t@rON)4@-N(s?RI-;;C z?{5KGnLjUyZZNNoK8b`>$HtqoE6lanEnVHsn+_BUKKC-d=HeNe8Wq#?f`W0RV?kwzLR+mL!u!Oj&B|{-x~VHWt6Tog@m;-h_JL9 z`*QM%TOCg}U7H7}7oK1BtqN5ULDrYH#McK2O*+jNZr{5@U8DvUji1>(Lo0p#cvqw% z>PCF@vCE;YSQSl&wcgbZ#L&(L!v^G?vzzxIRlf1Du@%P8j4w#}Yn>!Wu-T7# zhej=4u5+@2uBtK(O970J(N`M7GFG^>)DdnJQgof~gM)+JC(3cTPiGy~*RbZ6J3Kq- zE>qb%-yA!8oQIbGhSPk(n$nlzTTCcflVF*KI!k=Ij<7mAHS0)mP3a;n^b`_5lGaN| zmz1jH>Ey#|B`3O6>PH*utI;dgg@o5Ee!Xmy8{-nv$2H&S5ny zs})B`SzwTB$Ac#%<(~sib?UN<@QL`z5yfsEE$cJ%D^KG z&)m-mb+8*dRw%|ED|04C<0nN&{z46hM`Wql!9UTXK5@T_jo8ie(0Q7u{8{-9OXax= zm}GB_ci+>q$GX9+Gpn4Z)N(T=V7QK}d1y_qcnIzigCOqAwdI%*q2@-Bm+$-DlSU{%-8E%_}VHl9(FLv zYWJzegh2&!Rg>F)3h}DW;wg2h*AGU zQ|5*3G3;z2FfS(_##QqZ56hX8O3DoWS0uy{NOj@h)0ajO1bQHYFO>q}#;*7;Zxx23NcR{n(pTH%_K!*2eXhcVjIcX>n$GQ*X_tAFNG zVG#O?eXy9gT{BhvQ6eFH!=#*#q;T~nnihILuXP__v{-aV8Z^)h^OI3che$Q84lo}B zRny-1HmYs=Zw?!f4WIR7{HYVjCO(defbP(_c%v@qH(QXFZzNkg8>!~H{ z@qs5$W4UOvIHJE%I{btX{q~3A#OO(mjOAqU!mb)mpu!iFr37$AiHR~iIHiR79iHRt ztTH(FR161yB>TC%`kf=85=IOzOI{2~+n!2&nGze%0dAx&W)cD0p3Uedjt%gu0;N67 zV+($KH`eq%=`_CC#NQz)S;HGePs48&%^D&Nil9d(;bw8pWMDpK6t-p99})lA33j7q zg(9iHgMF}jm&YyK84(FP`NRPYtlK08pU$`h^k<{6`6noncf1--a|7q9eh>GdIOJhC zJ9Bz)Y0eI13g#Z@V_>ef_&C8;p1V3^otgu)$|W@0X|jB_712XnEm+@R{>spHo&{G% z5z(GCQ~nqoe6P@96qsZ+Kx!p6SgJK_CxkLrO=}fns!kT6i@vGe;r1G|{GE3shsP8M zSaqfxl$^6$MW1>ys$_>s{u<-0)t5;uGA-I0$LX(g1|E^Hg9V#ZG}jI=;~1*}YYo1= zj&v&NY?A&V!9oHT*3`3q^G*uCqrnzI8mECq20mQLXlPJGG)=EFN+MD|a6qm1fA&o# zfKSVza5~V{FUFM%^%{o{U=sB%c->$i+3Z7$aT)Zfcj>Sbie#aeQRme*sBHOek7gpJ za)z;$F#9SPIcvD;!=zT%B>yQPX#^Yviwi3gDHz2@)ZD8YT|pGe z{GKNtKpDhXQ)kmVmh6!U;2I7Soq>Th57O7q>r@e2=N58iB42r}oL<@tS(fK;pjWEr zc9HwyE_tf24b({?HXfPSY;l-LBv(}b71T|H~XHu~cG%TJ0FK~6d@kN&Qy9zMkM z1~DKf3;Q~p^qNlD2cng{~IcQ3PD}5rq;kDHN=ot&pwwFz1})=Vy2TK#4;=F zIn8L*3V;cQRLbJnq3pzH52f^<;3aQoD_WD!20UUWPa?6xw?pX<1UF4O{jeKmGK_|2GreDPEepO&I6(uFU_^g~%c<9@e~-^+7^;JD`)oJ>*$x=05Zf0hNZ`|L)Zzp!N-fK(_{S9Y|KAIR z(P97*m+%Y*XiIhuDRZX;E(>HtF6z%$?lOqqO3(g2)pIU`=F{Mk@|IrHDlsvd|Mx<85|F@qqn;M}r?tDuf1lickAzSnfLs&)7i@V4 zcefW&VX#3OunZGQm)}g zbJ(3w!Gn%5#OT|dpxCdKF*}FG%})G~wPOJrh6ZfzjL3n!O7fgb7AO+97v`dYyx^_wYOcP?q9((^ zK&}7Q`)6%q$6ZYH8ULy(%Pi~aj8|cGK1@Wz`VtF#+9y}#;OmwDJ#c!_KcAEJD)*}S zCO!*aEK+GGO7Q{s^r+X??W$vtp2E@8|1Ru#>qJxfqgc1JNsIS}tXD(lKES+)W1#F% zf6aXGR2pOx)@b^k(4h2sf{B{wyIC-`Emp54!f>GR``5SmNqFyX>;ty~1m?3&bFGTJ z$Xy&{>K3Xse$i9WLos3;t0yIPdjSjkTTZcMw3IX_(T#MA@@}(S!OFDn&Dp{Q7}Pj9 zU7tJlUa?K71I3nWlYpL2ta_SY(JE4POUnu~neKoNSu{I~5boad#ZpdE&Nb?|J}`X7 zMNJO-!v1y06Fh*}pMih4ef25SJ;K}7VceRzkZ1KykxVQlE&l|pY4)(tj*;>V%t!yy zOi3vR4>*)*Y(H3IipGQ3$j?_B{)mWTNbnwMSW!IVuHg5%^IO%zoXY&E>KA4$6@>?X zF!64p__T=`4^D&JZ2UD8Cc?MJ3rSaDIjXcGPjuGT5=lH%8GaSaIB;XgQoW0^6A+b7 zZa^No2V^72OxkV_kC`yh9YH4=5@@pk8tOnT5;;~ zHCzjUgdgi4={;+p2L{A$L>*zs-ZJcuiDFADjVL9;oa%_^`{+?HtuD3md>q+K#8#SE z(E1|T2I~}N)%;qgBTWAQoEv1T_L*FRZ(q9d1Tr9E=jkH?5c-7(EJgAX#!Up*hNO<= z7|4WczHfQfJp|63U617U1dV>?wN1P;AjuNOgS(_ZS4AxG9%kcx2u&!$o~C_SLMfjc zRF_@CNwqPqg`xezaUf`5FkBjQ3X7SiGmQ$Z;jJa^RJ^1tzcZ?>n9Pq%V%ZzI%9%Kp zSbN`JUWR*K`!+pLOD1SDpI0a`q!M4DHO$MBlp2M=8Zt=RYdGz zac%6?1d>$_uGIK>f{GqGI|zV^a8lNr>a0NFsTdWd9@kP_pwX-<;|Gd1pi$hbkj}uV z3O8QnRzn14fImJv6id~f^<>Oc_<0SCSJ-$&o^_m6T0?3-LYQ*fRyCl;qM_+L8G1U&u_*hFYa~54BK?M!JJlE|g-La{xp_^AX6K zrd1ZfEq7s{Ya_SYHz{`m&r;R>O0qvKSS;DEJAcInb?)l-H0#LI$ZGiG_JB?H#0nX1ALV}{06M)8*)nV>NT z5%Y$8zQb5aMpowtCX}9;luxP|=N>@!fJflBdon2e!FMx#8=Z+z#Jfkuu-zFeE+#c8 zL~h`Q{h^CbHB7-1l=_f*k048-*O*pC?a)kSOP(bjHaIPOe$alxyq59~PkbhAD8 zBUY3_$b1JWy8-D(b8Yc86je)x-CltTal@R&B0UX(!m{x;2H|Xp^fr4iKpph z7w?lY>P|jN-G%|O@mm#BTfM*{GmL#YnYA+A_9g1(+R-rX{3-sSB1U6LadHrNf-3lj z#1R{(MvSaC8qAA|7);OyZNJ#m6~@a^ zi_NFRL`ZAf2J0xzDZgV)eJ$bTF}NRco%xCwa!C#zyqhAYW|v4iPt}*0uP>Om%+A+$ zo!YBuVNVHB;A?A5sg7St!>A!$^UDvHU)+{FK(w_Fc{c7%iaCdob;yEi2YyE6E964*Q!v1H=v zaAh;!+vz7V<$PCxccO^szv!n_P&%eq#nhH>Eev-Os5||7YUy%3=Y+Cz^ZmQT_Ar>Q zD0LB4ZruHBN3ukoul1L=FK=UgZoI55wF|CABj1T{pLw{dj#h1{YWNWAO0z$6YJ>`w zcHfB1zHO;yYDt>kwzoym| z@;9&VF9R28psoC9=}aXz7frz*iWCuR*Wq?6KnCAh7v}rd7tDp^f>AK?lxPx2IQ#Q~ z%UCamux7d4!dUyc|0KZvJy6~KbRvq zs{`m3JDp7KwhtcF+sgbVzD0_i^LwQ%CeXGnRb=f)NL{-OiM;&8Ddve9xcRy?9#tK9Me752BBPZyBnKKZjRd z5rYJxM!}FZfpBpJ-uMwH_|P$SDgDwC$mmL|HlL^(b;G2h7uY+x6G6zYYhM2NJ=9+e z0!o^}4wRnZMIo_raS1+4VDIO1kK(;Z@Y~#rAT2Q@q<+*}jkf!g=~^ftdLpIg3D(=5 z%uB<&k+s3OZz}uM$3NG-(fq~AadQhD9M?DT`}9N=#xK`Mysn3i3mdK`$G(TLvr$6T zhOTrA!)s1gfl~nj1LYpiJ@X-aKezcQLe+9vR73Q-tVZPfN}B!IRdbt zQKs&ST4rl~>&IP>99IV0tVKxxgE|(}35X5|ttdDe=qJtN{-*U$hykJiC257=<=@|% zC}i3HUp&zwE5dJ;>fgJ-a|^^@zdp*}xQd_q#L$R;Wwiuy?yq6~-TO1vKgU3}@HscU^5Q?S@^i7v zs~I^gEG^mQF|c5-Esv4E@&f1ybyq8&>UQY8ySdQMesffSlNSlgv2aO={G3=_7BA=jP`jn+w&2yBb$wZ7U;hwm zb)HeuFzQ6tq!@7dVRp}g;;+!48SR)5de1y_UZ8aWey;wh=ftSKE+V;;)0^Vs~H zy1q?~gcJxtkOd;sAihIi7U->(EvRgzUl>%DjV*Ac`hRkscGC*4x7i_WxdZ0)KFZ~V z=*yX}wtmTSyD10rv-C0c4zkY)WYHdI+n1X#FJV8R-p>e+#9f(7mjC*qcct&8HO+?H zw_uqkt$7jY_LSOT12|9SNh@Py^r>71U0v8}1Ucm&HXDU8@X;qTio9iB3cWhjcKK}+ zLwnZDyAo0;)_85beLYN#c>nV?-q~1#uv6xU!kg0dUL7aB0PAMbPhRFOY*d44wu-6VvNF->7bz-=5J;HMkuI%v zjl2%oF;!Eio^(lSbbhwnG{ezeZ5ndaTbH~aIo*tPvtT-sZu@ixe*UxN%&n&suBN5s z?t+v24a?y{Q|Xw7`;w;dmo_Ae9pbPM7CW>rMw%=oW3A`6fK6rm5Q6p#Ndh0*CzwjDaF^Uldf&z+KQJuXUyh)LB+|CBmA@8K~R$1 z>Sa5#6$v&`!o~%#GzYBm%>7|zY2Cw@xTZy)&zDd>2|6*Rx;jPHgK}-2vWn$_mENry zrCSn>X5`q8SDTem+Y-JRMN3-vmE@_#h!EY5*mj+85P^G#Uj09+-a0OdsQVw^T~b0y zLQ+!c5)cqjx{;ElSGp09u2n=pLXmEf?xh=6Qo3Pj=?3YB-{9l(e7-;a;Kj@^XYQT3 z_kGSi_q@-66dwJ)IbFTMFH^!o8OPilk)HlE%y|DrFSWXLAZdt@ouFXM$ zSGxZgYo$ctsMz1uo&Bwufj~!j^YcDxE54~T<0kPjEg|Bl$5IxGNT}IPu1F+pY1Fmt z^?gxx55eq$Z)&+jfTXmp;33 z)p{;QR9T+g_DvAkTg#CU%r!Npp<}~_4xRjYy~lY@>VGj=Z#Yn;3~S8AfqEHoqfp}# zv|eb#STcHE&?yj59-^e+IP`$=ZWC0J@-C|6BR%p*QNMHn;XNv`hif_&tUO4{Sr-i= z5|~#KbAoZfEYJeVRtNfG4CcQdleYEmJUw$V`$|u@hAogu+p9XU)N{-TpY@A#fFo=t@0!&c3xsggPEi@kzPG?{E9-uwCQM-vY12 z2h0K}zmJcRW&RHwE^J&rHO2oK4_;2|GoXcC*L$VRmEiDLuFYWtu6p)`Tx5rs>317QLF=@e+i#FK!i3Zu8cXf3Q`04L4u#g*)7h0D&Y^2S}o;ALG^t)AG<8@IX`GIm(Zi{tE zfnr~C<)_(4)83B<68PWv`dkBZlMwSRc5wllhkZQJe<$Ei>cEPJ^+Y^=aPo&0vhHFgFF&i^07ac?W{1I~e9US8ez41tf=Ehs^)|vX_ zUhkbxB?wtpb^DxS+>(NTO=&7LL7 ztPEd3STv-0UWN}itQGD}b4gvxWF4EH&8r-rBINA^YnPuSMWDL(|!9J(#sJ%hyx%j(whhd1d#xdgYa*VZ3H{;3?R>Yu z_P=xP+38roKfVwKuaZgMnWE8TFqVZo1N8+f*y4YuI^getR(;O|9WqniMW}p`2dD?ea+af4+3EcA$>wVIYaDhY_LRK0|!UmNlj}d z9Xztb!81z#*bJ6E1)R%+dJt zbr`sw`k*zV|ETXZ6&eSAabV`wYJOK}x)(g01$@G7`5Xivzt1xO4w%J3#BfAM$n|Up z6n7C?lyfR=d>Z}43sZ;-d~YR&?D$5jAG`@3A19X-KVip3{Jm5x)^AjZ1%0GnLVU1ae2CB z^={-#pvSMle-@*oRyeA%LqS`(3rDkBme?fvXm*I#uVmn^AOHNIN5&pTnoeV&jtM_8 z0Am$#3*m6aW!P4Q)2N{pGO|Gmokqt8$3eK0smGu#{B(XBY(xS5yX!BYt-JwkZeS9e zXu}gQh)$T0B9iOky76`y8d3g#wclA!{QHQrB5ECS|Y)z!&6PUL~;gU2mi@M9rNl>Ck<1_cNyj)Q3Jfd4c? zM`>Jh{Y>1yKo&ize-YcykS4ZkE4)!mXpud<(h2yU*2?J3)!*@ra>wA0J7|QJt$i@( zboaTd&9_|ua>2j@TA3a7R3y@oiniacGH~!byUO1$ot-idpD3xT#QON-bL2Ol`WOyX z_m3C95$)R~&a(<7+Mz*06XUcO7yZ{?lJ^1b4n;!{I2Op$#$QIr`EDMk;9OisDqcT0 zKgzwn%oduywp@@|{w+q`kJ(OOQedVZQpmnj)pE_+mCJ-XG89^RuBooIqvZCy zHt{OCXny0YuCejDfu9!i!WJuDm+*}vq)3LRZ=ef!Jk%7HP#N2fIP>k8a(&Dihv2)aUy@Whu`}03RSiG$c=qRY5t*j|r#*szj zphK^SOcdX;8t+rV#uX)QXjef*h|oq+Ah*r5h1X~6^$hZ!jntBk5#4964>Af|CWms$ z+Y6DqZdnU)66PFrU(r!w{~6kd)?)ZiE_A5oSZP-m$x^tj7xx!~;vx!)S_6C3QvtEE zgQ_>4Zw@Y6vQIA;+BzqKw)URZI>olPTJC)jSpb77Jm9s!nBf414mpRxxe+v|-q*&jGx zOrW9m+&NE?>Z`7(6wvitIS=66>X-0(H=aNSf?58B6lM(6=xG0`A(F3`;hICXHAo4$6HsQr(!{uOc8P!^Mo+9#j{EmUO?|0fDWm7Jk-#( zGlKTpS%k3s;@c)#vGmcl?WiTb06Gd;kAA1G#O`WCB9Mt>_q51`uC~jNZ(;ro~bkalPpn9@Swawbo z_jfHEKKp$&t}c-`uf8+ zghDVaKfAZLxA#2se-X_Gb49X@@J`b z-OP+@cL83Pr_Je%D~ZsLxgPhdtEn;9+)=BzpU%K$(C;ZMl*%p`4T6o3A)2tde%s#&zX@IKe&{FZ5yK zGh=azn%UhdY+vpvAy99$Ql!Yn{5i7D^^5ie<}_$)EFf{IbF-t|uq93mDV|7GswFM= z&AoQPYP&(F$stpuULdzc<{`w+I523YPk2_Je_ux#o|0($kg;DgCCxi;6>vHNWd?u; zw3p&AynP5B-!k%C$B6f#mzHyRBMBE9x_14#wLLiiZ;W)-&0}T_Y6KN%+Kf@v*&Ba5 zDA=Rc)_{k14up5HW?h(>z$dkzAM8ZSc%3o>Py@n7C|e>u2>F3hi~=~Nv4k*!zV;C9 zM*Dpbzk8rqzwbpM_@o~b#b^xQ`0Vu?KjmJ*AF(wklP`Q$R9nrl&C(5*oeZ|SNTqmf z!)>)4eP>aK3{mckQO4#G)-ZJ>)TcOvC?^g0o@`qp8CZ}le6%pbnQ#>*Ts=ZzUTn)5BTT@d; zVgf|&-0TxY5?EcNICGm2a8qH{8n5U>>qo+Vl zbCpLN+Z@hT?Oyjlx!T_u`Zu!uCprrC@$F39LCxr-K?zrBkJHgqBk>_K(-N4)^+!y! zu;ctVSTNDa*#)!LgN}e_OUeeGK>Eyqxv^1R=$ms|MRJJ`W-ktPyF!MgDfhg>J)YW) zri$lO`VpoxRQ-?n?uH@21I1=Rn&}7i6vLIz$;l3K1+TGJZOL6yDFi=f6{;IT% z8@)~ZuG6Ump&0Rv<-KI6Byc%S5P4WhFa8@gpSHWF*X-T}{l9<#n-MF&S|c6Y>rWQs zD{m_=I-oAa@s=wPrwWlCXwn63Z zn?&#zTZmvU-rmhu_!bS!;NKnsHU|=V=imkbX2`2M^toGsfgXLmE8Y4ZO5}_G5D$UR z4|@N9JV*%69pn1WJOQCU_@6XD&Ydj+lF<2oMMWk5V=1GPz@Gn?dhiPFMDU+2jYo(( z_sQKV5d@4}W#@l1gh%lpQ&Q=_Z2+!ag@MP#s@(jT#VN=0&pprq)On6{a0ci_XplmH zd!qPUuTh(!B1E8ey}{4NIt`ChGTIPj7P+#MHPqC_!H9!pID>}rGf~XjeC`=tKDNv z^B%Q+mGf$Idp?o9z5YioVdM{9bYl04@u}zF4I)Ls?;#)yf_G*Ol=;kzVZuOtCJe_n zXC(EWJ&*>cSc5EFH}SGOuWhxM zAB;WDiajvT)XY;&X#KN?i^x$dy5IFdd)5czO5{%3qrW(<1+T;z;x18!8zw(L^)A)u z$tzh+!Ua|P%2XDNh6y)ixS8E=ZDvOru?s*mo9FMdk9C#+`u{BkWShkj35NqUh6(K@ zOyQmpeCSXQkJZSM+#fcbTp^LH$Zwzgb>L#|^|rc}hPcfDQy58#eaDIAVnB{drf+t? zT1ty4E6OWf{89lvc^%x%0TyhmG^(S>7f5=X?tFdRlsZC9z|5@!CBvcdn4aBrTR2jb zTQUmp)@rWQZ+>cgVX{{$Hds|TsD5F$)ut*yR^}5Yb>lRwHBvgEx1rL^!Y;Ly<(OoO z*3?VucHL^J;-{5YH`*Gw5bD^(xq2HnLDd&Q(y5hozl?*0Rt{G4tL}gLF zx6QE_PWeo$*JpAC-p#bXRVk6M#ZEQahlG&>r#Nr;HVE9`w`1g_OG<`?qnP(n z{FMSlYdtJ3`zIsZ4ec{rGP`MQNEiL4KZ*@*hMyJG)SS`9mOkroR_!*{TIzm)>iw>P zR*R>`TA}XVCv%!JmLlSvA(WY{z4?o(x@2@P(|fK!GY% zYbNeVZUcGKo4g)IN7br+52UmnM4`)Es4UwaDv16%vHFGy=hO@} zsYwd~&xnDPFBg*S_+&DHvCo(2vR}1rX@BztTwqg6DeP%dHFOVBC?hfBFGy&;_6~0E zM>K{(BOKNKV2q0&_gY}qSZBozuo0rYMrOse*L|^Gt(8v&pP!9SDHjzRixPXnn z-(1A*RWS6VQ*UoA9HhiN6bT`_G~7T9@^YrI{=ki+WPMJ)ps%e(+;pOGt9#8;&In z10ifJFxRL||Jp58_OQj!;@gGZp;7Xn8d|gciOfi}#->-PjDY#X8}V|$+RZgy3+Y8i z!6j-ttm_M*;Top(y?r_-H|kWjI(^F2aWNu&djKrFx)1IUfFUE$QHHGgALDuPD_1}T zZqd#h5E^Eb2jODup>1Aj7h`evV3pHhL zrb(w0k7dls>~0z@9Lgc=)UeYSFG4(?>z26eaAEJN^xB!N$eU7$tW`1c@$t%dZsczE#AAKJRi92wA@U%6M3YIAd2iUK*0Nuq0w?m&#<2l~ zN(W&iSC(azI~XVcj~;x1u-sONXyocl4d28bN#aiU2z)2N832y$r}ytT{h07>sWSMJ z>(zS3xb|hMX4>EeDSkps`*uKeV2wwMi?}gdL6=nUa49tXb`=w9?6sE3a~NbNfMlcf zb$iG9N^7lQgTT0vHCZ|kOw7 z(3Kw`UVxs2f|edgf5(GtfAlAcOK@%K!5sanT9y?&=o;O7+T}pLh}dO5h48;8tv9;? zMe&VVV0Lq@Vxoe@qo?yLT$UXLkX|ttx@0skooMF~Ph||Uohe25P8HRF0lXGm0>2jN zniJpWI=e`sdC1=rzGFde0Srzqa0e4LQilN1aU}iG{)DZVmS1noI_|Vg>BGwKH>TJ6fI0 zalxD~W;@=^Y}{6w>RLDaEVgf{1lS~J0ArJG2zVNg3u#=Vxb4qAbpKJ@5>19EW!)bq zKe%-4l?*rN5&7NE!Q-!1{9e}uHkCmN^LwVfc}#9e&mo1Cr|;6Wo4D9rpIkPb`@7xN zzff24K75eaMR=Ws#LONTvm=JR&zKdmq)o$x9CV4!h`6tv?2I{?=RL#oNbI%?HVB71ee^@vZ*Ubv{g_F^sOu;?p2 z8V#{%%rmit>|2f(h%It5VC|6zHC1G;GQe5W|v+xm68q&NLd0Jk$3#J zR73Qx2gbDA&TJjgiZp*{{l6!aKj<3>aQko;Jy-NY=&LFl4@GRH_xMn1JblsQoEXZ} zRA;$7q1KY+0^C^#UyEt0gssMR9zyM%?gayXG=ca(Y_FVw=NRR%I z2z}GiFCYI$wr$tKcs9mj+@arqc04&1gV!H!O?3Ei^QSWWp)zWl1L9wM*iXuqZ+bfGW;03`bsBW z9R5|3ExUrPJY_P!{i)Q{4wX6m_SOYc{j;2_;Y(ZFpIA~V6D4yG8?W?NQxn}MPDy<$ z65r#dW&i#egobt)XuP}nXDlz9uo=ip`Jxt`BIglgg$Nc{=}!z3n@5tXJ<*bt!;Lh) zTg(1ScyxO_2jLor>nWS`7ze*Dwem)d87X&fv@-Rmlic(;GSipg(*CPYha>? z=-FI$3rS!5;C2cZo~k+Q=`Yj}mJVzW50wVYOA5tK7&kzjrqyl@COsAkrz-TW*Jlmf z`;OB{-49Jge$6F$pK$^5=H>2Q!YfQL8Ln+4CkC`osjXU9A&mfWk3QCITWLK&g^e4z zoIhuzKQBLTUL`m_(R(WqKb_qvO8U=2O5(b9jV z0r)2L5H_td3@YGZ)MHN|LJ*K1Y-k$7=u@Dpd$(QtikQc)!?(5dI8H zIw0}`C>`90P7(DMgpP{CM^wfT^dx`|cP2gdTMUj@R7y&FFi|7sNpCdfJn9_e+Spzj z6_zB95TD<@io1_|PFL~s?X%aUstv{8!aGUiQl~GyWIz3=Zhg;6FwLbp<2|#71`daMe>ba-g8*sQvv2okWA{Z)C^@})M(JiY-IPcKW>9wd zl*7mm%|iWxtajHdtI|d*TO#wx(3V%jN^jCJNEa({m>zN;3-dPj36Y2^6M1L-efj0W|p z4);kergR*Wl6r{mh<@-3qPq-a)Suu**h8sgk`>C;n>srjr}h?73sWjh6T&cz?e;KE z<;;8{#7*XOZI7UU;p|l5AKmiLPfe62J7orlw1?e30=+adJu+cJG?k2dj)OU1zM~ND;Y)j6g|fwiU9!L>X5m7}Emi z*#od>M$Gbwubi?VpJW(^#bauks4@jAwY}@EkBqSVH_mTgd5&e+peu(*#Rqqi^S?&2 z3~#)9ffU&hG_l@MV9AWtSn6+!BW}8(Aw;P9@?Lxv2~!iM`f6xPS~PJ0P9mxOI+XZs zJ}dTT$j8U9B}L?o<_&L!0UJyNS-Ck%R5X_7{x{tORMwoz~F zZ>VAO%6iT%trzsABU*Ullw8q-B`2#I)9%%|W|DJK7@c4KBN&xr#S~0S?xz?TArF=q zDy*2h7n?|DZ%6Tjdyb_mWP(5Z_dPNw#$;ktm5SaD=y7$FnJ8Tk!{bI znTV%xa-!a~+2_DA=V$Xyn^aPf-`He0P+StgpwTbzQcS$x2y{D{;)Jim-+oc#m6~L| zGgnXS^5wVCjUh!?)5~f^9GXdRz^)aSG_WFKuu-3gvoft?NEWMvpXQXXX(9Q%I42Qa zaTb_MKk{lecXtdbFt>kODUEl2e&*}@y~Q+_31Sh|$6eoEeJOJKDPcZWrSPS|AXPw- zgUIoJS`iK}CE`cY-$RLIuqo-)@|7tCi>8WNcPZ4>3KhchCWJMUPu3p2PWMohk{ufi2^* zU(J+unquTb+anDng*_pWM1Q}D7ctK`91MIDd@89feel*%hIEmnw3$)x!-oK^Md|cu zl#z@Kcx&hotY1D$iq65_fPT6e-Dq)?NoULslrPuP!*yk{8w}3y+rlA21Y~Ti*l#Y^ zN*-gr=79BE^f);6oN}|uP3$!Fc~5oE$e8@6yOHpHX3F2M&YX;M7>3my!d`3WvBk|YoA^(6g(3e~Sa1_w1h!@Bs25$be5*}*{ z{HkfOFSr(z>BNX|B5w3pn+pWIsAgPXfmQPra;_jsx#>^RR%3L^JIdKvbBx08b0htN zZ)PpLGA0CRXMUdlwpvU1c&4(MsT#H94n%Ak&ox7c5T8)I8!@EWGY|h*(8^9{AZP{iD=is zIFXBjq~pdf~tz^^TaRgqpp~S1h5bq0?Cz_Nd|u z6TMl_&xeZ0;*Sy^D5Dh<3}aGKVor5@-Ifm=zSra@Itow2g+qwt+#CA$t}_4fmeWe% zr34hnPF!f3?o-kSJd@F-A=4?rV}F8UOW$nZ#P>4W6JK})@qgmnn$mLlD$Y8+mfW4W zrzzXH-QPumg`w&E8Ho>5AeWmdR;5mcDs9*UWuRc8C7a$ z6y>0uF~7(4U$2?T85dh-`DSc>@zXcvniw;7sL*ovtIPFNdpj0aTj!%z%&H-h$hs0F z+L?H9-7)ljGSs|;DPOZ+uDZH9qsQ%VWheKdx}lMJHkQa+D%(syZE9wAa`Jk(OOwv2 z5%RHM+hF3NB#gN*MA7T zx#4#pbw{%XBval)IVwmI!0&wipcnS&cd1JMLK$dO`HuMX?}Ex-D((L+K>y1jei4oy z#{FN~@u>9w-2pJg{@v<(?=D^GrZh5p+GFnSDLxkvS>pR}Jsc=kiUYSWDorr?Jot-O zD4_~7*7V3mD#6LsNK1>ye&qWco$TT;;|LEduKt^+0=HKsE3zIw?tYuyS$m%&WEjQ_ z-I-n_?Bb)9Yt9=}p0%*1rqXy_7)rku(Rboq)+pxYK=p{7!+bU`teY26EBop7C5?-8 zO|*2BiH$xDy(zTyXGbk(?Vs{@FV9KzDW6Gkyf_h5P7@RHTP z%G4wwuanDRlR- z#UTi&JJqYizVF3McA3NdW%FQ_Ak|Hrj9>5wIk#0^?A%zkCSu9FzN@mc$c7nK2u3?YM=#_omiLKqYBf@LO zhM;ZGWdvh^5@fo=*DP*|XZN$Wc4Vj`BaLj`W_}X|bjE2%J(&*q8s<-1uWrAvs~$97 zRW#zH_q$D_(ysr$s@`*KSnEUHa90QqafmcSWHANOir#{F0~f@T-ZcQ>Ir+m3EPo2x z1Tn!r77K=Atk1rWc2GBNa5OBsLwHViY`9HBo;Un{eDqV@PZdP<#0LE6DF^x}2=i*i z4~JKEY%5>%M83r0PD*sukGQ3y}3n|BKI_jnvpsLt+LCcRZx z2SHcg!b@*3bQm;XnQxG3%Y<8wF9>8lau^<)F8gC3yk6dWSVA}>f0daT~rFo+y(p3v^w_3;UfhpDSp~gJJ&6&kI&@O9ywMa*CdI}4as0y7U?s@Tt64p{dDg+P zXExo3#mKLIM~biID|Nt=Eg;`R#*b|Q}f zKc;KjOc+f7Rb_aQS{3P|D`!1&OM2?@b!#(Wc!2(HQplsjn1*%GV2;#l9j;h!*H$ta z(=9gx-wD2}Ah>E3c6|Xs)pOP!zFVXQ2`=^i3U{Pg6E}4aUs_=AJV!h0wbALGF+@YT zXJlm9&VucvFRo*Xuyr6jt)DXA_SW26jWMP(u4;0m>TIIHqwoZcOO*6I!XfU|b9U^j za>NR|cv6i?=r~Ra=d?ML%B%S7{W7$;tO?G)=t~AS7oLY!7!qECs&d2ezzGq`$+(&< z?D3kxzUw6}+vyXcpt5n~Mr0y|K}!``1-Ms8107Lu)bUHU4hK-(;f{Ul&<3BHrdu%+i-jYp%828}ymF1ziAycmja z7tb2Kmm&@~55e2x$6FJR?LkQ|P*na^0@ffqDi84$fWBV+WWfzSHk3qZbb^A&dJpmHa1R5L@5~Jn)3%k^1RcNt}a>bYfa5^RQ%3P}PT=`O|>nyS5 ziKyqRFBOFuX7yElK^U-`$ZTl^@{$bWD@@H}>y_awBfLt)z)Fatgf5bs~EJ2lK4QFdpBHunvr&cI#EuK;hA0~ z7&yD7;BaUgh{9)gx9i!k5A=nyX4@~li4*hZ#jFt&AW`f6*FQwz_zc7g;b!>IY67k zb9@3HX-2W%#>38*$LLDK!U@^-ep2;)GQHvX0^E;G;SMqCG(Z`ycdrA25Mm(xLv?~X zI6NAU$^NKlLYZTv64-oG6ai@6SfAn;Ra-KU@Rh5q1Ov3{mOyugeP zd*N8a5)buZr;>HhBgfL=8Fke^BQ=5cgHUKguXI4RXmi0&Qqg%{4_C)(+zU%kVrND{dpT49-=3<6P*D--ELrVQ|cUhK3dvF6T@=so<2H4D>5LeDSSUF z3VLD?;$2U}1lrp%EDn(V2&*d&l8@3}uz_0Ibe$`|9zl-}a|}$oW-&07m7eN!w3IQ7 z0wG?mGYyAgBBJeb+2LcZFeM0zkT56I_IX?)Dgh4@bh!AiVXSdG@7@7_ne1m+d(S#q z^X~DyWHwS>)1Y3uqv4O<{0UlED02hZQdLfR%HSFKnNYGMabIxfd|c|R*o(7*?iY(2 z3ax`l-OnBb>w-?M2EVC=-Jv4W@EDk)2u+s35C=X>4mx=Sp@3_QzKtPyLqKEMgUJla zk&{SIP2%PvLUvHE&67hA&S|T0neNmfZ`2%Uy{-a(raw4DgJzlKGHJy|z%h}FbwCwK zisU*2sWE)!msonjwY9$!WU)cEjH!5R2=>n+`9?%PTKG?hpy<48pw`XunTMb%s|FA= zyfi&Nj8bK9=^Aun!9I-NoJ*0%y}HJ2o2eWd@iR&nTAAA^b=PASYJrk+fk4Cu<%A?q zA=l+uK|r3^+=w29ebow8ftdAzxd7?6^XQe%_Z2dKEr*bI+Mtdn7?IL-)SydDuw9q} zNZ*;-p68aj*=zfmko_yKMGwkmJ5Umjz0q45L_;aV=-vhK!`C}wUmMTDF%bqcxE3^@ zKmIKH_3&deE*>aw64b$&H`??`r&deK6o(M0)M(KEJ^hD6U58SOFB=k%7kyTIPT#w z3hpM$0=;Z>Mbdh}G7$y2leyb#C8`CV$F9&_DWGRP%84>QEmYrnaGG9`pL+krH2K@d zAVzX&;thW=3@$ZK<>8!-5K)$Ci$#AT=8~MHujtMNf;D4+wkK3UZmmwK@eYRQNF2ZN z18q_s5r>3a94pzJrx+jd6KbengLAn=A3A5@izUaFp7jW6NF3Rv z-StQe6lzPs_ocS@RsI8m^*S{8&SlCu}S3T9yNQwE#6_m`|`ey&nkdnn!~7oH+j02peXBb|6W6EWQ!9T zr(`Ei>gOiJKv_Sl9UGNbJ>;{BPz(Z*KbhRO!5r>w`ptgP;-`7hr$ArPO`F~;TfsvL z!4X3?mpFyR7D8=oa+6*Af)U=Xl1YQJ?`~99w{vzzTOb&pHqXul*iIc!h5|o!aAZ;b z#B2PSQT$dp4J`~CbiDi&Kw%pY9<6Pc5fGX!zMA@Nr(=i)Id%JH@5+Bz{^D7x-Vb_s5ZuD_-xhG=oJv?TobCzeU`y@N$ zVzp2%?=5t^$(bMM708Pd77PdfVMY&Q@odca(5jPI_2h%bJLCd);sXT1Kp!D0WnT>! zrQ{^o-uDr{QC-1X?0#xw9RbNc?9N#(&W5irc3n(DUTfmsFQ{1cy8VEslC_i2gEmb5 zgr**w1S91!=|f1>Bj1-yZ_*;2&1$|FcT`b!aFnu$Ya-=wE~Akt-7{NHLC&x)WrO)Z zIPjIsN27!Y;wanHSuHfIL$;FZ z4~i3e46r@(!QQxN-#?V0fsHZMmB%V1r)|XWBz2M&tMs+!eiV0~5b#{+s32e0UWVOl z>tAc*V=WgyJu$J795GT*_jRCXdiTE^{wHe1)>xIgpqM2&0u#k>$F>ZM?J%39pG`n0=NL}D9tepaA< z{`0lBeZuC?qvIxPMPIswESGR>g?XN4*_pjR*&$610*(qQt9p2rUjy!3L^Uw56qz)r zDHt9ilYl{D@^V$T(sepmON_VtksyZhALN3|m2Av4SNWsQu4y5x`ef3Jq8FF_F17nT zg{-j02FP(=2S_%Q_SL609Pf%v$Ct~WpXeXxz2dPoH2)QEOjiEoN9DXt)r z-qeR&{XQqr^v@eOD{l<@?(q*!dw0iF>Se$9t-tZ1NT_>mB)&-bS++WPQPQ|&BebZo zDy;Tp0Hd$V=x~|UWz|R$%jzfH2inU~9D{>BHZ;wlK);bPI22?in7^N+hb8q>)x$TI zNF+b_y&@{gVUi(HOOnDM?=&O67`n{AU#pVk-c%{6OWfIoOl=;?$%Jq0IqdIrmRBqv zq^lr5?reOa9a*U6v|bOYfitHxGi`4E^kZewIpS;|i}-~=&DrjMzNwHGK1=<`#P00$ z>>gAKsCO^3)|p|%hePi%m)r27mT7a|nUJT9#PmCL(L0$U&80(HE`{rI{E00sBBn8vVKWosROWjd*=z|~>|WTE|XAZ7_04C1bBUr@Dq_M#@%)vJ~ zg|a%xvxA)cbWb#;rbIXL;d*n@ltcw}*|1(xO3YZ^^_MC!{nEmT<3H~&8gA=qSNc*h zAzk(p@*yR(cy2_p`+c2ktyN-D=Y4&8HHU|q@3o5NXH=INvOMQ4{TPh~IwkvDf+UlM zn(Zfz|gaNZQlof)*gYq3E1T$<$Zp$_w}x z&@+GVCHe3m+S`r48v#JS)xoWV(sv%(yPxltkWWn1pclx$M=#XS@qo;T|8Z@C;Hmd0 zRsqlHUsoy!Bu32h{I10J-K+tQhoPXuy|mttP+l zNztiL7mkQNa1DxLZ#UW5c4?H$vJ#1*b7t*(%($`i?Y0mosd5ySeJRA4bN=#l{LCd% zqs8mu?W6u@;dMRt43CbYMm079wq;$s5wXgT+5Ns~cKVR@*LeJZhAqV1Wi&hU!cdk& z$AkCK!%m;7cn?*bCS<#6-ZQmbJeGfknN*?pD!O#(e!)F8zOLdaB0HXJpGO_2nS_2` z#*#i9`kX~!?e6gw2m2&0zA97EycSgI;TYz8_mrD~o~H3Pdxd!Ki&MP|i=5C@zi+bw zPU&ZnQzz)7S*G{J3}JWe=xZ#$dl_dq=y+Rj@LOF5*g%E;>3{;V>@0?7AZbojik5B?+{x0J2=UZ3sv(Qn4_T!t95<*8J+-L0m#1KSIMdw1 zrLtF+leQQ?5B}2B6aG%tF76@wH>_RSQED&BE{eBVAOCI$=s=N(`xKx!DJ1nd2UyhH zE~QHH>fEm&k1YiU`Z3KR;i=3*g>#)LC$Fp+OU*{I6EwOscWzFQAe?-r6qlkau^c}1 z|8e!!0a0yV*zn8%(%m9b0@B?nEv3@U(A_0HDkUIDgOq@D4c#yX-Q6JFAl>jCy!XDp z_x<>5nAzv-T6^uiS3D1&;|LXME$qw7j3jm6M-4hCYh};OQXL((f%@OGJV!6dM_^Rz zE`6G|P82>FW4tRyH~H{S(5m6w=dgD zo~86lRVb`eSf6!g*G&$)I;vHaY9IGGpqY-4^-m7^Ucp=Z4812A`a^m4Mh@7and9mL zMJ3dtTIf0{6+w=~@Y)Q;9@ACEze~S98xjHlhNi{A=AZg!?OX?nJ@q{ca%!QtHQG0# zq|8k*l=#GcG%`upHXpEZ^5WJdzTRQpL-2I<)HraC52Zxn+{&iwHs?+}VW1>G7)HsZ zm1pQ3{zOxDs~-}Pse@d?k*uquH<;qW{)$sL)|*01>~#BTF>#9M&EgsQc!h1Zq)lZb ziCeMCXLS?7q~$On>!AsL{MY5 zPLpr%w-STfBY9I!|CC}W35`#@cy&rqm=e6b;M3jpJ0`kJGs13oSJKzv>f7$Js9CRC zT2C!z-TBz(p7`GO4cxoIh3V707;_VyM|?F3g})M?$hYbUHC1Jx^Q7(ylJj7F50^z? zbz?n;l)G?ae!)Yfz(#X1A*_xiUMlXwI8SVTQ>K@=Y+Mm&5;&BhPIWt9OE^ucu+f6% zu64=SGS%<~f#4Oq3hz1I}sNeWM&pZYw$SDw(kG4(Q zX-i{T{i7-@Kfm}&p~O7GB}L5alk<`~sMT$$-@1v5zRjnjLsSPs?S*&(nwVq{xnZD< z5>B1OEXAmF2#P3WWxslT((5sWXdbds66m`_!0auXzKn)z^1jBwN^3R;h9lEQCe&qkjI4e8?SMwXuPY&Gt+?~|vJ zDqUGDqOztk^^gs5Bb-%U#Fzv-jBmFe_5l`#iM4et=mv%0#jrZ> z=YOZt<~=x)8?XxJg2^`TICiOMK#%mi2U~+VXi_mml6>di6)!e>r7J^VpQHmeW(_7v zyZN9@F?-#=&x^WR(~{>5+$3?}k{;m|4b3ILXWx_FuCsk~0YMoKWH(U0B{x7pNEqam zU5!OfCo+WLU=QrFDuiVUJ#+Et>xBw$__J0P1~ae@)|9RG*mb(S9R9-UV*zAg1D9GP zv+bXnoN*3Z8ezg>%j*X6(B3j^C{tjyo0X4&7AJ9e{MeXs3~QR>v-jEkU3ca$7)4{I zzwG*Q5FwV8W}b{p3i)|1y&MAO^TF^9T%?~tII*G8OFT~yTFLeS9^x=Dfk^po)^5 zm;+)FZ-(@`5+HJN8*?{0boZ|NlN%lLh98Sg*?J_(jsYq1R=mI z6NV^ZzE#m;T!mJ?k6FI6-smSHx1D#P$7)P-e{!9(_tB->&ZqeXjN^H%3OR=8^j9(* zdMRnck1$TcMEIqg!$F+n2uZ>!nLc~;)(&|)4X%J}pXs#s4i*!M2_8Q2Jf z*9(`@=QMPze~-o3$gyFBX|hRpXO&Eyl3%!a2Wfq9UMaH23#F7v|Mr$a9E2I}IiPGp zE-B!gULp;P60?TB>_sP3Sm$ow1tIovZA%w19=bxaVd!3im2rGef z=GbHP>pqPd>ZsMRFCNND6TkbwTZqh?W4TSsvrdspp_DB)UWx)W^tIxNK*%IyDtMbP zq0j5ELuV3bgHhhnwiXqJsUG9d%j?;<6Iv{#soo%T0UOB$tWT{1?$+4 zZ_iG8>qe(Os5!u=)%^%=7Z0Y3VaG(I?LU6O9!81^5A3z=h=5ELo#|N31m)0>2AVW1 za$P~rBqbpXeoruoh90BOUPd7yKGQXh1en>A_M+@Xoob{V%f!KktGH$FEDN8{;Bzld z&FOG!^ow1lbX;|n`R>P@*|bbpxzWaXZf{~eMQ?O+2mSb6Nr$bZ3Obe-am$ldd95gR zo@lyYjc)S3OZ6x%X;P-M$B^5$(*;SVJ4Wr;z12ia?0>>ifD8zW9_adl9&|RsdB@(? z(uxL4N$XYnzB3aN@XUBE$6~+?WnT@lxEbvkKl1}2r8&Td0>iGBr6vJQ3?gEisWD#h zerK8|w6kxuEX7$b^)qub>yB#j#+}aHO${*c)FaBV-yZNRTe*10;9FnpuE~bu2G)UA z|4E4|ReV)w=ul1dge~`pNR$dVaC0h4ud(s<2sQw}V;0T*YJ=F0af<{@_SZEx$sil<2HkWXIg(eG-Q@wn#0uo>UTyGoI zv@?U>O7E~aS&G~rv5QvJmmltTbm9Th>lUPz^aQyhbzIKXiE5Em+mKt6V4 zsMzUx8=HV>l*j1+Le^n4s&YbiubxMU&*IgTK<=VZuWKc2RwCH!W6z(r*-I*_l7IO1 znFaTz2B*SwyY!F}D@WYe(?K>JWco-ljZ1RRwpzHV2^83YrAHz@`gT&t{G-MsWoL%9 z#iw>xr?pgrjXJ$r!*6zZvMgI`2Y!z&Nru&F|Jk!`vcZwcf(qYQKycEKLpH*QhE`;R z_~VY2d+xLCS|mjFr>isfKj|td!ZvQ`(0U?8YK``u>w0QNTfM^6Ptr@cP6I`s0xCw> z#nle((BqOeq$pYb$5vsWc zCabBX|7ngGOxlm`fE0Ie-kpw~w;?I`FF_(9D|%^~K4tNd*h1EnZ@-vO>>=4_Zo7(4O$SLNnKNJ;9ra2}ev4WC z*g&!gqWvMS|M|OXQ>=qt^-@#_L-;{;tzW;r2UA4fkXjgYw6HGIS&F~=8INE4zeggx9Yn2rPu;oX z|4zBOv{k^C+lug2mKn{0QMZYJ`9-U!T0jO{MGL0!ZqxQe%JOAU0#Q;U#qM+|i%b$IC1ZO~Lh=A-LP=Tn`o~G_vse49n8=)3k6#*J zjJ7f$iFfHn#4V#9S==jV9Dkzx`kF)wUrMPq-{dDg+dAWOZ7ZgJd0#G17Z4AnZJ++tg z8gl9tV;tS0g26h!0`e9H2;b9*96tG<(lYC{Op9)W*1^ zZR6JI>w9WwSHI2EDDbNEG+g?0)+EK`Htg*q9Q{nG)aFX!(_c5&!@dC8z2BYhx24qw zFoMTZ9%mU-M@X67{19Z2K`mbibEae`aHm1yCL|0&miKvN6_bniS=VBNZZ&qzA7`<+ zVIxOXS5s?u>d;4h>)t6&Mny9{g#9RgJ8dR~0s}sME$Z!e^{F;h_(W2z@Vo`c82clJ zLRLo&X_J1q5&ri5heYoo<^0L>hm;p;1n|-MGsq0*p9GKJ|5vIyDkdjjoB5lCflaS0V^xo&W#yN=hDxssE;#BVIuImN5Q(7bm#G?cWp=RE+<QK81@gjbvxhj_Ji0_g>RcI_{7uw?9dHT$WG&s5Z z`);il$OHsHsQJ>Y01HxySN*7}cOA%$;e*2gj(K2=5iryrkRJd&fkIA4tw{Dwm^6)P z0BJD-6&?P{0LbNsdr?9uX>9-fjuSu}IwOYGOxMRWq=`|@k}~g4&+B%2*bP+dT&ctL z7S0QY4Rd?~8}DvoMcTxhBCz3Z+PZBnOP-WgF52lCo55h;vL;u(z1eMl*|ytVpH#|v z$4gDH*1j^2Hs!pKMFXQ-=i)C94*n2YW7gHVZS{e|bj?>!1-x3xp%ir3U0X2?cWo&* zNng51^HVMx{B77}*pmzPT-GZIlZVfGCGPG?RRJU!Y8vpFd}0>r86lK$LCt@8q!_Qs zGm~t~M)}Omfks1L)W<2hrT+QcbaW^3RGfF`y%1a3*vvaMx!bE0yxv-iY-XA1*DY6zkIwc6ifX5nnWr-eET`0w_C|@x)ZXF`!|}J zu4Im&g0YY*KFYuZd#$@G1iewzrKhfnblKJL6a;!k{{R;;B@gqk zmu2+`{$?(uF}{}9hy#zI!pdJCiMqL{r*10VR&j15rCoHd<&dVr;w)@&?>S11cch+X z<;$n9^Q_QGm^ScCP~7+5kM1_QlMA;k zR#af8$NUmSv~0$iU7v?M;u2`qHswun83$Csc>yZpgTHt`FX#`>ZIhvMZm_r^*3X70 zq*%wbwV(EzTC=~94b6twFNyB-8sgeY45!OOScONlk*AzZYnKd5o6e&Y8wh^%(d!@d zy}aEszF*e>KtKryp}_J!!-rO)$yhDl3-a-_*ux6RO>q}GE!R6!_TqdA)gEfMWG|@k znCxCuP3<;3N=-*9;i#Laq}Qstu8f0cOUHmccLWW^(xOPAS^rh5qfV88_lg3X80)d# ze_J&3;Stbhtp|V&cr-{~^Hhq^a1?{h#M0*yoT#+JV$AH&!@wL;7p`~sgJ|3}9{}M& zEwa-@nwO+ImXiznQ3hskd%0=WKsl3QE95b`Ttg@jAH1NZeK7e*$9f|M6cKf@177z( zppv9U^z1l@qQ6-}e&`?R1E2XWBO>j+ZlZHR5~Sq9t+g4XUiaKcP_?@^yckiyv<6weM^GoC9^Lk@mwwHM5Z2sW#TU_x!!+ z4-KP+-1U{yR`)e+P;U@x(vH zx~QCaelxy-m>=OIWzcZe+Hj0;E79;m=i2qHI1B;lTPR!2hc{nUl-mxuPg>7n`(igO zWR2r5H@-eCcSpec|aJtSFPqroH6j0pv<)INoO ziT5!|RLP9YptUSA;XC2LTGP0}>dzk=D|W(#=icaPPzvy~_=}=RAimu3G@5p8cE4r8 z;K$5MITG^FRHae`1`H*+?N|XOD}PlBa%t}D;1DB{@AHj5H2n~ zJ3>lC0PM*Y?SU^aasd*F%gkt|MLa#OMA#0<)LP7xN!_;r!GvvYWe?jc+5^GuE(_vY zwO%uAxnlMz+l>Il1uhYLfxxYmw#Q8kSTk`oWc_+)y%wadJ!FK&N$2pzDpo*ZU{bwp z`;5*dm3{5@1Jf2dbRBQqm9=#9^)iID+KmwU&OccGF%`7um<7^Th_$ycu%{%^1-g#; zt9le+T&P%6oor!)Nk-(NDK8a?iTN(es>X2HYv~ExqUjxX{jUVC_$I(GJ2 zd}yvg>bzR<=0LFbM=)lAQYY<4R{P&yoSx25Y&05-9D!`JN_P@i^uvHGkrW zuzajz{k#&7u>!n)Ao>`Z6{963;^cr0-$@3!>8&qbdbZRJaw7tk41jeSOYm^o*`-4~ z$>-cmkBYigGU!!onO;20WA8c3zx&#HvFzW5CZ5vE&eRrc|JBuj6TMZVh$AuP zRf7C!d(O=aj>CMD=;Zde{D&Wyvx~y<$>~nyTN=MaJ?sUHnddG4DBS;991L9kSMLD; zuz+4TV?41o4_rDe1#7*%otPh*uyPWcn)eJKpScWE=ly$3xfuYT&GHY)&j1|KlFN|D z2cqJ?_*{YtFrkNo1?K~L(C@!TFW4&Tly_6hmADs>=J6T+aLD_7^MFDpX$tvEyYP@& zheH6x0d~xPj(LR8l7G{OA5KIMFho==2ytM3fPa5$pADSmekzGx5lx6YMn0=1-c4-& zTyQ!vHR0GSpz@~VmI93L>qFy zZahBW`}VK%>MP)|B$5HK7s4#ig;*qbu0zlk_%G$nvkx@WU&)O2o%7s?-W9$)Iu#?1 z;-V}E$SFV|URLPyA7Df-9_Im}lkPPe4bs}3EYbBRnc_IcSBjk+XobgHcxJ3K7x!T- z+FwqN1qYtVpJF>jSMVCKJv?vy8u1!nw^X8qihUCuKKV*JIljecZd&Vhv8PKnyls~G zxf~!?agfd9V}FC*q4(wZxL*A^(efzg|0h8xzwh6hLg?WzmFln6L2(;!;!GTm=J47ZlU{0Wnc z5D)JIJtpNOS_1vvz=KP$*I!^l9{uBr1)Mu*Wd4=hF^VmLV+-tamQ^h+aT!<=RAdVC zF3jp)P2Wb(P8ev~v_Exhi8V<~99rJ1-d{raS)Te_Y>p%D=9!1nAp9q-PWIWn864fO z#%(Lgx85^Vk&mB>I!s4x@Yj|{oMpAD*j&6-Q_2WmuPoz89b_|7M&xz!G+atJh5a-% zG(PQ$^ESjS>=nS3=O^fXzsXQuK8$er_B)qqgHJr0-|${xYgleyvQ0}CF{8DDzxOlI zcTm9NL-hK`7Hl>z=Vn{E`nrt>^VkSm1@)_^x$khl@biQVJfv`d{?7gvR_HWNPB;y| zzV|%6xwEw-|Gm6Tptg2Wrn@_Oz{)nyH^*iRbY1O9avF}+(>BBGL(k~pCvI}ZtKu{* zH;=xjxY@Vd6bb~DbahfahSX-4iF3;S+&J#nyv(rC)#Y^LmnR>+kBiyhmoe#hGTMwX z%^H4mpdP7`GH5dwD3yiR=FR-NTmpMv@a16>nVIX8@`%Vn+oNJGk8~9^J?Iw9 zdcE$~$2UIF6)~wU-kR6D%+Pn)K5qwBCOi;m{gxWnIn$)-dz3kper$TjHz)DJ?_|v$ z`iETd>_J#1d5}w#(E55w&FI0YI?Ijmu@HU*d*`j`-JP8sIQmq{-jPF+wRHcz5f^vZwH*ZxdZ+Nqt&k9R7`FXq2Es{ zi;!8nbs`sk&}u&cXqN4j8-k5ja2YWTMqIN8I`P{aLPuCcuQGD2DxjjK7*p@Yn3#fn zr2r%63U6Ca)I2il7c*9M1=r{q&z)-xM+y=yl#+zSB-P#i%Wy@+M6ho^y|>j?sv;ul z7gVN+_<;7IZ;%jxX;6g-uHq=d;gfJn29fI;Va=tKLJaJVv z4w`SL#Pot;E{l(|aZ%A44#GTV?@q!AIHfY2M#>F_Dw%(r1`XEft;{B3lGT0oDAaRd zf~Fm&x__DN&6Y;|@C0Kv$Sf?apGK(-)-NfziN2M*(WJzn8P&{I!5}mHNRp+`V~{8p z1VhI@8Ir!kcgC2~-1jhzUV~?O?KktFM0$}VrEr%=j(4c+d=6YdE23DpVEDu5FxoXl4Asv4gXX;;gS?rclJgb;q}AUmzS zQv>q;hDVXj_!K<2gr+6hIm3m9uP7mB!HSGM|b6Z)u5uDEx$fyF;T$H;AoPTo8E?Bb3Fq(l`aSH>s8P7?9%9Ou;iW5qX5x*c()umVpW(6y*d7zoDv@QBG3>m%yfDKc|BmBCQ#!%`52(P0e0!Xv&e(In`og<52mo!K``g^3tLiW z0EB(pT^!7PA{|-|RPZKjjASEr=ob$fojTao8J}tXwn3V1Vg6T5=OH|J_1H5mGHHa| z*qUaCxDZO;)0+zjWZh7GtInLl$-qKRRh1owLR%A0MfRUS13XUU7sy{fLe82J+!b$; zfL^mHbsftgm*`s#JTbG2f~mYzDpW_*3p(s37nn~(u_|)Zq2$DIuhEYcSd+rNLtzPO z7M|b;E)wn!p&ZoExyD*qA^Ak3#8;gKr{i*e11x}z8S)4bO$0ab{!BlPQc{isW{K!1 zXY((m?AJs*?e+c~RncAfBrwnktkmP7MN=i&{eTjK!%Uy{CSF}0?IgE4LPM_v zVT+N>xU7f5Wtux;YeLF-h|-zD-0@vg+2-p7d+0w|mXHu2lk$cWOu>6n7+6>Y!`3KS zDWZW!S&L01_KasYpifQW=%W3?R}r3G_afn}C_Efhdxue>>Dt|=T8t9qI@@R|F&w+( zNyxALuAc&hR91^sO&UQ`I?#h`|BJc*O(?8z=8{cAL!Xz~%eqp7?r#JG4AvkS14jCa z4w;bcB1p<`teC8ryP0C*af&pI0fr^Yy6)m*6JJgP+7$ZzuJ1Czrx8ycCM^|&rt&XTJEiHvN!E&XSZkW9i)1Dg+GskL=3Y%>uGePIHO|$GW z)?$K`%(+%LD`rQ8i}E8h@)}ohpq)jlO$FW(0lb}N8!}ex5E4yYY-RkYI=~4Qjac^CaZ_ zaB0U6W;q=vsovLN0cI+2RPrSPnRb>TIHGl;FVq6t_n$mnup2Sw!>|(~E9(vvtG?M< zjwyx>8_~Zp)71v=)M4sa@H#>X1H7*hL3DavN$IHcU|$Ihw#T{A=JgpoO)w8VGshK( zRxc9}9g@;oop9=sCNGr1$eE8RsP2cq{Me2(|4Sn;bE5TF^%v@w21Rm3F1aC_5oEd4 z(m_%&hb_?1R)Vba@;~>$7Vo*zKVkc0E;9XKBY1tzH^53g)=#h(+Yob#+AMRtJxmk9 z9x1OiAD(thVZ(Ey+`(9nRNkOdNqJxvP?Knjtij`Eb;Ie<5 zFqOWJ2O$xm+I{<{onlPC-&^iAT>hX)=m71U6P zyeo(neHqm+1MqBQuJ45!sQWgfF(SLIEzMagDg${$0@eJ_a%6Uh{Aa*Bpye`&dr}!|-XBZEIk1(7@;@2EzFT2n{`R-s|_cow1WvQ!n!@MhIg`~EI z6*qj8Jav~P&pX@aaaCRDGPQ{3&6&6dILZW`Hh;!;6OMkKu47~1b;mS9sCufucmV*n z>}tD1H~lyEd5%X``~LLweE(ek#sDFTy669M(n>fW;`X%J{4&~8D=ua1a4yT+q*@}~ z`}$HlL69qwOZcpTB`(rYJ=0{@!i`)Gm6G>a(t5j)S<1+$W}q!&6YHUovtJF3r{ylu z#7%1W(;6agRjW_#>u;5w?O?COkNg~0?y2V(G5LvB9Cv`(=0=7ZwJkM)HCnITla5uaMu?Zu)R$&OHn-AlkpF*r4+4*>AR9?J(C2F~_M&z}(a|G4fma>qm%oiZcY9{NMa`D`PAC;}Ik>)VNor$H z0-znS-g-&R^%t#OeZ9_+tKuph>(6;hYH5A}BY~59oF}j^c}q)6e;un&4@s6YCetpA zoJqCdobWBE+#M3?i0ZE=GBaELjQ&C^OR7XE&F=XRtD3!MN8xpNmW>ALi)13`#$9&H z)>j*mr=sCq=4#I~qPa4+3}5a`7?lhB;x_uOBoAR$n%B+GJDXmBXRS!_t?$goFUl3RBe3 z%=+x=y;>~)lnF@fk2RaO$;CZoOi;GDmlLEx&l?PX7(P=8x>4PVI6FJ5H2|-4@ZE-N z=<~9LF)s3w5W@wd9s7vk_(n5onXba@P^ww)9pR5ht)k!^29ihN7*py2`L6_%)9UO< z$dgE}zrj>=bL8V;DtOC2ofN;-2p!x%VCq!=(kc!$z#@YQ zRAdfQ4WC9a`mH4!05W*0-k6}wK-d5w`F%Iie%z8k${(!pZLyV|8M+}V9LEBEVWcPA zy_(ZrkJNtA84XS@sVS=uXI10Vgk(0k1R~Y_h(54}BTmUQwC8Q(Q?1fN> z{N0mv8-d)?IUi9yM174Y3I8wIEi5MId&$(-htKTQbZhx&pX<-o2^%vN008zP)O%CjSoBuMg~Y3d06)+WV{%fi~A~ zjYJ1sEsyWq26lybeo+YkE$E$WNUIdapNKaW>Q4pFt~~WB!m4UJ3A7j@f;XG2U-{6m za;Ci=b-i491V|O^2nA~pjD#Qor_z|u$F7d>uvz4#M8q>el^lyu`lJFp9Mu3^4d#X? zd%0!tJnOUUr!^V+Dm`BYIBVGgjJa!C6w!1lGi<>-P*xhoj`||^;bjN|sfeq#?n+xD z8AXzSBP*2DlyEE~%_A14n#1v1uFo2Jvd6PL^RkZPXBN|}71yCVLA9hTjziw^^ zIt>9t+7XuqtMwDa>`?Y486@_ksic~(nT?{#T@lMbnwBwEw@`7C<Yc8vk`QFw2k;3NMs>7tKpiSC=xUJmP;Zzgew_@nd$o%)=xd5;%)?0+!f#3 zM`Gxp6lxNao6_otl7!JYa`>0eLOY%Yrr4%sur(YvN-EM8yMB(|Zi)xs9FWE{D8LK@ z;zvs!dMq{5bjnaXzjykZm!IiYMjQM}|+TF6Z9tGkvRlLOiGh$A4Nk#Eg!G*r4;4d|LVZWg{rN z72cW$f-1~oUiwcspzB;dfQ6>z@k>if2b@g3s+uwvV+}H}K1Q`_io(F!x49?)CF)AV zq^0zg75dCFRXawqf9X#R0nMJT8(ehsn90RT*9$o}8GND#mK(XsVP9buCrVxh0F>9G zIx!!}*-R#5YWUmtur<}=9eYuGy>f-#)Q53;E{#A2ZlEz}$(!|glP^k(?8Odw;oL>y zc51qgTPrQFZ#SQ{QMjm~^F~93)?mBiFZZTJ)Q|d0+`)E7`#p!*)}0v1-osjHuy#w8 z^dFbDEFfLa{*PtQV-x?Ijxi=Ie9qM5izLUygfvqW`%XeQlRC<9;L1TPN{QH?XS3@X zxy-?D_S(ea>7eH)y^OlxUUGv~IfUo?V?>gE*CJGFXN~!RC z1DGKUzuI#nRr^zUYb)w^UASZr3kBJP6%HvS>{194{~SFIB}8Ob!gDBY?#-rHces3W&R(S#zsPBQoc$lrS1JKc?PUBEm%aW?dKN1Q@j9^STMIFB) zhvfM!XYlH}e7N)&0vNkp)p|atEUKy!!Q;gZKChuop{RGlwLivCa>ZGh()9VR;rJ)! z&LtV`IwE8)f-as%6LX5xcYT8OE2KoGirxRb0MYWB1AnA<{>;&b>(2;S5sF-4A-B|wMIb!vU%9s z0pe5J^gk%OrI|FBxex}K%;HB0QldjmcvN&y=5Y5Z_O%^Tz~V5Yn#rn!An4Fmt7SD& zyt?Dwr6&!6+n-Mzz2RF3O>EYD7+dqyLa87W6xNu8TqyA`<==%7B%Fa?M)jJ4GMqdj zA8re288846FiZw8h+P8|PC+=R{uzHxb1G;w5PkawgR)$ZvpJ&HO&4HT`Oh=TzP!`G zV%axG+0`6E{)w{Na(#a)-&l4RH1k_|@25RS(dm2BU}SrX)t6bk4MA*;+BHtQrf+&= z)hk=MiJ766A4+83M8aBJ<~znCl4dQ?rv_S8N7Yplo~bZYLC$=KkdF)I&ZVI|MYBB~ z{=0e_dTUSbtZzy<&i zXraJDLnA{75yFkrjrXfNWL84V64k{#PrrE@@SfR|bqmu%dy4F9-Wnr>Yiny4LeZuQ znD@CFw;#U_fU-S@*3B0i2VqVP=Je~Ii!HkOroNq9xf)|LM$DOPceY<=Y*1!FJabG8 z%AM3-4Y~LG{}A!rZ+q1u@2Xk6zkRK9yzR6Esnu6k=h1>LOstI^?O-l{r_!?3NVfLL ztt{H%Y@uR?Dh~gxKjWKPp%M+m^S9?jYeQmuw?hi+bLjb8v2h5d&h@&v?XTk&<{F-( z&%V-I-x#6$oU?`%N-PmoG={iE>513B`g%nCZ^O9CdXe&0eUq;DTl%@`ko=u!Ac;Kn zKZxN*=SDS0nwE3uJGZUb7B+}SRbvb`-duGhur(Do&6&Mg*}1eN?#sVdJ3&ow4hF5H z3?%P0#q-(l!}D9_FcjpHelGHNV6ZxGC|a_%#-Y}Z3nXs}la#YJt+q+Nw$5s$6~-rC z#bzsw()Zfx>28QvWYf=IDskAp+cxzue^(THVJ!s&5i^!~qFuYs?Q#GBG{{H+J3?0G zBBzBKy=gZux+Mc2*NKWVLlZ+8SdMa9%Gm?ACY3vCFIY+r@Y_DfrrQ?K84JJ9JA0kM z@05G}RM8uc0ow2(6-~#pq`P|Y2S##_W1l|Rdd3V^x+Sp=Pktf_1UOhY7ySiVi$R;( zbn=jsGMc7rl4)Kb$|`rL@kwBWF8gr04U)o}TXBuq*7k0icz;=I7 zN@j@Rj411SqwXWgh{n3q@u7nbtaT65rA2vxyq;AOqdLe$EFFQ}dS!AzmA@L+^Yqy* z?4zSFSU;dSO|%dpgv1lD6H7hyrZPtFcHB1af>f-Mu#~g`l_2&Chwve)R+2^f+X2*m zZg|A;cFPx}noE}+j48NYmFG)MeNpcEA$-nYl@!r}3fD#I1D=3p@3C+_*Td~|%SM&AUrIsyeI|+o(0!DJn zU@iV!0q2>&3op_$kMwS*Jy$B!N=nlPoNT~$Eh2ZcL)9*T?=7z4aNw=<_ewtw!or^S zb=q8)G!<|H14X{+)Ty)*(R6QLc=K0?OzoKO=ioSY4@&ERy7D#G-x?kV&;@3eH#Jpb z#RH|Q?&9_f&79SrFJ4JA_7#66A#l0>FCX3Ca)rF#X zb%J2Go3E$1pb974ptX;HX)U;FKPTyo!oCvLGuCYP|yub2jGj|U`_?Ch|XS^XcE)z zKEK_*FN3iu3W>Jx^C#%n-L+9etA0j=Qsuk$$^sSwV4=z36?+zZXaiZWoE+ zd=m73=1EzZLHUVdV3=%aI=l}@sBkT=8MevV_2iRf%et-cE@)*Ft@YkLsY5vgOf2~Qh|L>y! zitfKpgds&2GS92{lBNx@cu0XSTgY7u?3CfOVA3ER^tcDl_Kdw zyKa<##5^Y4!LPIJeJ!7>7O{FgTcLk{CgOa7j73cg_C49Om)Nb~V;Z#@I;ianN}G>S zQze;}mPIiJD7*kKzYPE#3Y2Tw5xlj!w#kfl73KyPEBEddEeq?!a<_YN0i~!PaQ4Eq z5c`>jowv|URv&CqP8XZp$}XG*h0Bizra%!%MC4yQ%{E!YKnMh)CHmKBMh%??{9j>@ zBoTjm3sd-eR5E^nSgxrlUD)ZYsmW|N+QX*#BGA~h*!pKcU@kyQLVI@AIM8J)T3{UI z>h5mn=zB(i!dQuuRUR&CdGboC9pBHL&ToZ9r+hZcvX#yqdPLSeAe z7K*OEgD-?to^bl|%i!6&>sWD<1(Xpx3q@h@TWAw zPc~}(^9u*INU|4h^B3PJSEn4GpT?+5?0Zz`s;gJM{(4Pfb1C8LH9^>(2yzxxjIvS? zjbxa#d%NjQcTL+vTgv*KTAyx+hWaa-jAt0ZD)`-Jve9P@gxLoSf`=cIyYhdt^lhZ{ z=@vCMeUp7-PX-VamiZUiHEl|AAeC}hSYH2tS3@3MeGnAg< zmo&cB=D-1-C1EpsYu)Vtv#ID_V$6q?pHcu!qRr$aNQVT19Y2Kv@iCS7P<0!yR#7Jn z4gZ|L8+>*yaNay~42lWO_UXuMV>7e+?3}A~&I{D3YdYM@ZB(5o_EOclt~un3q_R@& zt3^9L$KW@F(v*8@+hsm3Zw0Uya?4({Oy^;9?(KU_m+2Qt)XY>;K@Ek+*cC48_RCzI zn(J)E4N_QN8M0Stk3F;m^boc4u0#UK(ovM?j0p~*$pE;IsQT+Q!`K8`twL0!`YvbV z&jU9|TFqe|%*0eL*%r?iar2UjQ`r$`p7W1pL%ni%`o-pJ3VHf5Ih*{I3qSq@*A{zO z+Lga4Ouoz4r4oH>_{jP&vTx%Xe%G1(t8H>YwfNe~v=rIFo3T(&nYW5}g0OsGe znl720wWc0@;4YJdp_Ic8X)S*fK}uetanV`C;Jq@i3ZAbHBR(Sm4ibAjN`aeV0E12{ z#a*J=S^#sQQa8~|-N)5=?}D+P%D%eC;^LKYZ=Y%Sjo(|YIm711zt=i8V4uE?eTY;- z*0D?ih?UdiVBH&M3qPf3LJVQD^ULBiKD%_LOgx>qoR=2u{YutlersDK$0SZOAGzgj zyYVf4$0k~dd+3(*ik~F-;p%));|oP9Vc4T74|-buHu^n26wo@L6<}yekf$P5iy7QP zO`NC^A$!QDHBzE2d%ov{;5?D-ER}428wT1)U(DHE88UfP9pCNBsi1TPadN1`ooMJg z&}io+e3MInzl>>I^+ESScJ=G1xv|BZAA=bLPA+QjXvopvY&6UcA!1^8@J1qqw7m&YK^qp>N$`hD!6+g5SoVdN7rXDmP?^G6$u~;@z;e83i;o?Sa4u+`$$m zNrF_ubb4e_EQQ8pRrWp?HMxxUjrkxAsy#@3m48TrndU4@tEvxk9_*Ju*F1h>b-wvFaoOft}EzBF|fm@=I2wEv0md{hU`n?Jw zz|I5KT0_-2bT-!9gGE&n@RXtL@Hct=spZfR{q1l^FCo#k*9l?G+vmVq?`}rP9rF;& z;6E@NAotDNGS9Woa~zKALhhJ02+5FZpFm4(T)at#;k-YHp*il6n}$ z4zCFgIXbVv@!D9DIDLQHwzj|NKhX780?0Y3MZgmRzg6ruWs@5Eh!X-}-n5SVKF37K zow#sPVT7st)32h$P`SCAjSu95Wf!AFGfQ3&<^5f6yH3(vcMelewKPD^cC+Xw$KZg#K5~G`4(}n7(3}xrZa7Aw87)!nSBi)G9?Xx&e5lQyT&46wf8msS zx(vzwuIpCd;^6#o+MjHu!ybRP!zfDjrah{BlqqQ@Qi@U5FR7>!xYOg4^X^9rt!HQD zs8J-Z+V$J?=_?M1X9m8^W_S4BR~b~lBwbvO1j6+v5*~@)hj-bq)iT3(6>dwY_D# z%ItEARcUPAkUygD-VcQft4K25vDknm;H4fE@7*!uoY$ zKrj;vZhT+UIY(#II!86fN(N0&(eCMg?aQSK2PCf(>mlDkl?lNdTp%vk4boR*&WJ1J z>9t=Tx=sY-9RaWn>0-e@{YZRD^TXoE98zN9U9ck?Fc*ltE1*=O(mZ7}AQ}intO6^8 znDciDN^+|4O08%XX!g*Ns!uWSvW``}Z{-F9xLVACRsafAB8Yu+{l!bAt9XhUw#&FE#?3 zS`5SiWeK$AW|J8H6u<0ZE7LI-uUzOI(4ZR=a0hD`!U+?;P!yYazqJk8Sw{xC^d}UB zjKlO%fIjS&;BU+*E*8A^Zv-juexNP&DENYfpkiNfl20e1_ZrYgb<%PszbB{Wk6dkY z=!tA&E2)XT#K>kfbam{lPHJZ9tJmpCXEpu=pD}4{iJt^ZomEt#X6Z5Y)@I1A^IPtc zHvCi{-cCv={NVr8f3yo7=*I6zlqreikf(wvAQqyGr#x4i;`#oIq^H_L!CEXbn)5Kq z@y2qN^_%igkD~ed3L2SS>>TAlUA7_%>fVenc%bC0uTx8DXZX#}TMF>{4C0!LT^F7uUUV+9pfkv79$u}9|Q{gptV?` z08h}$ye%1<^-~N}u(Oj1OS(JU-v-&OU;&fhJOO!Nrinv?YthVMhaSYL51xNRnbN0} zUs-qjE+v6*ciO_$cdVLo5#ya~+;)Hw18euV@8NL4T})d4Av!@pSA$I^-3x(22~AG} z0~0f#^*~PJ%ni;{Vm=u!=MY0kN%c{7Ny4y`pB6hO)w}Cx&I;}9+$IU2W`KLip!$v; zEp_BAJiZ4@*fe_0Dz3APRzhIlf|AzoSIVD3O7t1u?DPpBu`bWEB$GhT`{3GP(N~#5 zG;{V(?#&KxjAy!z1*4>UCl?>tHhl2sJce@W5th#A@cK?vsZH&AlqQRr+xY08lC&6D zqOiY%ZzQqlHjk{$kX`M-Ap-*+$$Cw+9;qMx#(vY&KY--xU%jM#}cimoT z89*M$GjNc!biUPhqZSBC#hjK;s?yQ;-=Rb~P<*uk+*?*+Kd2rhs1Gj6eiWEKZNP(fB)587<#3n(u;;wq*Tpr`~T z5|E1$As&T;?d1x=xA!3s9r@|JgCsF-lJycmF-U@t2K+(lMYAJuR^|)ZsPO&~LerH1 zFzcH5@LHJ;3(Vo_5nMOsa3|x$Jw-8+V|8e!#acw?N+W?y2?(WcHg+g$rMN4sa3GVJtAe0s;MT$EVcL;6;Lb2lR zR@|+)6i(>(`MsZW&i<9;&hF04&d%<=a$VKo&Hw|}fb{26(<43ra{`?2mcXGX{nUK` ze-7=X`YQ@TxL`!7?j%<`1!S;8MG{UeVNU#=z68RP4+wLY6V#FLoPry`ND1Dt2mt@o z(c|Gojix2wpgvwBTfMAyof4MoWNS0;yEtr=S5VaJz;oA_$!63JbO>tkKre5dWNZC9 zY>oS0n^yzivFR-wq_h3kpWPJou5*S)90XnQY;W3uG(z;EbuN+2TV&72jw;8Va?$uSq+yRf}4E9}rXAn-$CR_i2ohkgIk@CV4xy|M_|Y0+~rSR^2Pe zyzt@F%h(GEfP10LRMoq-_ZU^W4E_6nnS-{r6pxM+y}esJqk#b4q3Xjon7PU}S!RG% zQ&i}v5aP32*8dZc%}HV@o@xU=R&N+O3D{S!hO+q z?CrEsBBR!?!#(cX+Jy0FGley0k|TD4&Wx{n&&%q?_j5+18CJcaOYo6%R`CD&%=4_u z9zpl@eGlp01mp87CLRosAq`lha%E0dvBufnh5rP5M+PI4Mg$^(Vt*Yr)lZo|MY@Qi3+_!l%L zh$}J{-T&WnvfBS;CxYEDSiy6`vqRw7;MX7jS1de~|I0@A9dLy{Iff{K3@usXaW`x7 zs^7hmSnCNgZo6Y;9$uIjpIi=HJfa;~JiOlgGZ>Q_COzo^gbNJs94<@%bk{s(HGMx5iDK`cG<;labPsO7^gUPN zzyDcu)7U4=5iV=*c;cvQY;o>AkF0!U4#)R`MgZWXgl|E>as}z$=qJ6bG`nrZQ%8UQ zdy_;J!2L8^^9IL0pn-wA?CNM)$(iR0DoYRFsTtzECR;1f1bV<_6t}9Y$)Qt?3L_({JILJcJ(nr%dvCaF6 z1g**JJ&%=&D~@iWW^{w>7uNFHSqMbxImS{@{GGS<;qW8?K^xwRuIN;S}RA|Sl``^yjP5Ym!Xq{GDci9ccSfXzC}k!7 zj)H2KT_r!1{bxjFu@qyx_rwb2HM7GsDesFaS5SHna#{;-H)cnd`O6j>3;pCSP4qRC zt;_pD&k7#_R*ieInf|q=WTer{HrQ8k8PCR+) zLfu77XF!^Nfr@SZ1}7_rT1Ze7%8Jg%nGb+gExkD9EPYZNLC7$5(Ek&UjslGZ!dK7_ zD14k)c{GXwTz$3;G|(r*`@+WeVl8PivUI_2ki1u+V826u;@h{%*=1=lX_U*3%OV4w zPZbtlE_~CAM`@MLN5=1G3~_JAO!W5>O+{Tfv@7`tVEa1cFban{lzRiX#;jh!bcnjp zFmk|%&U2Xmy@3XPvT+X5eE~7z84md{!yKn$r^@}hpB(N`SKT0vSM^q+BC%b&Q~v!c z(gp!#VVU=X1PmI?_^@?`vK6L%kJ%rt7wvqrQsNiM+Lq;xJ7!xm{YcOO13b#-Iu}b& zpd{Y^s}tVWDR972NiWn459`X|`>Nb)TL*r=llwZQ-o6$VGEe4SRhGUQGtT<1t81PY z1BZr!wW7Rg>`f29$7AZZzdbqo-%nEj**#_-n(IJ}6J=9PqL<`;*t#<|^Cn#7Ozie1 zQBk9PN%8`cm&*g6PF5+zOZhJ!oMRq8Y(_gB>bDm0Hn$h>#(3;-=Y*^_rp8xytF^MO>%WJt-!XktG=nug-=KJN)8Qmy) zhn?SsJ~IgZ6O_(?cY?P{S zTEQLdR(PGIPxj^YC9Rgh5zcgB(W;NtAu;BPxIv?VMJqd;c+X&Qz-R`!RcO@9^>Uf? zzVW$8RiS=FG|a>UfkD6SB%;sDQWqVZ*N3)J|p9ajt)V;%n48qST^&=sT4gFxf$?|8dQTxfg-YUtP}aQtcpDmlqqy z=3-^<772@1yeTh7!rFywa0@3xl3IU18uhGQ<{)k~ZB^nc?{}W5{}jTwPns+(6OT%w zp_)yXoACxan51rJf4Dw!!A%{%4zu-B4{wswaaMHp?|=QsxN$t7*f?r(*NNk4Yi&L& zK0~=uN0yV}J><>d19b2<;CHWYJ@CEZiVd*atg(yt|jjR2uC9jVC|v1JF`pzr+=!cl>C8*m5xt+Z@igJmWUUnnrie68SMF;Q*rR;Lr)HkDu)@ zAeV#VxLGNoRc6&y;EYlFyIa=N3LoHM$Db)C9Rj&_pEyZXn#I~b_EI;u6X8Nxmi0&| z5p{yyR1Q>&t6~0a=h ziZ$ud!fsweFqdiynqfyxfZrxVsW|g*dRDknU6bY_qTFR;l*Z2@W3FFqX!}a}riD?? z=)+UCAY_jZZdzIlSVYr+1q?LfyL26i+DnWJIg^$Rz$WWf&8k1qd79|Gpv8s!)!=YG zinYJ&!-zS`?%fUZigc;9B{4E10cZAPXy*7$J{^?5S-t1~9d#^-#)vq_A>svaxcub- zP_zx)%!dV{8*YA<=adu?^Sl?^wywJpX8M!q*x}$avqf({0!OIW zlt%&!j=t_+w+3`Ed>(I;?Lxroq_!JtDgAGjh2}U0Dib210Ee_&+oeALMAx$RoS_*$kp;5<%=H09(Yd?4;L;Qj ziO{M?!Yh%H{1k=igINJ&kE;EQL2r!30k}VOHVIt*a2v{YvG6at zMX?`PGxPA*F#f)p)id9mMZ3ZSH*cV#mkI)uaY%Bw#|(KN$0-gYO6Whs$P&eWNz_N2 z`^Xb*`W82B=LmsI#|h)uW87nodk|0_(<(b~(6-;CwW@0MD=z!lZzy0F6rk4?xVYee zk+82sD?PevHNdpNDGV4$?qg`zh7l0D*mS%(l05_gSaDRh8gQH0lB|tI2>Ygl{FTEy@*5RC3)7D&2dJE9S9y!Ue zJB&}08kSr}2F;71!(=TGDLzmy(p@HS;}NG5%rphpvqCx>clJ#Bd~?r4jleLMqkg_! zi@F;rlI{cRtk~j3|LJEB;Dy-2lP59E1FxdsQUY+8_F%eno746dlUE-hMQCV0Q%unt z2&-J_gdHD${tigWt9$#ASuIr8a4;|!esgv6BYjTYHjzLAz`?-wv_f{UcHfuOHfl0Q*UP8!?DT$>T=%u#ELo_w@gDt_Vlavdzeh< zaA&W9i=fKih3_gNm5SSP~h#0{zf%Dw0KQi$-X-wxOgr>O9BfA{HKG4 zdvqST(1-`GI%xy^moy$&`f&~kHue9b+Xa#I>xvjO*fxuLI>F%t8f++j9E(_c7v9Er zQbG42j;pvBV6w$)GYgUR2$y)GL8%PVQK4610m0O0Zo)VS;Fay76ogv4@`bKj1hP2~ zHPPEbTF7VK1?y{v`xas%*fw4~s*kEMDwLfV5eX~Z#mST1A^U-V_&zumxDW86+hInA zXqEgDeF%Pn`H<$;ou`+d1E4S8DUm{ei9P#&FX6G5IK2TA4ExYF(!r6kbBI7WasS!3 z)V)aWFoXn97;S(J4`t8JSyv}c3@95rnQ2q*USTdR6XT9tO*ml#2M3QZee;cQkv^Wg zDqsR6#o`9z^1Lr|1)CB@zls%V1KKE%>g5UV1QiSxZE7T^JKah zr4wwqd_Gm)WI7~R`!W;l`sK&~;pTEUf%3hmO;M)50b)v{kk+TUb9U~yY3)iGAgI~A z_cm~F7|8xvfOf1e&;bjxtf1_Vn*lDZu`yqBBKAYg9VJeH(}HSAk30m;n% zw0|_{qd69L2<(T+YAkC2q1I-(D+I)uswlZ;8nggPZzj?^;GEQK;SfBSuvQZb2Yn=J z?d4s|!i6-4)^j@rz=@&!8cP40RWWH;KereSfQ_>{yMmCt^dM#$SpM!XD6(VwoEt&q zE5m{7*^0n*5G@YuaSnQmvD!T|PB)yJmiS^x=_bf3NlZV3l$^{SI7_3ADWgmvw4-C03(_oHXhFu9G%YlL3IzQ(Q4&}|l0U;6 zV?VOJTtWtqV!sGY@KPtDi*}DxTy4I0-=O>YDH!^5Q$CFgXOwAS~J}a2lh=AcAjRZa7%K$6uvUG6#`g$?Mce8 z*}YHa5*6Fo?{g#t^owvbZ;;ye#Mivb`!8`v=hL&O$%iPhNm>Ah^PTHEXxc;mttNTw zGY3h4ZATogz&e_f`(4bY%KSCU^ZC>XkvR&zD;^;H6 zMW4~2n*E1a8=SjVeusaZQScFSVmF)Gf``rO~ zBgUXZdmh~Xe&~=liUSJUk%ejh8`OpWn**KT!&DiA0PgY=)vGDYb86M9Cf?N}216Qj zVLu;IiZ7zaM|Cn0b-Np!`JA#0*GW%e&F)?C*SLFbDlUqo`RX5Kb#N&bN1bF+y)q?3 zm4HKwOZgEvWl>e9WNdFA>!|_pv_s2W?(3a@fkXeyM!DENcT;{ypKvGl#qw?5`bfs% zQ2tH+lwbzVzG}(=gVt)=hZj~8)t?BosbLKMxyb2Xn>eG%A*mt{E}V7aqQ@lw-T7)d zo*ZGkW&TSaYel?9{+lt8O=9><%WiWp1YJBo#?SB-J)QZ2cJLNv;d0c5;K>nr3&H`EI}N-}JQN=2D(G*^y=D*%?Z8 zZ|8Yvcee_R_g&fM0t@K`$En!E7de4l-Y`J%H()#hrx07F@Q+l*z5w$Nt-?+}_!-OP zmS0`VZ7p`cb+S>e{Hj>A-UNhC>Am+*4hhW9Wg485rCL`uk2CfJOycm5CHD{Hk9XuP zR=LwU8pv}hsyrJsYcvmNd+I3E<{>?pl+dN&t=;xt=ML9BQ!Cz46wu=bYV+)*7l$&f zHn47*eY}lJ6Gp@&>oF{^$f)YD9*QD$IXABz%|amM`y$bcfi(MVOi^tsIn{fG8k0Dh z`z4(v4Z6748B4ZIj4e4$FNXvCd6#(xQ(K`Q`GO57z9FZfdlG}OJ964_Da(4c0qLSF zLd<5pDcd~Yx>lXzg%VMe$m0QX$wHll5)SkX^TXH*P4vU7!AtL7z7mJjZU`UtbSF^Q zml0Fp zmJ(YL*E(EsvEBah_;-s8+Nv*5MVl=omgO{NxDbMde_Y~ZV)YU4T6MIk>a-|&|70X% zdU>i1H+G21m)|^{cKnyb>J6d!wGx(*Ri8)W1(p!zmd-D7-Vkb@&bgqk4KfvYtk_Z$ zjF>1x{sZ%woM7H9sub?+Sq%@FKq@%bJ3qwQwLNNjjn%hPX#5QJL2XBxDJ&b%pqQMN= zS7^MnkZa2?F^)Rt_jl(h;)Ac!Poq3@P(Z_hWxJp0`ykjvf4epLy%-A`3Dz2DZ44+W zD25!`b7IGWjZFg$JPk);xVE3PpSI&|lQSN1=74anC=|8mMNQ`?C97bRG%X1!J(S_^ zqHF;SG*I|rKL7?_qDQnMN8HX%zEyf$6M17Eb38nH;P+)EQ1TLQC72TAE-lDm$ZLH| z-CLM%Z`eZs-P018S)FILLGTb9sbpgl|k4ET_U z!ro7~mAtwoGb}n$ku|f(JhfV10|gr3$R>Y+KDk#ra@@^F{M5NIUvFc8xOVF2QFX)bJv#f_b9Gi^hO0T3f+V|d zGQg%{KDsKbEBMCl){YlsgR-S3#>@aOY@ZMO3x2YZ7>i60Pu3Puch6d?F#I3mb%Dvktp!F~O?Ip7I`K@N5P7D@vkd){n;lRc9o zhQ5Peo&9$f4*($M`9~x2zpUZ^ID5dbe}8@3gGILTtkp9j68r+qF9>}&%K!V;4WUOz z1%SZ+o<0BizX}Xcuwv*Cz>J96Z+uqybpOs~-W~1R+TUwx@lI|DFX}pS7q@P>QHQ0m z^=ta`mHPhNqNpoL%5FXmirK{ms4k*ly%z*Lduh;VIJzkQ)3qSg*Sh63m$^Z;+RlaC zU>Ic!AsUi+QbTJSh;+8Cx-&De(VPVvzs9U-tj=8fVRGHYu;`+>%k>Ucwb>_ac@t)I z_rf*j>xa7OHQll5vu{#n1)}x+RM}@=9UpJUrhgEjN$(cYfzmIhJ}6Bo%f+eb*)Vpy zkcv=8XGv+F|7iNKW@Y4d8`|`6%7GvVc#BO5LK+9?c0-me*ezis=&AXwpYTlFj&^PK z_;zNr69h8w+-TMWoyxvxm2>I`YO%BwH9Dq=@OZMM4G~P3HsR5~SkHEqR7P`({Kk>F z)&7CCJ~gU_e~!8hSy|p_6W?DUorYoDBx}JUbPMGv!+XpjuR*?Kp5%8Ec1ypjO3CHa z61^Ss%l=~a3xXP(y2#9LGtXlF@L}wNaG{{00E+bxL*ZitGy+(AOP=2G;J2RQ#%2(n z--{+xQl9z3VsPh^=fyfNt7BE(y%!b@nuu1( zLyL}*y_dxPi&GcYB}W-4KKyju1?MOWa!VdECU1{7eFLjgfIOP%pA>jau2Gry|KR9T zHp{RTY%@k16l4o=ysaqO##a*=Q9lN5hRs&=7$RC}4xgl_87I9Tjv@@C6edd3yTC2HV@4~kE7CiIPBCu+EZt|vV%p= z$OdUB*=)k49H;g=XS&BoR{y}F~WE86*bV?qS$7Kt{DxFUN4i;^j_HvYw zJgr${;Zp&=dtpEK2N(rPxf=Di4Ep@A3H$tJb`ioBD{S3{v=go?#kLQ@MsJZ&0mVj$p>!00uRjpCb!4a{1*vlD;uVv7 zAX`(~8IG(kjkah0Ro^?JNHfq$0kv9>WwN+v%d+-EQ3Ubvv%HZ&dYvyF>Wq&)a}Xy!-(QX;jR_5ne>NmFvak7LSojBzo0%SH zUs=E$HX8j!wv|bXl@8+~|?nG|W4|hdjq?ipB8uA_0 z93zVF50N&4Pw)QpqNb?~SA$(t@G6S0bt}`}poH8{ENtQK-R0G!T`Q=%hetA6zFgmG zW%1-#vCA@6EzCL0oK0uG^>FfK?f}itbK3G742$axA2ZmE7%U#;0|(XI$G=J^0q+y! z4#zS-6>qB~JSNJq92heZxK-jTKCQ6Ik5+99_c|4qby#eEe)qqjiuY6a<_9~|295A| z$xP#ZrTV%$MMCZshV{ajzKLMy#Y_M*{n2aYd}%NFm$PC_JN4&tZuap$u&J1E%kfhy zJ*a;Ap!`xZ?KV;OHxGBuOYA-w9hrPhXRheQIUKozo>_;VB~KQ$J+7U-o_mc=ODUN? zH7($*OxrkLmY-+$p_@|4dB0q5VJeYD86iKzFOt5-Nt;D~>-cQUQ2H^{o=|s>2w|;6 z*;wpEW0$Yujd44XL=H>#l;XMy?s7Uq)?w z_lO9V&~9o=56lr`;;}PRRderEkfaN>ku)SDspYbJxt>b)gR~!wUV;M&A(%0Rv-fKkHF#c~VRn7JpY$zPFcJQ+9B0`r)p` z&rZR4-I_3GC+2AHHHG6%Df7`?De8Rvfl&d)G9JQQx~W%-0F%RTZIL2%sXhZ$ojce} z>5Dp#fD;&jsdUHi*t7(nX{4bh@_Sb=7zAQ~5{^Y! z{tHVP!5zT?Ui@8uGpEw;H6iI?6qTx!o_l|1U2y0k#E6>)aB?4hh<}{Q@)CG5d;C5& zY+UhW>F|sZ$YfkqzEt2;__$PFzLYks-sKeMa;%2<S2$Pes6CMQJ-;)~>puUC{yWO>XR>D`Oy~)Qqs;WJKqT&<7zBt%S7* z*WrNS5u@;m#{)k`)2tpipa?_k)YROZM;by3euu10rvL`{>#3Pr6mqFXzr_Un3(REC zSIla;Gn}uDKYJTsb#DnomSB=C?`msScNzdA%O+u|teL^~B)rfI?ACtpWo6fmr#<5%g=sx)}Ieew&vd>^R#CP%-);v4_E8W|x z?x`n228E>qVZS?mJrLCv4G#mr@nFLbQNUSd2fF4Y#j}mPW^w=)p20)xHVxiBhJX|oI&3ABy`x)Ew@73o`j?Q-s^ zRd2yXTe7b~-ueFh`%F#13vNUvMo&Y);pau3RekqgeqrD2qQVMwlPf>E22ZRia!m7Z zr;`+u4-F#w0JAbNb=yO)(?8{--; z*cg>(|H97&N6t)za~qoy-yAwM#C&{L))=u;+S~rMX;%4T@LUqXGu%%G6jA z4EP9Vfb5?q8<&8Q?IKDFU7f8O9`%Z6fbx#CU5RaX*{nLbTcj7$$^=-j4~(CvcWzghBdsM zB(bn$xZ=p@1*o|%3QtH#nCeFYHKQoX@9P5QT4SwA#fsGQ0PKa;X5$VcB%$T{uW@Vn zB$+*{x44h|G6IM`$K%C0rEhD_@AuL}#^aFsr_#t^x-UgkfDUQ2B%Fw{UB494W~6^P zMj^0%T}Zd3TU7W6OnI6?7}Q3_2S&<5-RC`-A&zIF(xo5mFu+T8HPi2x*uiGb39WJKLH(;i6fma{QUmlMcNpGj1=AkeKYqm@ zF1K($Cu1%jEzy+40t@1jeswG#55vf4jX(kay$SPrH`!9mXE1-Drca(H(O4P;;As|8 zvG3dhKo4IvdGZ} z6!;m;6@qL)s7811e9Sp}QcGT+wme^Gqx=D)rY5Uw@WFfG6Fb+{hmXXtLj!g_VC0j3 zmUf)X}gY8K=!A@7?#Jxz>U&(F_SW`N)eA*;#n3j*d2oY44%oo%bif=&6F39gFPRBnh2^9eAs z)mqO0NKvbpOa;1Ye#dXR#ZBmIiE6o4FJRGb4G zw$TCxC-q&Bk)W6GIa%GvHTx(eQ)_y5RspkBjRa6OKph;bECMK3QLEggc4pgb{QP)V zyHhyc5S3zZ#z5h7*SBqT&q8HX5PuOYc^C3)I2gcg?&EVt3D6~sj2k~kXD@Ld{k_9u zCg2ay&6Le4*)_3jkTp945j09q3EpbKzd+fZtw&ZCp zTGEu#{do^euT8|%Thz14TOsfzmRTFswG*$;-N9-=MAV(b0B`lf_2TLw=w#sLvI|g- zEzz$s`ly%q07xpT|E;->3Dd42n+xqYZPw2T`6jUyq%mFld4&ZNqD6TS?9v9VK!iaC z(xL@Hx*BTNxs25;oTE56l(b2 z*oY+=jXxW|(fc5f8&=YIp^onNs|DZE@=g{LtK4-=j!EwMW`?#y0f47RKRpuJ01U}Vg7`)e)mn4=>f5NnM_~Z-w@+CpIdY7>cysu{j2e^pytn4N(eQ47sQGj zGMtta*xWSVjyuP5FAgq}l$Mv5-_Hl63_;$%r)CEDAIeZ9DJ7=w=|@|+{}Kkiu?H3Z zj7lFpZ)~25Vxw+)`nB_r#Yp3}9y-LUg;$fbjFtfGVxWru+?kdaE{hU1?PZr-j#lG zJ!zdmU{O{gpHhre_Jg==%4WTVd}sI;f&eN4GyrtQT~|-yiVE$knx^U4nyLVVhEiIP z%)$0wpkEO~(%CddF_sR2;9Gsn2gYh^-wZG^D6T;HO}>2x0ESZ&ITnMHm|_Gsmpnqsa}UVgKT9+9GFGdbB+OY*YxDc*-=o_D%&{}l(ou-YeP_545obfr zAXVf)&%i~0c$>LaOZHy*I5|$8J@gj_X@bP5aD$Y%bzCJN$xvVa4h#etBfH}3_YVOE zn^h#bdu{?TmF7MUMQMjGsOYRZRoeHYdS<%3lNAAS+mUfglrN}G6NH7YV1cnYP1>nm zedh~)L{AQ!{A))~V`Rb@Wquk>R=L#62oi^*2T?JIbc7&&felLnc$ORxLGV@ZQN_ZN^d5k=8-C@m z^J`B^NaiHbR={F!dL0{JoSyQ-(0w!jV& zAXItvKBd4(++we0VEFa-s;6r222Mu@Un+nH5V6j<3CP!2d9 zH$;_@4iMDWHx^7-zp9J+cFB-fBbk%1LQ0RvIUj+Gk14}Y7Laq6SX}V=>)id%H*bqM zEuKErxNpG4pbarb{{!mXR1&l9L^Md>fm)%3OdR7NDTlC zar|2uo$+m^2w@`uA)pG3Mo)s1cV`{2F+ z)hkP*)MTE{iW5BO5wh=Uu4to`yJ)I_GCtH_H2V)8><;lDeq~evX4A#UXc0Y`5BVZz zuoFl7gE?D8-d1ST1hiss9&gyfZsd``QWkI&X*H}hwx&7rhFRC#j<@eJS5F5PH(pK* z6}lY~?_v)R8nRpiL_xmLuy-bu$hKSQs3;8N6An+84ChB}4;5?$#_MXWyB9&`6Miqp z#kr_1qHg`};MkYtX$>#p4Sf^m4253+zRmte|2#wwo-wNH(qN6ARF53+`yyDrXEgJ; z>C?ry2X^zH0*{d#j4t(88dLJ9uQ+j(D<}FgUxB665P_I`Xk^qR$dMy8L>@V|2XiCH z$?A7k57+ZrmHO$<`CEyH*kN<0eAY2@9LkKY4=nac+mq!z#`|cx4Fy^hO0j0kN0nH~ zK9-V)pOiV|5E{~IMjJ-390IkJoS+&E{d88i6Qov+Ux4chv>w0$arE&V z;HiUeabt@I=Xd!I(t4mSryZ^88!JoGDq+vgPnqKxfy5q7Y?|AiUPq@KubvR_z8=Wd zMngVdz=32$`5vN2T$Vx~DZRE%-6hNTSLLQ1-^-wO2Y*%?R?I4m@3Qiitz`!*-Hm57 z*JU^pG`OA#Ai9#f9ua~l{qMB6sz++*w^T)DvjmKiF?pm#eO5aq>yJ2_%0H9XL z{3#rSARbMZdGsl3er#cRrF2sYwNaQ=aThWzP+wHE>y>roN2wnvqGElLHPmib>uw%< zBfHR|T>F!4)k=J@@ZQd#Kj_7oTQ#SM)fB-jH@3-QRMOYu=&O8heqY>rRnM);hRNen zPR`*JgEuSv3Cxd_cU~VnA1d4=G_vW$svWD!E1e7Z7q22*P6rB2Kk2U85Rh(m@1RtT zXS}LDeO2WR6+cn&3u?4hAEk))C?+JLEm6Qbka54$nhV}~T+W*hJmepg6(vYbFEF7P zp6I#fr_m#Ply_P35Apgibl$N=JFFD8M0${b%(Aes9FncE{d${f*soxmv*|s%gJVU| z#M4~*LD@mcaKroA&mp8!NFob1#}imDsO3A*Kj=NXUNaIFoK76{6%x>Q{&-R=-cpz( zxG=?0=AM1>a;6;Fo|NcoElT$T@|~#Cs9YQBW@@9$8<10j<6?BA@1jb>bQF*1lcBv( zn9|+!xm2&#QJrQ9n-nQSnqx!Tmu-Tr?wEnQb>Ro!(eo0WqjyP@qVv4%zZ#C1(@0hn zhYw1=Y)@$H+2SHQUy>@orFmP4aD@%$YX>I@frIc{s75(agZc+L($LRHpo1+s4xb8p zmfW}O2tH*lt=`YmFcCn1u%M%~a-61lV#sIzQF+Z&ahm-g`eup}%PNsFuT(t%pe;S_ zkd71i<&le0g9K@Ejr*kI@)Bb%OZptQ^LO}flcEH$IN^^W?z2du|C1n;J{*uD3&Xje z-(((^!l91N78y4w8%bs50B$s?I#>y(nXbLGKM_~FV(|jrD`R0l&Q9%MGl%&+1t}VA z2&hMSE8&_Pl^mBS-ty(7f(=`@JQXm)@Ju#02*>p%5u{(NzNkphD5q z&VBtsU)|@}U8BdT_k=pPm#gq~fOaDusKOU|(K@ue=GQdpxk6XtzfIdQ1kuHa?WyRfL1@+ECGVt*Nh8lfCif;=+)N zAeCGsxp30u&_-L3L2KXr^z!oP%2P;xl_x(c_SDSEZWY^v4F~zx-k)o_9wVpW=hq`A zx2-D|J{0YD?O!W?{Zow)Gz3Ka{tKym*I%1|nH>#4RK!G=2H*YKWC8C={|__-fQfoQQFz3Y5 z^vp0~nhgy24J&{ZDaa!i2nvQQdo&v!)h%r8zky8jA_PMcnGk}*(U0}I$|+o{Ws#i) zf}PfVk`9E7lgpz2p13xn6l)Z#O}95rU>d_#r&*m*ZeQ+mJ^9_7nsT-yJ?{m^qm%Uz zf&fEwV7^b^y!Pog_kjugy{`1~=2QX!r;Y6P5Um#+GsVA;WJ@$ys$R^-m!jh*!hbY> zU#{lm;Iyr$w20Z?kfqO!HrFvYFz`=r$UG9(0R#w+rVp2FZ2KHd!0iGksBkreOd$0| zrT)(18!D})pD8{)lC@`ojlO*tzZVeh__(XV4TliTo#3zwmGSh%84h`g&M0*P4U~muhp%DV&9zZs-=GCK^zz zM|M~cwi&yXZF$PZ12M_EyfSyHiaIU~N+GvMz^;Vny-(N&giucy02Bf-qOVWT#$OkQ zOq5fR7SzRTSSh)T#+Ck)Gl@0=!WTZh%M|?+PX5t#eht^wQvz0gL-4$3tjGi=dJbuy zA$)O^2`euxPU++^-8H62)&#%8n?{mPzJP-IZEHX(Wcus0&C5p2mtcvkH>nb^k)%Yi zZf`nx5n%p*d#v#Bm}WxCmXcn{A+N{D`Mbig_Pf#8(E*^+^j{rH+PNc1(p4vC6SvmN zy2;Tjb3}ojwwdUxZS$Du-6WNkE~T(oN5*r=*+-8fhjwJ=Xux8Wr_0G6%#`^jYrhTV7c zm`*N#|DFVtL*ZF2TNT%8;w>f?UjcD^&8gAy$JEWt%~j&Y+}BseFTm4R>uzK6&t`Y` zdXrx-au(+(9k{^KGVlZHv(NtnqxQq%_xl_~%Ny}?S~+~#Hyz}czsyPbWe73J=cgFm z!*t8ktB1v5uQ%~HOv`-21zgd8L{E79oE2Wanj7saW|7k{^x^MzUDD4me~O6cZa^-~ z2Ra61MDi*P#;G<~c1DCHlCFGRH1Bt8@wb)aD`crxdN=#WMqq|lCsRz_K(#H@)>(U@ zT0Wze(OR^ekz;LDhm|?PkUsJ7Ea}4yN5PkAmsfmoWcX=+%bnWZM8(9YXlpt|@sP~1 z#S@=Zi5o*C{WPl0;<1iE6_4CU_ZLuE!Z6-`=4xK4!O_2ROb`*bvlI zjv>v>`~9T_2N+dQXwhC1%HsN|U`DtbHPQGC78V7tNlf(6Pv|yxt ztinPIFbj5tFa80W?Q2%7p7uRjRU4BV0W9~x<;C<(re>wdwB75CZ=0JdqSrnIR>#&^ z?pf|J&Xig%65j$&Oqsy0Ywt`aOSliUL{ltQUe>4&9v;2rP6-dqO_Jy#?6fdM*NqI~ z0Fi=_*?%s&ju#f>v5IE>k&W)hr>sj_d_9oohO!-=j6FBoh}ss7uzh{|VTB5KPPk5e z%G&jcV)zS>!yKm|jh+p(ItR(&3;N8af;CW~`kHwsIpuSk2K^OTud@vD;rOoWg8&}f zS&HEu2!3v3p9ti&y83=kOOoSUV5D~2_LVj{I?&wvA=9vbAsx+@I1F`8!#zD>nNuv|J@eWkjA!h$OmrI_&kU!hczbIh9=L^w@@w7 zG{P=L7)K%r6rB|uDZqL+q6V9pU-NA#tR8LCJSTy}L`P~X!r(ff8FTmYXtJ zHT4rR{IahO2-`(RW`n=WK2Vm^OWt+oH|0G*c#=6Ho7k#5BUuvG(mx{eZfn1f?Tq;P z;=NIJl8VGVD#HBMLEkV!s5~sirQeT29VRbR27#QBL)2kzsM{cV@70M4bh1^jB8Ki4 z8)X|(=M~l^J$LMs!c>HY?yOAY$a-cO_xDsJ9tQUiiD$_mY4{*b38e4x$ci%`n|jL1 zH9Af?(jmU-%{X;x3q8o?{i33pJ~+7sJ}B(;hpe&%5SeL|VgDCqGv9k>Lm9RCsY56i zH3u9D=f;WCA;UF!tm%-%aBU!va9SYnv_Xz%fFeb9GGPgh;GdjVX6)?TZ)3pRiiS!E zeecCJDl6RfjT0RIN~O@zVMIc7-kI#0bEy>xZY%)6PVOJ?$}}q&u@J#$-kg$NN)N%y zSQnNo4||l6TYWu3=W2w|Mu)zpwBc8*jIOIYi|DGXyIr&2y$-c;h`EEk;w;6d(9wgY z)Q2P!L0Nf#g-GR^b&i<28@0pQBd`not_@?@g3&v;1xs4O7WCU81(X!V%5D?fDoi(@ ztGIanBLsPijh=!^4g!>_!*CXnBg5aNLp;%d2U-YM)bshS>B(0wefa!Fn^@#okQ5VG z9yssw6dM2J$E{bWN^`uO(6%J+hOn^H))f-T0~PkIBz#%H1-Xs}FsCv0;2PW^ElFiZ zHQ0~iJVz7QM1y%Vf|UWBwS)2AW1_k&0>E3YcOawfFnbL&J$Z5XGCqy~~>ExYpuqIy0<5~H;x z;1H`Rq%+VvCE&r*M|fj3)FLD~*`%bTeA7D6%8kt8i98O|Tfz8ObEz@x>X}%qo({}i zJ$;^;2l;D2Tvmm2OAdupVrtZ^?%6Mx88$MJs#h=*uMzM$4*Dn^6hgiXr7$xLjM;PK zYAM4JXtzJ>CL7CQNVe-;!3a}YWv=n|*jJXdXc+h0KkGWQq%{;xSW|Z)Q zPVm_k1u~Wf9i} zN$5pV!WWg%;;58mnZd%9zlYrp&x&$**3~OHWs1uF!d$T$bwVnauB)h>8ar))K*rIv z>_fybfd=bZyS2BuQ{rHF#eiaYpcEWe4z756k_^5`cY`Jz%e7&2V3?PbJ2u{=?bEr>i~e za~%Pw-8qH*&6BBwUb+?8@;_|1?=whPT5#h4f%kFA1#kWm(j!WO+>j$@L+HZ%ZO`Xv z`yF?}N24BEJ+1$6gGFtLBZejtbrYDY_B{d~rZFa&>pN%bXmCbATYkh7mooCWf4IZG zY8-NLFj4*qNX`4IK`%x$BUNX?i%RoHo)8rdvbq#Z{xbi}?j0q4h-7NkAEopdDyIA% zds1k1b#<-sKMk+-W;;T?zoLIbxVqdT>u*#Y!qZYeZZvE zIL4VC(55FNcq0=1EF|I&#fQ%yGyk5-PV;4W;6Z)0{ zBz}}16uQ&56l6xK^yWuB$gAx(;nsl9kkX2TE~mr#7lU~lgDBxP^kka5IFZu^_3~?u zjsD?!b3v@j1{41JZ)ZFFfkpP;#+gi})2Al(7S;6^7dt#WhQq{o!u}~$i~Ao38qtdk z#6gjE{TQmbcz4hE92WnF@l?O+8R!Net!~Q9-pExEOO@u;Fp`D8T``+v-ud{2+l6OJ9wK)JtcJa*mhc zwKMJ#e5^5`Wpz%GY4DO3{L)} zoVa$#HDFemk@bi_uP=NjVn#a1e&53Cb+|?N{ z<2DE8%owhiT^-YRMMac1VuCN{g6a{pUoyih?8>;XMOxDAfc|14hYK113te9TC)r~= zj8t&kUu)lKrXA|jeSGqCd^aX)b^opfInWJ$zoZ8S=`6e@;Lpz+SKy;8Xg(m+SGQzmf z|9^VNfBWUX&IzzSjSpJ>zZe(JSV9P2ng077UPzetf2H~BK>>gchQIUczp?C57Sxpb z|8CVmiZ%N`uE|}6tnX{RcbGRqZ_FQY502Ap(w3BM`dcXco`^s$TsX{XgIQ8e}aoZa? z?w}2->L054*Qng4R|@Ck^jmU?y8VG;y8$iY8$H#-r0~SqGOK^PN;W)D)tjZ^{ntzP z&j+eE$4kEx=n&w{r(;%p9Ul%$0;QcaH#Tl3qcJj`Q2loArv}mnT=urT1tB9`4yHT( zAcdcOUzC?wgghK^4@$11x&9Q|Iu{zSRUdPngecE%;D7uU*4;KwLYog-ijmgkCgd@^ z)>^wQ{iAr+eO5CsQE=olF3gwtDHF`ZROfkm+dZ7X$2Z|K&ewaH>9#{w66vD%?ncBV zxRPZU)nEBtiiy8K0&NPEL%RiEW-9YsFitT!9vCo!vhSy}l!aM_^7=Y{g)(+RoQmx; zrkt?rf)$4Usj86?um{z?iJemkEf|e#rg6=2`sc7EsFjlzDwKvd4R~x1Q5(f@3${(6yk9QXGuG?B1BpHB-FuE&>CdKsK0TQzO+bFQ?6 zzq13pe(=byl^rDCH8&x_y(L>@91a!R8Xz1oF#YWdz>ZICTE~SLxh_7z8=}+?9f5u`uXbS&Fp^qE^qA));u3sj!V=$ zBl-d6Ikf^D0u-cN8Z+&9tyOuM1>h8f`qS~5VHz=CEuDDZv2^2pnxpf$2|vH@d2;Wl zF0f?jsdLUQ5?QSD|D!gvyN@Uvar=NSK9sH`{Gs~Y@=)^ZZmMg!!x?MC2mkF4Qdy^) zeBD@kn1M8HuQ_|_4qM3kM6!C-FrcYPN;dfl2}hzy8S$Kzb$HW_3!9TRR>VPy{V$Z9 zKFk)IgRsRkgUZYe93`=A7c&G%aSfIhX`zf@awfjao`32vy z!-3Mo5i&n!Er93(XF6tg>{Ys0x&q6LBJi>(xFtFrrX^R=sc z!8Qic5Uc{@OE>N&ISegTZL_)W`uxH?2FzLZ4n+X@>A?7sOpUhvYO6f=aunG3h70=zF z5JssI9)!LuI}p%W3WdJFJI!`OC5tSfAuA_*eM1@ag=q{tIqme?kyOnZg|_(Q^#`3x zi3y&(bQNX5lBv0DCTp#2{Lq`(&W>-{*-b3Jm1cOvR~8mDQgB4`Wm-N62-u9DF)*uJ zBzokc@H~$aheR{e4LExneRbgeU5d@VDM@RM)>&~v($Thnhp=>xOIrDBRtA6**4sDB z53f9TT7dc?tXj!w|1@l^( zN{J?DkPUP9SjDOk=BbkMmoGtkhdSJy0L&ik(^luQCG2i__RpCbf=g#m&#b(^qo?J?PlkZ^Qx3V;fnVwn?Fn1(-gM+HJBG zR6A9>;q8iwQPs9bI|S$?ZS7V?lVzNiM3f&~xD|NQn?lBud=S1|)r4jycVOyk#M9oX zXgwd_MUblL9S-p(Mf7|iGE$KK;7f=QDUv}$uKyDteo&=nPpGyIJ{d!lHfS5>Qk$nm z1W8s?f=H3q6NJ@<5I_jJ{ffDmL=*(N=4C0d{)~ed5Ph~b%1UA3-sD)CUn$-F;vy`A zTM2DVnrUvK-gHxn{$Hb_^3g4jU})bD7Fgtvd63i@q}@fK=uRgVXzO8LIL|z}y~hk| ziD9LY+hkKs-9qCw#EuODb3*VGL#M>;2wdMgRz#t^`dVS+T8>xB)3aunFs9%xb>v#c z4YTZ+mjr_kYw-(pE0ZX5 zf+F9%kDUGmqx8FS_>r~mQWgcJ<99Hmmr?1&;Z_p-Lz=T?_rlsC3m`wx=nh3RLdl~Q zWuIb%;}46kRRU|xs<+QwLz%54M%P~5|vqyUa=1Pw{Zi_@;265L&?5Zg#Oa2rL0N@yr9r z@_)!9Y#QGUUUwrNd;|~~5T_SmyavJ)&-~{C$2vMV0PN>pn6*OKYFoT{L*@;J-}oS$ zh#9ZNSfRo8EKn&>11k*O*F;JTZ)nHO{n#|4Cjtjh2^*jP$cH2gAXr)6$JHg0*FdV> zCbPOLR^rEKUdYCo1=fb42?D`;wi353)No8VL(HqytT;0Iq_u({@XV<~r^oGT@IPfj z0Lc^Zd?$~Wu(#ofki02=(@P*E+3Jqi4imy)@M$UD@ImAq284S};KDzxdGtI4 zQMHG(6&oO|e#hRN*>+e_W1O+w$~_v}+Wv#*U-OfJsz>lCN)zx!QYqbtNFVJ#GY%w9o zH>~kL-kSpsBO+9<{yfkB#g3}xi2u-QftzuJ;@OdfYCe?aC@{n};Cf(3g;yqhKw3c) zA{Xc*6S7hIHDFH!x1LnC0C$he7Y_k-3W|k7lC};JQVpDrIqNn1F1}T>m#5}=GLhNF zM?U7w(XZIECaIw(bdlpX9tn?1PKDcw0##oDk8;Uo$kP24V}(C}pMHw;==b-s?a1@%$m$M_e_s&NfsT7l}CUrAoV;Fr}^R?a!-!&@XSh)a8-KcI{Ju5 zjt7ub_`FGu=<^uL&4!&p^Cmov-w(fo!OjyATW=?(%}MrBoNLlUf8%y}iLLeym|>sU zag0C(h}}MNC4RTi1&4K>dyforC@VI$m3KeG2MpYJ?ld$vHIwB}bAO;gJMaR)e+Wc7 zK!&cQyXY&^N9B(L1nD+&F>-+5iTZZRO!{zF6~O%xUDVMN9B$=1aR*TrB})TZdR|~= z;pFPaM}GA!!7tq2E;6FfSH*WbC)AD{~|RKmkr6T1Fhhr?NNZzBTT5mbge#01z4i)MJ*4EO&HDQWsyV z84+r^2W0>KUWb0?icde}*k&bjh7a=D+25H|=L3SSoO$ZlATcH03Ar3L-*}fOt7gny zSTmdF=l+9SK&dF;NHSM=k;o5k?c=jv0_rg>5i$(y7aNJe?F-bEE$W98Dv>6HAdm{j z@=0I3(nE!&+QRJ3bfwAnU$OYiIRVfisPW5b0Fb&xcay?%qrUZ?;55m~C{%bEj;HaC zeSPAiBI`k%O_G#xr3M#2)Q8he$A|_WD!faK4NGBHKF6xP0%eq`sCThTx$9P&Wp?8L zKG5u$qkVWg16fm} zYamC`r2FGhq3I|1xJSPq2`N=BmNmjfhuHIPCr@d{N778q#5fC!6%TQsL$Y(VaD^D( z_kR~}%&;wNr>|)Efdz=Mv>=kr4pPzg2Z7tkD}*+(ULX|!M&UNyL%;)$inqK6lp5Mb z?_yksEzKfi$7FHax+@)Fa$*dld&BE_rGCIc*wjK1L)vj56!nBxM7}gE6Gc6p*Jq-= z=7gwFBMaw_hzb421V{f1s+uukD%jOTTz_-#h@za2>xOxzOjzvu&w5e*ZiOX_bpZuk zk%L~}*Q&h5BvE1=e2NO5Jq-b*1;Hd2Va!`$2k1MPdQ=zi2)al`nRm0GMQUKZ zDB7>Zgcx(k5Lebfn;pYvW##cs{ z3@h~yd%Mq z6rHLrcH4TfhUHnC8N@wdclV4w>x~QY{`9*JrJ1XlJ3IGW>i2bFJ^|eonVPVSx1&V zNFo7{gJo%i4A&CA`WgX)+%K=LJR_Je6|zMRJn6I2qL2}4HGV%m?IlE>!CjpWpqC8v z*VRp;Rf`#CQnbKZWcxvfbx*|@V75&gGb z2dgTUztf+bKsd}%lwDKSjbVnswB0mO7q4rC?mJ`C3z6K zW2IpyNDDuhd*54>hqwFVYl)(gCHXrks$toRyPYLIQLJWl|OoLJ1dUq2r2%$jNzwZWYYNP0}Bp>88Udt0pwPa#B!g6*Ju zneXP*2(Z&GG)ggZg^NNt%Hz(aZbPZB@l%^YVU(-*+=^TLkvi`4#J`l*bC1T)Wy|2F{0t554P7hA-b;{K&I0 zZ36*H_3Aq7L7UoRVyXZ)3eK%>pRPsAcHgs{<4QUNfWNB;iYcVMOm=fbgnXr96NFV+ zgq-T3K)}~jD;TivtRS8c;0&B^)V_>z_V&=EkbLYocbKdn>pYODqQhCXIcnU>odiBu z<9s>}Mbq03xz>S@EQo?LAep4}Kf2Q2#D;UQfk#}n;Cz?NZ^CNo(}94arFB(D8nh62 z$;vNGQlx7DY!nuYKMlg!QZMFAYgTU<{&Bcj$uOdzM} zSLd?C&38<-KyeZ13SVr{{lf?N3AAg&OiHCO7v1t`BPMI|h=Z&B(9I7wzICu_7p=>m zCsEfRom+se+cOTB(VWJf!03n#Ey+&3so1s8(vBLPDl6u|=C7%b4>Jul-dC@uP>`jCe~K`ciX0Ad0FJhE z%}4DQ)FmaB&Hh}6KSLndcynLMy3PYr&zFtiqi#im6F+&hb^y5PnU&RY&_^=A$QVA( z(@B2v-g&v8cd#=Ju0dQhSQ7Epe5YPcwwt$IA6NaWq8CtBY%RS~>KO(K^D)*EomNyP zLGJ;FFiwI?t(vy|YG&Dixqq|YW zSo>Apwl93%u(0+0cBqguR`l`DqzU50C>F%(?Y(V8OlGw>33nDcXB`dwa+4y@eYW{~ zPYYkJ6^DC0oSwTo&GohuN2e2Hlgs%N-@~eE2IB|2AA?V(q|b2|IfuF#=Y|FEO`BKL z(kG?4MmJT2S@+fGC?^yF*_q0pHO3c4mD2;52!;z#qB2(vKKY#m{>~AxGHAx24{d5& z^>xmK z5_hXuy!Vg7zkJfk%FT82|Ji0}+HQBRuFFEaBke9p+WD}@hxB(U@<2^7=#Z|_U?C%R z@MO?7;8D4A5UrMm_VZ$N*Z7sfkM;b`Z7KTIv#PnX^e15h*BKBOa?L_UO6n^|%RPzw z=8f|P$1&Lha%`06N|-#xer{Jc9(*r0$n>UYn_yk(zk97~TIl0l%KijzEg#oP3iqRj z@igyP@(YLxRi&rhH~$e`|9NJU(>xCH0h~4Q0P-?HdDnSGXbu2C;lFXvLMas-cT)${ zWg&t7ogkQS=#Fq2Kn5*ibLNVBw?l<>(XEd%g$gy#x8o9hXX73RcN^C0%k=Q`R_E@u z=ib<#bz%=TfmdH^#Y%q{0FOM(pNDQ@ni&PYv4>8I3j*MpgUk5?9S*DpUndZtMqOMU z$`3~aT?Rdi#?1txWfDF=(OM$Nm#xAm$Nym6RrW+1JU{eLQ`eZB>IUa%N!4B7J$?kp zyP9Z<4qivm#@wPbc+;6$P!Jw0#O*}s+b^r%LVyuukf;TTbdl(X3Hra$ggnG9Uo zM`Xw=L=-7zTv&cJ(w9h0)o4bu(pt>F{Wv9t{XoSG0YKmv@Ryn@06a)63-8z8EBLDm z2+xTLr2&xsyTV0+?-l?1|CI}Ho@N|=BLFi5u4(w%i3O#FH}iMD0l$8lSS9NcOsoP@ zc7DpGVDaNT>KDdIE^boRuZq&0JE$sv$l2SHe4BEw5r{6?X;(UxQI=%0jG;jr=?`ED zwu*{&)Mqp7tDlV!3`o+oHR)T8xJM+*@y-z~F677-;?1Dp0& z9%3(pOjdq*CaKTfq*J}D?52|0r=*>rJSDtTJ*RdI3`&_|4tzdGd{zp~cr&n<%C#g4 zmL`e&Q55(bTajd(oiePS!WkmXn}*Gc)Wct~v3MMJ*x`c)e!$>^5IF55B@2}KIDiY9V=?#Y@e}vd zRSvag#UhxhcFJMeQl61ZPu0#0WvF^5;%xU0Bk8Js>ZxY8#5;MVU5~1=xm4FR{$sfv za-|l_7!oa>Ux#D+O2^Eso5Rt$+*|Wgkuv(?oe5cIVViPgpj#kupyknUrh)kz%tOyl zAKMO8P4$%6FN~8mQmhzl6MOv9-!iBRpy|5UroDe`{usjkkwLpUp#b1;lBwH3>N3p6J3R)uTv6cqox&kMHwzj?{fniE9Qi+QK?}8H} zM53v3>4v-F!^|up1z4LWrSyd^HLXtnclDO4t{Zzi(6|>3Pjk=Fw$V@d@9*AlHnBp+ zC%z#L41f<&5CnAtT2fjX@%@q-IR=dS9V58XV@y=b^kLCT4SlA4^PpO%UGs=6sPJJ+ z7EkpoGD=Dz z-mI>1|7F+&O-;8V5{{?ak^F%)Y8(2K1#-n98pBE!Lc;<%p!_F+)DAT606)ciqqLGH zYDNw=tXMJ1POEDh=(q;judIOTQC1F=QdUBJ6yC<7EKr1%`5+z9nYTCw3BPqx7ummB z75~@1*vy0pdzFDB!cJ|8f^Djx44Tl43~X4bBDNt?SQqF)sg7>IE|9giH0;QgH&=zDd)&HG1h}NcusSWlS)6pvVe;ZcE+jb*zajZ;<+Mz# zK*vWD`NtMnk!<7b4l>Hokfc)g5m##WZ(7docb^VW9(hh@p1vI{2Yj}wQC1zg0F>bP zSfi^9^A^L7>+>O$o=Ve590PMipEeQE$)CHQe)^YOn*o>?u~AcAHZt z)^=R8hbwRl*fUd?2OnOp@p?{r@`wGo^ZsE_cv8aYn7Xa-2egwToVjKS;(yIUFoQHo zl(~lmW{@$IU@&g; zcyj+Kin)O{bB*Z_Si6V6(0!8CMFsU@t;s+?f(^3$==n6f9pj12k$x|`Kc&soP;XD! zmED2c)sY?cEoT%Wi;Hw?jzPK_5=nza5BX@4H`J5)LOM{Ggm6E#rmBil{%vvG^c(7M z429&;-Ah#T^Clm(H%2y{%p9wUA1gZfzrG%r$7+b?uPKpgGA`AMSyWPF^Di73>F*a% z&^OwO48xdX-0!bwozKOWL0Dv$Yi3}btmhCPVN3PNnTb{+r5sJ#D3!c_gOXaxuAxV# z*!w!s-?N&R!D_t>0~<_mA$o;BdA!%kpNo(BRh#L9Yd4f&)IDofLKGo!~kcg`b+AP+! z*0NX=qq7>5@@%iZeEygQSPfIL)Wh#7baUXyo81tXt9I?CJ!P_V?aYnH{qU1h^gVs~B+*+FQlDtPQ&gy`Erc$)P0p|{*Rs64(u zP8b=OCVWSCz5H>64}!qD$DE7`m*ui_IfMv;+(fz>$PPr}vDT@d_=yq*W8fFO z^9&Pa{pu^C%QHy}+r?}UMpQR67J@63sJIHx$rsK{Tj+(XZ0=a-I9NVd$gvXWLk4t^ z8zsICYX1_C&9ur^3=2)*(h79WfC&LbLdest)z+!XKSh-c- z=jcjB_Vt0EO+!l$wPz-AJQ9VfbYuUhjzbxxT1ud!NYGdj#tB(nZJwvkFS4F|0D|Bl zb1{9sgEre~W~#F^Rs>ZZ@{_2>U9d3>TgrX>vyO&cW13uzZcCtes-hjO@pM;cKKRje z^)$>%t~%Pollb!bVr^LR!EN^UL##AYxFY({F7j zrF+5m*>$2BN$@=mLO4AHZAurxbK(f!<+Cx2&dfp*kFz^Gv(g(Fb@QVeYG##Swqf3# zrx))VzVD1)@tyXqq!%n9E88Rh8QpqH5=O%uFgV!Ff6PV%B@N^wjO%=B<}EC3 z-9G#0cF1G%3|%$oruDAcj*}Q9jZn1_Z2Zt0k+1)*8x$&nT1k!XM;+-esk|z)F82Ci z&81J|EKYO53uGAgRFpT54(-8Pr)}mkTf@h zn}N0aO?Llf*9~T&mlPk5QREy01akGk-){b+ROk8HJz3z|_QwJ!YvL0K**8t-hCFNMvyje#}Fh ztwf(6FtB5SkmY`56RjdtpYOOPs0EQ!n=3L%^_tUl5&}QmL@a52CHeiby&8Xtg0{H# zq0J-}ark;dQ7E5?^IKw1=MT0}Fj_{&G@;hZJmhK?roFEVv084#Z0PfcJ__nqK~>Qs z7$uVjZM78gkXHv=;R$1JAdv5HVG+;;RR)3iHR@c}@H%BIbZng+FQBM|hkTYAA z&Iph;>iY>k&n|Q~UU+-}OTh#AfE%{Q6+(F+}R|!XZV|#0AK=bN^6H zQU=f~^@T4a=%YZW6jct;r{s*{ydn`gp>?N7GrQT|@Ixvo42VX%mkk`8(8l{8buzWd4Yst^#dN-d zdsD>VYe2(^7%T~Z)FR;_v8BAM-E6@VVP8T5C8=B|6NU4U11ijJc?W8veXDhiRh;(8 zst44Pl^8{GJhOjp>W&!>y9~CuCL9RilIUpU4#uB5Mj+Mmmc zr18_W)V@!O_j}AFUR*RJI0qdH0ueU!9S*M>^#|}6Q*zNNEtiWOAf{gKtw*&zQR#&f zLB%b@@!`j&WP2(t7!ouUn-T!ks(bmWpjEm`hA=ZkQ3$UbdkdwO@{JqE0x`6zGKp~Z zK8m^3Ri9Y%3AaGw#5q*}TDNUWYb7J$pzHWnKKR$+smtTO4qm$*+(KC0{ND=H;OHS7 zWTJb8L;i|H?AhDYxu%v+nj?{LE2U=f_5}(yncc5EeBxq2@K-oP1Fjp%ZoJdKeQFh_WVGA zl*#OX2y>+zYt!a6GLZ)uKv?a43&6#-wk!8oZm{n6ykcVrFn!^lNQW7d@?ERWfruu4 zGNS<`q)i1uPVIFvyDX}A=_f8Ya0qj}gxzA@LVS{biYu?+xrWDSso(OKd(ad4v?IW z05>Bp^ja@5oaqhL^lE%9Ic(s3BKcTsaO2kF)u+ez{Vg4*ONQ8uSEA2@e7R-A`b$`E zh(PKxG-o&S*4U5)eYFt}FF^QLI#}geaVgE?Y~GcifX^%5+to$@=n| zl4*ZU9en{!VGL-ZHutRznUd-BVaBX(cvkLaM~S#CaOX+}l^R6b(EZJFL1uQfzhN zQ45;ON*>>}+V7u>PQif6D^~J`LydA7CZoBLD$etLKCP>xx7hX3J& z>lb|RyM#5Rr5MCgfM9K7PIxh?~glu z9mtunA;94N+#WL%aS)^}44NUk@B5{3%yk4a zE;_2T7|_?+VHKz6@FfM=fUP27)yv}UPlqLW7Zbn}81zTa3s4%`wQLub(u+128Y@5fay2RzPawf$E9IVg$4TMNh{xb$}pZ~+5byNtn*fq`)(*vrL^l%2Sj`mQwmJ?=+C7`xTpxZGgpa5o7EzdFBh1tIu+13(;r>^JC1_@}r8eD}YO0mS7b#OjRG;`!QDvpk zm-%%3(%XLo;IKmHYq^bFnF2Grru)hLo97)64)2LA0sTq|!Yu>AQyqe-NFEu2zGz1( z#`_`E6T`y$e0#B)8+KP?qnxP}R(l$}j73KX#12RK1G|byQ$O(nYb}TY$+?q++P=zS z$H_7E&57VViK5LLm1^}|!atKT+(MlmT& z6-SNUeXMD{T$Mb4B~8amr^FNwkL3IBiB!a-fdOjmw$-+Lv)lueCAC%n`Hmia1p`B) z3OM=`Ar^?>jzEA=>~^EScC8YNLr1bnkL2)RlMuU4x(~%Ps~VtdB#ZgT)-$MP*19~S zQHualc=}!#V8>{GmDX)aq0`rA)%B9`$h_`lru(^kE(-SYM>9$jl}I*mnfF>i(2cb? z9I#rb@r05sN6u!H(r|mlgZ$&A0SbUmzNWKzJP~|;mV&?d+~e_04Fn%z?m%z|VhbkyL$Z=6xm)nu zpH%!qFQ10)MdK?w*K*Ay;;@RYa~1c)6{b&RZ30tx1j}Uc+WbnHLq^BSi5HL5V}@Qe zf!5mu&(yY-PHs+eKKTb0zu%l1+qtnAlU)-Nm=L=cZ1%4ukCIicW^lRfThh zD+bw14=IaduMYO4B?Ci$P=726mdr0ghpdO7ArQTQQpvEmEZ?kZ&CtndVVQ}8hMIxw z5h`J)5JFK;`pIK|L1*P36~d?j@{9qbzACc*Xnvar~~ZE`p9#pw-}1lG$5 zTLpmbv$eR6n_o9wH1QvakSXo}m6-D&D8CTLTdO9NSbhJO69<4iFLjbucb2v}uC5xN5E?MMt+&Vk5F#z03 zFg_Ud>F>6^)I61rM?naVXM*|^pkgAi5duWz+TUEs#dCb=`3cgj5{NJe5b ziYIr9hIEc_aPozpYZ2#p$jSGtJ>q^XlPW&A+HmD(8%v&)l*pu#@HqdGQKv=Fo!X_y z&^KgqjE%9XOq5(<1VHrbA|!6&4oXZ6E}jK2;4uIdG2p`s(mm>%@f$euZ^GtBwOOpU zCkTE&9t$&XZ1oBF2q=Y;D{WC`8Q)DJ3vZCWIemY&lLRqteT~cXT>a&k|eJUnJVS8h9 z6UOoJ+LR1G`m?X=TB>Yd;-7Q0cCZyGrLPAhC!ySoRB4&)GbMC%(`u8{hix1A;U@7g(?VY%_~-Tv1n%QnZa!IDV- zaQwv}urC&BIkA0jF1lMQ4hO3)-r7m5EWQ04SLC3Ouzi2BJ7A(c8PU`J`M#GV=;_7t zSk~cw=48i2Gh(~=1{FzLo*3^Gd=)Sqk})<6VSPE9I_s=E*O8ErD-j}z2zW5XBGrc1 zd~ajwj$qVzy3ry6^s)0Mgj5o{;ALZ6X0Wq}jQ?c}Q09dklfo;?{)ZKSe-LU4uN(Ux z9)NrWlp|H$|6?2YL5Ud78u`Cm1f^skj&H#K5*64)1AE~`X8$EBfPdKee=G(zNx%=0 z|I0SO-w!o~7vVx+aCzW=aJqv3X>k3J_g@hprf$H)wu*^~fjx1+^CER&*tgBM!Rm(3 z)+TF0Rcn2Y_f;CRVE{rhID5jVAVe1q@Pb2Hi>y4&WRqT6QoYVIS#Il=;$*jY{6+Ql zxNEenS7Pu_6g!^HL zx*O4NyG2OOKAb*cRS<$Z3GjwNJqV$P~GqvuAR9A;NjND`m=q-hvo#js!deeUSfHJj4(Y#MW1Ksdwk4wo&;IoMG(X2GunYro)Pu7gEjmcZ|*iG z5%8v{nI&B)$DFSUDy`9V2{QoTy$Jn91p;*PASc>3)3$3x$lC(IJ4mc?bNO>U>DwlO zU6*^zv|4b*bfFq5AOqVCwXbAV>8IETlFy0wEwRUcWw$3puh2bggBn$64<#aS* z&za)qS)vljxMe1bk|)uswygWs+q>II)wx^w^j9uPAD!%-aWZRq@Lm+AepZ*RQkrsV zyTqAeC^`_%SC~|q{nF$>;xLVnLY_3@2(wdFh0~5V0(+^=P+$}&V8+lX6(wi>Oj>Cx z79)n@o<+V=%iFMq#0_Q?G%`^>$mAWyX1sQABSTa$)Z!Xtbk0+MyXAk$Gj|VOB!61K9SNzg_G8X*ld@7RO=2WuMNNhyJslvMW)-s>{R|5 zqZQaoC=2L>z})dayMOu!y6?SqRDEdePh#(0TC zHcusHZBg2;9x(^uVp7M8-R0uW%Na58&P=r?MoYH$WUMfJb!rWI^SfxD8Y*8fRgAt| z-p2Ne&y8>03qygT>A8r*pbkl~j6Ho8C)l`F!+K9pP|#=aWPs|H$tNsNGwy^sy*?)S~SWrkx#TCVbSrO#88 z$1dKepq5n7EmX-`l-f!c(_?(pX_%3XSwgAYxq`za!I@wnFt(8#+~iDmo+}C3fVVaB z88^Cnv}p)>%D7Ua{%t}1svO`2A$w=GG&bh&klRiZejunZf0G*%T`b)|ei|WtAAa(as5V9a}9`>>I_)SunhxdK1M{5(yoBQ|x*h`JZ z1&$@LVOKEXZ{g(4K?@aoXAN=L2GYnVgPBm=V`d8)NJoNG zF|wP?j&lfK7U$#~*%%RawY>Gc8^R2_k4VpPBv~%6$g0BQ@@X{e6-(Q0=s{{BeKF6o z$4UHCRTJ;w#KrU`91Yz)D`4V+aW?MH=V)1iv;I5kG`2|g0?)alD*}TB4yB1t-z5_B z6n65(Gb7G)UQTZ$U*3_9%zWV9S*5znP6($u`3b%mrH#oN(oXNH7PNGH#bdVWt5X+v zSj@fldW$2fUKY(hy{ciSnqL3)|2V9_tI}6!&hv3*XzNWzl<2{y0QI7GGwPca;PxvH zkNxcA(!L#OF}!2_+!jpTjQc8x|Ee=t?UI;^nV^}{#pPr)Xl!fjbUXTwe7A{zggJ6l zTcG}^j}SBXPb+{AG6Jq~4I(34^n`;(v0wVA&-J5roBdf+Br48nZi#u$q}K*R$^C@6 z#Bjif&Ew+ahH23~y4n1%?Bjvvg&vOFZDW+W*{>}I##ODRmZ8E*)hZADVS=sU zoXXZr`zyma{;@n~nBffN=4UoVHeFY}4|f{SZRVb#(3f%dVZco%j%tp&i@r)iGSl=t z)0WwWVXRrQa=QH?Owx|YA)X#xo9=a$m@{teE9ULlq#(AD9-9d4d;mBw_2<%MYR8NS&al z_1GEu<5l`gWE&VupL_CI+k^)daOlgzGs5tak7tCS4gX8FgyGKxS=D!lp6Mm#2_sM~ z>ZGJ0?Z5y0t4$_0a0_M<89N{^-;9H%)4ko?__ z9*i~m-4JI-N;vZ{1g#WZbsFiG%`bM0+UQo(*9h0}CNyfZZ22@B%67=D%(fT_^PjCx z{Y@6X&%VMQeuWw7@atrw6OF(Tzky92-*5W=b@kO@QGZRm-(9-95u{r>6{NdMngs;u zknTn4QaS`wK#*QqdP$|bOS(b2;jX{m`@Z+N_dL)3vpaigW=_nUnNKN)v`%ArdYI;! zv$1q@@R_9~O<9BAB@p>;B;eAB_*pg1hoWKTApD)HyHI zqCBb2?#8wz*Xubl5B%g83vD%9DDi+-Po75s9p6n}u91e-jJ%Vn`6apra!p3Gm~!iA zbA|2*S?g`S$**Raj+2l_>c4pHbt7BPSQy-yV5fBEs ztc>3X`WV49PZ1#ITMQ-Jg+y@M%}b;}f53J>@?l19D>#`a#xPQbdim_Cg~@_)@O!{y zDmrAJZB*00td=C_Z}9#!#lKhx(?sw-TU3Qf!u5nmwca(4Qj5lJQr?|-y@xJb8^?$) zT=n0Un5YoE>s(Iz-tMX9vva&xYfA$n>DPOalP$z)_;-bScN_Cw{~c(lvP zJ1Xurj30Ar=^~n9^^QnF2GT%D`%O90Pkj|;=%j5fcC?SA^}D4^12ruJq$ytLN>u^4 zg#&>713p*0>NRzYj$fi(W@aHlTE#f%TYC$HL+Z znWqXy_02+O$=giR=@%0& z{F5(^O7!{dP;96Az#%1z9u^!v+T)mN;#ejp9{hMEY}$5jjd;{pU1n0aT}5G8JGT9+ z$4#2j&A=`meKa1;dEDfoDnn1W!@O^co1C z;k7JX9pw{uqeOG;%d!yu&~r{OeEFJU2)~pKs$tF-YoY_VxX7#z}wEwqt`-5C3Lu#{oIwW_!hh$lZ9aNi;(?qF_DkiixjCVq{X`imz4ChU@5Z zfm8t^(}~0;BL}q)7HU&vsG@9NvBg!ch>01(ar?idP%5}Z)4QTxSj+85$L(<0NbzF9 zB7T;xN)DP_SR?Tm(AGuJFQ2Vc!sv9oL7b*5-qxw$be!Oy17LO@7LE5w>0xS5)sx7^ zMbs_4glVHw+XxUyx*0>RS$0H}nW2&$m0}JP(N#`aKkEmwedM(godKfGam`!;=Q;N$ zNHc-kHp5!6_LA^hxGU zO*v>L-IEbDxt$-{4&wB2_^X1SpFoS=V&*1Kcp}5J03I1cXy!;AUs#o1VtJO~8@meP zvOwO1%C{<{&=l2|s$30CwW()=^gc6bAs|OWS{J;^X8H7&dqWlnQ6B?G)e4(R?fpxq z!iz5~7qJ~^VeDL-TgW^nI{a7MCm*&6**&mO>-#BqGG{XKMa&L0saX%ut~GoKwxCcGd=WIRtV6jQn^O5x|t;Uo6Xm90Os(*_DwS{G662Qzw?aAIVJHsEFZ^zyThE>0~5$Dn286Eaz#fs=nBhAN2(?;y-6YnW5Rwcgf!Z z@99t9G+iC-my&@TPjzhI;C^l0omvWW!rcLU^VO`FsX^ z^$E5U{8T{{I=Z7}XcWHmm$zksMBfosUkNY94)GKW2$SkHr{Q66ccMM}Tq zA$xOznQb(^h(F_HVmM&(8wqQ6RSksDcVTEld5zqn!NhqhDj>8<)xr$5<}D-B>iRT- z@}xsnR?Hut5Ax;!i5zFKWS0ftq5HCWhd26DfLN>|gU_pcBWOn{~3p}T#F2$V*%KDx9+jZEqq(k-`rR=o@ zc!s!am>VFc_`uqd;%@s=4N%d{G9@efjs;gTXuf;3o>5>?Ecbk2f)&#*gi?zzcT$Q=kSs zx6&X|w}1Zt6rfaeuF5jgeUV7)MCs|lFZ7f%?EW&0z%Tfh$AMk|Gd}`XC>Q`rw$!R= zKtxH_DvoAbqf40H#b zI^x+Zf8cp|wBtg$!D|V6mXqJHN^kXee>~1#2IC63Zt2-*S;%ZM5W)R=r{g4qp>~B` z`D1uTAsJ>^F1@~K@hZG~bGO?O-Q8(rpc$W>uPH=u$PUrOtPTfC7U?gLV?;^}lAjHc zk`9{&fED$;XtsX@tJ7r2K(wf#JOW6b(3m)QA|s58k3lrP0HjtjG?C{x16bEb6bk2O zO|-#IV2Js3YeUb4!9}zgDum?36WL5DQS(iTE1yJ0mp`8KJ(oe~SzCjp%&<4+bo>)M zzz7WEXuS5}KD60Ff@qlU;N8rDd3e8^oTb7y`yy3QA21?Gk|lwu(ps+$o&TXWz~TXH zZDeKELU}&!k^XYl56lXJBp3G2eqWDj#$UCmE-mZ`eI6t{Jw-3u7dY-bbr;6zM%NjC zR!|dxw+Cjq7F@w}>!1K|zJtG?&=a&Qmbud#3A#xrgJ? z?gyGrzKS3B&lJUH7fq4lpAVho0kNsC|=6hzd}`R!d00ng?+ztyYf7 zJ2-_F{#E^2R35{>*gziuh^^9hR%i%pS3V~BY{aWO?r?^6zC5+xmKI4RF=_k)kpBG^HU$z{hjb%{vbaCVh@(&ACIwFeK{aBdM}lFO zySV}Bncvn4aY6M1;{4xb3}tA^G2(cPMP$Y))*x7UhPCgWi}4@v)4m#Ch<|Q$>NR~c zjN^A@F#Wjr`#_iS)8{P?&($enepJZy#|$3|qr5=w>#~A|Z+jKs3O(QV4=GN%{UFD^ zUv5K1dPxuOGM4ZLa%r;1)^J+SHtpY^EF^3dp0{8+S_Hp2x-*;mH7A0bvgR8$VrmgQ z(4crvAUHZ_AaHLnuDL*5Vo93+y=*Eqy0PvDnUJ(=f-rhmhjuet$dx5mRILH4T+xN4 zT18ixfe+hWTrhORtR=YPWGJIoBT3a}m67@I(tT8HNK`{T=Y^=mvZ#Ab6gp2y*{1?x zNKGF*Sw=-n8l&kbmyt2lr5+-;LoohAK1BY`m3k8eC@C9%H5>eIa& zblkp4dBXJYf;{VsgBXhRhCSlE&E)MWdHG+oang%}i zP{Y5_X?q&XcwXAaox0;nlHPSxc9wF)D~I(H?TW>tD8=9LnH044wUwH`4;YY?!s0>F zhXbr4pwycipOo<(ggeSPW_r^xu9wAM?|k;O{QLI|hnm_Rme7mSvAW6}Tk%F&2PN|I zcn;?#LjHQc?$Ifa8L|D*yxy7jU)g(^n!2@uzg08OJMLeEnsw{dbUR z#ld0Qyo#A!WQkH6?b*@(&kJ7)uUGf&=X|5;`R9l6!Eb~Q3Qxi-IqXqp1|m!3Dg(^p zrg!F|%P~Z$IJq#)iX1$}s1B5QSF1!z#_T6$g@tRxoXk)vXa$ie#T=Jr3?7|5>e$na z9k;7}KWlofWb9=>wJCGdCtX%f>sM$L{v; z>zh1+Cy$mDiEsC$9(Q+CrGjU~$Jz>C-GA=S-@~z6t=}iGdK?T=R!0BsoHlsty^z$@ zXzZk?P$yrFi?9l_+JeH3@jS#1P&dU36G5;wk~Km_oU5`_gi+jH#}lR zMx+f~H-)Z{$^z=m02OnWnB80Kf{KQ(Pg?y$*~Hb@VtXwp%RlZGlf4758psN!d^~@M zXJeZM4ETL6aqvU5vWw3ux%5jW_=~7ti~{udOFE!C%uo7-G8ps5zhqGdMD!lngRUbK`2IyfR*Wf&ks@=xdUJVUx~Yp0$m z$UK<)71Uikcm#wT+9>?KqCWOox*ymwn;jqgJsGk5{Q;jEm+LaPkvg9A4%Gi7yfpW+ zxwBG_^XQMRtHtb=vDu8`eC~b7!>(`Fimj{%0(Rg63i|Vb4DwXsR0xjtn>LS^;1GdA z{t=9=Bmm$;5Y9XRc*_0H2%*5gc`6a#{v9`>K$Do@t_b*u|I)eqKXkr?5XD^3fB)r6 z0Gaul-SS@$^j}Fp=X-?H@;_Dj68(Qa$`B$z9sVyVSLA=21ke#VG2yz$%@3m=x`hN& z>RuMRa6eGgIkwc;_819k6L-EK9^5!T&tv*2_T@0u@{Fpi;^iwE?-_IRWwY>PbO6AV zh0;Z#ewjg;F=ghv)eMY~s=nqt&m5FtpPL&bRJ$?2DydkeIi-6X3NB9-d-j$}?91p} z^n8o_a?|4Bu;FfnZ@agV)7qCSF>8T!uUkDq@AN_b8g-Ar6bY?WCdMxf4{FujA3^<+b3iFKv(4o?6Mi^zTaBT5`;mFsDiFv10l9X^o7cuAw?Z)EiR;U@h+4^J#*<7of#R8?!2G<0ICi60X- z7I#_vvyKJ5e=K)Cym(VxIyTu1^UaAEPhz*W(Yj9AdgpiMuKeQZb}eLsXj`Gkz7;cP zX~{US!$d116#-=KuHcr_HK}swYE8YzdDAiRSDqkZx%C5uZ~e>l1H~e;mVsv_&JK+E zAuQ8sjp#gsQ+-5Z(nWbnRc;=j)YobmI8uL3tvSszPj54j(@Fb~Eu@S*bn0!U6eHut zq_lmrf~DvwPJyD7sZ__^MyI;kz%l;JWuA+t3UnW-=)tOa%V#+#@)Z6A!FL>1TW^Jw z)<-D;fVct3`+-PWPDBTn)pD2dMC5OGzuRq=Ap;f6QXa%<5Pgf!jdM0dp0RM~E5+(y z|ArM{%}#=9ib8%K)q@=*rCFa{6!H;Q`O_~0I&>KG+s|VJ(#^$wPpI{vPvULxtjOGn z!3`w;nSkudj`M~_rgYwQ;L>jmGv8)ojuUD6_J~7ERz>3mlZ|W+U&X8Sr}R;&c20ezFg6qeP0a}C`u;RX zo1>&v-HO{&u6U&Fv1Ho*7H`(7{gDwaAKSA%7P4r2rX4dnBfSMiN_juJJT2&L7*Wu& zQ#v}nR-IFGYo`3|go;C&_3b_$*X;t9PWzv@uqd#ji~TM?*YWV}0-f0}*Ei8bW#22G z3)V_$M7@!Du)RL=*1`H3MzR!FJ<#t`T43t@TvnKlRQbtk-hKDH(Pv^7U*6hQ36_qO z$LZmkRLee}`Sj*cRh>Le{dfz?Yl1XlEg+<6WR)Dbn9Sl=7d8b+HQotoxiE2=ooa5D# z#VERu*V#j}X4&vSCR zz)9-ofnzd?>vXE}tuf2;inZPBEjRghd#Nbp9SGZa!|r9mYf(lkOR!d|$o(bg zu$K$YMacs=(7!%an5(O$LwC7c9J{`Lto9D7&|);EenZq40UqUy@h+sP;*X*rQV>pH zbdDWO)Z%@q80w~^AID2xWtejH1w)aMRa(-3Q6dy7J*6_h$Qp@mPs2Q9Wf=)Gd3)6P z07AN{34XVr^Rlt9sW4b=_{aC6BN?0GrozTO56_K&P2FsaN)JliT=p|QYMMu{1Sh{v zZky{k{Y8<&CQ+dBmHV2+(U>jL)5C-CHNRVbv8%Whtmqq`P6ng$D28Z!xdK0~`F1l> zg%TZX+Sek5tZ{1RH!C!?qy4rvugK|95$5|$88rix;368F|;@$%>7AL4tBW+*No}@}3 ztWOhD$S^1KVM>^jw)SI9>n(1IdM`D(uU)4q!UfHZVct<3cH#YjSm0|VQ}0;XR! zW&NS)5q9!EV?}+UfDVI&9BEl8tI7e8iKCdFE9cO;+-N>+QH=S_Cqtg7;A2-bYabVrKLeBiw1cK)bgmzlN*64^o$Hv7;X_X*QvoZcmb6Uf;JUUUW zYiEUHBt6&eIPD1nk%3t06UCR!V|-tre7d5@!JlRxP<_(&cftN1QW%o&g0UqnUrHa( z&CPwkdP?|N0&{zguM6+;`=I>rc7^I}{hQvA44vHi*7xyQ?;aYFyNQ>h@li02GlS|e zX;rKb{7=1NAF=I)D^d@?nL4cpVBHPYQ|+R4QaEWEIE9H*ndM35EH*2IApMv&coA~^ z6>5WU^56~Mi;A%ai;6)Jno%ZM=V>cL(ktFERc zBf}E6oraEYRwAqq{X+DsSvyTCRNuMip+L)^3UwG0l1MnY(NZi0$0(35;gr$B0Hmos zDl?)?(Db+C96)|$F)CuB@}B>!#_Gj}SH~yv<@)*ZDGE?2UOCDy_8~7l4rQj?SLnD9 zG;P{;IfRRpppIfvbo{r*%*yL)b~Lj&$+NUJvjYS=_&_?qJsf|KgEhF%&$QQm>(P-AX=1I5kIGJzNTtQ zKzTbTKlvu1K{&xZQVt2AnJm_D1XwPCq^1CMlt9NU{F#&EE%K*zl<*w|6fpU`85PAz zdD-vB7ze~u;=pIJ8g#{y&9w{Foy3;?mj#k(Qu2HcThA zWide9Q#H~VAoS1b$a6y4_*eem>W-nOgLv0&On-$3yP_%R~7xY>%Jn1R{=f3i9v)cI4-RT2LF&`tA-5F8oMNeIbYS6~6q?Nq+fA zNkbhCCFjnV2<=d$peCV6-d4gnAAvuO60AgCUjvaZWDkF=89&eYW`GUPM}7$~V* zWq=$4sUfWc{_YKdE)t<`Tjvlvkp*KhMp6NK0ZUYv?@M4)Z=MC^uYA(P7OFcAr-ZaQ zXJLC-kOB^)1>{~V2f%-aBoE2a!IvSd$K5$c?7TJ|o;qYoSM0i7Tw4pks{41j!(`?$VH zKkrAh)*t_zMQ~aDJBS)0&5RIw=$LI|gBF8svg#RHv)Lc-0zGpSIXF9X)u8Hq0}Km# z-KJy%k7_~L`>)9~^j-7F->2lMB z_hCK&`Z!YJuksVsw@dC&zpYd(=owM`39}f0@SO-Cdu8HHffnSrdEr!}}z%XBFdbgFG!?lP> zQAXo=37?h3;i3#~GxUnHufMz^CtQ8%7Es{2Tj=C!9mjxKPv;Qe)$*kNRt?J;1e5=v z;=dcNq=wwo?zGAND4<&MfTH(q@1^&ZPok5#$`Rqf-&Zkq9DqzE8iuVshS!<=?YF^FR7m8{j;lsYKg4Y zp1P8+>40uOqrl}GwEXBtM!w@f4Y92X3*X?Gq(0>Q-KLZwpY;&iROMfV&I78n9k%an zYy_9jjT9NjXocFf)Q-^&e51=B4Tj2F)Q(5URd}4T0(8}@d#(o!A*ejNLDNT{%0VvL zSWpmD?z!YZiaoe+Piyb&XHK8NSo>pm(&eG6=!&7kk0DkdO!3^b*7?ln&=38wmKzh2 zSLPY$(cet^Oyw{x&&M-O$aoC(;?I|t&tG7C5WjMGKBt~U=e$i&E?hCvv)276A`hRM zo;IJCg?|wex#Ok&{Q~9qaX;H!bz+9*Cj-&X0i-hI#}PDASGjBNNp#E(YsHB@Fairn zMVF^UUM>uWk)!jqv?UKCGqcBgyw`+^Jo5POdT|oaCD0K*Sb1S8@KWf)w8})G+ULN= zt(t80!qbZJ9iD^zODnIHv#f{b?we-;SG9#6%E+I2K~&{lO&@5)_Bq)q3f|5s+UGYV zV8?t=W>`b5zn$wO67FRwB8A!OoKJMP5 zu3E?nJmogXl{c_&#`*0VWPC%i4qpy_=<3#^KP?&`mASK@Cd{ppM!wltik==zJs|p4 z&+z2MjYx%31@!n#uYdie1VnX@VKs|7U`cuco!pd38+pH_#(rt0#MK3B3hDA!IA}n@Z?p}L@lyskh$n6$+(BMScEnA0GqQMD%A$SWRVBXeGL;!aqPBh zONaa!C}$#uLwa#gNz*pkXI}pvRLcCSs{!Ul8Anfd_+dv~)^3yGVCxp;HVsmjng ztzN2AFVXn0LL79X_jC}A0b-R4RVs-;6J^Q8B##?%L-WKk*naWhNqv6f)ir)u7K3H+ zqvG%I223%a^(t%1AWyedkqbgXnGji5`_2|DkJHA|qtMKr(RG%~2yrNG4#BY}beT2* zf!v)GgCRb*QoaRBC=wDv z-qPdA4W_o@YPm~J+>gJy+d4icYg292it9#2C1p`s8E!A!rgbw>q}A?o3nrH!ebe7S zRB7|!nW*lh0Ux#CE#zR<;5dronAys`PB)uFd#H5b0Jm8=5<8}(&xn1}--||6M^8_S zEYK?W=tbFM*A^MG{Bn!F#_{ifN9VJ}TZ0zQi6ZQ(DFyQb&jyni%m>h2h*E7dnXV32rgoI2A-b{>1x{k85 zH5V6qsX0t78P(Uvt@)`H*Eh;+*~ZF888W?cIhit%|G%2~%(m6eDRbMH@1SCTVWSF} zo%wG5SmjLx769-~z)PP($iE}W!q514U@V!*jxG+$xcJ;UiCy*55!z^p>1k$Zc@*ZJ zX%9c}R$MCy0j!~S>5b!W6PKowlW?{}$CJ{8Y0E~wtoXL)S-38BOu(L$Whi_f{j57# z?lc%|TX^K~!R;}RHxp;bI2|+h0&HPz_L`f!UOW3 zymBrdC!DyMdt_ASC$56Ut>uVu^?CBCQ`=vPkLuKw&mELwGJc1O9<)#W+JAQAeq>^n z!(#N6h59n4_m&B~StFP^wXk=3j-BXH(Kw(J@4)X{FAL`@ULyZoaqv9xFmb%?dhRp9 zW3gNQk9!aRAF{BZQ(0!D*5vwlY#;~Uu0Er_-2P@intfFIqK3VNk>*&l`E5j_1`Ri2 zp?!|HZ20;z=(q>2omEzy|B|cn6DeQZzn?RM3zS_8^Y$*HyWzw)L%_MH-&Yr@4C-=eNXERCqI6U>Wm*jO-s4C zKm&k`Er^#70l%{lawIe)xzefrxB^QsG!+HG$|+o%>o;(SDS&uJ{kMGNeP(lj_`>`* zclTxFzwWBnjqeSwNo8lqBoV-Nf6MFC2*Xzhn*aSNgJzRY1wOW79;N1iNc_-yZu5_y z3)q8%7#L7H%vl*B4|rU6Y||KImoAu`z5S<_x_Vw69LK^XB%2(63j;jI_rlX5IS5}4 z!f}SgIq(8${_7jK>KJ$Ic1ZSBZw&fBUMh7PvXJH7J#F+dtIJ8$GCmEx%P16uL~K@5?h;xC6N z4ZZupB7W)&Z@OLWJ8Rb{dCyrsUGl^;eR!k)>NtFN zH%I|ti}ef>-CANrXCX4%kvdnq$xEb`PheKwb0w>OuthAELZ976SpM7Z zZ`WtKJF(df{OBP)2Uxo(e4!Sn^pFAO;nTf%iX7S)%U2bvj&Q{LAyn@n^*?u!oxI(r zH^`;t_^o0FQuxsWqSt8eTsc=#$}z#>2V%!Ol-mS5FAS$#x5R%fGC%(C*FJg5!o1V= z1$zH6JNurY+#S&(w2X5g^4&KXcu^qK4|{6O_ZEmA7j6Hx8Y}z zxzN!-?mx{D7O7{>bmsUs6q~tEJ<{EG@laNzIyeYGM8TM6JnGR3`4N-L!HtqUAblZ!^(nD*h2F?dTm`8_9OBAW~VY8*AMbo)NUv^~z}nGmX_P z-|&pz*RANjqQ@w)*3(-!NB%imh2%EzTVx(26@;My;iAk`A2D=EnOfB);g~zakC6)b z?|=59lZP$&kT>S*azSn*p{5Zjo-wu zEpdnE$}?DBbbo+qq477mq;CD}&UV~kf6&Cw;a9EJ%o=(SdMR%#+!gGh8WW4 zB?|CF`0y~#0PFD9_E@d5lt??zW!NWueAsP=U^tz^#1DS37j#WM?3taO0z5s~=FRl# zzw#j2nfMBp-HgKP_Bh6Eju8(%enF?mV#e)2$$v-Kf4Ffy9fBg7=dKepY_JTz&X$MI z3}&!BUWH~g1$!;58ScYcTy2lDgtpY9$wopW8^>#PxJV|ZCCtkHfF#s3v3D6w(L zJs9h()XNr>YQ22SaDywjHC{-c>U4Fcr>s9U{n^4hMVO256-t^Xv7?r1Q65b8l`4Q}4}Neo=fYT`DuZJ5y4PijazDO<(p5{4TItsRPnsdZphA z+h0G4AshGDnd{3mvA4F?yKy@16zDb9(-#?DbjDkxkAtGfSF_I-IbrL>UmT{#l3dU z=Uob%k6NUKuuVUNQn66=W#!3>{n-S`PcEm2RcFI`Fvxc(6EmZ11e-ImhW4>Rqc!5 zozKnic30MWWXyy|s{fgqICJ79Pis#19ncxhC`ph%i4|aoYv#KSj8G8-kS3Qw{|bwt@-1EhS1>x30QtyBYx7dxAeJcDAA2hVsr_QDkF$E^5IbvPj=AgXWS?d{DrPC7h%FI^(;#LXC(z(PZH zf-m`VNWt=AsWhLzt}vuN(G+vC4~mSZt)ev{cnR7xA`hD8aYlTeHS>h>nKDlLxnE@Vd-2DUP2y~5h1&?-6XxaIYHQb?`uQfvKp|E+X4H-!{3c)u*9mC-QXj=fgUI( zeA~SJ9BUILo+lVv53Y<8@!F2P-9M%}Q4dsIY}(gc;Fe*pI^M%XDJY|D)2pdU@fOn{ zJUk|eL|8~xq)IJMu^+K3P}TH|g_v`N^XO?a%NzwUkou2n7hE`ZZW9)qQCzmEFV@>u zRqi>1<@sMd6GP^N2$A_E^{yY8u=pjav8ScM5b3*O#1pJaHb{6%Hf!bAn63E8y7W(# z%9)eWl*dyMFR>8C75POeDhie>lfg{M)2Tf3p#A=zg=Qwo=$T68Qp|ysU35 zKq}m0Lv;mZtbNqyJ!KNwMOwVEC<78=2~#z*cM=%!e7Sb+&BOhJ9PuL51{sa!g-^7Z z=a%?l`}O@JEdDUMkoTx@Fk9zxVWf-1qLhC8?Grb&li`X3{7OlbEpw)O zY9|LdwvG{!o1q~^T&7Vb@~OXDZuo=l`SiD0f8Fyy#AyNmmKkde46M;ge!`_&Q8^=n z^`^L&H^Vfpzt~;7bRs*dj`PI}laTVLWH72x>HPR3$S5W+=w$LMOb31ylk%iDdL=S- zv(h8LuTD6>sIOGDRQn|Co~&k3I5t8btwEMG4{+k&MeC)&>@i7m5RUa=y*lnl zGLd2uo(3rw8ivfeZS)AoHEm9iF`F)o^hB_14AVfWAM>k_NVo7@!uJ)5ime11ydq5b zzOzr36GLgX=h?e^dko&Y+Q~%W$3&yZi}+~V%g8yz!{rs zT_OJCfxY^EBD6OkWab?@QFA#eLnU-}ZA;K;%Izw46Y>d-JJK2-O;|d;r0YSKkfISj zGW_dAA>2*gBY|%;6@f1=APcr2nER3HKD14G_$nS8_HLd2Zkt(Eyws$Qh zeyOXcX2$lg{D&=)?=KH=GsFZ2yh%!XYVkXXVU+j%^R4fS$s~^7Z(8~o*bf+E`lb|! ztZIYS^wvK|xh8NH^Qq8K+``{V^mDX9UCLJE0eyz?Ah{N^~BKBWxmSyRjT>+ zjp^uk;T|W%&kR1a)5rxGLT;}@DL@Rb4%(Xv?PY|_ihsfw9lx~_ydGD7Bmd8VZ)9Cr zU#;Vgto@F{AhPi3%?0<-Zd!d{dp(@MM8D92goo*1qzH+Gr`*-LRM9Wrj>B@84N^VD zO4X|As2Z>0CS4V$mFWNGx~WV0dx&QW>$r^Ra#|XrTN0PGU+1n!o^jtq0vRk~@eoYP zX{;Hb2hac6p9&QhQqzep^wJK!Zw~xYeE;oHj}cOT%z`+Z10vvOo8#^FnlLE1VB*L; zsKngtLNCUDrAB`Q8GAX6vI{dRh2b@b$bVfsQNVb6!+HlxhGw>t>{n?H$p^EE8jqO% z_g$|r6`DM5ayX_-sVySP%{@YC_iiv+U-lOgjNP-f%qs`K@8IHHFXxwnIfl>`8F_{> zLgHCfI^-A&dYdm~n+-2aOmvdOzft&4tUDp%?*Sk}QJjABXZx-$j9vfS=yjplGZj`?Sz7#6ns@3 zgq1!R_cH6T-)^|KN6lSyg$}|-SRvSGE*J*=mXmICQMvtTpXBnD-uc!BxIh|?=r5Ex zm2VkWf7z0{6=mNd|I(oIuEhShB-3w&NW%66bA|)QpD2T=mXg-gCzXPB=fzWq{*mn) z6=qXTi(~1i3{`pEMrL^dr`NX5{?4}c%tv+{RApQrY{u*``HlQG39J{tbn+kKJ-X=W zRa|G;7x5{TJ!uTGDB*v&Zos{FSGrkgEnl7yYppn{H|+CB@@s4JjF#;)1l>A1IFz)6 zJ3h-QC^A3J;ZmA9%baM)SwyryrbAfX+rsH2hfIMb+-ST*INSl!=bE z*OvM;TQ3|^?-3uAT^|q2UbPVT!(W(R3mPe=7Vzkp5V;jkp09k<_+@!`{mGu=v%q%N zP2pnWpdlvr)@8l(w%9P|vVRQO3O?Eb3D;KX7YOJ~xI z`n}6e=&4`$I5og9R||YB73&}LG7~r;Zirq3)IzmB=@IYs%HCb`A^J@k_?(a039)jI zRw$pK%!3tB9xlH3Fme0d!j@%mL%UZFfBtMRU1{h`bl;p{?oBB^Z)IuJy%^EnnK*r} z(x=_qmHPUDP2dkb)rAW)N-wF$E?eWVDZBO0_|~Mi$_UJ8IwgJo7fd-ajT$Q(xPRO4 z?G|P)4c_*fO)Gi*q~XA=XlI$BE>v#omdM{KfdJ% z))TuN>2HA;|A*+K_FeFk5pM5W%r9m?_VNFv`mNK&{(J_6 z;x3NION^-O>B*LXfbL^)xw-R&-fZ)q4)DKp$hDQlg!-oK%`uQ#a)YzlkYCxsLQ`!o z&inOR-$lOq57nPBf|0HTrh#f~eWmtYVOR+sz4rsbz53OIo?4s9eo3+4$~V-1EBsSp zO+%`G2-(2Y-+9s1h@%>af8Bk$9KLCuvr$py(1tscR_~|hpJV**bsONu3XvPo>v%z2 zT8cgeAbleD!Kd(f__hUu?hU8irZokn%%`OVwEy_GcA(bIP!OZ!JA_1CrgRv7SP8w~ zx-MKHhQGKg$qj1geI<#oss2majEww>R~Q2;7lMXUnp2CP=Yj`=F8V%r!Z6d@PVqQ) zUilvPFSa~2`Ij7O)HTpTx_JmG$J94NKK&jdheR=RgocXxfXC0Pv3-N~N$4-3lAOA1 JxisY6{{fV!!M^|i literal 0 HcmV?d00001 From ddeeec94bf73181be262f15b51c0642178c52091 Mon Sep 17 00:00:00 2001 From: chenmoneygithub Date: Fri, 15 Nov 2024 17:02:27 -0800 Subject: [PATCH 10/11] deflake --- tests/utils/test_asyncify.py | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/tests/utils/test_asyncify.py b/tests/utils/test_asyncify.py index 75f9ddd286..37e268bd83 100644 --- a/tests/utils/test_asyncify.py +++ b/tests/utils/test_asyncify.py @@ -1,6 +1,7 @@ from time import time, sleep import asyncio +import math import pytest import dspy @@ -30,17 +31,25 @@ def the_answer_to_life_the_universe_and_everything(wait: float): async def run_n_tasks(n: int, wait: float): await asyncio.gather(*[ask_the_question(wait) for _ in range(n)]) - async def assert_capacity(capacity: int, wait: float = 0.01, buffer: float = 0.1): + async def verify_asyncify(capacity: int, number_of_tasks: int, wait: float = 0.5): dspy.settings.configure(async_max_workers=capacity) - t1 = time() - await run_n_tasks(capacity, wait) - t2 = time() - assert t2 - t1 < wait + buffer - - t3 = time() - await run_n_tasks(capacity * 1, wait) - t4 = time() - assert t4 - t3 < (wait + buffer) * 2 - - for n in [1, 2, 4, 8, 16, 32, 64]: - await assert_capacity(n) + + start = time() + await run_n_tasks(number_of_tasks, wait) + end = time() + total_time = end - start + + # If asyncify is working correctly, the total time should be less than the total number of loops + # `(number_of_tasks / capacity)` times wait time, plus the computational overhead. The lower bound should + # be `math.floor(number_of_tasks * 1.0 / capacity) * wait` because there are more than + # `math.floor(number_of_tasks * 1.0 / capacity)` loops. + lower_bound = math.floor(number_of_tasks * 1.0 / capacity) * wait + upper_bound = math.ceil(number_of_tasks * 1.0 / capacity) * wait + 2 * wait # 2*wait for buffer + + assert lower_bound < total_time < upper_bound + + await verify_asyncify(4, 10) + await verify_asyncify(8, 15) + await verify_asyncify(8, 30) + + From 994a27a613c26881817e38e91a219b8612d70e4f Mon Sep 17 00:00:00 2001 From: chenmoneygithub Date: Fri, 15 Nov 2024 17:14:27 -0800 Subject: [PATCH 11/11] remove the deployment guide for clarity --- .../tutorials/deployment/deploy_dspy_model.md | 181 ------------------ .../tutorials/deployment/dspy_mlflow_ui.png | Bin 156032 -> 0 bytes 2 files changed, 181 deletions(-) delete mode 100644 docs/docs/tutorials/deployment/deploy_dspy_model.md delete mode 100644 docs/docs/tutorials/deployment/dspy_mlflow_ui.png diff --git a/docs/docs/tutorials/deployment/deploy_dspy_model.md b/docs/docs/tutorials/deployment/deploy_dspy_model.md deleted file mode 100644 index a174dc7f87..0000000000 --- a/docs/docs/tutorials/deployment/deploy_dspy_model.md +++ /dev/null @@ -1,181 +0,0 @@ -# Deploy DSPy Model - -This guide demonstrates two popular approaches to deploy your DSPy models in production: - -1. FastAPI - For simple, lightweight deployments with direct model access -2. MLflow - For production-grade deployments with model versioning and management - -## Deploying with FastAPI - -FastAPI offers a quick and straightforward way to serve your DSPy model as a REST API. This approach is ideal when you have direct access to your model code and need a lightweight deployment solution. - -Before we get started, let's install the required libraries: - -```bash -pip install fastapi uvicorn -``` - -And remember to set your OpenAI API key which is used by our example: - -```bash -export OPENAI_API_KEY="your-openai-api-key" -``` - -Here's a minimal example of a DSPy model: - -```python -import dspy - -lm = dspy.LM("openai/gpt-4o-mini") -dspy.settings.configure(lm=lm) -dspy_model = dspy.ChainOfThought("question -> answer") -``` - -Create a FastAPI application to serve this model: - -```python -from fastapi import FastAPI, HTTPException -from pydantic import BaseModel - -import dspy - -app = FastAPI( - title="DSPy Model API", - description="A simple API serving a DSPy Chain of Thought model", - version="1.0.0" -) - -# Define request model for better documentation and validation -class Question(BaseModel): - text: str - -# Configure your language model and Chain of Thought -lm = dspy.LM("openai/gpt-4o-mini") -dspy.settings.configure(lm=lm, async_max_workers=4) # default is 8 -dspy_model = dspy.asyncify(dspy.ChainOfThought("question -> answer")) - -@app.post("/predict") -async def predict(question: Question): - try: - result = await dspy_model(question=question.text) - return { - "status": "success", - "data": result.toDict() - } - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) -``` - -Save your code in a file, e.g., `fastapi_dspy.py`. Then you can run the app with: - -```bash -uvicorn fastapi_dspy:app --reload -``` - -It will start a local server at `http://127.0.0.1:8000/`. You can test it with the python code below: - -```python -import requests - -response = requests.post( - "http://127.0.0.1:8000/predict", - json={"text": "What is the capital of France?"} -) -print(response.json()) -``` - -You should see the response like below: - -```json -{'status': 'success', 'data': {'reasoning': 'The capital of France is a well-known fact, commonly taught in geography classes and referenced in various contexts. Paris is recognized globally as the capital city, serving as the political, cultural, and economic center of the country.', 'answer': 'The capital of France is Paris.'}} -``` - -## Deploying with MLflow - -We recommend deploying with MLflow if you are looking for a solution to package your DSPy model and deploy in an isolated environment. -MLflow is a popular platform for managing machine learning workflows, including model versioning, tracking, and deployment. - -Let's first install the required libraries: - -```bash -pip install mlflow>=2.18.0 -``` - -Let's spin up the MLflow tracking server, where we will store our DSPy model. The command below will start a local server at -`http://127.0.0.1:5000/`. - -```bash -mlflow ui -``` - -Then we can define the DSPy model and log it to the MLflow server. "log" is an overloaded term in MLflow, basically it means -we store the model information along with environment requirements in the MLflow server. See the code below: - -```python -import dspy -import mlflow - -mlflow.set_tracking_uri("http://127.0.0.1:5000/") -mlflow.set_experiment("deploy_dspy_model") - -lm = dspy.LM("openai/gpt-4o-mini") -dspy.settings.configure(lm=lm) -dspy_model = dspy.ChainOfThought("question -> answer") - -with mlflow.start_run(): - mlflow.dspy.log_model( - dspy_model, - "dspy_model", - input_example={"messages": [{"role": "user", "content": "What is LLM agent?"}]}, - task="llm/v1/chat", - ) -``` - -We recommend you to set `task="llm/v1/chat"` so that the deployed model automatically takes input and generate output in -the same format as the OpenAI chat API, which is a common interface for LLM applications nowadays. Save the code above in -a file, e.g., `mlflow_dspy.py`, and run it. - -After you logged the model, you can view the saved information in MLflow UI. Open `http://127.0.0.1:5000/` and select -the `deploy_dspy_model` experiment, then select the run your just created, under the `Artifacts` tab, you should see the -logged model information, similar to the following screenshot: - -![MLflow UI](./dspy_mlflow_ui.png) - -Grab your run id from UI (or the console print when you execute `mlflow_dspy.py`), now you can deploy the logged model -with the following command: - -```bash -mlflow models serve -m runs:/{run_id}/model -p 6000 -``` - -After the model is deployed, you can test it with the following command: - -```bash -curl http://127.0.0.1:6000/invocations -H "Content-Type:application/json" --data '{"messages": [{"content": "what is 2 + 2?", "role": "user"}]}' -``` - -You should see the response like below: - -```json -{"choices": [{"index": 0, "message": {"role": "assistant", "content": "{\"reasoning\": \"The question asks for the sum of 2 and 2. To find the answer, we simply add the two numbers together: 2 + 2 = 4.\", \"answer\": \"4\"}"}, "finish_reason": "stop"}]} -``` - -For complete guide on how to deploy a DSPy model with MLflow, and how to customize the deployment, please refer to the -[MLflow documentation](https://mlflow.org/docs/latest/llms/dspy/index.html). - -### Best Practices for MLflow Deployment - -1. **Environment Management**: Always specify your Python dependencies in a `conda.yaml` or `requirements.txt` file. -2. **Model Versioning**: Use meaningful tags and descriptions for your model versions. -3. **Input Validation**: Define clear input schemas and examples. -4. **Monitoring**: Set up proper logging and monitoring for production deployments. - -For production deployments, consider using MLflow with containerization: - -```bash -mlflow models build-docker -m "runs:/{run_id}/model" -n "dspy-model" -docker run -p 6000:8080 dspy-model -``` - -For a complete guide on production deployment options and best practices, refer to the -[MLflow documentation](https://mlflow.org/docs/latest/llms/dspy/index.html). diff --git a/docs/docs/tutorials/deployment/dspy_mlflow_ui.png b/docs/docs/tutorials/deployment/dspy_mlflow_ui.png deleted file mode 100644 index fb0e571055cc2ad37bec0c28f264759e9f55b387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156032 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

XgIRpIQdSx%>(5&p!vG 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 JxisY6{{fV!!M^|i