diff --git a/.github/workflows/publish-openbb-jodi.yml b/.github/workflows/publish-openbb-jodi.yml new file mode 100644 index 00000000000..8941e484ef7 --- /dev/null +++ b/.github/workflows/publish-openbb-jodi.yml @@ -0,0 +1,166 @@ +name: ๐Ÿ“ฆ publish openbb-jodi + +# Triggers exclusively on the merge of a ``release/openbb-jodi-v*`` +# branch into ``develop`` (or ``v5``). No push / tag triggers. Four +# sequential jobs โ€” verify the version bump, build once, test the built +# source across the full cross-platform matrix, and only publish to PyPI +# if the entire matrix is green. + +on: + pull_request: + types: [closed] + branches: [develop, v5] + workflow_dispatch: + +permissions: + contents: read + +jobs: + version-check: + name: Verify version bump + if: ${{ (github.event_name == 'pull_request' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/openbb-jodi-v')) || github.event_name == 'workflow_dispatch' }} + runs-on: ubuntu-latest + outputs: + version: ${{ steps.parse.outputs.version }} + defaults: + run: + shell: bash + working-directory: openbb_platform/providers/jodi + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.base.ref || 'develop' }} + + - name: Parse [project].version from pyproject.toml + id: parse + run: | + VERSION=$(grep -m1 -E '^version[[:space:]]*=' pyproject.toml | sed -E 's/^version[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/') + if [ -z "$VERSION" ]; then + echo "::error::Could not parse [project].version from pyproject.toml." + exit 1 + fi + echo "Local version: $VERSION" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Fail if version already exists on PyPI + env: + VERSION: ${{ steps.parse.outputs.version }} + run: | + STATUS=$(curl -sS -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/openbb-jodi/${VERSION}/json") + case "$STATUS" in + 200) + echo "::error::openbb-jodi ${VERSION} is already published on PyPI." + echo "Bump openbb_platform/providers/jodi/pyproject.toml [project].version and re-merge a fresh release branch." + exit 1 + ;; + 404) + echo "openbb-jodi ${VERSION} is not yet on PyPI โ€” proceeding." + ;; + *) + echo "::error::Unexpected status $STATUS from PyPI JSON API. Aborting to avoid a silent skip." + exit 1 + ;; + esac + + - name: Verify release branch name matches pyproject version + if: github.event_name == 'pull_request' + env: + VERSION: ${{ steps.parse.outputs.version }} + BRANCH: ${{ github.event.pull_request.head.ref }} + run: | + EXPECTED="release/openbb-jodi-v${VERSION}" + if [ "$BRANCH" != "$EXPECTED" ]; then + echo "::error::Release branch '${BRANCH}' does not match pyproject version '${VERSION}'." + echo "Expected branch name: '${EXPECTED}'." + echo "Either rename the release branch or update [project].version in pyproject.toml so they agree." + exit 1 + fi + echo "Branch '${BRANCH}' matches pyproject version '${VERSION}'." + + build: + name: Build sdist + wheel + needs: version-check + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: openbb_platform/providers/jodi + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.base.ref || 'develop' }} + + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - run: python -m pip install --upgrade pip uv + + - name: Build sdist + wheel + run: uv build --no-sources + + - uses: actions/upload-artifact@v4 + with: + name: openbb-jodi-dist + path: openbb_platform/providers/jodi/dist/ + if-no-files-found: error + retention-days: 7 + + test: + name: Test (${{ matrix.os }} / Python ${{ matrix.python_version }}) + needs: build + strategy: + fail-fast: false + matrix: + include: + # Linux: full sweep across every released Python. + - { os: ubuntu-latest, python_version: "3.10" } + - { os: ubuntu-latest, python_version: "3.11" } + - { os: ubuntu-latest, python_version: "3.12" } + - { os: ubuntu-latest, python_version: "3.13" } + - { os: ubuntu-latest, python_version: "3.14" } + # macOS + Windows: min and max supported. + - { os: macos-latest, python_version: "3.10" } + - { os: macos-latest, python_version: "3.14" } + - { os: windows-latest, python_version: "3.10" } + - { os: windows-latest, python_version: "3.14" } + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + working-directory: openbb_platform/providers/jodi + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.base.ref || 'develop' }} + + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python_version }} + allow-prereleases: true + + - run: python -m pip install --upgrade pip uv + + - name: Install openbb-jodi from source (+ dev group) + run: | + uv pip install --system -e . + uv pip install --system --group dev + + - name: Run unit tests + run: pytest tests --cov=openbb_jodi --cov-report=term-missing + + publish: + name: Publish to PyPI + needs: test + runs-on: ubuntu-latest + permissions: + id-token: write # required for PyPI OIDC trusted publishing + steps: + - uses: actions/download-artifact@v4 + with: + name: openbb-jodi-dist + path: dist + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: dist diff --git a/.github/workflows/test-unit-openbb-jodi.yml b/.github/workflows/test-unit-openbb-jodi.yml new file mode 100644 index 00000000000..a7f2500f361 --- /dev/null +++ b/.github/workflows/test-unit-openbb-jodi.yml @@ -0,0 +1,130 @@ +name: ๐Ÿงช test openbb-jodi + +# PR-test for the JODI provider. Triggers when a PR touches any file +# under ``openbb_platform/providers/jodi/`` or this workflow itself. +# +# Build-once, test-many: a single ``build`` job produces the wheel + sdist; +# the ``lint`` and ``test`` jobs install the provider editable from source +# (``[tool.uv.sources]`` pins openbb-core to the sibling tree, since +# openbb-core>=2.0.0 is not yet on PyPI) and run across every supported +# (OS, Python) combination. The provider has no build-time assets, so the +# test suite runs entirely from committed fixture samples and VCR +# cassettes โ€” no network in CI. + +on: + pull_request: + branches: [develop, main, v5, feature/v5-platform-api] + paths: + - "openbb_platform/providers/jodi/**" + - ".github/workflows/test-unit-openbb-jodi.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + # Cancel in-flight matrix runs when a new commit lands on the same PR. + group: test-openbb-jodi-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build sdist + wheel + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: openbb_platform/providers/jodi + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - run: python -m pip install --upgrade pip uv + + - name: Build sdist + wheel + run: uv build --no-sources + + - uses: actions/upload-artifact@v4 + with: + name: openbb-jodi-dist + path: openbb_platform/providers/jodi/dist/ + if-no-files-found: error + retention-days: 7 + + lint: + name: Lint (ruff + ty) + needs: build + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: openbb_platform/providers/jodi + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - run: python -m pip install --upgrade pip uv + + - name: Install openbb-jodi in editable mode (+ dev group) + # ``-e .`` reads ``[tool.uv.sources]`` and resolves openbb-core / + # openbb-devtools from the sibling source trees. ``--group dev`` + # pulls in ruff, ty, pytest, pytest-cov, pytest-recorder, etc. + run: | + uv pip install --system -e . + uv pip install --system --group dev + + - name: ruff check + run: ruff check openbb_jodi tests integration + + - name: ruff format --check + run: ruff format --check openbb_jodi tests integration + + - name: ty check + run: ty check openbb_jodi + + test: + name: Test (${{ matrix.os }} / Python ${{ matrix.python_version }}) + needs: build + strategy: + fail-fast: false + matrix: + include: + # Linux: full sweep across every released Python. + - { os: ubuntu-latest, python_version: "3.10" } + - { os: ubuntu-latest, python_version: "3.11" } + - { os: ubuntu-latest, python_version: "3.12" } + - { os: ubuntu-latest, python_version: "3.13" } + - { os: ubuntu-latest, python_version: "3.14" } + # macOS + Windows: min and max supported. + - { os: macos-latest, python_version: "3.10" } + - { os: macos-latest, python_version: "3.14" } + - { os: windows-latest, python_version: "3.10" } + - { os: windows-latest, python_version: "3.14" } + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + working-directory: openbb_platform/providers/jodi + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python_version }} + allow-prereleases: true + + - run: python -m pip install --upgrade pip uv + + - name: Install openbb-jodi from source (+ dev group) + run: | + uv pip install --system -e . + uv pip install --system --group dev + + - name: Run unit tests + run: pytest tests --cov=openbb_jodi --cov-report=term-missing --cov-fail-under=100 diff --git a/openbb_platform/providers/jodi/README.md b/openbb_platform/providers/jodi/README.md new file mode 100644 index 00000000000..dda4def8e80 --- /dev/null +++ b/openbb_platform/providers/jodi/README.md @@ -0,0 +1,46 @@ +# OpenBB JODI Provider + +This extension integrates the [Joint Organisations Data Initiative (JODI)](https://www.jodidata.org) data provider into the OpenBB Platform. + +JODI publishes free monthly petroleum and natural gas supply, demand, and stock statistics, self-reported by over 100 countries, through the JODI-Oil and JODI-Gas World Databases. + +## Installation + +To install the extension: + +```bash +pip install openbb-jodi +``` + +## Endpoints + +Each endpoint returns one presentation-ready view of the raw data, as a date-indexed table, with the series assessments and units in the results metadata. + +### `obb.jodi.oil` โ€” JODI-Oil World Database (monthly, from January 2002) + +- `balance` โ€” one country and product; one column per flow of the JODI questionnaire (production, trade, stocks, refinery activity). +- `production` โ€” one primary product; one column per reporting country. +- `demand` โ€” one refined product; one column per reporting country. +- `demand_by_product` โ€” one country; one column per refined product (the demand barrel). +- `imports` / `exports` โ€” one product; one column per reporting country. +- `stocks` โ€” closing stock levels of one product; one column per reporting country. + +Units: kb/d, kbbl, kl, kmt, and the barrels/kmt conversion factor. + +### `obb.jodi.gas` โ€” JODI-Gas World Database (monthly, from January 2009) + +- `balance` โ€” one country; one column per flow of the JODI questionnaire. +- `production` โ€” one column per reporting country. +- `demand` โ€” gross inland deliveries (observed or calculated); one column per reporting country. +- `imports` / `exports` โ€” total, pipeline, or LNG; one column per reporting country. +- `stocks` โ€” closing stock levels; one column per reporting country. + +Units: million m3, TJ, and kmt of LNG. + +## OpenBB Workspace + +The package bundles a "JODI Oil & Gas" app template (`openbb_jodi/assets/apps.json`), served at `/api/v1/jodi/apps.json` and folded into the Workspace app catalogue automatically when running `openbb-api`. It has three dashboards - Country Balances (oil balance, demand barrel, and gas balance, synchronized on one country), Oil Markets, and Gas Markets. + +No API key is required. Source tables are cached under the OpenBB user cache directory, partitioned by product and flow; a table is downloaded again only when JODI publishes an update. + +Documentation available [here](https://docs.openbb.co/platform/developer_guide/contributing). diff --git a/openbb_platform/providers/jodi/__init__.py b/openbb_platform/providers/jodi/__init__.py new file mode 100644 index 00000000000..b15ce0e3f35 --- /dev/null +++ b/openbb_platform/providers/jodi/__init__.py @@ -0,0 +1 @@ +"""The JODI provider.""" diff --git a/openbb_platform/providers/jodi/integration/__init__.py b/openbb_platform/providers/jodi/integration/__init__.py new file mode 100644 index 00000000000..3f1f94fc3f9 --- /dev/null +++ b/openbb_platform/providers/jodi/integration/__init__.py @@ -0,0 +1 @@ +"""OpenBB JODI Provider Integration Tests.""" diff --git a/openbb_platform/providers/jodi/integration/conftest.py b/openbb_platform/providers/jodi/integration/conftest.py new file mode 100644 index 00000000000..2282708834e --- /dev/null +++ b/openbb_platform/providers/jodi/integration/conftest.py @@ -0,0 +1,53 @@ +"""Integration-test fixtures for openbb-jodi. + +The API-interface tests (``test_jodi_api.py``) need a live HTTP server. +This module runs ``openbb_core.api.rest_api:app`` in a background thread for +the duration of the integration session and exposes the auth ``headers``. +""" + +import base64 +import threading +import time + +import pytest + + +@pytest.fixture(scope="session") +def api_server(pytestconfig): + """Run the OpenBB REST API on localhost:8000 for the integration session.""" + if pytestconfig.getoption("markexpr") == "not integration": + yield None + return + + import uvicorn + from openbb_core.api.rest_api import app + + config = uvicorn.Config(app, host="127.0.0.1", port=8000, log_level="warning") + server = uvicorn.Server(config) + thread = threading.Thread(target=server.run, daemon=True) + thread.start() + + deadline = time.time() + 60 + while time.time() < deadline: + if server.started: + break + time.sleep(0.25) + else: # pragma: no cover + raise RuntimeError("The OpenBB REST API did not start within 60s.") + + yield server + + server.should_exit = True + thread.join(timeout=15) + + +@pytest.fixture(scope="session") +def headers(api_server): + """HTTP Basic auth headers; depends on api_server so the server is live.""" + from openbb_core.env import Env + + userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" + userpass_bytes = userpass.encode("ascii") + base64_bytes = base64.b64encode(userpass_bytes) + + return {"Authorization": f"Basic {base64_bytes.decode('ascii')}"} diff --git a/openbb_platform/providers/jodi/integration/test_jodi_api.py b/openbb_platform/providers/jodi/integration/test_jodi_api.py new file mode 100644 index 00000000000..1a1e1f9279a --- /dev/null +++ b/openbb_platform/providers/jodi/integration/test_jodi_api.py @@ -0,0 +1,322 @@ +"""Test the JODI API endpoints.""" + +import pytest +import requests +from openbb_core.provider.utils.helpers import get_querystring + +BASE_URL = "http://localhost:8000/api/v1/jodi" + + +def run(path: str, params: dict, headers) -> None: + """Run one endpoint and make the common assertions.""" + params = {p: v for p, v in params.items() if v is not None} + query_str = get_querystring(params, []) + result = requests.get( + f"{BASE_URL}/{path}?{query_str}", headers=headers, timeout=600 + ) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + assert result.json()["results"] + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": None, + "product": None, + "unit": None, + "start_date": None, + "end_date": None, + "provider": "jodi", + "use_cache": True, + } + ), + ( + { + "country": "india", + "product": "gasoline", + "unit": "ktons", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_balance(params, headers): + """Test the oil balance endpoint.""" + run("oil/balance", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "saudi_arabia,iraq,united_states", + "product": "crude_oil", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_production(params, headers): + """Test the oil production endpoint.""" + run("oil/production", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,china,india", + "product": "gasoline", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_demand(params, headers): + """Test the oil demand endpoint.""" + run("oil/demand", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "japan", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_demand_by_product(params, headers): + """Test the oil demand by product endpoint.""" + run("oil/demand_by_product", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "china,india,south_korea", + "product": "crude_oil", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_imports(params, headers): + """Test the oil imports endpoint.""" + run("oil/imports", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "saudi_arabia,united_arab_emirates", + "product": "crude_oil", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_exports(params, headers): + """Test the oil exports endpoint.""" + run("oil/exports", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,japan", + "product": "crude_oil", + "unit": "kbbl", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_stocks(params, headers): + """Test the oil stocks endpoint.""" + run("oil/stocks", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": None, + "unit": None, + "start_date": None, + "end_date": None, + "provider": "jodi", + "use_cache": True, + } + ), + ( + { + "country": "norway", + "unit": "tj", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_balance(params, headers): + """Test the gas balance endpoint.""" + run("gas/balance", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,qatar,norway", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_production(params, headers): + """Test the gas production endpoint.""" + run("gas/production", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "germany,france,italy", + "measure": "observed", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_demand(params, headers): + """Test the gas demand endpoint.""" + run("gas/demand", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "japan,china,south_korea", + "flow": "lng", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_imports(params, headers): + """Test the gas imports endpoint.""" + run("gas/imports", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,qatar,australia", + "flow": "lng", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_exports(params, headers): + """Test the gas exports endpoint.""" + run("gas/exports", params, headers) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "germany,france,netherlands", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_stocks(params, headers): + """Test the gas stocks endpoint.""" + run("gas/stocks", params, headers) diff --git a/openbb_platform/providers/jodi/integration/test_jodi_python.py b/openbb_platform/providers/jodi/integration/test_jodi_python.py new file mode 100644 index 00000000000..fa9f07cd007 --- /dev/null +++ b/openbb_platform/providers/jodi/integration/test_jodi_python.py @@ -0,0 +1,342 @@ +"""Test the JODI extension through the Python interface.""" + +import pytest +from openbb_core.app.model.obbject import OBBject + + +@pytest.fixture(scope="session") +def obb(pytestconfig): + """Fixture to setup obb.""" + if pytestconfig.getoption("markexpr") != "not integration": + import openbb + + return openbb.obb + + pytest.skip("Integration tests are not enabled.") + + +def run(obb, path, params): + """Run one endpoint and make the common assertions.""" + params = {p: v for p, v in params.items() if v is not None} + func = obb.jodi + for part in path.split("."): + func = getattr(func, part) + result = func(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.extra["results_metadata"]["source"] + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": None, + "product": None, + "unit": None, + "start_date": None, + "end_date": None, + "provider": "jodi", + "use_cache": True, + } + ), + ( + { + "country": "india", + "product": "gasoline", + "unit": "ktons", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_balance(params, obb): + """Test the oil balance endpoint.""" + run(obb, "oil.balance", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": None, + "product": None, + "unit": None, + "start_date": None, + "end_date": None, + "provider": "jodi", + "use_cache": True, + } + ), + ( + { + "country": "saudi_arabia,iraq,united_states", + "product": "crude_oil", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_production(params, obb): + """Test the oil production endpoint.""" + run(obb, "oil.production", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,china,india", + "product": "gasoline", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_demand(params, obb): + """Test the oil demand endpoint.""" + run(obb, "oil.demand", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "japan", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_demand_by_product(params, obb): + """Test the oil demand by product endpoint.""" + run(obb, "oil.demand_by_product", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "china,india,south_korea", + "product": "crude_oil", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_imports(params, obb): + """Test the oil imports endpoint.""" + run(obb, "oil.imports", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "saudi_arabia,united_arab_emirates", + "product": "crude_oil", + "unit": "kbd", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_exports(params, obb): + """Test the oil exports endpoint.""" + run(obb, "oil.exports", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,japan", + "product": "crude_oil", + "unit": "kbbl", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_oil_stocks(params, obb): + """Test the oil stocks endpoint.""" + run(obb, "oil.stocks", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": None, + "unit": None, + "start_date": None, + "end_date": None, + "provider": "jodi", + "use_cache": True, + } + ), + ( + { + "country": "norway", + "unit": "tj", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_balance(params, obb): + """Test the gas balance endpoint.""" + run(obb, "gas.balance", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,qatar,norway", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_production(params, obb): + """Test the gas production endpoint.""" + run(obb, "gas.production", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "germany,france,italy", + "measure": "observed", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_demand(params, obb): + """Test the gas demand endpoint.""" + run(obb, "gas.demand", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "japan,china,south_korea", + "flow": "lng", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_imports(params, obb): + """Test the gas imports endpoint.""" + run(obb, "gas.imports", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "united_states,qatar,australia", + "flow": "lng", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_exports(params, obb): + """Test the gas exports endpoint.""" + run(obb, "gas.exports", params) + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "country": "germany,france,netherlands", + "unit": "m3", + "start_date": "2023-01-01", + "end_date": "2023-12-31", + "provider": "jodi", + "use_cache": True, + } + ), + ], +) +@pytest.mark.integration +def test_jodi_gas_stocks(params, obb): + """Test the gas stocks endpoint.""" + run(obb, "gas.stocks", params) diff --git a/openbb_platform/providers/jodi/openbb_jodi/__init__.py b/openbb_platform/providers/jodi/openbb_jodi/__init__.py new file mode 100644 index 00000000000..36d825ce56d --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/__init__.py @@ -0,0 +1,42 @@ +"""OpenBB JODI Provider Module.""" + +from openbb_core.provider.abstract.provider import Provider + +from openbb_jodi.models.gas_balance import JodiGasBalanceFetcher +from openbb_jodi.models.gas_demand import JodiGasDemandFetcher +from openbb_jodi.models.gas_exports import JodiGasExportsFetcher +from openbb_jodi.models.gas_imports import JodiGasImportsFetcher +from openbb_jodi.models.gas_production import JodiGasProductionFetcher +from openbb_jodi.models.gas_stocks import JodiGasStocksFetcher +from openbb_jodi.models.oil_balance import JodiOilBalanceFetcher +from openbb_jodi.models.oil_demand import JodiOilDemandFetcher +from openbb_jodi.models.oil_demand_by_product import JodiOilDemandByProductFetcher +from openbb_jodi.models.oil_exports import JodiOilExportsFetcher +from openbb_jodi.models.oil_imports import JodiOilImportsFetcher +from openbb_jodi.models.oil_production import JodiOilProductionFetcher +from openbb_jodi.models.oil_stocks import JodiOilStocksFetcher + +jodi_provider = Provider( + name="jodi", + website="https://www.jodidata.org", + description="The Joint Organisations Data Initiative (JODI) provides free monthly" + + " petroleum and natural gas supply, demand, and stock statistics," + + " self-reported by over 100 countries, through the JODI-Oil and JODI-Gas" + + " World Databases.", + fetcher_dict={ + "JodiGasBalance": JodiGasBalanceFetcher, + "JodiGasDemand": JodiGasDemandFetcher, + "JodiGasExports": JodiGasExportsFetcher, + "JodiGasImports": JodiGasImportsFetcher, + "JodiGasProduction": JodiGasProductionFetcher, + "JodiGasStocks": JodiGasStocksFetcher, + "JodiOilBalance": JodiOilBalanceFetcher, + "JodiOilDemand": JodiOilDemandFetcher, + "JodiOilDemandByProduct": JodiOilDemandByProductFetcher, + "JodiOilExports": JodiOilExportsFetcher, + "JodiOilImports": JodiOilImportsFetcher, + "JodiOilProduction": JodiOilProductionFetcher, + "JodiOilStocks": JodiOilStocksFetcher, + }, + repr_name="Joint Organisations Data Initiative (JODI) World Databases", +) diff --git a/openbb_platform/providers/jodi/openbb_jodi/assets/apps.json b/openbb_platform/providers/jodi/openbb_jodi/assets/apps.json new file mode 100644 index 00000000000..d6f40c6e849 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/assets/apps.json @@ -0,0 +1,260 @@ +[ + { + "name": "JODI Oil & Gas", + "img": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNjAwIDkwMCI+CiAgPHJlY3Qgd2lkdGg9IjE2MDAiIGhlaWdodD0iOTAwIiBmaWxsPSIjMTAxMzE4Ii8+CiAgPHJlY3QgeD0iNDAiIHk9Ijg0NiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjExOCIgeT0iODI4IiB3aWR0aD0iNDYiIGhlaWdodD0iNTIiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTk2IiB5PSI4MzYiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSIyNzQiIHk9IjgxMiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjY4IiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjM1MiIgeT0iODIyIiB3aWR0aD0iNDYiIGhlaWdodD0iNTgiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iNDMwIiB5PSI3OTgiIHdpZHRoPSI0NiIgaGVpZ2h0PSI4MiIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSI1MDgiIHk9IjgxNiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjY0IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjU4NiIgeT0iNzg0IiB3aWR0aD0iNDYiIGhlaWdodD0iOTYiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iNjY0IiB5PSI4MDYiIHdpZHRoPSI0NiIgaGVpZ2h0PSI3NCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSI3NDIiIHk9Ijc3MiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjEwOCIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSI4MjAiIHk9Ijc5MiIgd2lkdGg9IjQ2IiBoZWlnaHQ9Ijg4IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9Ijg5OCIgeT0iNzU4IiB3aWR0aD0iNDYiIGhlaWdodD0iMTIyIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9Ijk3NiIgeT0iNzg0IiB3aWR0aD0iNDYiIGhlaWdodD0iOTYiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTA1NCIgeT0iNzQ4IiB3aWR0aD0iNDYiIGhlaWdodD0iMTMyIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjExMzIiIHk9Ijc3NiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjEwNCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSIxMjEwIiB5PSI3MzQiIHdpZHRoPSI0NiIgaGVpZ2h0PSIxNDYiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTI4OCIgeT0iNzYyIiB3aWR0aD0iNDYiIGhlaWdodD0iMTE4IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjEzNjYiIHk9IjcyMiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjE1OCIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSIxNDQ0IiB5PSI3NTIiIHdpZHRoPSI0NiIgaGVpZ2h0PSIxMjgiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTUyMiIgeT0iNzEwIiB3aWR0aD0iNDYiIGhlaWdodD0iMTcwIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MiwzMTgpIj4KICAgIDxwYXRoIGQ9Ik0wLC05MiBDNTAsLTIyIDY4LDE0IDY4LDQ2IEE2OCw2OCAwIDEsMSAtNjgsNDYgQy02OCwxNCAtNTAsLTIyIDAsLTkyIFoiIGZpbGw9IiMxQ0IwQ0YiLz4KICA8L2c+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODkyLDMxOCkiPgogICAgPHBhdGggZD0iTTAsLTk2IEMzNCwtNTIgNjIsLTE0IDYyLDM4IEE2Miw2NiAwIDEsMSAtNjIsMzggQy02Miw2IC00MCwtMTggLTI2LC0zOCBDLTE0LC0yMCAtOCwtOCAtMTIsMTAgQzYsLTYgOCwtNDAgMCwtOTYgWiIgZmlsbD0iIzhEQzYzRiIvPgogIDwvZz4KICA8dGV4dCB4PSI4MDAiIHk9IjU2MiIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTY4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjRjJGNEY3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBsZXR0ZXItc3BhY2luZz0iMTAiPkpPREk8L3RleHQ+CiAgPHRleHQgeD0iODAwIiB5PSI2NDgiIGZvbnQtZmFtaWx5PSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjUyIiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjRjJGNEY3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBvcGFjaXR5PSIwLjkyIj5PaWwgJmFtcDsgR2FzIFdvcmxkIERhdGFiYXNlczwvdGV4dD4KICA8dGV4dCB4PSI4MDAiIHk9IjcxNiIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMzQiIGZpbGw9IiM5QUE0QjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkpvaW50IE9yZ2FuaXNhdGlvbnMgRGF0YSBJbml0aWF0aXZlPC90ZXh0Pgo8L3N2Zz4=", + "img_dark": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNjAwIDkwMCI+CiAgPHJlY3Qgd2lkdGg9IjE2MDAiIGhlaWdodD0iOTAwIiBmaWxsPSIjMTAxMzE4Ii8+CiAgPHJlY3QgeD0iNDAiIHk9Ijg0NiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjExOCIgeT0iODI4IiB3aWR0aD0iNDYiIGhlaWdodD0iNTIiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTk2IiB5PSI4MzYiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSIyNzQiIHk9IjgxMiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjY4IiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjM1MiIgeT0iODIyIiB3aWR0aD0iNDYiIGhlaWdodD0iNTgiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iNDMwIiB5PSI3OTgiIHdpZHRoPSI0NiIgaGVpZ2h0PSI4MiIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSI1MDgiIHk9IjgxNiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjY0IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjU4NiIgeT0iNzg0IiB3aWR0aD0iNDYiIGhlaWdodD0iOTYiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iNjY0IiB5PSI4MDYiIHdpZHRoPSI0NiIgaGVpZ2h0PSI3NCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSI3NDIiIHk9Ijc3MiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjEwOCIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSI4MjAiIHk9Ijc5MiIgd2lkdGg9IjQ2IiBoZWlnaHQ9Ijg4IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9Ijg5OCIgeT0iNzU4IiB3aWR0aD0iNDYiIGhlaWdodD0iMTIyIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9Ijk3NiIgeT0iNzg0IiB3aWR0aD0iNDYiIGhlaWdodD0iOTYiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTA1NCIgeT0iNzQ4IiB3aWR0aD0iNDYiIGhlaWdodD0iMTMyIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjExMzIiIHk9Ijc3NiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjEwNCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSIxMjEwIiB5PSI3MzQiIHdpZHRoPSI0NiIgaGVpZ2h0PSIxNDYiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTI4OCIgeT0iNzYyIiB3aWR0aD0iNDYiIGhlaWdodD0iMTE4IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC4zMiIvPjxyZWN0IHg9IjEzNjYiIHk9IjcyMiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjE1OCIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuMzIiLz48cmVjdCB4PSIxNDQ0IiB5PSI3NTIiIHdpZHRoPSI0NiIgaGVpZ2h0PSIxMjgiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjMyIi8+PHJlY3QgeD0iMTUyMiIgeT0iNzEwIiB3aWR0aD0iNDYiIGhlaWdodD0iMTcwIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC4zMiIvPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MiwzMTgpIj4KICAgIDxwYXRoIGQ9Ik0wLC05MiBDNTAsLTIyIDY4LDE0IDY4LDQ2IEE2OCw2OCAwIDEsMSAtNjgsNDYgQy02OCwxNCAtNTAsLTIyIDAsLTkyIFoiIGZpbGw9IiMxQ0IwQ0YiLz4KICA8L2c+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODkyLDMxOCkiPgogICAgPHBhdGggZD0iTTAsLTk2IEMzNCwtNTIgNjIsLTE0IDYyLDM4IEE2Miw2NiAwIDEsMSAtNjIsMzggQy02Miw2IC00MCwtMTggLTI2LC0zOCBDLTE0LC0yMCAtOCwtOCAtMTIsMTAgQzYsLTYgOCwtNDAgMCwtOTYgWiIgZmlsbD0iIzhEQzYzRiIvPgogIDwvZz4KICA8dGV4dCB4PSI4MDAiIHk9IjU2MiIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTY4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjRjJGNEY3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBsZXR0ZXItc3BhY2luZz0iMTAiPkpPREk8L3RleHQ+CiAgPHRleHQgeD0iODAwIiB5PSI2NDgiIGZvbnQtZmFtaWx5PSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjUyIiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjRjJGNEY3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBvcGFjaXR5PSIwLjkyIj5PaWwgJmFtcDsgR2FzIFdvcmxkIERhdGFiYXNlczwvdGV4dD4KICA8dGV4dCB4PSI4MDAiIHk9IjcxNiIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMzQiIGZpbGw9IiM5QUE0QjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkpvaW50IE9yZ2FuaXNhdGlvbnMgRGF0YSBJbml0aWF0aXZlPC90ZXh0Pgo8L3N2Zz4=", + "img_light": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNjAwIDkwMCI+CiAgPHJlY3Qgd2lkdGg9IjE2MDAiIGhlaWdodD0iOTAwIiBmaWxsPSIjRjdGOEZBIi8+CiAgPHJlY3QgeD0iNDAiIHk9Ijg0NiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9IjExOCIgeT0iODI4IiB3aWR0aD0iNDYiIGhlaWdodD0iNTIiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjQ1Ii8+PHJlY3QgeD0iMTk2IiB5PSI4MzYiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuNDUiLz48cmVjdCB4PSIyNzQiIHk9IjgxMiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjY4IiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9IjM1MiIgeT0iODIyIiB3aWR0aD0iNDYiIGhlaWdodD0iNTgiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjQ1Ii8+PHJlY3QgeD0iNDMwIiB5PSI3OTgiIHdpZHRoPSI0NiIgaGVpZ2h0PSI4MiIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuNDUiLz48cmVjdCB4PSI1MDgiIHk9IjgxNiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjY0IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9IjU4NiIgeT0iNzg0IiB3aWR0aD0iNDYiIGhlaWdodD0iOTYiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjQ1Ii8+PHJlY3QgeD0iNjY0IiB5PSI4MDYiIHdpZHRoPSI0NiIgaGVpZ2h0PSI3NCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuNDUiLz48cmVjdCB4PSI3NDIiIHk9Ijc3MiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjEwOCIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuNDUiLz48cmVjdCB4PSI4MjAiIHk9Ijc5MiIgd2lkdGg9IjQ2IiBoZWlnaHQ9Ijg4IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9Ijg5OCIgeT0iNzU4IiB3aWR0aD0iNDYiIGhlaWdodD0iMTIyIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9Ijk3NiIgeT0iNzg0IiB3aWR0aD0iNDYiIGhlaWdodD0iOTYiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjQ1Ii8+PHJlY3QgeD0iMTA1NCIgeT0iNzQ4IiB3aWR0aD0iNDYiIGhlaWdodD0iMTMyIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9IjExMzIiIHk9Ijc3NiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjEwNCIgcng9IjYiIGZpbGw9IiMxQ0IwQ0YiIG9wYWNpdHk9IjAuNDUiLz48cmVjdCB4PSIxMjEwIiB5PSI3MzQiIHdpZHRoPSI0NiIgaGVpZ2h0PSIxNDYiIHJ4PSI2IiBmaWxsPSIjOERDNjNGIiBvcGFjaXR5PSIwLjQ1Ii8+PHJlY3QgeD0iMTI4OCIgeT0iNzYyIiB3aWR0aD0iNDYiIGhlaWdodD0iMTE4IiByeD0iNiIgZmlsbD0iIzFDQjBDRiIgb3BhY2l0eT0iMC40NSIvPjxyZWN0IHg9IjEzNjYiIHk9IjcyMiIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjE1OCIgcng9IjYiIGZpbGw9IiM4REM2M0YiIG9wYWNpdHk9IjAuNDUiLz48cmVjdCB4PSIxNDQ0IiB5PSI3NTIiIHdpZHRoPSI0NiIgaGVpZ2h0PSIxMjgiIHJ4PSI2IiBmaWxsPSIjMUNCMENGIiBvcGFjaXR5PSIwLjQ1Ii8+PHJlY3QgeD0iMTUyMiIgeT0iNzEwIiB3aWR0aD0iNDYiIGhlaWdodD0iMTcwIiByeD0iNiIgZmlsbD0iIzhEQzYzRiIgb3BhY2l0eT0iMC40NSIvPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MiwzMTgpIj4KICAgIDxwYXRoIGQ9Ik0wLC05MiBDNTAsLTIyIDY4LDE0IDY4LDQ2IEE2OCw2OCAwIDEsMSAtNjgsNDYgQy02OCwxNCAtNTAsLTIyIDAsLTkyIFoiIGZpbGw9IiMxQ0IwQ0YiLz4KICA8L2c+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODkyLDMxOCkiPgogICAgPHBhdGggZD0iTTAsLTk2IEMzNCwtNTIgNjIsLTE0IDYyLDM4IEE2Miw2NiAwIDEsMSAtNjIsMzggQy02Miw2IC00MCwtMTggLTI2LC0zOCBDLTE0LC0yMCAtOCwtOCAtMTIsMTAgQzYsLTYgOCwtNDAgMCwtOTYgWiIgZmlsbD0iIzhEQzYzRiIvPgogIDwvZz4KICA8dGV4dCB4PSI4MDAiIHk9IjU2MiIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTY4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMTYxQjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBsZXR0ZXItc3BhY2luZz0iMTAiPkpPREk8L3RleHQ+CiAgPHRleHQgeD0iODAwIiB5PSI2NDgiIGZvbnQtZmFtaWx5PSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjUyIiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTYxQjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBvcGFjaXR5PSIwLjkyIj5PaWwgJmFtcDsgR2FzIFdvcmxkIERhdGFiYXNlczwvdGV4dD4KICA8dGV4dCB4PSI4MDAiIHk9IjcxNiIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMzQiIGZpbGw9IiM1QjY1NzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkpvaW50IE9yZ2FuaXNhdGlvbnMgRGF0YSBJbml0aWF0aXZlPC90ZXh0Pgo8L3N2Zz4=", + "description": "Monthly world petroleum and natural gas supply, demand, and stock statistics, self-reported by over 100 countries through the Joint Organisations Data Initiative (JODI) World Databases.", + "allowCustomization": true, + "tabs": { + "country_balances": { + "id": "country_balances", + "name": "Country Balances", + "layout": [ + { + "i": "jodi_oil_balance_jodi_obb", + "x": 0, + "y": 0, + "w": 40, + "h": 14, + "groups": [ + "Group 1" + ] + }, + { + "i": "jodi_oil_demand_by_product_jodi_obb", + "x": 0, + "y": 14, + "w": 20, + "h": 13, + "groups": [ + "Group 1" + ] + }, + { + "i": "jodi_gas_balance_jodi_obb", + "x": 20, + "y": 14, + "w": 20, + "h": 13, + "groups": [ + "Group 1" + ] + } + ] + }, + "oil_markets": { + "id": "oil_markets", + "name": "Oil Markets", + "layout": [ + { + "i": "jodi_oil_production_jodi_obb", + "x": 0, + "y": 0, + "w": 20, + "h": 13, + "groups": [ + "Group 2", + "Group 4" + ] + }, + { + "i": "jodi_oil_demand_jodi_obb", + "x": 20, + "y": 0, + "w": 20, + "h": 13, + "groups": [ + "Group 2", + "Group 4" + ] + }, + { + "i": "jodi_oil_imports_jodi_obb", + "x": 0, + "y": 13, + "w": 20, + "h": 13, + "groups": [ + "Group 2", + "Group 3", + "Group 4" + ] + }, + { + "i": "jodi_oil_exports_jodi_obb", + "x": 20, + "y": 13, + "w": 20, + "h": 13, + "groups": [ + "Group 2", + "Group 3", + "Group 4" + ] + }, + { + "i": "jodi_oil_stocks_jodi_obb", + "x": 0, + "y": 26, + "w": 40, + "h": 13, + "groups": [ + "Group 2", + "Group 3" + ] + } + ] + }, + "gas_markets": { + "id": "gas_markets", + "name": "Gas Markets", + "layout": [ + { + "i": "jodi_gas_production_jodi_obb", + "x": 0, + "y": 0, + "w": 20, + "h": 13, + "groups": [ + "Group 5", + "Group 6" + ] + }, + { + "i": "jodi_gas_demand_jodi_obb", + "x": 20, + "y": 0, + "w": 20, + "h": 13, + "groups": [ + "Group 5", + "Group 6" + ] + }, + { + "i": "jodi_gas_imports_jodi_obb", + "x": 0, + "y": 13, + "w": 20, + "h": 13, + "groups": [ + "Group 5", + "Group 6", + "Group 7" + ] + }, + { + "i": "jodi_gas_exports_jodi_obb", + "x": 20, + "y": 13, + "w": 20, + "h": 13, + "groups": [ + "Group 5", + "Group 6", + "Group 7" + ] + }, + { + "i": "jodi_gas_stocks_jodi_obb", + "x": 0, + "y": 26, + "w": 40, + "h": 13, + "groups": [ + "Group 5", + "Group 6" + ] + } + ] + } + }, + "groups": [ + { + "name": "Group 1", + "type": "param", + "paramName": "country", + "defaultValue": "united_states", + "widgetIds": [ + "jodi_oil_balance_jodi_obb", + "jodi_oil_demand_by_product_jodi_obb", + "jodi_gas_balance_jodi_obb" + ] + }, + { + "name": "Group 2", + "type": "param", + "paramName": "country", + "defaultValue": "united_states,saudi_arabia,russia,china,india", + "widgetIds": [ + "jodi_oil_production_jodi_obb", + "jodi_oil_demand_jodi_obb", + "jodi_oil_imports_jodi_obb", + "jodi_oil_exports_jodi_obb", + "jodi_oil_stocks_jodi_obb" + ] + }, + { + "name": "Group 3", + "type": "param", + "paramName": "product", + "defaultValue": "crude_oil", + "widgetIds": [ + "jodi_oil_imports_jodi_obb", + "jodi_oil_exports_jodi_obb", + "jodi_oil_stocks_jodi_obb" + ] + }, + { + "name": "Group 4", + "type": "param", + "paramName": "unit", + "defaultValue": "kbd", + "widgetIds": [ + "jodi_oil_production_jodi_obb", + "jodi_oil_demand_jodi_obb", + "jodi_oil_imports_jodi_obb", + "jodi_oil_exports_jodi_obb" + ] + }, + { + "name": "Group 5", + "type": "param", + "paramName": "country", + "defaultValue": "united_states,qatar,norway,china,japan", + "widgetIds": [ + "jodi_gas_production_jodi_obb", + "jodi_gas_demand_jodi_obb", + "jodi_gas_imports_jodi_obb", + "jodi_gas_exports_jodi_obb", + "jodi_gas_stocks_jodi_obb" + ] + }, + { + "name": "Group 6", + "type": "param", + "paramName": "unit", + "defaultValue": "m3", + "widgetIds": [ + "jodi_gas_production_jodi_obb", + "jodi_gas_demand_jodi_obb", + "jodi_gas_imports_jodi_obb", + "jodi_gas_exports_jodi_obb", + "jodi_gas_stocks_jodi_obb" + ] + }, + { + "name": "Group 7", + "type": "param", + "paramName": "flow", + "defaultValue": "total", + "widgetIds": [ + "jodi_gas_imports_jodi_obb", + "jodi_gas_exports_jodi_obb" + ] + } + ], + "prompts": [] + } +] diff --git a/openbb_platform/providers/jodi/openbb_jodi/gas_router.py b/openbb_platform/providers/jodi/openbb_jodi/gas_router.py new file mode 100644 index 00000000000..42d90a16e02 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/gas_router.py @@ -0,0 +1,183 @@ +"""JODI Gas Router.""" + +from openbb_core.app.model.command_context import CommandContext +from openbb_core.app.model.example import APIEx +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.provider_interface import ( + ExtraParams, + ProviderChoices, + StandardParams, +) +from openbb_core.app.query import Query as OpenBBQuery +from openbb_core.app.router import Router + +router = Router( + prefix="/gas", + description="JODI-Gas World Database." + + " Monthly data from January 2009 to the most recent month.", +) + + +@router.command( + model="JodiGasBalance", + examples=[ + APIEx( + description="Get the United States natural gas balance - one column per questionnaire flow.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Get Norway's natural gas balance, in terajoules.", + parameters={ + "provider": "jodi", + "country": "norway", + "unit": "tj", + "start_date": "2020-01-01", + }, + ), + ], +) +async def balance( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get a country's monthly natural gas balance - production, pipeline and LNG trade, deliveries, and stocks, one column per flow of the JODI questionnaire.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiGasProduction", + examples=[ + APIEx( + description="Get monthly natural gas production - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare natural gas production in the United States, Qatar, and Norway.", + parameters={ + "provider": "jodi", + "country": "united_states,qatar,norway", + "start_date": "2020-01-01", + }, + ), + ], +) +async def production( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly natural gas production - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiGasDemand", + examples=[ + APIEx( + description="Get monthly natural gas demand - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare natural gas demand in Germany, France, and Italy.", + parameters={ + "provider": "jodi", + "country": "germany,france,italy", + "start_date": "2020-01-01", + }, + ), + ], +) +async def demand( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly natural gas demand, as gross inland deliveries - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiGasImports", + examples=[ + APIEx( + description="Get monthly natural gas imports - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare LNG imports of Japan, China, and South Korea.", + parameters={ + "provider": "jodi", + "country": "japan,china,south_korea", + "flow": "lng", + "start_date": "2020-01-01", + }, + ), + ], +) +async def imports( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly natural gas imports - total, pipeline, or LNG - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiGasExports", + examples=[ + APIEx( + description="Get monthly natural gas exports - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare LNG exports from the United States, Qatar, and Australia.", + parameters={ + "provider": "jodi", + "country": "united_states,qatar,australia", + "flow": "lng", + "start_date": "2020-01-01", + }, + ), + ], +) +async def exports( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly natural gas exports - total, pipeline, or LNG - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiGasStocks", + examples=[ + APIEx( + description="Get monthly natural gas closing stock levels - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare natural gas stocks in Germany, France, and the Netherlands.", + parameters={ + "provider": "jodi", + "country": "germany,france,netherlands", + "start_date": "2020-01-01", + }, + ), + ], +) +async def stocks( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly natural gas closing stock levels - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) diff --git a/openbb_platform/providers/jodi/openbb_jodi/jodi_router.py b/openbb_platform/providers/jodi/openbb_jodi/jodi_router.py new file mode 100644 index 00000000000..90d0bf02d78 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/jodi_router.py @@ -0,0 +1,39 @@ +"""JODI Router.""" + +from contextlib import asynccontextmanager + +from openbb_core.app.router import Router + +from openbb_jodi.gas_router import router as gas_router +from openbb_jodi.oil_router import router as oil_router + + +@asynccontextmanager +async def lifespan(_): + """Warm the JODI table cache in the background at application startup.""" + from openbb_jodi.utils.helpers import start_prefetch + + start_prefetch() + yield + + +router = Router( + prefix="", + description="Monthly petroleum and natural gas supply, demand, and stock" + + " statistics, self-reported by over 100 countries, from the Joint" + + " Organisations Data Initiative (JODI) World Databases.", +) +router.api_router.lifespan_context = lifespan +router.include_router(oil_router) +router.include_router(gas_router) + + +@router.api_router.get("/apps.json", include_in_schema=False) +async def jodi_apps() -> list: + """Serve the bundled JODI dashboard template (``assets/apps.json``).""" + import json # noqa + from pathlib import Path + + apps_json = Path(__file__).parent / "assets" / "apps.json" + + return json.loads(apps_json.read_text(encoding="utf-8")) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/__init__.py b/openbb_platform/providers/jodi/openbb_jodi/models/__init__.py new file mode 100644 index 00000000000..3026e293444 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/__init__.py @@ -0,0 +1 @@ +"""OpenBB JODI Provider Models.""" diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/country_data.py b/openbb_platform/providers/jodi/openbb_jodi/models/country_data.py new file mode 100644 index 00000000000..f69cc97068e --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/country_data.py @@ -0,0 +1,607 @@ +"""JODI Country Series Data Model.""" + +from datetime import date as dateType + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.utils.descriptions import DATA_DESCRIPTIONS +from pydantic import Field + + +class JodiCountryData(Data): + """JODI Country Series Data. + + One column per reporting country, in alphabetical order. Countries + without an observation for the period and measure are None. + """ + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + albania: float | None = Field( + default=None, + description="Monthly value reported by Albania.", + json_schema_extra={"x-widget_config": {"headerName": "Albania"}}, + ) + algeria: float | None = Field( + default=None, + description="Monthly value reported by Algeria.", + json_schema_extra={"x-widget_config": {"headerName": "Algeria"}}, + ) + angola: float | None = Field( + default=None, + description="Monthly value reported by Angola.", + json_schema_extra={"x-widget_config": {"headerName": "Angola"}}, + ) + argentina: float | None = Field( + default=None, + description="Monthly value reported by Argentina.", + json_schema_extra={"x-widget_config": {"headerName": "Argentina"}}, + ) + armenia: float | None = Field( + default=None, + description="Monthly value reported by Armenia.", + json_schema_extra={"x-widget_config": {"headerName": "Armenia"}}, + ) + australia: float | None = Field( + default=None, + description="Monthly value reported by Australia.", + json_schema_extra={"x-widget_config": {"headerName": "Australia"}}, + ) + austria: float | None = Field( + default=None, + description="Monthly value reported by Austria.", + json_schema_extra={"x-widget_config": {"headerName": "Austria"}}, + ) + azerbaijan: float | None = Field( + default=None, + description="Monthly value reported by Azerbaijan.", + json_schema_extra={"x-widget_config": {"headerName": "Azerbaijan"}}, + ) + bahrain: float | None = Field( + default=None, + description="Monthly value reported by Bahrain.", + json_schema_extra={"x-widget_config": {"headerName": "Bahrain"}}, + ) + bangladesh: float | None = Field( + default=None, + description="Monthly value reported by Bangladesh.", + json_schema_extra={"x-widget_config": {"headerName": "Bangladesh"}}, + ) + barbados: float | None = Field( + default=None, + description="Monthly value reported by Barbados.", + json_schema_extra={"x-widget_config": {"headerName": "Barbados"}}, + ) + belarus: float | None = Field( + default=None, + description="Monthly value reported by Belarus.", + json_schema_extra={"x-widget_config": {"headerName": "Belarus"}}, + ) + belgium: float | None = Field( + default=None, + description="Monthly value reported by Belgium.", + json_schema_extra={"x-widget_config": {"headerName": "Belgium"}}, + ) + belize: float | None = Field( + default=None, + description="Monthly value reported by Belize.", + json_schema_extra={"x-widget_config": {"headerName": "Belize"}}, + ) + bermuda: float | None = Field( + default=None, + description="Monthly value reported by Bermuda.", + json_schema_extra={"x-widget_config": {"headerName": "Bermuda"}}, + ) + bolivia: float | None = Field( + default=None, + description="Monthly value reported by Bolivia.", + json_schema_extra={"x-widget_config": {"headerName": "Bolivia"}}, + ) + brazil: float | None = Field( + default=None, + description="Monthly value reported by Brazil.", + json_schema_extra={"x-widget_config": {"headerName": "Brazil"}}, + ) + brunei: float | None = Field( + default=None, + description="Monthly value reported by Brunei.", + json_schema_extra={"x-widget_config": {"headerName": "Brunei"}}, + ) + bulgaria: float | None = Field( + default=None, + description="Monthly value reported by Bulgaria.", + json_schema_extra={"x-widget_config": {"headerName": "Bulgaria"}}, + ) + canada: float | None = Field( + default=None, + description="Monthly value reported by Canada.", + json_schema_extra={"x-widget_config": {"headerName": "Canada"}}, + ) + chile: float | None = Field( + default=None, + description="Monthly value reported by Chile.", + json_schema_extra={"x-widget_config": {"headerName": "Chile"}}, + ) + china: float | None = Field( + default=None, + description="Monthly value reported by China.", + json_schema_extra={"x-widget_config": {"headerName": "China"}}, + ) + colombia: float | None = Field( + default=None, + description="Monthly value reported by Colombia.", + json_schema_extra={"x-widget_config": {"headerName": "Colombia"}}, + ) + costa_rica: float | None = Field( + default=None, + description="Monthly value reported by Costa Rica.", + json_schema_extra={"x-widget_config": {"headerName": "Costa Rica"}}, + ) + croatia: float | None = Field( + default=None, + description="Monthly value reported by Croatia.", + json_schema_extra={"x-widget_config": {"headerName": "Croatia"}}, + ) + cuba: float | None = Field( + default=None, + description="Monthly value reported by Cuba.", + json_schema_extra={"x-widget_config": {"headerName": "Cuba"}}, + ) + cyprus: float | None = Field( + default=None, + description="Monthly value reported by Cyprus.", + json_schema_extra={"x-widget_config": {"headerName": "Cyprus"}}, + ) + czechia: float | None = Field( + default=None, + description="Monthly value reported by Czechia.", + json_schema_extra={"x-widget_config": {"headerName": "Czechia"}}, + ) + denmark: float | None = Field( + default=None, + description="Monthly value reported by Denmark.", + json_schema_extra={"x-widget_config": {"headerName": "Denmark"}}, + ) + dominican_republic: float | None = Field( + default=None, + description="Monthly value reported by Dominican Republic.", + json_schema_extra={"x-widget_config": {"headerName": "Dominican Republic"}}, + ) + ecuador: float | None = Field( + default=None, + description="Monthly value reported by Ecuador.", + json_schema_extra={"x-widget_config": {"headerName": "Ecuador"}}, + ) + egypt: float | None = Field( + default=None, + description="Monthly value reported by Egypt.", + json_schema_extra={"x-widget_config": {"headerName": "Egypt"}}, + ) + el_salvador: float | None = Field( + default=None, + description="Monthly value reported by El Salvador.", + json_schema_extra={"x-widget_config": {"headerName": "El Salvador"}}, + ) + equatorial_guinea: float | None = Field( + default=None, + description="Monthly value reported by Equatorial Guinea.", + json_schema_extra={"x-widget_config": {"headerName": "Equatorial Guinea"}}, + ) + estonia: float | None = Field( + default=None, + description="Monthly value reported by Estonia.", + json_schema_extra={"x-widget_config": {"headerName": "Estonia"}}, + ) + eswatini: float | None = Field( + default=None, + description="Monthly value reported by Eswatini.", + json_schema_extra={"x-widget_config": {"headerName": "Eswatini"}}, + ) + finland: float | None = Field( + default=None, + description="Monthly value reported by Finland.", + json_schema_extra={"x-widget_config": {"headerName": "Finland"}}, + ) + france: float | None = Field( + default=None, + description="Monthly value reported by France.", + json_schema_extra={"x-widget_config": {"headerName": "France"}}, + ) + gabon: float | None = Field( + default=None, + description="Monthly value reported by Gabon.", + json_schema_extra={"x-widget_config": {"headerName": "Gabon"}}, + ) + gambia: float | None = Field( + default=None, + description="Monthly value reported by Gambia.", + json_schema_extra={"x-widget_config": {"headerName": "Gambia"}}, + ) + georgia: float | None = Field( + default=None, + description="Monthly value reported by Georgia.", + json_schema_extra={"x-widget_config": {"headerName": "Georgia"}}, + ) + germany: float | None = Field( + default=None, + description="Monthly value reported by Germany.", + json_schema_extra={"x-widget_config": {"headerName": "Germany"}}, + ) + greece: float | None = Field( + default=None, + description="Monthly value reported by Greece.", + json_schema_extra={"x-widget_config": {"headerName": "Greece"}}, + ) + grenada: float | None = Field( + default=None, + description="Monthly value reported by Grenada.", + json_schema_extra={"x-widget_config": {"headerName": "Grenada"}}, + ) + guatemala: float | None = Field( + default=None, + description="Monthly value reported by Guatemala.", + json_schema_extra={"x-widget_config": {"headerName": "Guatemala"}}, + ) + guyana: float | None = Field( + default=None, + description="Monthly value reported by Guyana.", + json_schema_extra={"x-widget_config": {"headerName": "Guyana"}}, + ) + haiti: float | None = Field( + default=None, + description="Monthly value reported by Haiti.", + json_schema_extra={"x-widget_config": {"headerName": "Haiti"}}, + ) + honduras: float | None = Field( + default=None, + description="Monthly value reported by Honduras.", + json_schema_extra={"x-widget_config": {"headerName": "Honduras"}}, + ) + hong_kong: float | None = Field( + default=None, + description="Monthly value reported by Hong Kong.", + json_schema_extra={"x-widget_config": {"headerName": "Hong Kong"}}, + ) + hungary: float | None = Field( + default=None, + description="Monthly value reported by Hungary.", + json_schema_extra={"x-widget_config": {"headerName": "Hungary"}}, + ) + iceland: float | None = Field( + default=None, + description="Monthly value reported by Iceland.", + json_schema_extra={"x-widget_config": {"headerName": "Iceland"}}, + ) + india: float | None = Field( + default=None, + description="Monthly value reported by India.", + json_schema_extra={"x-widget_config": {"headerName": "India"}}, + ) + indonesia: float | None = Field( + default=None, + description="Monthly value reported by Indonesia.", + json_schema_extra={"x-widget_config": {"headerName": "Indonesia"}}, + ) + iran: float | None = Field( + default=None, + description="Monthly value reported by Iran.", + json_schema_extra={"x-widget_config": {"headerName": "Iran"}}, + ) + iraq: float | None = Field( + default=None, + description="Monthly value reported by Iraq.", + json_schema_extra={"x-widget_config": {"headerName": "Iraq"}}, + ) + ireland: float | None = Field( + default=None, + description="Monthly value reported by Ireland.", + json_schema_extra={"x-widget_config": {"headerName": "Ireland"}}, + ) + italy: float | None = Field( + default=None, + description="Monthly value reported by Italy.", + json_schema_extra={"x-widget_config": {"headerName": "Italy"}}, + ) + jamaica: float | None = Field( + default=None, + description="Monthly value reported by Jamaica.", + json_schema_extra={"x-widget_config": {"headerName": "Jamaica"}}, + ) + japan: float | None = Field( + default=None, + description="Monthly value reported by Japan.", + json_schema_extra={"x-widget_config": {"headerName": "Japan"}}, + ) + kazakhstan: float | None = Field( + default=None, + description="Monthly value reported by Kazakhstan.", + json_schema_extra={"x-widget_config": {"headerName": "Kazakhstan"}}, + ) + kuwait: float | None = Field( + default=None, + description="Monthly value reported by Kuwait.", + json_schema_extra={"x-widget_config": {"headerName": "Kuwait"}}, + ) + latvia: float | None = Field( + default=None, + description="Monthly value reported by Latvia.", + json_schema_extra={"x-widget_config": {"headerName": "Latvia"}}, + ) + libya: float | None = Field( + default=None, + description="Monthly value reported by Libya.", + json_schema_extra={"x-widget_config": {"headerName": "Libya"}}, + ) + lithuania: float | None = Field( + default=None, + description="Monthly value reported by Lithuania.", + json_schema_extra={"x-widget_config": {"headerName": "Lithuania"}}, + ) + luxembourg: float | None = Field( + default=None, + description="Monthly value reported by Luxembourg.", + json_schema_extra={"x-widget_config": {"headerName": "Luxembourg"}}, + ) + malaysia: float | None = Field( + default=None, + description="Monthly value reported by Malaysia.", + json_schema_extra={"x-widget_config": {"headerName": "Malaysia"}}, + ) + malta: float | None = Field( + default=None, + description="Monthly value reported by Malta.", + json_schema_extra={"x-widget_config": {"headerName": "Malta"}}, + ) + mauritius: float | None = Field( + default=None, + description="Monthly value reported by Mauritius.", + json_schema_extra={"x-widget_config": {"headerName": "Mauritius"}}, + ) + mexico: float | None = Field( + default=None, + description="Monthly value reported by Mexico.", + json_schema_extra={"x-widget_config": {"headerName": "Mexico"}}, + ) + moldova: float | None = Field( + default=None, + description="Monthly value reported by Moldova.", + json_schema_extra={"x-widget_config": {"headerName": "Moldova"}}, + ) + morocco: float | None = Field( + default=None, + description="Monthly value reported by Morocco.", + json_schema_extra={"x-widget_config": {"headerName": "Morocco"}}, + ) + myanmar: float | None = Field( + default=None, + description="Monthly value reported by Myanmar.", + json_schema_extra={"x-widget_config": {"headerName": "Myanmar"}}, + ) + nepal: float | None = Field( + default=None, + description="Monthly value reported by Nepal.", + json_schema_extra={"x-widget_config": {"headerName": "Nepal"}}, + ) + netherlands: float | None = Field( + default=None, + description="Monthly value reported by Netherlands.", + json_schema_extra={"x-widget_config": {"headerName": "Netherlands"}}, + ) + new_zealand: float | None = Field( + default=None, + description="Monthly value reported by New Zealand.", + json_schema_extra={"x-widget_config": {"headerName": "New Zealand"}}, + ) + nicaragua: float | None = Field( + default=None, + description="Monthly value reported by Nicaragua.", + json_schema_extra={"x-widget_config": {"headerName": "Nicaragua"}}, + ) + niger: float | None = Field( + default=None, + description="Monthly value reported by Niger.", + json_schema_extra={"x-widget_config": {"headerName": "Niger"}}, + ) + nigeria: float | None = Field( + default=None, + description="Monthly value reported by Nigeria.", + json_schema_extra={"x-widget_config": {"headerName": "Nigeria"}}, + ) + north_macedonia: float | None = Field( + default=None, + description="Monthly value reported by North Macedonia.", + json_schema_extra={"x-widget_config": {"headerName": "North Macedonia"}}, + ) + norway: float | None = Field( + default=None, + description="Monthly value reported by Norway.", + json_schema_extra={"x-widget_config": {"headerName": "Norway"}}, + ) + oman: float | None = Field( + default=None, + description="Monthly value reported by Oman.", + json_schema_extra={"x-widget_config": {"headerName": "Oman"}}, + ) + panama: float | None = Field( + default=None, + description="Monthly value reported by Panama.", + json_schema_extra={"x-widget_config": {"headerName": "Panama"}}, + ) + papua_new_guinea: float | None = Field( + default=None, + description="Monthly value reported by Papua New Guinea.", + json_schema_extra={"x-widget_config": {"headerName": "Papua New Guinea"}}, + ) + paraguay: float | None = Field( + default=None, + description="Monthly value reported by Paraguay.", + json_schema_extra={"x-widget_config": {"headerName": "Paraguay"}}, + ) + peru: float | None = Field( + default=None, + description="Monthly value reported by Peru.", + json_schema_extra={"x-widget_config": {"headerName": "Peru"}}, + ) + philippines: float | None = Field( + default=None, + description="Monthly value reported by Philippines.", + json_schema_extra={"x-widget_config": {"headerName": "Philippines"}}, + ) + poland: float | None = Field( + default=None, + description="Monthly value reported by Poland.", + json_schema_extra={"x-widget_config": {"headerName": "Poland"}}, + ) + portugal: float | None = Field( + default=None, + description="Monthly value reported by Portugal.", + json_schema_extra={"x-widget_config": {"headerName": "Portugal"}}, + ) + qatar: float | None = Field( + default=None, + description="Monthly value reported by Qatar.", + json_schema_extra={"x-widget_config": {"headerName": "Qatar"}}, + ) + romania: float | None = Field( + default=None, + description="Monthly value reported by Romania.", + json_schema_extra={"x-widget_config": {"headerName": "Romania"}}, + ) + russia: float | None = Field( + default=None, + description="Monthly value reported by Russia.", + json_schema_extra={"x-widget_config": {"headerName": "Russia"}}, + ) + saudi_arabia: float | None = Field( + default=None, + description="Monthly value reported by Saudi Arabia.", + json_schema_extra={"x-widget_config": {"headerName": "Saudi Arabia"}}, + ) + serbia: float | None = Field( + default=None, + description="Monthly value reported by Serbia.", + json_schema_extra={"x-widget_config": {"headerName": "Serbia"}}, + ) + singapore: float | None = Field( + default=None, + description="Monthly value reported by Singapore.", + json_schema_extra={"x-widget_config": {"headerName": "Singapore"}}, + ) + slovakia: float | None = Field( + default=None, + description="Monthly value reported by Slovakia.", + json_schema_extra={"x-widget_config": {"headerName": "Slovakia"}}, + ) + slovenia: float | None = Field( + default=None, + description="Monthly value reported by Slovenia.", + json_schema_extra={"x-widget_config": {"headerName": "Slovenia"}}, + ) + south_africa: float | None = Field( + default=None, + description="Monthly value reported by South Africa.", + json_schema_extra={"x-widget_config": {"headerName": "South Africa"}}, + ) + south_korea: float | None = Field( + default=None, + description="Monthly value reported by South Korea.", + json_schema_extra={"x-widget_config": {"headerName": "South Korea"}}, + ) + spain: float | None = Field( + default=None, + description="Monthly value reported by Spain.", + json_schema_extra={"x-widget_config": {"headerName": "Spain"}}, + ) + sudan: float | None = Field( + default=None, + description="Monthly value reported by Sudan.", + json_schema_extra={"x-widget_config": {"headerName": "Sudan"}}, + ) + suriname: float | None = Field( + default=None, + description="Monthly value reported by Suriname.", + json_schema_extra={"x-widget_config": {"headerName": "Suriname"}}, + ) + sweden: float | None = Field( + default=None, + description="Monthly value reported by Sweden.", + json_schema_extra={"x-widget_config": {"headerName": "Sweden"}}, + ) + switzerland: float | None = Field( + default=None, + description="Monthly value reported by Switzerland.", + json_schema_extra={"x-widget_config": {"headerName": "Switzerland"}}, + ) + syria: float | None = Field( + default=None, + description="Monthly value reported by Syria.", + json_schema_extra={"x-widget_config": {"headerName": "Syria"}}, + ) + taiwan: float | None = Field( + default=None, + description="Monthly value reported by Taiwan.", + json_schema_extra={"x-widget_config": {"headerName": "Taiwan"}}, + ) + tajikistan: float | None = Field( + default=None, + description="Monthly value reported by Tajikistan.", + json_schema_extra={"x-widget_config": {"headerName": "Tajikistan"}}, + ) + thailand: float | None = Field( + default=None, + description="Monthly value reported by Thailand.", + json_schema_extra={"x-widget_config": {"headerName": "Thailand"}}, + ) + trinidad_and_tobago: float | None = Field( + default=None, + description="Monthly value reported by Trinidad and Tobago.", + json_schema_extra={"x-widget_config": {"headerName": "Trinidad and Tobago"}}, + ) + tunisia: float | None = Field( + default=None, + description="Monthly value reported by Tunisia.", + json_schema_extra={"x-widget_config": {"headerName": "Tunisia"}}, + ) + turkiye: float | None = Field( + default=None, + description="Monthly value reported by Turkiye.", + json_schema_extra={"x-widget_config": {"headerName": "Turkiye"}}, + ) + ukraine: float | None = Field( + default=None, + description="Monthly value reported by Ukraine.", + json_schema_extra={"x-widget_config": {"headerName": "Ukraine"}}, + ) + united_arab_emirates: float | None = Field( + default=None, + description="Monthly value reported by United Arab Emirates.", + json_schema_extra={"x-widget_config": {"headerName": "United Arab Emirates"}}, + ) + united_kingdom: float | None = Field( + default=None, + description="Monthly value reported by United Kingdom.", + json_schema_extra={"x-widget_config": {"headerName": "United Kingdom"}}, + ) + united_states: float | None = Field( + default=None, + description="Monthly value reported by United States.", + json_schema_extra={"x-widget_config": {"headerName": "United States"}}, + ) + uruguay: float | None = Field( + default=None, + description="Monthly value reported by Uruguay.", + json_schema_extra={"x-widget_config": {"headerName": "Uruguay"}}, + ) + venezuela: float | None = Field( + default=None, + description="Monthly value reported by Venezuela.", + json_schema_extra={"x-widget_config": {"headerName": "Venezuela"}}, + ) + vietnam: float | None = Field( + default=None, + description="Monthly value reported by Vietnam.", + json_schema_extra={"x-widget_config": {"headerName": "Vietnam"}}, + ) + yemen: float | None = Field( + default=None, + description="Monthly value reported by Yemen.", + json_schema_extra={"x-widget_config": {"headerName": "Yemen"}}, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/gas_balance.py b/openbb_platform/providers/jodi/openbb_jodi/models/gas_balance.py new file mode 100644 index 00000000000..d61f31dbc11 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/gas_balance.py @@ -0,0 +1,210 @@ +"""JODI Gas Balance Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) +from pydantic import Field, field_validator + +from openbb_jodi.utils.constants import ( + COUNTRY_SCHEMA_SINGLE, + COUNTRY_SINGLE_DESCRIPTION, + GAS_BALANCE_FIELDS, + GAS_FLOW_DEFINITIONS, + GAS_UNIT_DESCRIPTION, + GAS_UNIT_LABELS, + GAS_UNITS, + USE_CACHE_DESCRIPTION, + GasUnitType, +) + + +class JodiGasBalanceQueryParams(QueryParams): + """JODI Gas Balance Query. + + Natural gas is a mixture of gaseous hydrocarbons, primarily methane, + but generally also including ethane, propane, and higher hydrocarbons + in much smaller amounts, and some non-combustible gases such as + nitrogen and carbon dioxide. It includes both non-associated and + associated gas. Colliery gas, coal seam gas, and shale gas are + included, while manufactured gas and biogas are excluded except when + blended with natural gas for final consumption. Natural gas liquids + are excluded. + + Source: https://www.jodidata.org/gas/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_SINGLE, + "unit": {"choices": list(GAS_UNITS)}, + } + + country: str = Field( + default="united_states", + description=COUNTRY_SINGLE_DESCRIPTION, + ) + unit: GasUnitType = Field( + default="m3", + description=GAS_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2009-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=False, default="united_states") + + @field_validator("unit", mode="before", check_fields=False) + @classmethod + def _normalize_unit(cls, v): + """Normalize unit.""" + from openbb_jodi.utils.helpers import normalize_token + + return normalize_token(v, "m3") + + +class JodiGasBalanceData(Data): + """JODI Gas Balance Data. + + One column per flow of the JODI-Gas questionnaire, in published order. + """ + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + production: float | None = Field( + default=None, + description="Production. " + GAS_FLOW_DEFINITIONS["production"], + ) + from_other_sources: float | None = Field( + default=None, + description="Receipts from other sources. " + + GAS_FLOW_DEFINITIONS["from_other_sources"], + ) + imports: float | None = Field( + default=None, + description="Total imports. " + GAS_FLOW_DEFINITIONS["imports"], + ) + pipeline_imports: float | None = Field( + default=None, + description="Of which: pipeline imports. " + + GAS_FLOW_DEFINITIONS["pipeline_imports"], + ) + lng_imports: float | None = Field( + default=None, + description="Of which: LNG imports. " + GAS_FLOW_DEFINITIONS["lng_imports"], + ) + exports: float | None = Field( + default=None, + description="Total exports. " + GAS_FLOW_DEFINITIONS["exports"], + ) + pipeline_exports: float | None = Field( + default=None, + description="Of which: pipeline exports. " + + GAS_FLOW_DEFINITIONS["pipeline_exports"], + ) + lng_exports: float | None = Field( + default=None, + description="Of which: LNG exports. " + GAS_FLOW_DEFINITIONS["lng_exports"], + ) + stock_change: float | None = Field( + default=None, + description="Stock change. " + GAS_FLOW_DEFINITIONS["stock_change"], + ) + demand_calculated: float | None = Field( + default=None, + description=GAS_FLOW_DEFINITIONS["demand_calculated"], + ) + statistical_difference: float | None = Field( + default=None, + description="Statistical difference. " + + GAS_FLOW_DEFINITIONS["statistical_difference"], + ) + demand: float | None = Field( + default=None, + description=GAS_FLOW_DEFINITIONS["demand"], + ) + electricity_and_heat_generation: float | None = Field( + default=None, + description="Of which: electricity and heat generation. " + + GAS_FLOW_DEFINITIONS["electricity_and_heat_generation"], + ) + closing_stocks: float | None = Field( + default=None, + description="Closing stocks. " + GAS_FLOW_DEFINITIONS["closing_stocks"], + ) + + +class JodiGasBalanceFetcher( + Fetcher[JodiGasBalanceQueryParams, list[JodiGasBalanceData]] +): + """JODI Gas Balance Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiGasBalanceQueryParams: + """Transform the query params.""" + return JodiGasBalanceQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiGasBalanceQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Gas world database file.""" + from openbb_jodi.utils.constants import COUNTRIES, GAS_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_gas, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, GAS_START_YEAR + ) + return await get_filtered_gas( + countries={COUNTRIES[query.country]}, + flow_codes=set(GAS_BALANCE_FIELDS), + unit_codes={GAS_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiGasBalanceQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiGasBalanceData]]: + """Transform the raw data into the balance table.""" + from openbb_jodi.utils.constants import COUNTRY_LABELS + from openbb_jodi.utils.helpers import build_assessments, build_field_table + + rows = build_field_table(data, "FLOW_BREAKDOWN", GAS_BALANCE_FIELDS) + code = data[0]["REF_AREA"] + metadata = { + "country": COUNTRY_LABELS.get(code, code), + "product": "Natural gas", + "unit": GAS_UNIT_LABELS[query.unit], + "assessments": build_assessments( + data, "FLOW_BREAKDOWN", GAS_BALANCE_FIELDS + ), + "source": "JODI-Gas World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiGasBalanceData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/gas_demand.py b/openbb_platform/providers/jodi/openbb_jodi/models/gas_demand.py new file mode 100644 index 00000000000..eae648e6276 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/gas_demand.py @@ -0,0 +1,160 @@ +"""JODI Gas Demand Model.""" + +from datetime import date as dateType +from typing import Any, Literal + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + GAS_FLOW_DEFINITIONS, + GAS_UNIT_DESCRIPTION, + GAS_UNIT_LABELS, + GAS_UNITS, + USE_CACHE_DESCRIPTION, + GasUnitType, +) + +MEASURE_CODES = {"observed": "TOTDEMO", "calculated": "TOTDEMC"} +MEASURE_LABELS = { + "observed": "Gross inland deliveries (observed)", + "calculated": "Gross inland deliveries (calculated)", +} + + +class JodiGasDemandQueryParams(QueryParams): + """JODI Gas Demand Query. + + Natural gas is a mixture of gaseous hydrocarbons, primarily methane, + but generally also including ethane, propane, and higher hydrocarbons + in much smaller amounts, and some non-combustible gases such as + nitrogen and carbon dioxide. It includes both non-associated and + associated gas. Colliery gas, coal seam gas, and shale gas are + included, while manufactured gas and biogas are excluded except when + blended with natural gas for final consumption. Natural gas liquids + are excluded. + + Source: https://www.jodidata.org/gas/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "measure": {"choices": list(MEASURE_CODES)}, + "unit": {"choices": list(GAS_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + measure: Literal["observed", "calculated"] = Field( + default="observed", + description="The demand measure. JODI questionnaire definitions:\n" + + " observed: " + + GAS_FLOW_DEFINITIONS["demand"] + + "\n calculated: " + + GAS_FLOW_DEFINITIONS["demand_calculated"], + ) + unit: GasUnitType = Field( + default="m3", + description=GAS_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2009-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("measure", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"measure": "observed", "unit": "m3"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiGasDemandData(JodiCountryData): + """JODI Gas Demand Data. + + One column per reporting country. Values are gross inland deliveries + of natural gas, as selected by the measure parameter. + """ + + +class JodiGasDemandFetcher(Fetcher[JodiGasDemandQueryParams, list[JodiGasDemandData]]): + """JODI Gas Demand Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiGasDemandQueryParams: + """Transform the query params.""" + return JodiGasDemandQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiGasDemandQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Gas world database file.""" + from openbb_jodi.utils.constants import COUNTRIES, GAS_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_gas, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, GAS_START_YEAR + ) + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_gas( + countries=countries, + flow_codes={MEASURE_CODES[query.measure]}, + unit_codes={GAS_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiGasDemandQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiGasDemandData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": "Natural gas", + "flow": MEASURE_LABELS[query.measure], + "unit": GAS_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Gas World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiGasDemandData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/gas_exports.py b/openbb_platform/providers/jodi/openbb_jodi/models/gas_exports.py new file mode 100644 index 00000000000..41f3f276e6c --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/gas_exports.py @@ -0,0 +1,167 @@ +"""JODI Gas Exports Model.""" + +from datetime import date as dateType +from typing import Any, Literal + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + GAS_FLOW_DEFINITIONS, + GAS_UNIT_DESCRIPTION, + GAS_UNIT_LABELS, + GAS_UNITS, + USE_CACHE_DESCRIPTION, + GasUnitType, +) + +FLOW_CODES = {"total": "TOTEXPSB", "pipeline": "EXPPIP", "lng": "EXPLNG"} +FLOW_LABELS = { + "total": "Exports", + "pipeline": "Pipeline exports", + "lng": "LNG exports", +} + + +class JodiGasExportsQueryParams(QueryParams): + """JODI Gas Exports Query. + + Natural gas is a mixture of gaseous hydrocarbons, primarily methane, + but generally also including ethane, propane, and higher hydrocarbons + in much smaller amounts, and some non-combustible gases such as + nitrogen and carbon dioxide. It includes both non-associated and + associated gas. Colliery gas, coal seam gas, and shale gas are + included, while manufactured gas and biogas are excluded except when + blended with natural gas for final consumption. Natural gas liquids + are excluded. + + Source: https://www.jodidata.org/gas/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "flow": {"choices": list(FLOW_CODES)}, + "unit": {"choices": list(GAS_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + flow: Literal["total", "pipeline", "lng"] = Field( + default="total", + description="The exports breakdown. JODI questionnaire definitions:\n" + + " total: " + + GAS_FLOW_DEFINITIONS["exports"] + + "\n pipeline: " + + GAS_FLOW_DEFINITIONS["pipeline_exports"] + + "\n lng: " + + GAS_FLOW_DEFINITIONS["lng_exports"], + ) + unit: GasUnitType = Field( + default="m3", + description=GAS_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2009-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("flow", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"flow": "total", "unit": "m3"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiGasExportsData(JodiCountryData): + """JODI Gas Exports Data. + + One column per reporting country. Exports are amounts that have + crossed the physical boundaries of the country, whether customs + clearance has taken place or not; deliveries for international + bunkers are excluded. + """ + + +class JodiGasExportsFetcher( + Fetcher[JodiGasExportsQueryParams, list[JodiGasExportsData]] +): + """JODI Gas Exports Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiGasExportsQueryParams: + """Transform the query params.""" + return JodiGasExportsQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiGasExportsQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Gas world database file.""" + from openbb_jodi.utils.constants import COUNTRIES, GAS_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_gas, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, GAS_START_YEAR + ) + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_gas( + countries=countries, + flow_codes={FLOW_CODES[query.flow]}, + unit_codes={GAS_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiGasExportsQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiGasExportsData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": "Natural gas", + "flow": FLOW_LABELS[query.flow], + "unit": GAS_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Gas World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiGasExportsData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/gas_imports.py b/openbb_platform/providers/jodi/openbb_jodi/models/gas_imports.py new file mode 100644 index 00000000000..c149ef094b4 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/gas_imports.py @@ -0,0 +1,167 @@ +"""JODI Gas Imports Model.""" + +from datetime import date as dateType +from typing import Any, Literal + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + GAS_FLOW_DEFINITIONS, + GAS_UNIT_DESCRIPTION, + GAS_UNIT_LABELS, + GAS_UNITS, + USE_CACHE_DESCRIPTION, + GasUnitType, +) + +FLOW_CODES = {"total": "TOTIMPSB", "pipeline": "IMPPIP", "lng": "IMPLNG"} +FLOW_LABELS = { + "total": "Imports", + "pipeline": "Pipeline imports", + "lng": "LNG imports", +} + + +class JodiGasImportsQueryParams(QueryParams): + """JODI Gas Imports Query. + + Natural gas is a mixture of gaseous hydrocarbons, primarily methane, + but generally also including ethane, propane, and higher hydrocarbons + in much smaller amounts, and some non-combustible gases such as + nitrogen and carbon dioxide. It includes both non-associated and + associated gas. Colliery gas, coal seam gas, and shale gas are + included, while manufactured gas and biogas are excluded except when + blended with natural gas for final consumption. Natural gas liquids + are excluded. + + Source: https://www.jodidata.org/gas/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "flow": {"choices": list(FLOW_CODES)}, + "unit": {"choices": list(GAS_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + flow: Literal["total", "pipeline", "lng"] = Field( + default="total", + description="The imports breakdown. JODI questionnaire definitions:\n" + + " total: " + + GAS_FLOW_DEFINITIONS["imports"] + + "\n pipeline: " + + GAS_FLOW_DEFINITIONS["pipeline_imports"] + + "\n lng: " + + GAS_FLOW_DEFINITIONS["lng_imports"], + ) + unit: GasUnitType = Field( + default="m3", + description=GAS_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2009-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("flow", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"flow": "total", "unit": "m3"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiGasImportsData(JodiCountryData): + """JODI Gas Imports Data. + + One column per reporting country. Imports are amounts that have + crossed the physical boundaries of the country, whether customs + clearance has taken place or not; deliveries for international + bunkers are excluded. + """ + + +class JodiGasImportsFetcher( + Fetcher[JodiGasImportsQueryParams, list[JodiGasImportsData]] +): + """JODI Gas Imports Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiGasImportsQueryParams: + """Transform the query params.""" + return JodiGasImportsQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiGasImportsQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Gas world database file.""" + from openbb_jodi.utils.constants import COUNTRIES, GAS_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_gas, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, GAS_START_YEAR + ) + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_gas( + countries=countries, + flow_codes={FLOW_CODES[query.flow]}, + unit_codes={GAS_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiGasImportsQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiGasImportsData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": "Natural gas", + "flow": FLOW_LABELS[query.flow], + "unit": GAS_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Gas World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiGasImportsData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/gas_production.py b/openbb_platform/providers/jodi/openbb_jodi/models/gas_production.py new file mode 100644 index 00000000000..b8c5424e202 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/gas_production.py @@ -0,0 +1,149 @@ +"""JODI Gas Production Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + GAS_UNIT_DESCRIPTION, + GAS_UNIT_LABELS, + GAS_UNITS, + USE_CACHE_DESCRIPTION, + GasUnitType, +) + + +class JodiGasProductionQueryParams(QueryParams): + """JODI Gas Production Query. + + Natural gas is a mixture of gaseous hydrocarbons, primarily methane, + but generally also including ethane, propane, and higher hydrocarbons + in much smaller amounts, and some non-combustible gases such as + nitrogen and carbon dioxide. It includes both non-associated and + associated gas. Colliery gas, coal seam gas, and shale gas are + included, while manufactured gas and biogas are excluded except when + blended with natural gas for final consumption. Natural gas liquids + are excluded. + + Source: https://www.jodidata.org/gas/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "unit": {"choices": list(GAS_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + unit: GasUnitType = Field( + default="m3", + description=GAS_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2009-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("unit", mode="before", check_fields=False) + @classmethod + def _normalize_unit(cls, v): + """Normalize unit.""" + from openbb_jodi.utils.helpers import normalize_token + + return normalize_token(v, "m3") + + +class JodiGasProductionData(JodiCountryData): + """JODI Gas Production Data. + + One column per reporting country. Production is dry marketable + production within national boundaries, including offshore production, + measured after purification and extraction of NGL and sulphur; it + excludes quantities reinjected, extraction losses, and quantities + vented or flared, and includes quantities used within the natural gas + industry. + """ + + +class JodiGasProductionFetcher( + Fetcher[JodiGasProductionQueryParams, list[JodiGasProductionData]] +): + """JODI Gas Production Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiGasProductionQueryParams: + """Transform the query params.""" + return JodiGasProductionQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiGasProductionQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Gas world database file.""" + from openbb_jodi.utils.constants import COUNTRIES, GAS_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_gas, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, GAS_START_YEAR + ) + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_gas( + countries=countries, + flow_codes={"INDPROD"}, + unit_codes={GAS_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiGasProductionQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiGasProductionData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": "Natural gas", + "flow": "Production", + "unit": GAS_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Gas World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiGasProductionData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/gas_stocks.py b/openbb_platform/providers/jodi/openbb_jodi/models/gas_stocks.py new file mode 100644 index 00000000000..b50e8f450fb --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/gas_stocks.py @@ -0,0 +1,144 @@ +"""JODI Gas Stocks Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + GAS_UNIT_DESCRIPTION, + GAS_UNIT_LABELS, + GAS_UNITS, + USE_CACHE_DESCRIPTION, + GasUnitType, +) + + +class JodiGasStocksQueryParams(QueryParams): + """JODI Gas Stocks Query. + + Natural gas is a mixture of gaseous hydrocarbons, primarily methane, + but generally also including ethane, propane, and higher hydrocarbons + in much smaller amounts, and some non-combustible gases such as + nitrogen and carbon dioxide. It includes both non-associated and + associated gas. Colliery gas, coal seam gas, and shale gas are + included, while manufactured gas and biogas are excluded except when + blended with natural gas for final consumption. Natural gas liquids + are excluded. + + Source: https://www.jodidata.org/gas/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "unit": {"choices": list(GAS_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + unit: GasUnitType = Field( + default="m3", + description=GAS_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2009-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("unit", mode="before", check_fields=False) + @classmethod + def _normalize_unit(cls, v): + """Normalize unit.""" + from openbb_jodi.utils.helpers import normalize_token + + return normalize_token(v, "m3") + + +class JodiGasStocksData(JodiCountryData): + """JODI Gas Stocks Data. + + One column per reporting country. Closing stocks are the stock level + held on the national territory on the last day of the reference + month. + """ + + +class JodiGasStocksFetcher(Fetcher[JodiGasStocksQueryParams, list[JodiGasStocksData]]): + """JODI Gas Stocks Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiGasStocksQueryParams: + """Transform the query params.""" + return JodiGasStocksQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiGasStocksQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Gas world database file.""" + from openbb_jodi.utils.constants import COUNTRIES, GAS_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_gas, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, GAS_START_YEAR + ) + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_gas( + countries=countries, + flow_codes={"CLOSTLV"}, + unit_codes={GAS_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiGasStocksQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiGasStocksData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": "Natural gas", + "flow": "Closing stocks", + "unit": GAS_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Gas World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiGasStocksData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_balance.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_balance.py new file mode 100644 index 00000000000..dc8466cad52 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_balance.py @@ -0,0 +1,225 @@ +"""JODI Oil Balance Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) +from pydantic import Field, field_validator + +from openbb_jodi.utils.constants import ( + COUNTRY_SCHEMA_SINGLE, + COUNTRY_SINGLE_DESCRIPTION, + OIL_FLOW_DEFINITIONS, + OIL_PRODUCT_CHOICES_DESCRIPTION, + OIL_PRODUCT_LABELS, + OIL_PRODUCTS, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilProductType, + OilUnitType, +) + + +class JodiOilBalanceQueryParams(QueryParams): + """JODI Oil Balance Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_SINGLE, + "product": {"choices": list(OIL_PRODUCTS)}, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str = Field( + default="united_states", + description=COUNTRY_SINGLE_DESCRIPTION, + ) + product: OilProductType = Field( + default="crude_oil", + description="The petroleum product to get the balance for." + + " The first four are primary products, the rest are secondary" + + " products. JODI questionnaire definitions:\n" + + OIL_PRODUCT_CHOICES_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbd", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=False, default="united_states") + + @field_validator("product", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"product": "crude_oil", "unit": "kbd"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiOilBalanceData(Data): + """JODI Oil Balance Data. + + One column per flow of the JODI-Oil questionnaire, in published order. + Primary-only flows are None for secondary products, and vice versa. + """ + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + production: float | None = Field( + default=None, + description="Production (primary products). " + + OIL_FLOW_DEFINITIONS["production"], + ) + refinery_output: float | None = Field( + default=None, + description="Refinery output (secondary products). " + + OIL_FLOW_DEFINITIONS["refinery_output"], + ) + from_other_sources: float | None = Field( + default=None, + description="From other sources (primary products). " + + OIL_FLOW_DEFINITIONS["from_other_sources"], + ) + receipts: float | None = Field( + default=None, + description="Receipts (secondary products). " + + OIL_FLOW_DEFINITIONS["receipts"], + ) + imports: float | None = Field( + default=None, + description="Imports. " + OIL_FLOW_DEFINITIONS["imports"], + ) + exports: float | None = Field( + default=None, + description="Exports. " + OIL_FLOW_DEFINITIONS["exports"], + ) + products_transferred: float | None = Field( + default=None, + description="Products transferred. " + + OIL_FLOW_DEFINITIONS["products_transferred"], + ) + interproduct_transfers: float | None = Field( + default=None, + description="Interproduct transfers (secondary products). " + + OIL_FLOW_DEFINITIONS["interproduct_transfers"], + ) + direct_use: float | None = Field( + default=None, + description="Direct use (primary products). " + + OIL_FLOW_DEFINITIONS["direct_use"], + ) + stock_change: float | None = Field( + default=None, + description="Stock change. " + OIL_FLOW_DEFINITIONS["stock_change"], + ) + statistical_difference: float | None = Field( + default=None, + description="Statistical difference. " + + OIL_FLOW_DEFINITIONS["statistical_difference"], + ) + refinery_intake: float | None = Field( + default=None, + description="Refinery intake (primary products). " + + OIL_FLOW_DEFINITIONS["refinery_intake"], + ) + demand: float | None = Field( + default=None, + description="Demand (secondary products). " + OIL_FLOW_DEFINITIONS["demand"], + ) + closing_stocks: float | None = Field( + default=None, + description="Closing stocks. " + OIL_FLOW_DEFINITIONS["closing_stocks"], + ) + + +class JodiOilBalanceFetcher( + Fetcher[JodiOilBalanceQueryParams, list[JodiOilBalanceData]] +): + """JODI Oil Balance Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilBalanceQueryParams: + """Transform the query params.""" + return JodiOilBalanceQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilBalanceQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import ( + COUNTRIES, + OIL_BALANCE_FIELDS, + OIL_START_YEAR, + ) + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + product_code, table = OIL_PRODUCTS[query.product] + return await get_filtered_oil( + tables=[table], + countries={COUNTRIES[query.country]}, + product_codes={product_code}, + flow_codes=set(OIL_BALANCE_FIELDS), + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilBalanceQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilBalanceData]]: + """Transform the raw data into the balance table.""" + from openbb_jodi.utils.constants import COUNTRY_LABELS, OIL_BALANCE_FIELDS + from openbb_jodi.utils.helpers import build_assessments, build_field_table + + rows = build_field_table(data, "FLOW_BREAKDOWN", OIL_BALANCE_FIELDS) + code = data[0]["REF_AREA"] + metadata = { + "country": COUNTRY_LABELS.get(code, code), + "product": OIL_PRODUCT_LABELS[OIL_PRODUCTS[query.product][0]], + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments( + data, "FLOW_BREAKDOWN", OIL_BALANCE_FIELDS + ), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilBalanceData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_demand.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_demand.py new file mode 100644 index 00000000000..2c25d287aba --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_demand.py @@ -0,0 +1,154 @@ +"""JODI Oil Demand Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + OIL_PRODUCT_FIELDS, + OIL_PRODUCT_LABELS, + OIL_PRODUCTS, + OIL_SECONDARY_PRODUCT_CHOICES_DESCRIPTION, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilSecondaryProductType, + OilUnitType, +) + +SECONDARY_PRODUCTS = [OIL_PRODUCT_FIELDS[code] for code in OIL_PRODUCT_FIELDS] + + +class JodiOilDemandQueryParams(QueryParams): + """JODI Oil Demand Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "product": {"choices": SECONDARY_PRODUCTS}, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + product: OilSecondaryProductType = Field( + default="total_products", + description="The refined petroleum product to get demand of." + + " Demand is reported for secondary products only." + + " JODI questionnaire definitions:\n" + + OIL_SECONDARY_PRODUCT_CHOICES_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbd", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("product", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"product": "total_products", "unit": "kbd"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiOilDemandData(JodiCountryData): + """JODI Oil Demand Data. + + One column per reporting country. Demand is deliveries or sales to + the inland market (domestic consumption) plus refinery fuel plus + international marine and aviation bunkers. + """ + + +class JodiOilDemandFetcher(Fetcher[JodiOilDemandQueryParams, list[JodiOilDemandData]]): + """JODI Oil Demand Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilDemandQueryParams: + """Transform the query params.""" + return JodiOilDemandQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilDemandQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import COUNTRIES, OIL_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + product_code, table = OIL_PRODUCTS[query.product] + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_oil( + tables=[table], + countries=countries, + product_codes={product_code}, + flow_codes={"TOTDEMO"}, + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilDemandQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilDemandData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": OIL_PRODUCT_LABELS[OIL_PRODUCTS[query.product][0]], + "flow": "Demand", + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilDemandData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_demand_by_product.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_demand_by_product.py new file mode 100644 index 00000000000..6d09b29c219 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_demand_by_product.py @@ -0,0 +1,184 @@ +"""JODI Oil Demand By Product Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) +from pydantic import Field, field_validator + +from openbb_jodi.utils.constants import ( + COUNTRY_SCHEMA_SINGLE, + COUNTRY_SINGLE_DESCRIPTION, + OIL_PRODUCT_DEFINITIONS, + OIL_PRODUCT_FIELDS, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilUnitType, +) + + +class JodiOilDemandByProductQueryParams(QueryParams): + """JODI Oil Demand By Product Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_SINGLE, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str = Field( + default="united_states", + description=COUNTRY_SINGLE_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbd", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=False, default="united_states") + + @field_validator("unit", mode="before", check_fields=False) + @classmethod + def _normalize_unit(cls, v): + """Normalize unit.""" + from openbb_jodi.utils.helpers import normalize_token + + return normalize_token(v, "kbd") + + +class JodiOilDemandByProductData(Data): + """JODI Oil Demand By Product Data. + + One column per refined product, in published order. Demand is deliveries + or sales to the inland market (domestic consumption) plus refinery fuel + plus international marine and aviation bunkers. + """ + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + lpg: float | None = Field( + default=None, + description="LPG demand. " + OIL_PRODUCT_DEFINITIONS["lpg"], + ) + naphtha: float | None = Field( + default=None, + description="Naphtha demand. " + OIL_PRODUCT_DEFINITIONS["naphtha"], + ) + gasoline: float | None = Field( + default=None, + description="Gasoline demand. " + OIL_PRODUCT_DEFINITIONS["gasoline"], + ) + kerosene: float | None = Field( + default=None, + description="Kerosenes demand. " + OIL_PRODUCT_DEFINITIONS["kerosene"], + ) + jet_fuel: float | None = Field( + default=None, + description="Jet fuel demand. " + OIL_PRODUCT_DEFINITIONS["jet_fuel"], + ) + gas_diesel_oil: float | None = Field( + default=None, + description="Gas/diesel oil demand. " + + OIL_PRODUCT_DEFINITIONS["gas_diesel_oil"], + ) + fuel_oil: float | None = Field( + default=None, + description="Fuel oil demand. " + OIL_PRODUCT_DEFINITIONS["fuel_oil"], + ) + other_products: float | None = Field( + default=None, + description="Other oil products demand. " + + OIL_PRODUCT_DEFINITIONS["other_products"] + + " Includes direct use of crude oil, NGL, and other primary hydrocarbons.", + ) + total_products: float | None = Field( + default=None, + description="Total oil products demand. " + + OIL_PRODUCT_DEFINITIONS["total_products"], + ) + + +class JodiOilDemandByProductFetcher( + Fetcher[JodiOilDemandByProductQueryParams, list[JodiOilDemandByProductData]] +): + """JODI Oil Demand By Product Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilDemandByProductQueryParams: + """Transform the query params.""" + return JodiOilDemandByProductQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilDemandByProductQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import COUNTRIES, OIL_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + return await get_filtered_oil( + tables=["secondary"], + countries={COUNTRIES[query.country]}, + product_codes=set(OIL_PRODUCT_FIELDS), + flow_codes={"TOTDEMO"}, + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilDemandByProductQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilDemandByProductData]]: + """Transform the raw data into the by-product table.""" + from openbb_jodi.utils.constants import COUNTRY_LABELS + from openbb_jodi.utils.helpers import build_assessments, build_field_table + + rows = build_field_table(data, "ENERGY_PRODUCT", OIL_PRODUCT_FIELDS) + code = data[0]["REF_AREA"] + metadata = { + "country": COUNTRY_LABELS.get(code, code), + "flow": "Demand", + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments( + data, "ENERGY_PRODUCT", OIL_PRODUCT_FIELDS + ), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilDemandByProductData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_exports.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_exports.py new file mode 100644 index 00000000000..cffacf717de --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_exports.py @@ -0,0 +1,152 @@ +"""JODI Oil Exports Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + OIL_PRODUCT_CHOICES_DESCRIPTION, + OIL_PRODUCT_LABELS, + OIL_PRODUCTS, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilProductType, + OilUnitType, +) + + +class JodiOilExportsQueryParams(QueryParams): + """JODI Oil Exports Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "product": {"choices": list(OIL_PRODUCTS)}, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + product: OilProductType = Field( + default="crude_oil", + description="The petroleum product to get exports of." + + " JODI questionnaire definitions:\n" + + OIL_PRODUCT_CHOICES_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbd", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("product", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"product": "crude_oil", "unit": "kbd"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiOilExportsData(JodiCountryData): + """JODI Oil Exports Data. + + One column per reporting country. Exports are goods having physically + crossed the international boundaries, excluding transit trade and + international marine and aviation bunkers. + """ + + +class JodiOilExportsFetcher( + Fetcher[JodiOilExportsQueryParams, list[JodiOilExportsData]] +): + """JODI Oil Exports Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilExportsQueryParams: + """Transform the query params.""" + return JodiOilExportsQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilExportsQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import COUNTRIES, OIL_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + product_code, table = OIL_PRODUCTS[query.product] + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_oil( + tables=[table], + countries=countries, + product_codes={product_code}, + flow_codes={"TOTEXPSB"}, + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilExportsQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilExportsData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": OIL_PRODUCT_LABELS[OIL_PRODUCTS[query.product][0]], + "flow": "Exports", + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilExportsData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_imports.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_imports.py new file mode 100644 index 00000000000..4bc1991fa42 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_imports.py @@ -0,0 +1,152 @@ +"""JODI Oil Imports Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + OIL_PRODUCT_CHOICES_DESCRIPTION, + OIL_PRODUCT_LABELS, + OIL_PRODUCTS, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilProductType, + OilUnitType, +) + + +class JodiOilImportsQueryParams(QueryParams): + """JODI Oil Imports Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "product": {"choices": list(OIL_PRODUCTS)}, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + product: OilProductType = Field( + default="crude_oil", + description="The petroleum product to get imports of." + + " JODI questionnaire definitions:\n" + + OIL_PRODUCT_CHOICES_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbd", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("product", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"product": "crude_oil", "unit": "kbd"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiOilImportsData(JodiCountryData): + """JODI Oil Imports Data. + + One column per reporting country. Imports are goods having physically + crossed the international boundaries, excluding transit trade and + international marine and aviation bunkers. + """ + + +class JodiOilImportsFetcher( + Fetcher[JodiOilImportsQueryParams, list[JodiOilImportsData]] +): + """JODI Oil Imports Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilImportsQueryParams: + """Transform the query params.""" + return JodiOilImportsQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilImportsQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import COUNTRIES, OIL_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + product_code, table = OIL_PRODUCTS[query.product] + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_oil( + tables=[table], + countries=countries, + product_codes={product_code}, + flow_codes={"TOTIMPSB"}, + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilImportsQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilImportsData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": OIL_PRODUCT_LABELS[OIL_PRODUCTS[query.product][0]], + "flow": "Imports", + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilImportsData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_production.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_production.py new file mode 100644 index 00000000000..640d5a418b6 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_production.py @@ -0,0 +1,154 @@ +"""JODI Oil Production Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + OIL_PRIMARY_PRODUCT_CHOICES_DESCRIPTION, + OIL_PRODUCT_LABELS, + OIL_PRODUCTS, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilPrimaryProductType, + OilUnitType, +) + +PRIMARY_PRODUCTS = ["crude_oil", "ngl", "other_crude", "total_crude"] + + +class JodiOilProductionQueryParams(QueryParams): + """JODI Oil Production Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "product": {"choices": PRIMARY_PRODUCTS}, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + product: OilPrimaryProductType = Field( + default="crude_oil", + description="The primary petroleum product to get production of." + + " JODI questionnaire definitions:\n" + + OIL_PRIMARY_PRODUCT_CHOICES_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbd", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("product", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"product": "crude_oil", "unit": "kbd"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiOilProductionData(JodiCountryData): + """JODI Oil Production Data. + + One column per reporting country. Production is marketed production, + after removal of impurities but including quantities consumed by the + producer in the production process. + """ + + +class JodiOilProductionFetcher( + Fetcher[JodiOilProductionQueryParams, list[JodiOilProductionData]] +): + """JODI Oil Production Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilProductionQueryParams: + """Transform the query params.""" + return JodiOilProductionQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilProductionQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import COUNTRIES, OIL_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + product_code, table = OIL_PRODUCTS[query.product] + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_oil( + tables=[table], + countries=countries, + product_codes={product_code}, + flow_codes={"INDPROD"}, + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilProductionQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilProductionData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": OIL_PRODUCT_LABELS[OIL_PRODUCTS[query.product][0]], + "flow": "Production", + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilProductionData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/models/oil_stocks.py b/openbb_platform/providers/jodi/openbb_jodi/models/oil_stocks.py new file mode 100644 index 00000000000..dbf659a10b1 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/models/oil_stocks.py @@ -0,0 +1,151 @@ +"""JODI Oil Stocks Model.""" + +from datetime import date as dateType +from typing import Any + +from openbb_core.provider.abstract.annotated_result import AnnotatedResult +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, field_validator + +from openbb_jodi.models.country_data import JodiCountryData +from openbb_jodi.utils.constants import ( + COUNTRY_MULTI_DESCRIPTION, + COUNTRY_SCHEMA_MULTI, + OIL_PRODUCT_CHOICES_DESCRIPTION, + OIL_PRODUCT_LABELS, + OIL_PRODUCTS, + OIL_UNIT_DESCRIPTION, + OIL_UNIT_LABELS, + OIL_UNITS, + USE_CACHE_DESCRIPTION, + OilProductType, + OilUnitType, +) + + +class JodiOilStocksQueryParams(QueryParams): + """JODI Oil Stocks Query. + + Source: https://www.jodidata.org/oil/database/data-downloads.aspx + """ + + __json_schema_extra__ = { + "country": COUNTRY_SCHEMA_MULTI, + "product": {"choices": list(OIL_PRODUCTS)}, + "unit": {"choices": list(OIL_UNITS)}, + } + + country: str | None = Field( + default=None, + description=COUNTRY_MULTI_DESCRIPTION, + ) + product: OilProductType = Field( + default="crude_oil", + description="The petroleum product to get closing stock levels of." + + " JODI questionnaire definitions:\n" + + OIL_PRODUCT_CHOICES_DESCRIPTION, + ) + unit: OilUnitType = Field( + default="kbbl", + description=OIL_UNIT_DESCRIPTION, + ) + start_date: dateType | None = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", "") + + " Defaults to the first data period, 2002-01-01.", + ) + end_date: dateType | None = Field( + default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") + ) + use_cache: bool = Field(default=True, description=USE_CACHE_DESCRIPTION) + + @field_validator("country", mode="before", check_fields=False) + @classmethod + def _validate_country(cls, v): + """Validate country.""" + from openbb_jodi.utils.helpers import validate_country_param + + return validate_country_param(v, multiple=True, default=None) + + @field_validator("product", "unit", mode="before", check_fields=False) + @classmethod + def _normalize_tokens(cls, v, info): + """Normalize token parameters.""" + from openbb_jodi.utils.helpers import normalize_token + + defaults = {"product": "crude_oil", "unit": "kbbl"} + return normalize_token(v, defaults[str(info.field_name)]) + + +class JodiOilStocksData(JodiCountryData): + """JODI Oil Stocks Data. + + One column per reporting country. Closing stocks are the primary + stock level at the end of the month within national territories, + including stocks held by importers, refiners, stock-holding + organisations, and governments. + """ + + +class JodiOilStocksFetcher(Fetcher[JodiOilStocksQueryParams, list[JodiOilStocksData]]): + """JODI Oil Stocks Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> JodiOilStocksQueryParams: + """Transform the query params.""" + return JodiOilStocksQueryParams(**params) + + @staticmethod + async def aextract_data( + query: JodiOilStocksQueryParams, + credentials: dict[str, str] | None, + **kwargs: Any, + ) -> list[dict]: + """Extract the data from the JODI-Oil annual CSV files.""" + from openbb_jodi.utils.constants import COUNTRIES, OIL_START_YEAR + from openbb_jodi.utils.helpers import get_filtered_oil, resolve_date_range + + start_date, end_date = resolve_date_range( + query.start_date, query.end_date, OIL_START_YEAR + ) + product_code, table = OIL_PRODUCTS[query.product] + countries = ( + {COUNTRIES[country] for country in query.country.split(",")} + if query.country + else None + ) + return await get_filtered_oil( + tables=[table], + countries=countries, + product_codes={product_code}, + flow_codes={"CLOSTLV"}, + unit_codes={OIL_UNITS[query.unit]}, + start_date=start_date, + end_date=end_date, + use_cache=query.use_cache, + ) + + @staticmethod + def transform_data( + query: JodiOilStocksQueryParams, + data: list[dict], + **kwargs: Any, + ) -> AnnotatedResult[list[JodiOilStocksData]]: + """Transform the raw data into the by-country table.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + from openbb_jodi.utils.helpers import build_assessments, build_country_table + + rows = build_country_table(data) + metadata = { + "product": OIL_PRODUCT_LABELS[OIL_PRODUCTS[query.product][0]], + "flow": "Closing stocks", + "unit": OIL_UNIT_LABELS[query.unit], + "assessments": build_assessments(data, "REF_AREA", CODE_TO_COUNTRY), + "source": "JODI-Oil World Database (www.jodidata.org)", + } + return AnnotatedResult( + result=[JodiOilStocksData.model_validate(r) for r in rows], + metadata=metadata, + ) diff --git a/openbb_platform/providers/jodi/openbb_jodi/oil_router.py b/openbb_platform/providers/jodi/openbb_jodi/oil_router.py new file mode 100644 index 00000000000..72b68650d73 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/oil_router.py @@ -0,0 +1,214 @@ +"""JODI Oil Router.""" + +from openbb_core.app.model.command_context import CommandContext +from openbb_core.app.model.example import APIEx +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.provider_interface import ( + ExtraParams, + ProviderChoices, + StandardParams, +) +from openbb_core.app.query import Query as OpenBBQuery +from openbb_core.app.router import Router + +router = Router( + prefix="/oil", + description="JODI-Oil World Database." + + " Monthly data from January 2002 to the most recent month.", +) + + +@router.command( + model="JodiOilBalance", + examples=[ + APIEx( + description="Get the United States crude oil balance - one column per questionnaire flow.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Get India's gasoline balance, in thousand metric tons.", + parameters={ + "provider": "jodi", + "country": "india", + "product": "gasoline", + "unit": "ktons", + "start_date": "2020-01-01", + }, + ), + ], +) +async def balance( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get a country's monthly petroleum balance for one product - production, trade, stocks, and refinery activity, one column per flow of the JODI questionnaire.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiOilProduction", + examples=[ + APIEx( + description="Get monthly crude oil production - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare crude oil production in Saudi Arabia, Iraq, and the United States.", + parameters={ + "provider": "jodi", + "country": "saudi_arabia,iraq,united_states", + "start_date": "2020-01-01", + }, + ), + ], +) +async def production( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly production of a primary petroleum product - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiOilDemand", + examples=[ + APIEx( + description="Get monthly total petroleum products demand - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare gasoline demand in the United States, China, and India.", + parameters={ + "provider": "jodi", + "country": "united_states,china,india", + "product": "gasoline", + "start_date": "2020-01-01", + }, + ), + ], +) +async def demand( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly demand for a refined petroleum product - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiOilDemandByProduct", + examples=[ + APIEx( + description="Get monthly United States demand - one column per refined product.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Get Japan's demand barrel, in thousand barrels per day.", + parameters={ + "provider": "jodi", + "country": "japan", + "unit": "kbd", + "start_date": "2020-01-01", + }, + ), + ], +) +async def demand_by_product( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get a country's monthly petroleum demand - one column per refined product, in published order.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiOilImports", + examples=[ + APIEx( + description="Get monthly crude oil imports - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare crude oil imports of China, India, and South Korea.", + parameters={ + "provider": "jodi", + "country": "china,india,south_korea", + "start_date": "2020-01-01", + }, + ), + ], +) +async def imports( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly imports of a petroleum product - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiOilExports", + examples=[ + APIEx( + description="Get monthly crude oil exports - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare fuel oil exports from Russia and Saudi Arabia.", + parameters={ + "provider": "jodi", + "country": "russia,saudi_arabia", + "product": "fuel_oil", + "start_date": "2020-01-01", + }, + ), + ], +) +async def exports( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly exports of a petroleum product - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) + + +@router.command( + model="JodiOilStocks", + examples=[ + APIEx( + description="Get monthly crude oil closing stock levels - one column per reporting country.", + parameters={"provider": "jodi"}, + ), + APIEx( + description="Compare gasoline stocks in the United States and Japan, in thousand barrels.", + parameters={ + "provider": "jodi", + "country": "united_states,japan", + "product": "gasoline", + "unit": "kbbl", + "start_date": "2020-01-01", + }, + ), + ], +) +async def stocks( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Monthly closing stock levels of a petroleum product - one column per reporting country.""" + return await OBBject.from_query(OpenBBQuery(**locals())) diff --git a/openbb_platform/providers/jodi/openbb_jodi/py.typed b/openbb_platform/providers/jodi/openbb_jodi/py.typed new file mode 100644 index 00000000000..e69de29bb2d diff --git a/openbb_platform/providers/jodi/openbb_jodi/utils/__init__.py b/openbb_platform/providers/jodi/openbb_jodi/utils/__init__.py new file mode 100644 index 00000000000..f662aeb8559 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/utils/__init__.py @@ -0,0 +1 @@ +"""OpenBB JODI Provider Utilities.""" diff --git a/openbb_platform/providers/jodi/openbb_jodi/utils/constants.py b/openbb_platform/providers/jodi/openbb_jodi/utils/constants.py new file mode 100644 index 00000000000..727f1cf0686 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/utils/constants.py @@ -0,0 +1,540 @@ +"""OpenBB JODI Provider Module Constants.""" + +from typing import Literal + +OilProductType = Literal[ + "crude_oil", + "ngl", + "other_crude", + "total_crude", + "lpg", + "naphtha", + "gasoline", + "kerosene", + "jet_fuel", + "gas_diesel_oil", + "fuel_oil", + "other_products", + "total_products", +] +OilPrimaryProductType = Literal["crude_oil", "ngl", "other_crude", "total_crude"] +OilSecondaryProductType = Literal[ + "lpg", + "naphtha", + "gasoline", + "kerosene", + "jet_fuel", + "gas_diesel_oil", + "fuel_oil", + "other_products", + "total_products", +] +OilUnitType = Literal["kbd", "kbbl", "kl", "ktons", "conversion_factor"] +GasUnitType = Literal["m3", "tj", "ktons"] + +OIL_TABLE_URLS = { + "primary": "https://www.jodidata.org/_resources/files/downloads/oil-data/world_Primary_CSV.zip", + "secondary": "https://www.jodidata.org/_resources/files/downloads/oil-data/world_Secondary_CSV.zip", +} +GAS_FILES_URL = "https://api.publisher.jodidata.org/web/files/gas" +GAS_DOWNLOAD_URL = ( + "https://www.jodidata.org/jodi-publisher/gas/{publication_id}/{filename}" +) + +OIL_START_YEAR = 2002 +GAS_START_YEAR = 2009 + +# Item codes and full names per 'A Guide on JODI-Oil World Database Item Names' (2017) +# and 'A Guide on JODI-Gas World Database Item Names' (2025). +OIL_PRODUCTS = { + "crude_oil": ("CRUDEOIL", "primary"), + "ngl": ("NGL", "primary"), + "other_crude": ("OTHERCRUDE", "primary"), + "total_crude": ("TOTCRUDE", "primary"), + "lpg": ("LPG", "secondary"), + "naphtha": ("NAPHTHA", "secondary"), + "gasoline": ("GASOLINE", "secondary"), + "kerosene": ("KEROSENE", "secondary"), + "jet_fuel": ("JETKERO", "secondary"), + "gas_diesel_oil": ("GASDIES", "secondary"), + "fuel_oil": ("RESFUEL", "secondary"), + "other_products": ("ONONSPEC", "secondary"), + "total_products": ("TOTPRODS", "secondary"), +} + +OIL_PRODUCT_LABELS = { + "CRUDEOIL": "Crude oil", + "NGL": "NGL", + "OTHERCRUDE": "Other primary", + "TOTCRUDE": "Total primary", + "LPG": "Liquefied petroleum gases", + "NAPHTHA": "Naphtha", + "GASOLINE": "Motor and aviation gasoline", + "KEROSENE": "Kerosenes", + "JETKERO": "Kerosene type jet fuel", + "GASDIES": "Gas/diesel oil", + "RESFUEL": "Fuel oil", + "ONONSPEC": "Other oil products", + "TOTPRODS": "Total oil products", +} + +OIL_FLOWS = { + "production": {"primary": "INDPROD"}, + "from_other_sources": {"primary": "OSOURCES"}, + "imports": {"primary": "TOTIMPSB", "secondary": "TOTIMPSB"}, + "exports": {"primary": "TOTEXPSB", "secondary": "TOTEXPSB"}, + "products_transferred": {"primary": "TRANSBAK", "secondary": "PTRANSF"}, + "direct_use": {"primary": "DIRECUSE"}, + "stock_change": {"primary": "STOCKCH", "secondary": "STOCKCH"}, + "statistical_difference": {"primary": "STATDIFF", "secondary": "STATDIFF"}, + "refinery_intake": {"primary": "REFINOBS"}, + "refinery_output": {"secondary": "REFGROUT"}, + "receipts": {"secondary": "RECEIPTS"}, + "interproduct_transfers": {"secondary": "IPTRANSF"}, + "demand": {"secondary": "TOTDEMO"}, + "closing_stocks": {"primary": "CLOSTLV", "secondary": "CLOSTLV"}, +} + +OIL_FLOW_LABELS = { + "INDPROD": "Production", + "OSOURCES": "From other sources", + "TOTIMPSB": "Imports", + "TOTEXPSB": "Exports", + "TRANSBAK": "Products transferred/Backflows", + "PTRANSF": "Products transferred", + "DIRECUSE": "Direct use", + "STOCKCH": "Stock change", + "STATDIFF": "Statistical difference", + "REFINOBS": "Refinery intake", + "REFGROUT": "Refinery output", + "RECEIPTS": "Receipts", + "IPTRANSF": "Interproduct transfers", + "TOTDEMO": "Demand", + "CLOSTLV": "Closing stocks", +} + +OIL_UNITS = { + "kbd": "KBD", + "kbbl": "KBBL", + "kl": "KL", + "ktons": "KTONS", + "conversion_factor": "CONVBBL", +} + +OIL_UNIT_LABELS = { + "kbd": "Thousand barrels per day", + "kbbl": "Thousand barrels", + "kl": "Thousand kilolitres", + "ktons": "Thousand metric tons", + "conversion_factor": "Conversion factor barrels/ktons", +} + +GAS_FLOWS = { + "production": "INDPROD", + "from_other_sources": "OSOURCES", + "imports": "TOTIMPSB", + "lng_imports": "IMPLNG", + "pipeline_imports": "IMPPIP", + "exports": "TOTEXPSB", + "lng_exports": "EXPLNG", + "pipeline_exports": "EXPPIP", + "stock_change": "STOCKCH", + "demand": "TOTDEMO", + "demand_calculated": "TOTDEMC", + "electricity_and_heat_generation": "MAINTOT", + "statistical_difference": "STATDIFF", + "closing_stocks": "CLOSTLV", +} + +GAS_FLOW_LABELS = { + "INDPROD": "Production", + "OSOURCES": "Receipts from other sources", + "TOTIMPSB": "Imports", + "IMPLNG": "LNG imports", + "IMPPIP": "Pipeline imports", + "TOTEXPSB": "Exports", + "EXPLNG": "LNG exports", + "EXPPIP": "Pipeline exports", + "STOCKCH": "Stock change", + "TOTDEMO": "Gross inland deliveries (observed)", + "TOTDEMC": "Gross inland deliveries (calculated)", + "MAINTOT": "Of which: electricity and heat generation", + "STATDIFF": "Statistical difference", + "CLOSTLV": "Closing stocks", +} + +GAS_UNITS = { + "m3": "M3", + "tj": "TJ", + "ktons": "KTONS", +} + +GAS_UNIT_LABELS = { + "m3": "Million cubic metres", + "tj": "Terajoules", + "ktons": "Thousand metric tons (LNG)", +} + +ASSESSMENT_LABELS = { + "1": "Reasonable levels of comparability", + "2": "Consult metadata/use with caution", + "3": "Not assessed", + "4": "Under verification", +} + +# Definitions per the JODI-Oil Monthly Questionnaire Short Definitions and the +# JODI-Gas Questionnaire brief reporting guide (www.jodidata.org). +NATURAL_GAS_DEFINITION = ( + "Natural gas is a mixture of gaseous hydrocarbons, primarily methane, but" + " generally also including ethane, propane, and higher hydrocarbons in much" + " smaller amounts, and some non-combustible gases such as nitrogen and carbon" + " dioxide. It includes both non-associated and associated gas. Colliery gas," + " coal seam gas, and shale gas are included, while manufactured gas and biogas" + " are excluded except when blended with natural gas for final consumption." + " Natural gas liquids are excluded." +) + +OIL_PRODUCT_DEFINITIONS = { + "crude_oil": "Crude oil, including lease condensate and excluding NGL.", + "ngl": "Liquid or liquefied hydrocarbons recovered from gas separation" + " plants and gas processing facilities.", + "other_crude": "Refinery feedstocks, additives/oxygenates, and other hydrocarbons.", + "total_crude": "The sum of the primary categories: crude oil + NGL + other.", + "lpg": "Liquefied petroleum gases, comprising propane and butane.", + "naphtha": "Naphtha used as feedstock for producing high octane gasoline" + " and as feedstock for the chemical/petrochemical industries.", + "gasoline": "Motor gasoline and aviation gasoline; motor gasoline includes" + " biogasoline, e.g. ethanol blends.", + "kerosene": "Kerosenes, comprising jet kerosene and other kerosene.", + "jet_fuel": "Kerosene type jet fuel: aviation fuel used for aviation" + " turbine power units; a subset of the amount reported under kerosenes.", + "gas_diesel_oil": "Gas/diesel oil, for automotive and other purposes;" + " biodiesel is included.", + "fuel_oil": "Heavy residual oil/boiler oil, including bunker oil.", + "other_products": "Refinery gas, ethane, petroleum coke, lubricants, white" + " spirit and SBP, bitumen, paraffin waxes, and other petroleum products.", + "total_products": "The sum of all secondary product categories; demand for" + " total products includes direct use of crude oil, NGL, and other" + " hydrocarbons.", +} + +OIL_FLOW_DEFINITIONS = { + "production": "Marketed production, after removal of impurities but" + " including quantities consumed by the producer in the production process.", + "refinery_output": "Gross refinery output of finished products, including" + " refinery fuel.", + "from_other_sources": "Inputs of additives, biofuels, and other" + " hydrocarbons produced from non-oil sources such as coal, natural gas," + " and renewable energy.", + "receipts": "Primary product receipts (quantities of oil used directly" + " without processing in a refinery) plus recycled products. Receipts for" + " other oil products include direct use of crude oil and NGL.", + "imports": "Goods having physically crossed the international boundaries," + " excluding transit trade and international marine and aviation bunkers.", + "exports": "Goods having physically crossed the international boundaries," + " excluding transit trade and international marine and aviation bunkers.", + "products_transferred": "For primary products, the sum of products" + " transferred and backflows from the petrochemical industry; for secondary" + " products, imported petroleum products reclassified as feedstocks for" + " further processing in the refinery, without delivery to final consumers.", + "interproduct_transfers": "Reclassification of products because their" + " specification has changed or because they are blended into another" + " product; a negative entry indicates a product to be reclassified, a" + " positive entry a reclassified product. Interproduct transfers for other" + " oil products include interproduct transfers of crude oil and NGL.", + "direct_use": "Crude oil, NGL, and other hydrocarbons used directly" + " without being processed in oil refineries, for example crude oil burned" + " for electricity generation.", + "stock_change": "Closing minus opening stock level; a positive number" + " corresponds to a stock build, a negative number to a stock draw.", + "statistical_difference": "Differences between observed supply flows and" + " refinery intake or demand.", + "refinery_intake": "Observed refinery throughputs.", + "demand": "Deliveries or sales to the inland market (domestic consumption)" + " plus refinery fuel plus international marine and aviation bunkers." + " Demand for other oil products includes direct use of crude oil, NGL," + " and other primary hydrocarbons.", + "closing_stocks": "The primary stock level at the end of the month within" + " national territories; includes stocks held by importers, refiners," + " stock-holding organisations, and governments.", +} + +GAS_FLOW_DEFINITIONS = { + "production": "Dry marketable production within national boundaries," + " including offshore production, measured after purification and extraction" + " of NGL and sulphur; excludes quantities reinjected, extraction losses," + " and quantities vented or flared; includes quantities used within the" + " natural gas industry, in gas extraction, pipeline systems, and processing" + " plants.", + "from_other_sources": "Gas from energy products already accounted for in" + " the production of other energy products, for example petroleum gases or" + " biogases blended with natural gas.", + "imports": "Amounts that have crossed the physical boundaries of the" + " country, whether customs clearance has taken place or not; excludes goods" + " in transit and goods temporarily admitted/withdrawn, includes re-imports;" + " deliveries for international bunkers are excluded.", + "pipeline_imports": "Imports of gaseous natural gas through pipelines.", + "lng_imports": "Imports of liquefied natural gas through ocean tankers, on" + " a re-gasified equivalent basis.", + "exports": "Amounts that have crossed the physical boundaries of the" + " country, whether customs clearance has taken place or not; excludes goods" + " in transit and goods temporarily admitted/withdrawn, includes re-exports;" + " deliveries for international bunkers are excluded.", + "pipeline_exports": "Exports of gaseous natural gas through pipelines.", + "lng_exports": "Exports of liquefied natural gas through ocean tankers, on" + " a re-gasified equivalent basis.", + "stock_change": "The difference between the closing and opening stock" + " level of recoverable gas already extracted; a stock build is shown as a" + " positive number, a stock draw as a negative number.", + "demand_calculated": "Gross inland deliveries (calculated): production +" + " receipts from other sources + imports - exports - stock change.", + "statistical_difference": "The difference between the calculated and" + " observed gross inland deliveries.", + "demand": "Gross inland deliveries (observed): deliveries of marketable" + " gas to the inland market, including gas used by the gas industry for" + " heating and operation of equipment, losses in distribution, and" + " deliveries to international marine and aviation bunkers.", + "electricity_and_heat_generation": "Deliveries of natural gas for the" + " generation of electricity and heat in power plants, including both" + " main-activity and autoproducer plants.", + "closing_stocks": "The stock level held on the national territory on the" + " last day of the reference month.", +} + +# Flow code -> balance-view field name, in questionnaire order. +OIL_BALANCE_FIELDS = { + "INDPROD": "production", + "REFGROUT": "refinery_output", + "OSOURCES": "from_other_sources", + "RECEIPTS": "receipts", + "TOTIMPSB": "imports", + "TOTEXPSB": "exports", + "TRANSBAK": "products_transferred", + "PTRANSF": "products_transferred", + "IPTRANSF": "interproduct_transfers", + "DIRECUSE": "direct_use", + "STOCKCH": "stock_change", + "STATDIFF": "statistical_difference", + "REFINOBS": "refinery_intake", + "TOTDEMO": "demand", + "CLOSTLV": "closing_stocks", +} + +GAS_BALANCE_FIELDS = { + "INDPROD": "production", + "OSOURCES": "from_other_sources", + "TOTIMPSB": "imports", + "IMPPIP": "pipeline_imports", + "IMPLNG": "lng_imports", + "TOTEXPSB": "exports", + "EXPPIP": "pipeline_exports", + "EXPLNG": "lng_exports", + "STOCKCH": "stock_change", + "TOTDEMC": "demand_calculated", + "STATDIFF": "statistical_difference", + "TOTDEMO": "demand", + "MAINTOT": "electricity_and_heat_generation", + "CLOSTLV": "closing_stocks", +} + +# Product code -> demand-by-product field name, in published order. +OIL_PRODUCT_FIELDS = { + "LPG": "lpg", + "NAPHTHA": "naphtha", + "GASOLINE": "gasoline", + "KEROSENE": "kerosene", + "JETKERO": "jet_fuel", + "GASDIES": "gas_diesel_oil", + "RESFUEL": "fuel_oil", + "ONONSPEC": "other_products", + "TOTPRODS": "total_products", +} + +# ISO 3166-1 alpha-2 codes observed in the JODI world databases. +COUNTRIES = { + "albania": "AL", + "algeria": "DZ", + "angola": "AO", + "argentina": "AR", + "armenia": "AM", + "australia": "AU", + "austria": "AT", + "azerbaijan": "AZ", + "bahrain": "BH", + "bangladesh": "BD", + "barbados": "BB", + "belarus": "BY", + "belgium": "BE", + "belize": "BZ", + "bermuda": "BM", + "bolivia": "BO", + "brazil": "BR", + "brunei": "BN", + "bulgaria": "BG", + "canada": "CA", + "chile": "CL", + "china": "CN", + "colombia": "CO", + "costa_rica": "CR", + "croatia": "HR", + "cuba": "CU", + "cyprus": "CY", + "czechia": "CZ", + "denmark": "DK", + "dominican_republic": "DO", + "ecuador": "EC", + "egypt": "EG", + "el_salvador": "SV", + "equatorial_guinea": "GQ", + "estonia": "EE", + "eswatini": "SZ", + "finland": "FI", + "france": "FR", + "gabon": "GA", + "gambia": "GM", + "georgia": "GE", + "germany": "DE", + "greece": "GR", + "grenada": "GD", + "guatemala": "GT", + "guyana": "GY", + "haiti": "HT", + "honduras": "HN", + "hong_kong": "HK", + "hungary": "HU", + "iceland": "IS", + "india": "IN", + "indonesia": "ID", + "iran": "IR", + "iraq": "IQ", + "ireland": "IE", + "italy": "IT", + "jamaica": "JM", + "japan": "JP", + "kazakhstan": "KZ", + "kuwait": "KW", + "latvia": "LV", + "libya": "LY", + "lithuania": "LT", + "luxembourg": "LU", + "malaysia": "MY", + "malta": "MT", + "mauritius": "MU", + "mexico": "MX", + "moldova": "MD", + "morocco": "MA", + "myanmar": "MM", + "nepal": "NP", + "netherlands": "NL", + "new_zealand": "NZ", + "nicaragua": "NI", + "niger": "NE", + "nigeria": "NG", + "north_macedonia": "MK", + "norway": "NO", + "oman": "OM", + "panama": "PA", + "papua_new_guinea": "PG", + "paraguay": "PY", + "peru": "PE", + "philippines": "PH", + "poland": "PL", + "portugal": "PT", + "qatar": "QA", + "romania": "RO", + "russia": "RU", + "saudi_arabia": "SA", + "serbia": "RS", + "singapore": "SG", + "slovakia": "SK", + "slovenia": "SI", + "south_africa": "ZA", + "south_korea": "KR", + "spain": "ES", + "sudan": "SD", + "suriname": "SR", + "sweden": "SE", + "switzerland": "CH", + "syria": "SY", + "taiwan": "TW", + "tajikistan": "TJ", + "thailand": "TH", + "trinidad_and_tobago": "TT", + "tunisia": "TN", + "turkiye": "TR", + "ukraine": "UA", + "united_arab_emirates": "AE", + "united_kingdom": "GB", + "united_states": "US", + "uruguay": "UY", + "venezuela": "VE", + "vietnam": "VN", + "yemen": "YE", +} + +CODE_TO_COUNTRY = {v: k for k, v in COUNTRIES.items()} + +COUNTRY_LABELS = { + code: name.replace("_", " ").title().replace(" And ", " and ") + for name, code in COUNTRIES.items() +} + +COUNTRY_WIDGET_OPTIONS = [ + {"label": COUNTRY_LABELS[code], "value": name} for name, code in COUNTRIES.items() +] + +# 'choices' is never set for country params: the static package rejects None defaults +# when choices are set, and choices would reject ISO code input before validators run. +COUNTRY_SCHEMA_MULTI = { + "multiple_items_allowed": True, + "x-widget_config": { + "options": COUNTRY_WIDGET_OPTIONS, + "style": {"popupWidth": 450}, + }, +} + +COUNTRY_SCHEMA_SINGLE = { + "x-widget_config": { + "options": COUNTRY_WIDGET_OPTIONS, + "style": {"popupWidth": 450}, + }, +} + +COUNTRY_MULTI_DESCRIPTION = ( + "The country or countries to get data for, by name or ISO 3166-1 alpha-2 code." + + " If None, all reporting countries are returned." +) +COUNTRY_SINGLE_DESCRIPTION = ( + "The country to get data for, by name or ISO 3166-1 alpha-2 code." +) +OIL_UNIT_DESCRIPTION = ( + "The unit of measurement." + + " kbd: thousand barrels per day; kbbl: thousand barrels;" + + " kl: thousand kilolitres; ktons: thousand metric tons;" + + " conversion_factor: barrels per thousand metric tons." +) +GAS_UNIT_DESCRIPTION = ( + "The unit of measurement." + + " m3: million cubic metres (at 15C, 760 mm Hg);" + + " tj: terajoules, on a gross calorific value basis;" + + " ktons: thousand metric tons, on a re-gasified equivalent basis," + + " reported only for LNG trade amounts." +) + +PRIMARY_PRODUCTS = ["crude_oil", "ngl", "other_crude", "total_crude"] +SECONDARY_PRODUCTS = [name for name in OIL_PRODUCTS if name not in PRIMARY_PRODUCTS] + +OIL_PRODUCT_CHOICES_DESCRIPTION = "\n".join( + f" {name}: {OIL_PRODUCT_DEFINITIONS[name]}" for name in OIL_PRODUCTS +) +OIL_PRIMARY_PRODUCT_CHOICES_DESCRIPTION = "\n".join( + f" {name}: {OIL_PRODUCT_DEFINITIONS[name]}" for name in PRIMARY_PRODUCTS +) +OIL_SECONDARY_PRODUCT_CHOICES_DESCRIPTION = "\n".join( + f" {name}: {OIL_PRODUCT_DEFINITIONS[name]}" for name in SECONDARY_PRODUCTS +) +USE_CACHE_DESCRIPTION = ( + "If True, the source tables are cached under the user cache directory" + + " and revalidated against the source at most once per day," + + " downloading again only when JODI has published an update." +) diff --git a/openbb_platform/providers/jodi/openbb_jodi/utils/helpers.py b/openbb_platform/providers/jodi/openbb_jodi/utils/helpers.py new file mode 100644 index 00000000000..e9247761c24 --- /dev/null +++ b/openbb_platform/providers/jodi/openbb_jodi/utils/helpers.py @@ -0,0 +1,934 @@ +"""OpenBB JODI Provider Module Helpers.""" + +import weakref +from contextlib import contextmanager +from typing import TYPE_CHECKING, cast + +from openbb_core.app.model.abstract.error import OpenBBError + +from openbb_jodi.utils.constants import ( + GAS_DOWNLOAD_URL, + GAS_FILES_URL, + OIL_TABLE_URLS, +) + +if TYPE_CHECKING: + import asyncio # noqa + from collections.abc import Iterator, Mapping # noqa + from datetime import date as dateType # noqa + from pathlib import Path # noqa + from typing import IO # noqa + + from pandas import DataFrame # noqa + +REVALIDATE_INTERVAL = 86400 +PROBE_TIMEOUT = 60 +MAX_RANGE_CONNECTIONS = 16 +MIN_RANGE_CHUNK = 2 * 1024 * 1024 +INGEST_CHUNK_ROWS = 1_000_000 +PARTITION_ROW_GROUP = 32768 + +EXPECTED_COLUMNS: list = [ + "REF_AREA", + "TIME_PERIOD", + "ENERGY_PRODUCT", + "FLOW_BREAKDOWN", + "UNIT_MEASURE", + "OBS_VALUE", + "ASSESSMENT_CODE", +] + +# Dimension columns are categorical: the full tables have millions of rows. +CSV_DTYPES: dict = { + "REF_AREA": "category", + "TIME_PERIOD": "category", + "ENERGY_PRODUCT": "category", + "FLOW_BREAKDOWN": "category", + "UNIT_MEASURE": "category", + "OBS_VALUE": str, + "ASSESSMENT_CODE": "category", +} +# TIME_PERIOD stays a plain string in partitions so parquet range filters +# compare lexicographically ("YYYY-MM" sorts chronologically). +PARTITION_DTYPES: dict = {**CSV_DTYPES, "TIME_PERIOD": str, "OBS_VALUE": float} + +# Per-event-loop download locks and prefetch tasks: locks coalesce concurrent +# requests for the same table, and asyncio primitives cannot cross loops. +# Weak keys drop entries when a loop is garbage collected. +_DOWNLOAD_LOCKS: "weakref.WeakKeyDictionary" = weakref.WeakKeyDictionary() +_PREFETCH_TASKS: "weakref.WeakKeyDictionary" = weakref.WeakKeyDictionary() + + +def _download_lock(table: str) -> "asyncio.Lock": + """Get the download lock for a table on the running event loop.""" + import asyncio + + loop = asyncio.get_running_loop() + locks = _DOWNLOAD_LOCKS.setdefault(loop, {}) + if table not in locks: + locks[table] = asyncio.Lock() + return locks[table] + + +def _lock_handle_nt(handle) -> None: # pragma: no cover - Windows-only + """Take an exclusive byte lock, waiting for a concurrent holder.""" + import msvcrt # noqa + from time import sleep + + handle.seek(0) + while True: + try: + msvcrt.locking( # ty: ignore[unresolved-attribute] + handle.fileno(), + msvcrt.LK_NBLCK, # ty: ignore[unresolved-attribute] + 1, + ) + return + except OSError: + sleep(0.05) + + +def _unlock_handle_nt(handle) -> None: # pragma: no cover - Windows-only + """Release the exclusive byte lock.""" + import msvcrt + + handle.seek(0) + msvcrt.locking( # ty: ignore[unresolved-attribute] + handle.fileno(), + msvcrt.LK_UNLCK, # ty: ignore[unresolved-attribute] + 1, + ) + + +def _lock_handle_posix(handle) -> None: # pragma: no cover - POSIX-only + """Take an exclusive flock, waiting for a concurrent holder.""" + import fcntl + + fcntl.flock(handle.fileno(), fcntl.LOCK_EX) # ty: ignore[unresolved-attribute] + + +def _unlock_handle_posix(handle) -> None: # pragma: no cover - POSIX-only + """Release the exclusive flock.""" + import fcntl + + fcntl.flock(handle.fileno(), fcntl.LOCK_UN) # ty: ignore[unresolved-attribute] + + +def acquire_table_lock(table: str) -> "IO[bytes]": + """Acquire the cross-process lock for a table; released by release_table_lock. + + The asyncio locks only coalesce work within one event loop; this file lock + serializes refreshes of the same table across processes and loops, and is + released by the OS if the holder dies. + """ + import os + + lock = _lock_handle_nt if os.name == "nt" else _lock_handle_posix + path = get_cache_directory() / f"{table}.lock" + handle = open(path, "a+b") # noqa: SIM115 + try: + lock(handle) + except BaseException: + handle.close() + raise + return handle + + +def release_table_lock(handle: "IO[bytes]") -> None: + """Release a cross-process table lock.""" + import os + + unlock = _unlock_handle_nt if os.name == "nt" else _unlock_handle_posix + try: + unlock(handle) + finally: + handle.close() + + +def clear_table_temp(table: str) -> None: + """Remove staging leftovers and spent archives; the caller holds the table lock.""" + import shutil + + for path in get_cache_directory().glob(f"{table}.*.tmp"): + if path.is_dir(): + shutil.rmtree(path, ignore_errors=True) + else: + path.unlink(missing_ok=True) + # A raw archive left by an interrupted run, or by an older version. + (get_cache_directory() / f"{table}.zip").unlink(missing_ok=True) + + +def get_cache_directory() -> "Path": + """Get the JODI cache directory, creating it if needed.""" + from pathlib import Path # noqa + from openbb_core.app.utils import get_user_cache_directory + + cache_dir = Path(get_user_cache_directory()) / "jodi" + cache_dir.mkdir(parents=True, exist_ok=True) + return cache_dir + + +def table_directory(table: str) -> "Path": + """Get the partition directory for a table.""" + return get_cache_directory() / table + + +def partition_filename(name: str) -> str: + """Get a partition's file name; parquet is portable across pandas versions.""" + return f"{name}.parquet" + + +def write_cached_raw(filename: str, content: bytes) -> None: + """Write bytes to a path under the cache directory, atomically.""" + import os # noqa + from secrets import token_hex + + path = get_cache_directory() / filename + path.parent.mkdir(parents=True, exist_ok=True) + temp_path = path.with_name(f"{path.name}.{os.getpid()}{token_hex(4)}.tmp") + temp_path.write_bytes(content) + os.replace(temp_path, path) + + +async def request_range( + url: str, + timeout: int, + start: int | None = None, + end: int | None = None, + validator: str | None = None, +) -> "tuple[int, Mapping, bytes]": + """Make one request, optionally for a byte range guarded by a validator.""" + from openbb_core.provider.utils.helpers import amake_request + + # The JODI web server responds with a 406 error without a browser-like User-Agent. + headers = {"User-Agent": "Mozilla/5.0"} + if start is not None: + headers["Range"] = f"bytes={start}-{end}" + if validator: + # A mid-transfer file replacement returns 200 instead of a torn 206. + headers["If-Range"] = validator + + async def response_callback(response, _): + """Read the status, response headers, and body.""" + return (response.status, response.headers, await response.read()) + + response = await amake_request( + url, timeout=timeout, response_callback=response_callback, headers=headers + ) + return cast("tuple[int, Mapping, bytes]", response) + + +def source_meta(status: int, headers: "Mapping") -> dict: + """Extract the cache validators from response headers.""" + total_text = str(headers.get("Content-Range", "")).rpartition("/")[2] + if not total_text.isdigit() and status == 200: + total_text = str(headers.get("Content-Length", "")) + return { + "etag": headers.get("ETag"), + "last_modified": headers.get("Last-Modified"), + "size": int(total_text) if total_text.isdigit() else 0, + } + + +def _range_part_ok(part, start: int, end: int) -> bool: + """Check one gathered range response for usability.""" + if isinstance(part, BaseException): + return False + status, _, body = part + return status == 206 and len(body) == end - start + 1 + + +async def download(url: str, timeout: int = 600) -> "tuple[bytes, dict]": + """Download a file with its cache validators, using concurrent byte ranges. + + The JODI web server throttles per connection; segmented requests multiply + the download throughput. Any unusable or failed segment falls back to one + plain request. + """ + import asyncio # noqa + from math import ceil + + status, headers, body = await request_range(url, timeout, 0, 0) + if status == 200: + # Ranges are not supported: the probe returned the complete file. + return body, source_meta(status, headers) + if status != 206: + raise OpenBBError(f"Failed to download {url} -> Status Code: {status}") + + meta = source_meta(status, headers) + total = meta["size"] + if total: + validator = meta["etag"] or meta["last_modified"] or None + chunk_size = ceil( + total / min(MAX_RANGE_CONNECTIONS, max(1, ceil(total / MIN_RANGE_CHUNK))) + ) + offsets = [ + (start, min(start + chunk_size, total) - 1) + for start in range(0, total, chunk_size) + ] + parts = await asyncio.gather( + *( + request_range(url, timeout, start, end, validator) + for start, end in offsets + ), + return_exceptions=True, + ) + if all( + _range_part_ok(part, start, end) + for part, (start, end) in zip(parts, offsets) + ): + return ( + b"".join(cast("tuple", part)[2] for part in parts), + meta, + ) + + # The range responses were unusable: fall back to one full request. + status, headers, body = await request_range(url, timeout) + if status != 200: + raise OpenBBError(f"Failed to download {url} -> Status Code: {status}") + return body, source_meta(status, headers) + + +async def probe_source(url: str) -> dict | None: + """Get the source file's current cache validators, None when unreachable.""" + try: + status, headers, _ = await request_range(url, PROBE_TIMEOUT, 0, 0) + except Exception: + # The revalidation probe must never break a cached read. + return None + if status in (200, 206): + return source_meta(status, headers) + return {} + + +def source_unchanged(cached: dict, probed: dict) -> bool: + """Compare cache validators, strongest first.""" + for key in ("etag", "last_modified", "size"): + ours, theirs = cached.get(key), probed.get(key) + if ours and theirs: + return ours == theirs + return False + + +def read_manifest(table: str) -> dict | None: + """Read a table's cache manifest, None when missing or unreadable.""" + import json + + path = table_directory(table) / "manifest.json" + try: + manifest = json.loads(path.read_text(encoding="utf-8")) + except (OSError, ValueError): + return None + if ( + not isinstance(manifest, dict) + or "source" not in manifest + or "partitions" not in manifest + ): + return None + return manifest + + +def write_manifest(table: str, manifest: dict) -> None: + """Write a table's cache manifest.""" + import json + + write_cached_raw(f"{table}/manifest.json", json.dumps(manifest).encode("utf-8")) + + +def manifest_is_fresh(manifest: dict) -> bool: + """Check whether a manifest was validated within the revalidation interval.""" + from time import time + + return time() - manifest.get("checked_at", 0) <= REVALIDATE_INTERVAL + + +def bump_checked_at(table: str, snapshot: dict) -> dict: + """Refresh a manifest's checked_at without clobbering a concurrent refresh.""" + from time import time + + handle = acquire_table_lock(table) + try: + current = read_manifest(table) + if current is not None and current.get("source") != snapshot.get("source"): + # A concurrent refresh installed a newer manifest: keep it. + return current + manifest = current or snapshot + manifest["checked_at"] = time() + write_manifest(table, manifest) + return manifest + finally: + release_table_lock(handle) + + +@contextmanager +def open_archive_csv(path: "Path") -> "Iterator": + """Open the CSV stream inside a raw source file, unzipping when needed.""" + import zipfile + + with open(path, "rb") as handle: + if handle.read(4) == b"PK\x03\x04": + handle.seek(0) + try: + archive = zipfile.ZipFile(handle) + except zipfile.BadZipFile as exc: + raise OpenBBError(f"The JODI archive is unreadable. -> {exc}") from exc + with archive: + members = [n for n in archive.namelist() if n.lower().endswith(".csv")] + if not members: + raise OpenBBError("No CSV member was found in the JODI archive.") + with archive.open(members[0]) as stream: + yield stream + else: + handle.seek(0) + yield handle + + +def clean_chunk(chunk: "DataFrame") -> "DataFrame": + """Validate a parsed CSV chunk and drop the non-numeric observations.""" + from pandas import to_numeric + + if list(chunk.columns) != EXPECTED_COLUMNS: + raise OpenBBError( + "Unexpected JODI file format." + + f" Expected columns: {EXPECTED_COLUMNS} Got: {list(chunk.columns)}" + ) + chunk["OBS_VALUE"] = to_numeric(chunk["OBS_VALUE"], errors="coerce") + return chunk[chunk["OBS_VALUE"].notna()] + + +def ingest_table(table: str, source_path: "Path") -> dict[str, list[str]]: + """Split a raw source file into per-product-and-flow partition files. + + The CSV is streamed in chunks: the full table is never held in memory. + The caller holds the table lock. + """ + import os # noqa + import shutil + from secrets import token_hex + from time import sleep + + from pandas import read_csv + + directory = table_directory(table) + staging = directory.with_name(f"{directory.name}.{os.getpid()}{token_hex(4)}.tmp") + staging.mkdir(parents=True) + partitions: dict[str, list[str]] = {} + try: + with open_archive_csv(source_path) as stream: + try: + for chunk in read_csv( + stream, dtype=CSV_DTYPES, chunksize=INGEST_CHUNK_ROWS + ): + groups = clean_chunk(chunk).groupby( + ["ENERGY_PRODUCT", "FLOW_BREAKDOWN"], + observed=True, + sort=False, + ) + for key, rows in groups: + product, flow = cast("tuple[str, str]", key) + name = f"{product}_{flow}" + rows.to_csv( + staging / f"{name}.csv", + mode="a", + header=name not in partitions, + index=False, + ) + partitions[name] = [str(product), str(flow)] + except ValueError as exc: + raise OpenBBError(f"Unexpected JODI file format. -> {exc}") from exc + if not partitions: + # Committing an empty table would destroy the existing good cache. + raise OpenBBError("The JODI source file contains no observations.") + for name in partitions: + csv_path = staging / f"{name}.csv" + # Sorting groups each country into contiguous row groups, so the + # parquet statistics prune non-matching row groups at read time. + read_csv(csv_path, dtype=PARTITION_DTYPES).sort_values( + ["REF_AREA", "TIME_PERIOD"] + ).to_parquet( + staging / partition_filename(name), + engine="pyarrow", + index=False, + row_group_size=PARTITION_ROW_GROUP, + ) + csv_path.unlink() + for attempt in range(3): + try: + if directory.exists(): + shutil.rmtree(directory) + os.replace(staging, directory) + break + except OSError: + # A reader may hold a partition file open (Windows). + if attempt == 2: + raise + sleep(0.25) + except BaseException: + shutil.rmtree(staging, ignore_errors=True) + raise + return partitions + + +def store_table(table: str, url: str, raw: bytes, meta: dict) -> dict: + """Ingest downloaded bytes into partitions and write the manifest. + + The caller holds the table lock. The raw archive is deleted after ingest: + the partitions are the cache. + """ + import os # noqa + from secrets import token_hex + from time import time + + directory = get_cache_directory() + temp_path = directory / f"{table}.zip.{os.getpid()}{token_hex(4)}.tmp" + temp_path.write_bytes(raw) + try: + partitions = ingest_table(table, temp_path) + finally: + temp_path.unlink(missing_ok=True) + manifest = { + "source": {"url": url, **meta}, + "checked_at": time(), + "partitions": partitions, + } + write_manifest(table, manifest) + return manifest + + +async def resolve_source_url(table: str) -> str: + """Get a table's current download URL; the gas URL rotates per publication.""" + import json + + if table != "gas_world": + return OIL_TABLE_URLS[table.removeprefix("oil_")] + listing, _ = await download(GAS_FILES_URL) + info = json.loads(listing) + files = [ + f + for f in info.get("files", []) + if f.get("format") == "CSV" and not f.get("ignore") + ] + if not files: + raise OpenBBError("No CSV file is listed by the JODI-Gas publisher API.") + return GAS_DOWNLOAD_URL.format( + publication_id=info.get("publicationId"), filename=files[0].get("filename") + ) + + +async def source_changed(table: str, manifest: dict) -> bool | None: + """Check a cached table against the source: True/False, or None if unknowable.""" + url = manifest["source"]["url"] + if table == "gas_world": + try: + url = await resolve_source_url(table) + except (OpenBBError, ValueError): + return None + if url != manifest["source"]["url"]: + return True # a new publication is listed + probed = await probe_source(url) + if not probed: + # Unreachable, or an HTTP error status: keep serving the cache. + return None + return not source_unchanged(manifest["source"], probed) + + +async def refresh_table(table: str, use_cache: bool = True) -> dict: + """Download a table's source archive and rebuild its partitioned cache. + + Ingest and file I/O run in a thread so the event loop stays responsive; + the cross-process table lock is held for the whole refresh. + """ + import asyncio + + handle = await asyncio.to_thread(acquire_table_lock, table) + try: + # A concurrent process may have refreshed while this one waited. + manifest = read_manifest(table) if use_cache else None + if manifest is not None and manifest_is_fresh(manifest): + return manifest + await asyncio.to_thread(clear_table_temp, table) + url = await resolve_source_url(table) + raw, meta = await download(url) + return await asyncio.to_thread(store_table, table, url, raw, meta) + finally: + await asyncio.to_thread(release_table_lock, handle) + + +async def ensure_table(table: str, use_cache: bool = True) -> dict: + """Get a table's cache manifest, revalidating or downloading as needed. + + A cached table is revalidated against the source's validators at most once + per day; the archive is downloaded again only when the source has changed. + A failed revalidation or refresh serves the cached table instead of erroring. + """ + import asyncio + + manifest = read_manifest(table) if use_cache else None + if manifest is not None and manifest_is_fresh(manifest): + return manifest + async with _download_lock(table): + # A concurrent request may have refreshed the table while waiting. + manifest = read_manifest(table) if use_cache else None + if manifest is not None and manifest_is_fresh(manifest): + return manifest + if manifest is not None: + changed = await source_changed(table, manifest) + if not changed: + # Unchanged, or the source could not be checked: keep the cache. + return await asyncio.to_thread(bump_checked_at, table, manifest) + try: + return await refresh_table(table, use_cache) + except Exception: + if manifest is not None: + # The refresh failed but a readable table is on disk: serve it. + return await asyncio.to_thread(bump_checked_at, table, manifest) + raise + + +def partition_filters( + countries: set[str] | None, + units: set[str] | None, + start_date: "dateType | None", + end_date: "dateType | None", +) -> list | None: + """Build parquet predicate-pushdown filters for the in-file dimensions.""" + filters: list = [] + if countries is not None: + filters.append(("REF_AREA", "in", sorted(countries))) + if units is not None: + filters.append(("UNIT_MEASURE", "in", sorted(units))) + if start_date is not None: + filters.append(("TIME_PERIOD", ">=", start_date.strftime("%Y-%m"))) + if end_date is not None: + filters.append(("TIME_PERIOD", "<=", end_date.strftime("%Y-%m"))) + return filters or None + + +def load_partitions( + table: str, + product_codes: set[str] | None, + flow_codes: set[str] | None, + manifest: dict, + countries: set[str] | None = None, + units: set[str] | None = None, + start_date: "dateType | None" = None, + end_date: "dateType | None" = None, +) -> "DataFrame | None": + """Read the partition slices for the requested codes, None on a broken cache. + + The partition files select the product and flow; the country, unit, and + period predicates push down into the parquet reads. + """ + from pandas import DataFrame, concat, read_parquet + + filters = partition_filters(countries, units, start_date, end_date) + frames: list[DataFrame] = [] + for name, (product, flow) in manifest["partitions"].items(): + if product_codes is not None and product not in product_codes: + continue + if flow_codes is not None and flow not in flow_codes: + continue + try: + frame = read_parquet( + table_directory(table) / partition_filename(name), + engine="pyarrow", + filters=filters, + ) + except Exception: + # Any unreadable partition invalidates the table cache. + return None + if not frame.empty: + frames.append(frame) + if not frames: + return DataFrame({column: [] for column in EXPECTED_COLUMNS}) + return concat(frames, ignore_index=True) if len(frames) > 1 else frames[0] + + +async def get_table_slice( + table: str, + product_codes: set[str] | None, + flow_codes: set[str] | None, + use_cache: bool = True, + countries: set[str] | None = None, + units: set[str] | None = None, + start_date: "dateType | None" = None, + end_date: "dateType | None" = None, +) -> "DataFrame": + """Get the requested slices of one JODI table, with predicate pushdown.""" + import asyncio + from functools import partial + + load = partial( + load_partitions, + table, + product_codes, + flow_codes, + countries=countries, + units=units, + start_date=start_date, + end_date=end_date, + ) + manifest = await ensure_table(table, use_cache) + df = await asyncio.to_thread(load, manifest) + if df is not None: + return df + async with _download_lock(table): + # A concurrent request may have healed the table while waiting. + manifest = read_manifest(table) or manifest + df = await asyncio.to_thread(load, manifest) + if df is not None: + return df + # Self-heal: the raw archive is not kept, so download fresh. + healed = await refresh_table(table, use_cache=False) + df = await asyncio.to_thread(load, healed) + if df is None: + raise OpenBBError(f"The cached JODI table '{table}' could not be read.") + return df + + +async def prefetch_tables() -> None: + """Warm the partitioned cache for every JODI table.""" + import asyncio + + await asyncio.gather( + ensure_table("oil_primary"), + ensure_table("oil_secondary"), + ensure_table("gas_world"), + return_exceptions=True, + ) + + +def start_prefetch() -> None: + """Start one background prefetch of all tables per event loop.""" + import asyncio + + try: + loop = asyncio.get_running_loop() + except RuntimeError: + return + task = _PREFETCH_TASKS.get(loop) + if task is None or task.done(): + _PREFETCH_TASKS[loop] = loop.create_task(prefetch_tables()) + + +def apply_filters( + df: "DataFrame", + countries: set[str] | None, + products: set[str] | None, + flows: set[str] | None, + units: set[str] | None, + start_date: "dateType", + end_date: "dateType", +) -> "DataFrame": + """Filter a JODI DataFrame by dimension codes and period.""" + if countries is not None: + df = df[df["REF_AREA"].isin(countries)] + if products is not None: + df = df[df["ENERGY_PRODUCT"].isin(products)] + if flows is not None: + df = df[df["FLOW_BREAKDOWN"].isin(flows)] + if units is not None: + df = df[df["UNIT_MEASURE"].isin(units)] + # The period filter runs on the reduced frame: TIME_PERIOD is categorical. + period = df["TIME_PERIOD"].astype(str) + df = df[ + (period >= start_date.strftime("%Y-%m")) + & (period <= end_date.strftime("%Y-%m")) + ] + return df.reset_index(drop=True) + + +def normalize_country_names(v) -> list[str]: + """Normalize country input into snake names, accepting names or ISO codes.""" + from openbb_jodi.utils.constants import CODE_TO_COUNTRY, COUNTRIES + + items = v if isinstance(v, list) else str(v).split(",") + result: list[str] = [] + for item in items: + country = str(item).strip().lower().replace(" ", "_") + if country in COUNTRIES: + result.append(country) + elif country.upper() in CODE_TO_COUNTRY: + result.append(CODE_TO_COUNTRY[country.upper()]) + else: + raise OpenBBError( + f"Invalid country: '{item}'. Valid values are: {list(COUNTRIES)}" + ) + return list(dict.fromkeys(result)) + + +def validate_country_param(v, multiple: bool, default: str | None) -> str | None: + """Validate a country query parameter.""" + if not v: + return default + names = normalize_country_names(v) + if not multiple and len(names) > 1: + raise OpenBBError("Only one country can be selected for this endpoint.") + return ",".join(names) + + +def normalize_token(v, default: str) -> str: + """Normalize a single-select token parameter.""" + if not v: + return default + return str(v).strip().lower().replace(" ", "_") + + +def resolve_date_range(start_date, end_date, start_year: int) -> tuple: + """Apply the full-history default date range and check the order.""" + from datetime import date + + start_date = start_date or date(start_year, 1, 1) + end_date = end_date or date.today() + if start_date > end_date: + raise OpenBBError("The start_date must be on, or before, the end_date.") + return start_date, end_date + + +def check_oil_dates(start_date, end_date) -> None: + """Check the date range against the JODI-Oil data coverage.""" + from openbb_jodi.utils.constants import OIL_START_YEAR + + if end_date.year < OIL_START_YEAR: + raise OpenBBError( + f"No JODI-Oil data is available between {start_date} and {end_date}." + + f" The data starts in {OIL_START_YEAR}." + ) + + +def check_gas_dates(start_date, end_date) -> None: + """Check the date range against the JODI-Gas data coverage.""" + from openbb_jodi.utils.constants import GAS_START_YEAR + + if end_date.year < GAS_START_YEAR: + raise OpenBBError( + f"No JODI-Gas data is available between {start_date} and {end_date}." + + f" The data starts in {GAS_START_YEAR}." + ) + + +async def get_filtered_oil( + tables: list[str], + countries: set[str] | None, + product_codes: set[str], + flow_codes: set[str], + unit_codes: set[str], + start_date, + end_date, + use_cache: bool = True, +) -> list[dict]: + """Get filtered JODI-Oil records for the requested view.""" + import asyncio # noqa + from openbb_core.provider.utils.errors import EmptyDataError + from pandas import concat + + check_oil_dates(start_date, end_date) + frames = await asyncio.gather( + *( + get_table_slice( + f"oil_{table}", + product_codes, + flow_codes, + use_cache, + countries=countries, + units=unit_codes, + start_date=start_date, + end_date=end_date, + ) + for table in tables + ) + ) + frames = [frame for frame in frames if not frame.empty] or frames[:1] + df = frames[0] if len(frames) == 1 else concat(frames, ignore_index=True) + df = apply_filters( + df, countries, product_codes, flow_codes, unit_codes, start_date, end_date + ) + if df.empty: + raise EmptyDataError("No results were found with the given query parameters.") + return df.to_dict(orient="records") + + +async def get_filtered_gas( + countries: set[str] | None, + flow_codes: set[str], + unit_codes: set[str], + start_date, + end_date, + use_cache: bool = True, +) -> list[dict]: + """Get filtered JODI-Gas records for the requested view.""" + from openbb_core.provider.utils.errors import EmptyDataError + + check_gas_dates(start_date, end_date) + df = await get_table_slice( + "gas_world", + None, + flow_codes, + use_cache, + countries=countries, + units=unit_codes, + start_date=start_date, + end_date=end_date, + ) + df = apply_filters( + df, countries, None, flow_codes, unit_codes, start_date, end_date + ) + if df.empty: + raise EmptyDataError("No results were found with the given query parameters.") + return df.to_dict(orient="records") + + +def _to_wide(df, columns: str, column_order: list[str]) -> list[dict]: + """Pivot filtered records into date rows with the given column order.""" + from datetime import date + + wide = ( + df.pivot_table( + index="TIME_PERIOD", columns=columns, values="OBS_VALUE", aggfunc="first" + ) + .reindex(columns=[c for c in column_order if c in df[columns].unique()]) + .sort_index() + .reset_index() + ) + wide = wide.astype(object).where(wide.notna(), other=None) + records = wide.to_dict(orient="records") + for row in records: + row["date"] = date.fromisoformat(f"{row.pop('TIME_PERIOD')}-01") + return [{"date": row.pop("date"), **row} for row in records] + + +def build_field_table( + records: list[dict], code_column: str, field_map: dict[str, str] +) -> list[dict]: + """Build date rows with one typed field per item code.""" + from pandas import DataFrame + + df = DataFrame(records) + df["field"] = df[code_column].map(field_map) + return _to_wide(df, "field", list(dict.fromkeys(field_map.values()))) + + +def build_country_table(records: list[dict]) -> list[dict]: + """Build date rows with one field per country, alphabetical.""" + from pandas import DataFrame + + from openbb_jodi.utils.constants import CODE_TO_COUNTRY + + df = DataFrame(records) + df["country"] = df["REF_AREA"].map(lambda c: CODE_TO_COUNTRY.get(c, c)) + return _to_wide(df, "country", sorted(df["country"].unique())) + + +def build_assessments( + records: list[dict], code_column: str, name_map: dict[str, str] +) -> dict[str, str]: + """Get the most recent JODI assessment label for each series.""" + from openbb_jodi.utils.constants import ASSESSMENT_LABELS + + assessments: dict[str, str] = {} + for row in sorted(records, key=lambda r: str(r["TIME_PERIOD"])): + key = name_map.get(row[code_column], row[code_column]) + label = ASSESSMENT_LABELS.get(str(row["ASSESSMENT_CODE"])) + if label: + assessments[key] = label + return assessments diff --git a/openbb_platform/providers/jodi/pyproject.toml b/openbb_platform/providers/jodi/pyproject.toml new file mode 100644 index 00000000000..df2073158df --- /dev/null +++ b/openbb_platform/providers/jodi/pyproject.toml @@ -0,0 +1,91 @@ +[project] +name = "openbb-jodi" +version = "2.0.0" +description = "Joint Organisations Data Initiative (JODI) data integration for OpenBB Platform." +authors = [{ name = "OpenBB Team", email = "hello@openbb.co" }] +license = { text = "AGPL-3.0-only" } +readme = "README.md" +requires-python = ">=3.10,<4" +dependencies = [ + "openbb-core[pandas]>=2.0.0", + "pyarrow>=17.0.0", +] + +[project.entry-points."openbb_provider_extension"] +jodi = "openbb_jodi:jodi_provider" + +[project.entry-points."openbb_core_extension"] +jodi = "openbb_jodi.jodi_router:router" + +[project.urls] +Homepage = "https://openbb.co" +Repository = "https://github.com/OpenBB-finance/OpenBB" + +[dependency-groups] +dev = ["openbb-devtools>=2.0.0"] + +[build-system] +requires = ["hatchling>=1.25"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["openbb_jodi"] + +[tool.uv.sources] +openbb-core = { path = "../../core", editable = true } +openbb-devtools = { path = "../../extensions/devtools", editable = true } + +[tool.ruff] +line-length = 88 +target-version = "py310" +fix = true + +[tool.ruff.lint] +select = ["D", "E", "W", "F", "S", "UP", "I", "PLC", "PLE", "PLR", "PLW", "SIM", "T20"] +ignore = [ + "PLR2004", "PLR0913", "PLR0915", "PLC0415", + "E402", "E501", + "D202", "D203", "D205", "D206", "D210", "D212", "D213", "D214", + "D215", "D300", "D400", "D404", "D405", "D406", "D407", "D408", + "D409", "D410", "D411", "D413", "D415", "D416", "D417", +] + +[tool.ruff.lint.per-file-ignores] +"openbb_jodi/models/*.py" = ["ARG002", "PLC0415"] +"openbb_jodi/*_router.py" = ["ARG001", "PLC0415"] +"openbb_jodi/utils/helpers.py" = ["PLR0911", "PLR0912"] +"tests/**" = ["S101", "S108", "D", "SIM105", "SIM117"] +"integration/**" = ["S101", "S108", "D", "SIM105", "SIM117", "PLC0415", "ARG001"] +"**/__init__.py" = ["F401"] + +[tool.ruff.lint.isort] +combine-as-imports = true +force-wrap-aliases = true + +[tool.ruff.lint.pydocstyle] +convention = "numpy" + +[tool.ty] +[tool.ty.environment] +python-version = "3.10" + +[tool.ty.src] +include = ["openbb_jodi"] +exclude = ["tests"] + +[tool.ty.rules] +unresolved-import = "warn" +# The platform-gated stdlib lock modules (msvcrt/fcntl) each need their +# ty ignores on one platform, which read as unused on the other. +unused-ignore-comment = "ignore" + +[tool.coverage.report] +exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:", "raise NotImplementedError", "@overload"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +addopts = "-q --strict-markers" +markers = [ + "record_http: VCR-backed HTTP cassette tests", + "integration: end-to-end tests that hit live services (excluded from the coverage gate)", +] diff --git a/openbb_platform/providers/jodi/tests/__init__.py b/openbb_platform/providers/jodi/tests/__init__.py new file mode 100644 index 00000000000..5d137b22aae --- /dev/null +++ b/openbb_platform/providers/jodi/tests/__init__.py @@ -0,0 +1 @@ +"""OpenBB JODI Provider Tests.""" diff --git a/openbb_platform/providers/jodi/tests/conftest.py b/openbb_platform/providers/jodi/tests/conftest.py new file mode 100644 index 00000000000..5521b9f3fc4 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/conftest.py @@ -0,0 +1,203 @@ +"""Shared fixtures for the openbb_jodi test suite.""" + +import json +import zipfile +from io import BytesIO +from pathlib import Path + +import pytest +import yaml + +FIXTURES = Path(__file__).parent / "fixtures" + +# The fetcher tests cannot use record_http: their HTTP interactions are the +# bulk source archives (tens of MB), which must never be recorded. They use +# the jodi_cassette fixture instead, which replays an in-memory cassette +# synthesized from the trimmed fixtures. Each cassette holds exactly the +# interactions its test performs; strict replay fails on anything else. +CASSETTE_TESTS = { + "test_jodi_oil_balance_fetcher": ("oil_primary",), + "test_jodi_oil_production_fetcher": ("oil_primary",), + "test_jodi_oil_demand_fetcher": ("oil_secondary",), + "test_jodi_oil_demand_by_product_fetcher": ("oil_secondary",), + "test_jodi_oil_imports_fetcher": ("oil_primary",), + "test_jodi_oil_exports_fetcher": ("oil_primary",), + "test_jodi_oil_stocks_fetcher": ("oil_primary",), + "test_jodi_gas_balance_fetcher": ("gas_listing", "gas_archive"), + "test_jodi_gas_production_fetcher": ("gas_listing", "gas_archive"), + "test_jodi_gas_demand_fetcher": ("gas_listing", "gas_archive"), + "test_jodi_gas_imports_fetcher": ("gas_listing", "gas_archive"), + "test_jodi_gas_exports_fetcher": ("gas_listing", "gas_archive"), + "test_jodi_gas_stocks_fetcher": ("gas_listing", "gas_archive"), +} + + +def zip_bytes(csv_path: Path) -> bytes: + """Wrap a CSV fixture in a single-member zip, like the JODI archives.""" + buffer = BytesIO() + with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as archive: + archive.writestr(f"{csv_path.stem}.csv", csv_path.read_bytes()) + return buffer.getvalue() + + +def _interaction(url: str, body, status: int, reason: str, headers: dict) -> dict: + """Build one vcr cassette interaction serving the given body.""" + return { + "request": {"body": None, "headers": {}, "method": "GET", "uri": url}, + "response": { + "body": {"string": body}, + "headers": {"Content-Length": [str(len(body))], **headers}, + "status": {"code": status, "message": reason}, + }, + } + + +def _archive_interaction(url: str, body: bytes) -> dict: + """A served archive: binary body with the IIS cache validators.""" + return _interaction( + url, + body, + 200, + "OK", + { + "Accept-Ranges": ["none"], + "Content-Type": ["application/x-zip-compressed"], + "ETag": [f'"{url.rsplit("/", 1)[-1]}"'], + "Last-Modified": ["Wed, 24 Jun 2026 10:56:04 GMT"], + }, + ) + + +def _interaction_library() -> dict[str, dict]: + """Build every synthesized JODI source interaction, keyed for CASSETTE_TESTS.""" + from openbb_jodi.utils.constants import ( + GAS_DOWNLOAD_URL, + GAS_FILES_URL, + OIL_TABLE_URLS, + ) + + listing_text = (FIXTURES / "files_gas.json").read_text(encoding="utf-8") + listing = json.loads(listing_text) + gas_file = next( + f for f in listing["files"] if f.get("format") == "CSV" and not f.get("ignore") + ) + gas_url = GAS_DOWNLOAD_URL.format( + publication_id=listing["publicationId"], filename=gas_file["filename"] + ) + return { + "oil_primary": _archive_interaction( + OIL_TABLE_URLS["primary"], zip_bytes(FIXTURES / "oil_primary_sample.csv") + ), + "oil_secondary": _archive_interaction( + OIL_TABLE_URLS["secondary"], + zip_bytes(FIXTURES / "oil_secondary_sample.csv"), + ), + "gas_listing": _interaction( + GAS_FILES_URL, + listing_text, + 200, + "OK", + {"Content-Type": ["application/json"]}, + ), + "gas_archive": _archive_interaction( + gas_url, (FIXTURES / "gas_sample.zip").read_bytes() + ), + } + + +class MemoryPersister: + """A vcr persister that plays one in-memory cassette and never records.""" + + def __init__(self, document: str): + self.document = document + + def load_cassette(self, cassette_path, serializer): + """Deserialize the in-memory cassette; the path is only a label.""" + from vcr.serialize import deserialize + + return deserialize(self.document, serializer) + + @staticmethod + def save_cassette(cassette_path, cassette_dict, serializer): + """Recording is disabled: the cassettes are synthesized from fixtures.""" + raise AssertionError( + "The JODI source archives are never recorded;" + " the cassettes are synthesized from the trimmed fixtures." + ) + + +@pytest.fixture +def jodi_cassette(request, monkeypatch): + """Replay an in-memory cassette synthesized from the trimmed fixtures. + + The full pipeline executes against vcr's aiohttp interception; nothing is + downloaded, no cassette file is stored, and live sockets are refused. + """ + import socket + + import vcr + + def refuse(*args, **kwargs): + raise AssertionError("jodi_cassette tests replay offline; no live sockets.") + + monkeypatch.setattr(socket, "getaddrinfo", refuse) + library = _interaction_library() + document = yaml.safe_dump( + { + "interactions": [library[key] for key in CASSETTE_TESTS[request.node.name]], + "version": 1, + } + ) + vcr_object = vcr.VCR(record_mode="none") + vcr_object.register_persister(MemoryPersister(document)) + with vcr_object.use_cassette(request.node.name) as cassette: + yield cassette + + +@pytest.fixture(autouse=True) +def isolate_cache(tmp_path, monkeypatch): + """Point the JODI cache at a temporary path and return the original getter.""" + from openbb_jodi.utils import helpers + + original = helpers.get_cache_directory + monkeypatch.setattr(helpers, "get_cache_directory", lambda: tmp_path) + state = (helpers._DOWNLOAD_LOCKS, helpers._PREFETCH_TASKS) + for store in state: + store.clear() + yield original + for store in state: + store.clear() + + +@pytest.fixture +def mock_download(monkeypatch): + """Serve trimmed samples of the live JODI files instead of downloading.""" + from openbb_core.app.model.abstract.error import OpenBBError + + from openbb_jodi.utils import helpers + + files = { + "world_Primary_CSV.zip": zip_bytes(FIXTURES / "oil_primary_sample.csv"), + "world_Secondary_CSV.zip": zip_bytes(FIXTURES / "oil_secondary_sample.csv"), + "web/files/gas": (FIXTURES / "files_gas.json").read_bytes(), + "GAS_world_NewFormat.zip": (FIXTURES / "gas_sample.zip").read_bytes(), + } + calls: list[str] = [] + + async def fake_download(url: str, timeout: int = 600) -> tuple: + import asyncio + + await asyncio.sleep(0) # yield, so concurrent requests contend for the lock + calls.append(url) + for suffix, content in files.items(): + if url.endswith(suffix): + meta = { + "etag": f'"{suffix}"', + "last_modified": "Wed, 24 Jun 2026 10:56:04 GMT", + "size": len(content), + } + return content, meta + raise OpenBBError(f"Failed to download {url} -> Status Code: 404") + + monkeypatch.setattr(helpers, "download", fake_download) + return calls diff --git a/openbb_platform/providers/jodi/tests/fixtures/files_gas.json b/openbb_platform/providers/jodi/tests/fixtures/files_gas.json new file mode 100644 index 00000000000..3f218c1e6c0 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/fixtures/files_gas.json @@ -0,0 +1 @@ +{"publicationId":23,"files":[{"filename":"GAS_world_NewFormat.zip","format":"CSV","ignore":false},{"filename":"ivt-merged.zip","format":"IVT Merged","ignore":false},{"filename":"ivt.zip","format":"IVT","ignore":false},{"filename":"jodi-data-availability-by-country.csv","format":"Availability","ignore":false}]} \ No newline at end of file diff --git a/openbb_platform/providers/jodi/tests/fixtures/gas_sample.zip b/openbb_platform/providers/jodi/tests/fixtures/gas_sample.zip new file mode 100644 index 00000000000..95f7f588844 Binary files /dev/null and b/openbb_platform/providers/jodi/tests/fixtures/gas_sample.zip differ diff --git a/openbb_platform/providers/jodi/tests/fixtures/oil_primary_sample.csv b/openbb_platform/providers/jodi/tests/fixtures/oil_primary_sample.csv new file mode 100644 index 00000000000..df7c747db8b --- /dev/null +++ b/openbb_platform/providers/jodi/tests/fixtures/oil_primary_sample.csv @@ -0,0 +1,1801 @@ +REF_AREA,TIME_PERIOD,ENERGY_PRODUCT,FLOW_BREAKDOWN,UNIT_MEASURE,OBS_VALUE,ASSESSMENT_CODE +RU,2024-01,CRUDEOIL,CLOSTLV,CONVBBL,..,3 +RU,2024-01,CRUDEOIL,CLOSTLV,KBBL,-,3 +RU,2024-01,CRUDEOIL,CLOSTLV,KBD,x,3 +RU,2024-01,CRUDEOIL,CLOSTLV,KL,-,3 +RU,2024-01,CRUDEOIL,CLOSTLV,KTONS,-,3 +RU,2024-01,CRUDEOIL,DIRECUSE,CONVBBL,..,3 +RU,2024-01,CRUDEOIL,DIRECUSE,KBBL,-,3 +RU,2024-01,CRUDEOIL,DIRECUSE,KBD,-,3 +RU,2024-01,CRUDEOIL,DIRECUSE,KL,-,3 +RU,2024-01,CRUDEOIL,DIRECUSE,KTONS,-,3 +RU,2024-01,CRUDEOIL,INDPROD,CONVBBL,7356.0000,3 +RU,2024-01,CRUDEOIL,INDPROD,KBBL,-,3 +RU,2024-01,CRUDEOIL,INDPROD,KBD,-,3 +RU,2024-01,CRUDEOIL,INDPROD,KL,-,3 +RU,2024-01,CRUDEOIL,INDPROD,KTONS,-,3 +RU,2024-01,CRUDEOIL,OSOURCES,CONVBBL,..,3 +RU,2024-01,CRUDEOIL,OSOURCES,KBBL,-,3 +RU,2024-01,CRUDEOIL,OSOURCES,KBD,-,3 +RU,2024-01,CRUDEOIL,OSOURCES,KL,-,3 +RU,2024-01,CRUDEOIL,OSOURCES,KTONS,-,3 +RU,2024-01,CRUDEOIL,REFINOBS,CONVBBL,7356.0000,3 +RU,2024-01,CRUDEOIL,REFINOBS,KBBL,-,3 +RU,2024-01,CRUDEOIL,REFINOBS,KBD,-,3 +RU,2024-01,CRUDEOIL,REFINOBS,KL,-,3 +RU,2024-01,CRUDEOIL,REFINOBS,KTONS,-,3 +RU,2024-01,CRUDEOIL,STATDIFF,CONVBBL,7356.0000,3 +RU,2024-01,CRUDEOIL,STATDIFF,KBBL,-,3 +RU,2024-01,CRUDEOIL,STATDIFF,KBD,-,3 +RU,2024-01,CRUDEOIL,STATDIFF,KL,-,3 +RU,2024-01,CRUDEOIL,STATDIFF,KTONS,-,3 +RU,2024-01,CRUDEOIL,STOCKCH,CONVBBL,..,3 +RU,2024-01,CRUDEOIL,STOCKCH,KBBL,-,3 +RU,2024-01,CRUDEOIL,STOCKCH,KBD,x,3 +RU,2024-01,CRUDEOIL,STOCKCH,KL,-,3 +RU,2024-01,CRUDEOIL,STOCKCH,KTONS,-,3 +RU,2024-01,CRUDEOIL,TOTEXPSB,CONVBBL,7356.0000,3 +RU,2024-01,CRUDEOIL,TOTEXPSB,KBBL,-,3 +RU,2024-01,CRUDEOIL,TOTEXPSB,KBD,-,3 +RU,2024-01,CRUDEOIL,TOTEXPSB,KL,-,3 +RU,2024-01,CRUDEOIL,TOTEXPSB,KTONS,-,3 +RU,2024-01,CRUDEOIL,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,CRUDEOIL,TOTIMPSB,KBBL,-,3 +RU,2024-01,CRUDEOIL,TOTIMPSB,KBD,-,3 +RU,2024-01,CRUDEOIL,TOTIMPSB,KL,-,3 +RU,2024-01,CRUDEOIL,TOTIMPSB,KTONS,-,3 +RU,2024-01,CRUDEOIL,TRANSBAK,CONVBBL,..,3 +RU,2024-01,CRUDEOIL,TRANSBAK,KBBL,-,3 +RU,2024-01,CRUDEOIL,TRANSBAK,KBD,-,3 +RU,2024-01,CRUDEOIL,TRANSBAK,KL,-,3 +RU,2024-01,CRUDEOIL,TRANSBAK,KTONS,-,3 +RU,2024-02,CRUDEOIL,CLOSTLV,CONVBBL,..,3 +RU,2024-02,CRUDEOIL,CLOSTLV,KBBL,-,3 +RU,2024-02,CRUDEOIL,CLOSTLV,KBD,x,3 +RU,2024-02,CRUDEOIL,CLOSTLV,KL,-,3 +RU,2024-02,CRUDEOIL,CLOSTLV,KTONS,-,3 +RU,2024-02,CRUDEOIL,DIRECUSE,CONVBBL,..,3 +RU,2024-02,CRUDEOIL,DIRECUSE,KBBL,-,3 +RU,2024-02,CRUDEOIL,DIRECUSE,KBD,-,3 +RU,2024-02,CRUDEOIL,DIRECUSE,KL,-,3 +RU,2024-02,CRUDEOIL,DIRECUSE,KTONS,-,3 +RU,2024-02,CRUDEOIL,INDPROD,CONVBBL,7356.0000,3 +RU,2024-02,CRUDEOIL,INDPROD,KBBL,-,3 +RU,2024-02,CRUDEOIL,INDPROD,KBD,-,3 +RU,2024-02,CRUDEOIL,INDPROD,KL,-,3 +RU,2024-02,CRUDEOIL,INDPROD,KTONS,-,3 +RU,2024-02,CRUDEOIL,OSOURCES,CONVBBL,..,3 +RU,2024-02,CRUDEOIL,OSOURCES,KBBL,-,3 +RU,2024-02,CRUDEOIL,OSOURCES,KBD,-,3 +RU,2024-02,CRUDEOIL,OSOURCES,KL,-,3 +RU,2024-02,CRUDEOIL,OSOURCES,KTONS,-,3 +RU,2024-02,CRUDEOIL,REFINOBS,CONVBBL,7356.0000,3 +RU,2024-02,CRUDEOIL,REFINOBS,KBBL,-,3 +RU,2024-02,CRUDEOIL,REFINOBS,KBD,-,3 +RU,2024-02,CRUDEOIL,REFINOBS,KL,-,3 +RU,2024-02,CRUDEOIL,REFINOBS,KTONS,-,3 +RU,2024-02,CRUDEOIL,STATDIFF,CONVBBL,7356.0000,3 +RU,2024-02,CRUDEOIL,STATDIFF,KBBL,-,3 +RU,2024-02,CRUDEOIL,STATDIFF,KBD,-,3 +RU,2024-02,CRUDEOIL,STATDIFF,KL,-,3 +RU,2024-02,CRUDEOIL,STATDIFF,KTONS,-,3 +RU,2024-02,CRUDEOIL,STOCKCH,CONVBBL,..,3 +RU,2024-02,CRUDEOIL,STOCKCH,KBBL,-,3 +RU,2024-02,CRUDEOIL,STOCKCH,KBD,x,3 +RU,2024-02,CRUDEOIL,STOCKCH,KL,-,3 +RU,2024-02,CRUDEOIL,STOCKCH,KTONS,-,3 +RU,2024-02,CRUDEOIL,TOTEXPSB,CONVBBL,7356.0000,3 +RU,2024-02,CRUDEOIL,TOTEXPSB,KBBL,-,3 +RU,2024-02,CRUDEOIL,TOTEXPSB,KBD,-,3 +RU,2024-02,CRUDEOIL,TOTEXPSB,KL,-,3 +RU,2024-02,CRUDEOIL,TOTEXPSB,KTONS,-,3 +RU,2024-02,CRUDEOIL,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,CRUDEOIL,TOTIMPSB,KBBL,-,3 +RU,2024-02,CRUDEOIL,TOTIMPSB,KBD,-,3 +RU,2024-02,CRUDEOIL,TOTIMPSB,KL,-,3 +RU,2024-02,CRUDEOIL,TOTIMPSB,KTONS,-,3 +RU,2024-02,CRUDEOIL,TRANSBAK,CONVBBL,..,3 +RU,2024-02,CRUDEOIL,TRANSBAK,KBBL,-,3 +RU,2024-02,CRUDEOIL,TRANSBAK,KBD,-,3 +RU,2024-02,CRUDEOIL,TRANSBAK,KL,-,3 +RU,2024-02,CRUDEOIL,TRANSBAK,KTONS,-,3 +RU,2024-03,CRUDEOIL,CLOSTLV,CONVBBL,..,3 +RU,2024-03,CRUDEOIL,CLOSTLV,KBBL,-,3 +RU,2024-03,CRUDEOIL,CLOSTLV,KBD,x,3 +RU,2024-03,CRUDEOIL,CLOSTLV,KL,-,3 +RU,2024-03,CRUDEOIL,CLOSTLV,KTONS,-,3 +RU,2024-03,CRUDEOIL,DIRECUSE,CONVBBL,..,3 +RU,2024-03,CRUDEOIL,DIRECUSE,KBBL,-,3 +RU,2024-03,CRUDEOIL,DIRECUSE,KBD,-,3 +RU,2024-03,CRUDEOIL,DIRECUSE,KL,-,3 +RU,2024-03,CRUDEOIL,DIRECUSE,KTONS,-,3 +RU,2024-03,CRUDEOIL,INDPROD,CONVBBL,7356.0000,3 +RU,2024-03,CRUDEOIL,INDPROD,KBBL,-,3 +RU,2024-03,CRUDEOIL,INDPROD,KBD,-,3 +RU,2024-03,CRUDEOIL,INDPROD,KL,-,3 +RU,2024-03,CRUDEOIL,INDPROD,KTONS,-,3 +RU,2024-03,CRUDEOIL,OSOURCES,CONVBBL,..,3 +RU,2024-03,CRUDEOIL,OSOURCES,KBBL,-,3 +RU,2024-03,CRUDEOIL,OSOURCES,KBD,-,3 +RU,2024-03,CRUDEOIL,OSOURCES,KL,-,3 +RU,2024-03,CRUDEOIL,OSOURCES,KTONS,-,3 +RU,2024-03,CRUDEOIL,REFINOBS,CONVBBL,7356.0000,3 +RU,2024-03,CRUDEOIL,REFINOBS,KBBL,-,3 +RU,2024-03,CRUDEOIL,REFINOBS,KBD,-,3 +RU,2024-03,CRUDEOIL,REFINOBS,KL,-,3 +RU,2024-03,CRUDEOIL,REFINOBS,KTONS,-,3 +RU,2024-03,CRUDEOIL,STATDIFF,CONVBBL,7356.0000,3 +RU,2024-03,CRUDEOIL,STATDIFF,KBBL,-,3 +RU,2024-03,CRUDEOIL,STATDIFF,KBD,-,3 +RU,2024-03,CRUDEOIL,STATDIFF,KL,-,3 +RU,2024-03,CRUDEOIL,STATDIFF,KTONS,-,3 +RU,2024-03,CRUDEOIL,STOCKCH,CONVBBL,..,3 +RU,2024-03,CRUDEOIL,STOCKCH,KBBL,-,3 +RU,2024-03,CRUDEOIL,STOCKCH,KBD,x,3 +RU,2024-03,CRUDEOIL,STOCKCH,KL,-,3 +RU,2024-03,CRUDEOIL,STOCKCH,KTONS,-,3 +RU,2024-03,CRUDEOIL,TOTEXPSB,CONVBBL,7356.0000,3 +RU,2024-03,CRUDEOIL,TOTEXPSB,KBBL,-,3 +RU,2024-03,CRUDEOIL,TOTEXPSB,KBD,-,3 +RU,2024-03,CRUDEOIL,TOTEXPSB,KL,-,3 +RU,2024-03,CRUDEOIL,TOTEXPSB,KTONS,-,3 +RU,2024-03,CRUDEOIL,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,CRUDEOIL,TOTIMPSB,KBBL,-,3 +RU,2024-03,CRUDEOIL,TOTIMPSB,KBD,-,3 +RU,2024-03,CRUDEOIL,TOTIMPSB,KL,-,3 +RU,2024-03,CRUDEOIL,TOTIMPSB,KTONS,-,3 +RU,2024-03,CRUDEOIL,TRANSBAK,CONVBBL,..,3 +RU,2024-03,CRUDEOIL,TRANSBAK,KBBL,-,3 +RU,2024-03,CRUDEOIL,TRANSBAK,KBD,-,3 +RU,2024-03,CRUDEOIL,TRANSBAK,KL,-,3 +RU,2024-03,CRUDEOIL,TRANSBAK,KTONS,-,3 +RU,2024-01,NGL,CLOSTLV,CONVBBL,..,3 +RU,2024-01,NGL,CLOSTLV,KBBL,-,3 +RU,2024-01,NGL,CLOSTLV,KBD,x,3 +RU,2024-01,NGL,CLOSTLV,KL,-,3 +RU,2024-01,NGL,CLOSTLV,KTONS,-,3 +RU,2024-01,NGL,DIRECUSE,CONVBBL,..,3 +RU,2024-01,NGL,DIRECUSE,KBBL,-,3 +RU,2024-01,NGL,DIRECUSE,KBD,-,3 +RU,2024-01,NGL,DIRECUSE,KL,-,3 +RU,2024-01,NGL,DIRECUSE,KTONS,-,3 +RU,2024-01,NGL,INDPROD,CONVBBL,8798.0000,3 +RU,2024-01,NGL,INDPROD,KBBL,-,3 +RU,2024-01,NGL,INDPROD,KBD,-,3 +RU,2024-01,NGL,INDPROD,KL,-,3 +RU,2024-01,NGL,INDPROD,KTONS,-,3 +RU,2024-01,NGL,OSOURCES,CONVBBL,..,3 +RU,2024-01,NGL,OSOURCES,KBBL,-,3 +RU,2024-01,NGL,OSOURCES,KBD,-,3 +RU,2024-01,NGL,OSOURCES,KL,-,3 +RU,2024-01,NGL,OSOURCES,KTONS,-,3 +RU,2024-01,NGL,REFINOBS,CONVBBL,..,3 +RU,2024-01,NGL,REFINOBS,KBBL,-,3 +RU,2024-01,NGL,REFINOBS,KBD,-,3 +RU,2024-01,NGL,REFINOBS,KL,-,3 +RU,2024-01,NGL,REFINOBS,KTONS,-,3 +RU,2024-01,NGL,STATDIFF,CONVBBL,..,3 +RU,2024-01,NGL,STATDIFF,KBBL,-,3 +RU,2024-01,NGL,STATDIFF,KBD,-,3 +RU,2024-01,NGL,STATDIFF,KL,-,3 +RU,2024-01,NGL,STATDIFF,KTONS,-,3 +RU,2024-01,NGL,STOCKCH,CONVBBL,..,3 +RU,2024-01,NGL,STOCKCH,KBBL,-,3 +RU,2024-01,NGL,STOCKCH,KBD,x,3 +RU,2024-01,NGL,STOCKCH,KL,-,3 +RU,2024-01,NGL,STOCKCH,KTONS,-,3 +RU,2024-01,NGL,TOTEXPSB,CONVBBL,8797.0000,3 +RU,2024-01,NGL,TOTEXPSB,KBBL,-,3 +RU,2024-01,NGL,TOTEXPSB,KBD,-,3 +RU,2024-01,NGL,TOTEXPSB,KL,-,3 +RU,2024-01,NGL,TOTEXPSB,KTONS,-,3 +RU,2024-01,NGL,TOTIMPSB,CONVBBL,8797.0000,3 +RU,2024-01,NGL,TOTIMPSB,KBBL,-,3 +RU,2024-01,NGL,TOTIMPSB,KBD,-,3 +RU,2024-01,NGL,TOTIMPSB,KL,-,3 +RU,2024-01,NGL,TOTIMPSB,KTONS,-,3 +RU,2024-01,NGL,TRANSBAK,CONVBBL,..,3 +RU,2024-01,NGL,TRANSBAK,KBBL,-,3 +RU,2024-01,NGL,TRANSBAK,KBD,-,3 +RU,2024-01,NGL,TRANSBAK,KL,-,3 +RU,2024-01,NGL,TRANSBAK,KTONS,-,3 +RU,2024-02,NGL,CLOSTLV,CONVBBL,..,3 +RU,2024-02,NGL,CLOSTLV,KBBL,-,3 +RU,2024-02,NGL,CLOSTLV,KBD,x,3 +RU,2024-02,NGL,CLOSTLV,KL,-,3 +RU,2024-02,NGL,CLOSTLV,KTONS,-,3 +RU,2024-02,NGL,DIRECUSE,CONVBBL,..,3 +RU,2024-02,NGL,DIRECUSE,KBBL,-,3 +RU,2024-02,NGL,DIRECUSE,KBD,-,3 +RU,2024-02,NGL,DIRECUSE,KL,-,3 +RU,2024-02,NGL,DIRECUSE,KTONS,-,3 +RU,2024-02,NGL,INDPROD,CONVBBL,8798.0000,3 +RU,2024-02,NGL,INDPROD,KBBL,-,3 +RU,2024-02,NGL,INDPROD,KBD,-,3 +RU,2024-02,NGL,INDPROD,KL,-,3 +RU,2024-02,NGL,INDPROD,KTONS,-,3 +RU,2024-02,NGL,OSOURCES,CONVBBL,..,3 +RU,2024-02,NGL,OSOURCES,KBBL,-,3 +RU,2024-02,NGL,OSOURCES,KBD,-,3 +RU,2024-02,NGL,OSOURCES,KL,-,3 +RU,2024-02,NGL,OSOURCES,KTONS,-,3 +RU,2024-02,NGL,REFINOBS,CONVBBL,..,3 +RU,2024-02,NGL,REFINOBS,KBBL,-,3 +RU,2024-02,NGL,REFINOBS,KBD,-,3 +RU,2024-02,NGL,REFINOBS,KL,-,3 +RU,2024-02,NGL,REFINOBS,KTONS,-,3 +RU,2024-02,NGL,STATDIFF,CONVBBL,..,3 +RU,2024-02,NGL,STATDIFF,KBBL,-,3 +RU,2024-02,NGL,STATDIFF,KBD,-,3 +RU,2024-02,NGL,STATDIFF,KL,-,3 +RU,2024-02,NGL,STATDIFF,KTONS,-,3 +RU,2024-02,NGL,STOCKCH,CONVBBL,..,3 +RU,2024-02,NGL,STOCKCH,KBBL,-,3 +RU,2024-02,NGL,STOCKCH,KBD,x,3 +RU,2024-02,NGL,STOCKCH,KL,-,3 +RU,2024-02,NGL,STOCKCH,KTONS,-,3 +RU,2024-02,NGL,TOTEXPSB,CONVBBL,8797.0000,3 +RU,2024-02,NGL,TOTEXPSB,KBBL,-,3 +RU,2024-02,NGL,TOTEXPSB,KBD,-,3 +RU,2024-02,NGL,TOTEXPSB,KL,-,3 +RU,2024-02,NGL,TOTEXPSB,KTONS,-,3 +RU,2024-02,NGL,TOTIMPSB,CONVBBL,8797.0000,3 +RU,2024-02,NGL,TOTIMPSB,KBBL,-,3 +RU,2024-02,NGL,TOTIMPSB,KBD,-,3 +RU,2024-02,NGL,TOTIMPSB,KL,-,3 +RU,2024-02,NGL,TOTIMPSB,KTONS,-,3 +RU,2024-02,NGL,TRANSBAK,CONVBBL,..,3 +RU,2024-02,NGL,TRANSBAK,KBBL,-,3 +RU,2024-02,NGL,TRANSBAK,KBD,-,3 +RU,2024-02,NGL,TRANSBAK,KL,-,3 +RU,2024-02,NGL,TRANSBAK,KTONS,-,3 +RU,2024-03,NGL,CLOSTLV,CONVBBL,..,3 +RU,2024-03,NGL,CLOSTLV,KBBL,-,3 +RU,2024-03,NGL,CLOSTLV,KBD,x,3 +RU,2024-03,NGL,CLOSTLV,KL,-,3 +RU,2024-03,NGL,CLOSTLV,KTONS,-,3 +RU,2024-03,NGL,DIRECUSE,CONVBBL,..,3 +RU,2024-03,NGL,DIRECUSE,KBBL,-,3 +RU,2024-03,NGL,DIRECUSE,KBD,-,3 +RU,2024-03,NGL,DIRECUSE,KL,-,3 +RU,2024-03,NGL,DIRECUSE,KTONS,-,3 +RU,2024-03,NGL,INDPROD,CONVBBL,8798.0000,3 +RU,2024-03,NGL,INDPROD,KBBL,-,3 +RU,2024-03,NGL,INDPROD,KBD,-,3 +RU,2024-03,NGL,INDPROD,KL,-,3 +RU,2024-03,NGL,INDPROD,KTONS,-,3 +RU,2024-03,NGL,OSOURCES,CONVBBL,..,3 +RU,2024-03,NGL,OSOURCES,KBBL,-,3 +RU,2024-03,NGL,OSOURCES,KBD,-,3 +RU,2024-03,NGL,OSOURCES,KL,-,3 +RU,2024-03,NGL,OSOURCES,KTONS,-,3 +RU,2024-03,NGL,REFINOBS,CONVBBL,..,3 +RU,2024-03,NGL,REFINOBS,KBBL,-,3 +RU,2024-03,NGL,REFINOBS,KBD,-,3 +RU,2024-03,NGL,REFINOBS,KL,-,3 +RU,2024-03,NGL,REFINOBS,KTONS,-,3 +RU,2024-03,NGL,STATDIFF,CONVBBL,..,3 +RU,2024-03,NGL,STATDIFF,KBBL,-,3 +RU,2024-03,NGL,STATDIFF,KBD,-,3 +RU,2024-03,NGL,STATDIFF,KL,-,3 +RU,2024-03,NGL,STATDIFF,KTONS,-,3 +RU,2024-03,NGL,STOCKCH,CONVBBL,..,3 +RU,2024-03,NGL,STOCKCH,KBBL,-,3 +RU,2024-03,NGL,STOCKCH,KBD,x,3 +RU,2024-03,NGL,STOCKCH,KL,-,3 +RU,2024-03,NGL,STOCKCH,KTONS,-,3 +RU,2024-03,NGL,TOTEXPSB,CONVBBL,8797.0000,3 +RU,2024-03,NGL,TOTEXPSB,KBBL,-,3 +RU,2024-03,NGL,TOTEXPSB,KBD,-,3 +RU,2024-03,NGL,TOTEXPSB,KL,-,3 +RU,2024-03,NGL,TOTEXPSB,KTONS,-,3 +RU,2024-03,NGL,TOTIMPSB,CONVBBL,8797.0000,3 +RU,2024-03,NGL,TOTIMPSB,KBBL,-,3 +RU,2024-03,NGL,TOTIMPSB,KBD,-,3 +RU,2024-03,NGL,TOTIMPSB,KL,-,3 +RU,2024-03,NGL,TOTIMPSB,KTONS,-,3 +RU,2024-03,NGL,TRANSBAK,CONVBBL,..,3 +RU,2024-03,NGL,TRANSBAK,KBBL,-,3 +RU,2024-03,NGL,TRANSBAK,KBD,-,3 +RU,2024-03,NGL,TRANSBAK,KL,-,3 +RU,2024-03,NGL,TRANSBAK,KTONS,-,3 +RU,2024-01,OTHERCRUDE,CLOSTLV,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,CLOSTLV,KBBL,-,3 +RU,2024-01,OTHERCRUDE,CLOSTLV,KBD,x,3 +RU,2024-01,OTHERCRUDE,CLOSTLV,KL,-,3 +RU,2024-01,OTHERCRUDE,CLOSTLV,KTONS,-,3 +RU,2024-01,OTHERCRUDE,DIRECUSE,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,DIRECUSE,KBBL,-,3 +RU,2024-01,OTHERCRUDE,DIRECUSE,KBD,-,3 +RU,2024-01,OTHERCRUDE,DIRECUSE,KL,-,3 +RU,2024-01,OTHERCRUDE,DIRECUSE,KTONS,-,3 +RU,2024-01,OTHERCRUDE,INDPROD,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,INDPROD,KBBL,-,3 +RU,2024-01,OTHERCRUDE,INDPROD,KBD,-,3 +RU,2024-01,OTHERCRUDE,INDPROD,KL,-,3 +RU,2024-01,OTHERCRUDE,INDPROD,KTONS,-,3 +RU,2024-01,OTHERCRUDE,OSOURCES,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,OSOURCES,KBBL,-,3 +RU,2024-01,OTHERCRUDE,OSOURCES,KBD,-,3 +RU,2024-01,OTHERCRUDE,OSOURCES,KL,-,3 +RU,2024-01,OTHERCRUDE,OSOURCES,KTONS,-,3 +RU,2024-01,OTHERCRUDE,REFINOBS,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,REFINOBS,KBBL,-,3 +RU,2024-01,OTHERCRUDE,REFINOBS,KBD,-,3 +RU,2024-01,OTHERCRUDE,REFINOBS,KL,-,3 +RU,2024-01,OTHERCRUDE,REFINOBS,KTONS,-,3 +RU,2024-01,OTHERCRUDE,STATDIFF,CONVBBL,0.0000,3 +RU,2024-01,OTHERCRUDE,STATDIFF,KBBL,-,3 +RU,2024-01,OTHERCRUDE,STATDIFF,KBD,-,3 +RU,2024-01,OTHERCRUDE,STATDIFF,KL,-,3 +RU,2024-01,OTHERCRUDE,STATDIFF,KTONS,-,3 +RU,2024-01,OTHERCRUDE,STOCKCH,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,STOCKCH,KBBL,-,3 +RU,2024-01,OTHERCRUDE,STOCKCH,KBD,x,3 +RU,2024-01,OTHERCRUDE,STOCKCH,KL,-,3 +RU,2024-01,OTHERCRUDE,STOCKCH,KTONS,-,3 +RU,2024-01,OTHERCRUDE,TOTEXPSB,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,TOTEXPSB,KBBL,-,3 +RU,2024-01,OTHERCRUDE,TOTEXPSB,KBD,-,3 +RU,2024-01,OTHERCRUDE,TOTEXPSB,KL,-,3 +RU,2024-01,OTHERCRUDE,TOTEXPSB,KTONS,-,3 +RU,2024-01,OTHERCRUDE,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,TOTIMPSB,KBBL,-,3 +RU,2024-01,OTHERCRUDE,TOTIMPSB,KBD,-,3 +RU,2024-01,OTHERCRUDE,TOTIMPSB,KL,-,3 +RU,2024-01,OTHERCRUDE,TOTIMPSB,KTONS,-,3 +RU,2024-01,OTHERCRUDE,TRANSBAK,CONVBBL,..,3 +RU,2024-01,OTHERCRUDE,TRANSBAK,KBBL,-,3 +RU,2024-01,OTHERCRUDE,TRANSBAK,KBD,-,3 +RU,2024-01,OTHERCRUDE,TRANSBAK,KL,-,3 +RU,2024-01,OTHERCRUDE,TRANSBAK,KTONS,-,3 +RU,2024-02,OTHERCRUDE,CLOSTLV,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,CLOSTLV,KBBL,-,3 +RU,2024-02,OTHERCRUDE,CLOSTLV,KBD,x,3 +RU,2024-02,OTHERCRUDE,CLOSTLV,KL,-,3 +RU,2024-02,OTHERCRUDE,CLOSTLV,KTONS,-,3 +RU,2024-02,OTHERCRUDE,DIRECUSE,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,DIRECUSE,KBBL,-,3 +RU,2024-02,OTHERCRUDE,DIRECUSE,KBD,-,3 +RU,2024-02,OTHERCRUDE,DIRECUSE,KL,-,3 +RU,2024-02,OTHERCRUDE,DIRECUSE,KTONS,-,3 +RU,2024-02,OTHERCRUDE,INDPROD,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,INDPROD,KBBL,-,3 +RU,2024-02,OTHERCRUDE,INDPROD,KBD,-,3 +RU,2024-02,OTHERCRUDE,INDPROD,KL,-,3 +RU,2024-02,OTHERCRUDE,INDPROD,KTONS,-,3 +RU,2024-02,OTHERCRUDE,OSOURCES,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,OSOURCES,KBBL,-,3 +RU,2024-02,OTHERCRUDE,OSOURCES,KBD,-,3 +RU,2024-02,OTHERCRUDE,OSOURCES,KL,-,3 +RU,2024-02,OTHERCRUDE,OSOURCES,KTONS,-,3 +RU,2024-02,OTHERCRUDE,REFINOBS,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,REFINOBS,KBBL,-,3 +RU,2024-02,OTHERCRUDE,REFINOBS,KBD,-,3 +RU,2024-02,OTHERCRUDE,REFINOBS,KL,-,3 +RU,2024-02,OTHERCRUDE,REFINOBS,KTONS,-,3 +RU,2024-02,OTHERCRUDE,STATDIFF,CONVBBL,0.0000,3 +RU,2024-02,OTHERCRUDE,STATDIFF,KBBL,-,3 +RU,2024-02,OTHERCRUDE,STATDIFF,KBD,-,3 +RU,2024-02,OTHERCRUDE,STATDIFF,KL,-,3 +RU,2024-02,OTHERCRUDE,STATDIFF,KTONS,-,3 +RU,2024-02,OTHERCRUDE,STOCKCH,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,STOCKCH,KBBL,-,3 +RU,2024-02,OTHERCRUDE,STOCKCH,KBD,x,3 +RU,2024-02,OTHERCRUDE,STOCKCH,KL,-,3 +RU,2024-02,OTHERCRUDE,STOCKCH,KTONS,-,3 +RU,2024-02,OTHERCRUDE,TOTEXPSB,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,TOTEXPSB,KBBL,-,3 +RU,2024-02,OTHERCRUDE,TOTEXPSB,KBD,-,3 +RU,2024-02,OTHERCRUDE,TOTEXPSB,KL,-,3 +RU,2024-02,OTHERCRUDE,TOTEXPSB,KTONS,-,3 +RU,2024-02,OTHERCRUDE,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,TOTIMPSB,KBBL,-,3 +RU,2024-02,OTHERCRUDE,TOTIMPSB,KBD,-,3 +RU,2024-02,OTHERCRUDE,TOTIMPSB,KL,-,3 +RU,2024-02,OTHERCRUDE,TOTIMPSB,KTONS,-,3 +RU,2024-02,OTHERCRUDE,TRANSBAK,CONVBBL,..,3 +RU,2024-02,OTHERCRUDE,TRANSBAK,KBBL,-,3 +RU,2024-02,OTHERCRUDE,TRANSBAK,KBD,-,3 +RU,2024-02,OTHERCRUDE,TRANSBAK,KL,-,3 +RU,2024-02,OTHERCRUDE,TRANSBAK,KTONS,-,3 +RU,2024-03,OTHERCRUDE,CLOSTLV,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,CLOSTLV,KBBL,-,3 +RU,2024-03,OTHERCRUDE,CLOSTLV,KBD,x,3 +RU,2024-03,OTHERCRUDE,CLOSTLV,KL,-,3 +RU,2024-03,OTHERCRUDE,CLOSTLV,KTONS,-,3 +RU,2024-03,OTHERCRUDE,DIRECUSE,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,DIRECUSE,KBBL,-,3 +RU,2024-03,OTHERCRUDE,DIRECUSE,KBD,-,3 +RU,2024-03,OTHERCRUDE,DIRECUSE,KL,-,3 +RU,2024-03,OTHERCRUDE,DIRECUSE,KTONS,-,3 +RU,2024-03,OTHERCRUDE,INDPROD,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,INDPROD,KBBL,-,3 +RU,2024-03,OTHERCRUDE,INDPROD,KBD,-,3 +RU,2024-03,OTHERCRUDE,INDPROD,KL,-,3 +RU,2024-03,OTHERCRUDE,INDPROD,KTONS,-,3 +RU,2024-03,OTHERCRUDE,OSOURCES,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,OSOURCES,KBBL,-,3 +RU,2024-03,OTHERCRUDE,OSOURCES,KBD,-,3 +RU,2024-03,OTHERCRUDE,OSOURCES,KL,-,3 +RU,2024-03,OTHERCRUDE,OSOURCES,KTONS,-,3 +RU,2024-03,OTHERCRUDE,REFINOBS,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,REFINOBS,KBBL,-,3 +RU,2024-03,OTHERCRUDE,REFINOBS,KBD,-,3 +RU,2024-03,OTHERCRUDE,REFINOBS,KL,-,3 +RU,2024-03,OTHERCRUDE,REFINOBS,KTONS,-,3 +RU,2024-03,OTHERCRUDE,STATDIFF,CONVBBL,0.0000,3 +RU,2024-03,OTHERCRUDE,STATDIFF,KBBL,-,3 +RU,2024-03,OTHERCRUDE,STATDIFF,KBD,-,3 +RU,2024-03,OTHERCRUDE,STATDIFF,KL,-,3 +RU,2024-03,OTHERCRUDE,STATDIFF,KTONS,-,3 +RU,2024-03,OTHERCRUDE,STOCKCH,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,STOCKCH,KBBL,-,3 +RU,2024-03,OTHERCRUDE,STOCKCH,KBD,x,3 +RU,2024-03,OTHERCRUDE,STOCKCH,KL,-,3 +RU,2024-03,OTHERCRUDE,STOCKCH,KTONS,-,3 +RU,2024-03,OTHERCRUDE,TOTEXPSB,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,TOTEXPSB,KBBL,-,3 +RU,2024-03,OTHERCRUDE,TOTEXPSB,KBD,-,3 +RU,2024-03,OTHERCRUDE,TOTEXPSB,KL,-,3 +RU,2024-03,OTHERCRUDE,TOTEXPSB,KTONS,-,3 +RU,2024-03,OTHERCRUDE,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,TOTIMPSB,KBBL,-,3 +RU,2024-03,OTHERCRUDE,TOTIMPSB,KBD,-,3 +RU,2024-03,OTHERCRUDE,TOTIMPSB,KL,-,3 +RU,2024-03,OTHERCRUDE,TOTIMPSB,KTONS,-,3 +RU,2024-03,OTHERCRUDE,TRANSBAK,CONVBBL,..,3 +RU,2024-03,OTHERCRUDE,TRANSBAK,KBBL,-,3 +RU,2024-03,OTHERCRUDE,TRANSBAK,KBD,-,3 +RU,2024-03,OTHERCRUDE,TRANSBAK,KL,-,3 +RU,2024-03,OTHERCRUDE,TRANSBAK,KTONS,-,3 +RU,2024-01,TOTCRUDE,CLOSTLV,CONVBBL,..,3 +RU,2024-01,TOTCRUDE,CLOSTLV,KBBL,-,3 +RU,2024-01,TOTCRUDE,CLOSTLV,KBD,x,3 +RU,2024-01,TOTCRUDE,CLOSTLV,KL,-,3 +RU,2024-01,TOTCRUDE,CLOSTLV,KTONS,-,3 +RU,2024-01,TOTCRUDE,DIRECUSE,CONVBBL,..,3 +RU,2024-01,TOTCRUDE,DIRECUSE,KBBL,-,3 +RU,2024-01,TOTCRUDE,DIRECUSE,KBD,-,3 +RU,2024-01,TOTCRUDE,DIRECUSE,KL,-,3 +RU,2024-01,TOTCRUDE,DIRECUSE,KTONS,-,3 +RU,2024-01,TOTCRUDE,INDPROD,CONVBBL,7480.0000,3 +RU,2024-01,TOTCRUDE,INDPROD,KBBL,-,3 +RU,2024-01,TOTCRUDE,INDPROD,KBD,-,3 +RU,2024-01,TOTCRUDE,INDPROD,KL,-,3 +RU,2024-01,TOTCRUDE,INDPROD,KTONS,-,3 +RU,2024-01,TOTCRUDE,OSOURCES,CONVBBL,..,3 +RU,2024-01,TOTCRUDE,OSOURCES,KBBL,-,3 +RU,2024-01,TOTCRUDE,OSOURCES,KBD,-,3 +RU,2024-01,TOTCRUDE,OSOURCES,KL,-,3 +RU,2024-01,TOTCRUDE,OSOURCES,KTONS,-,3 +RU,2024-01,TOTCRUDE,REFINOBS,CONVBBL,7356.0000,3 +RU,2024-01,TOTCRUDE,REFINOBS,KBBL,-,3 +RU,2024-01,TOTCRUDE,REFINOBS,KBD,-,3 +RU,2024-01,TOTCRUDE,REFINOBS,KL,-,3 +RU,2024-01,TOTCRUDE,REFINOBS,KTONS,-,3 +RU,2024-01,TOTCRUDE,STATDIFF,CONVBBL,..,3 +RU,2024-01,TOTCRUDE,STATDIFF,KBBL,-,3 +RU,2024-01,TOTCRUDE,STATDIFF,KBD,-,3 +RU,2024-01,TOTCRUDE,STATDIFF,KL,-,3 +RU,2024-01,TOTCRUDE,STATDIFF,KTONS,-,3 +RU,2024-01,TOTCRUDE,STOCKCH,CONVBBL,..,3 +RU,2024-01,TOTCRUDE,STOCKCH,KBBL,-,3 +RU,2024-01,TOTCRUDE,STOCKCH,KBD,x,3 +RU,2024-01,TOTCRUDE,STOCKCH,KL,-,3 +RU,2024-01,TOTCRUDE,STOCKCH,KTONS,-,3 +RU,2024-01,TOTCRUDE,TOTEXPSB,CONVBBL,7365.0000,3 +RU,2024-01,TOTCRUDE,TOTEXPSB,KBBL,-,3 +RU,2024-01,TOTCRUDE,TOTEXPSB,KBD,-,3 +RU,2024-01,TOTCRUDE,TOTEXPSB,KL,-,3 +RU,2024-01,TOTCRUDE,TOTEXPSB,KTONS,-,3 +RU,2024-01,TOTCRUDE,TOTIMPSB,CONVBBL,8797.0000,3 +RU,2024-01,TOTCRUDE,TOTIMPSB,KBBL,-,3 +RU,2024-01,TOTCRUDE,TOTIMPSB,KBD,-,3 +RU,2024-01,TOTCRUDE,TOTIMPSB,KL,-,3 +RU,2024-01,TOTCRUDE,TOTIMPSB,KTONS,-,3 +RU,2024-01,TOTCRUDE,TRANSBAK,CONVBBL,..,3 +RU,2024-01,TOTCRUDE,TRANSBAK,KBBL,-,3 +RU,2024-01,TOTCRUDE,TRANSBAK,KBD,-,3 +RU,2024-01,TOTCRUDE,TRANSBAK,KL,-,3 +RU,2024-01,TOTCRUDE,TRANSBAK,KTONS,-,3 +RU,2024-02,TOTCRUDE,CLOSTLV,CONVBBL,..,3 +RU,2024-02,TOTCRUDE,CLOSTLV,KBBL,-,3 +RU,2024-02,TOTCRUDE,CLOSTLV,KBD,x,3 +RU,2024-02,TOTCRUDE,CLOSTLV,KL,-,3 +RU,2024-02,TOTCRUDE,CLOSTLV,KTONS,-,3 +RU,2024-02,TOTCRUDE,DIRECUSE,CONVBBL,..,3 +RU,2024-02,TOTCRUDE,DIRECUSE,KBBL,-,3 +RU,2024-02,TOTCRUDE,DIRECUSE,KBD,-,3 +RU,2024-02,TOTCRUDE,DIRECUSE,KL,-,3 +RU,2024-02,TOTCRUDE,DIRECUSE,KTONS,-,3 +RU,2024-02,TOTCRUDE,INDPROD,CONVBBL,7480.0000,3 +RU,2024-02,TOTCRUDE,INDPROD,KBBL,-,3 +RU,2024-02,TOTCRUDE,INDPROD,KBD,-,3 +RU,2024-02,TOTCRUDE,INDPROD,KL,-,3 +RU,2024-02,TOTCRUDE,INDPROD,KTONS,-,3 +RU,2024-02,TOTCRUDE,OSOURCES,CONVBBL,..,3 +RU,2024-02,TOTCRUDE,OSOURCES,KBBL,-,3 +RU,2024-02,TOTCRUDE,OSOURCES,KBD,-,3 +RU,2024-02,TOTCRUDE,OSOURCES,KL,-,3 +RU,2024-02,TOTCRUDE,OSOURCES,KTONS,-,3 +RU,2024-02,TOTCRUDE,REFINOBS,CONVBBL,7356.0000,3 +RU,2024-02,TOTCRUDE,REFINOBS,KBBL,-,3 +RU,2024-02,TOTCRUDE,REFINOBS,KBD,-,3 +RU,2024-02,TOTCRUDE,REFINOBS,KL,-,3 +RU,2024-02,TOTCRUDE,REFINOBS,KTONS,-,3 +RU,2024-02,TOTCRUDE,STATDIFF,CONVBBL,..,3 +RU,2024-02,TOTCRUDE,STATDIFF,KBBL,-,3 +RU,2024-02,TOTCRUDE,STATDIFF,KBD,-,3 +RU,2024-02,TOTCRUDE,STATDIFF,KL,-,3 +RU,2024-02,TOTCRUDE,STATDIFF,KTONS,-,3 +RU,2024-02,TOTCRUDE,STOCKCH,CONVBBL,..,3 +RU,2024-02,TOTCRUDE,STOCKCH,KBBL,-,3 +RU,2024-02,TOTCRUDE,STOCKCH,KBD,x,3 +RU,2024-02,TOTCRUDE,STOCKCH,KL,-,3 +RU,2024-02,TOTCRUDE,STOCKCH,KTONS,-,3 +RU,2024-02,TOTCRUDE,TOTEXPSB,CONVBBL,7365.0000,3 +RU,2024-02,TOTCRUDE,TOTEXPSB,KBBL,-,3 +RU,2024-02,TOTCRUDE,TOTEXPSB,KBD,-,3 +RU,2024-02,TOTCRUDE,TOTEXPSB,KL,-,3 +RU,2024-02,TOTCRUDE,TOTEXPSB,KTONS,-,3 +RU,2024-02,TOTCRUDE,TOTIMPSB,CONVBBL,8797.0000,3 +RU,2024-02,TOTCRUDE,TOTIMPSB,KBBL,-,3 +RU,2024-02,TOTCRUDE,TOTIMPSB,KBD,-,3 +RU,2024-02,TOTCRUDE,TOTIMPSB,KL,-,3 +RU,2024-02,TOTCRUDE,TOTIMPSB,KTONS,-,3 +RU,2024-02,TOTCRUDE,TRANSBAK,CONVBBL,..,3 +RU,2024-02,TOTCRUDE,TRANSBAK,KBBL,-,3 +RU,2024-02,TOTCRUDE,TRANSBAK,KBD,-,3 +RU,2024-02,TOTCRUDE,TRANSBAK,KL,-,3 +RU,2024-02,TOTCRUDE,TRANSBAK,KTONS,-,3 +RU,2024-03,TOTCRUDE,CLOSTLV,CONVBBL,..,3 +RU,2024-03,TOTCRUDE,CLOSTLV,KBBL,-,3 +RU,2024-03,TOTCRUDE,CLOSTLV,KBD,x,3 +RU,2024-03,TOTCRUDE,CLOSTLV,KL,-,3 +RU,2024-03,TOTCRUDE,CLOSTLV,KTONS,-,3 +RU,2024-03,TOTCRUDE,DIRECUSE,CONVBBL,..,3 +RU,2024-03,TOTCRUDE,DIRECUSE,KBBL,-,3 +RU,2024-03,TOTCRUDE,DIRECUSE,KBD,-,3 +RU,2024-03,TOTCRUDE,DIRECUSE,KL,-,3 +RU,2024-03,TOTCRUDE,DIRECUSE,KTONS,-,3 +RU,2024-03,TOTCRUDE,INDPROD,CONVBBL,7480.0000,3 +RU,2024-03,TOTCRUDE,INDPROD,KBBL,-,3 +RU,2024-03,TOTCRUDE,INDPROD,KBD,-,3 +RU,2024-03,TOTCRUDE,INDPROD,KL,-,3 +RU,2024-03,TOTCRUDE,INDPROD,KTONS,-,3 +RU,2024-03,TOTCRUDE,OSOURCES,CONVBBL,..,3 +RU,2024-03,TOTCRUDE,OSOURCES,KBBL,-,3 +RU,2024-03,TOTCRUDE,OSOURCES,KBD,-,3 +RU,2024-03,TOTCRUDE,OSOURCES,KL,-,3 +RU,2024-03,TOTCRUDE,OSOURCES,KTONS,-,3 +RU,2024-03,TOTCRUDE,REFINOBS,CONVBBL,7356.0000,3 +RU,2024-03,TOTCRUDE,REFINOBS,KBBL,-,3 +RU,2024-03,TOTCRUDE,REFINOBS,KBD,-,3 +RU,2024-03,TOTCRUDE,REFINOBS,KL,-,3 +RU,2024-03,TOTCRUDE,REFINOBS,KTONS,-,3 +RU,2024-03,TOTCRUDE,STATDIFF,CONVBBL,..,3 +RU,2024-03,TOTCRUDE,STATDIFF,KBBL,-,3 +RU,2024-03,TOTCRUDE,STATDIFF,KBD,-,3 +RU,2024-03,TOTCRUDE,STATDIFF,KL,-,3 +RU,2024-03,TOTCRUDE,STATDIFF,KTONS,-,3 +RU,2024-03,TOTCRUDE,STOCKCH,CONVBBL,..,3 +RU,2024-03,TOTCRUDE,STOCKCH,KBBL,-,3 +RU,2024-03,TOTCRUDE,STOCKCH,KBD,x,3 +RU,2024-03,TOTCRUDE,STOCKCH,KL,-,3 +RU,2024-03,TOTCRUDE,STOCKCH,KTONS,-,3 +RU,2024-03,TOTCRUDE,TOTEXPSB,CONVBBL,7365.0000,3 +RU,2024-03,TOTCRUDE,TOTEXPSB,KBBL,-,3 +RU,2024-03,TOTCRUDE,TOTEXPSB,KBD,-,3 +RU,2024-03,TOTCRUDE,TOTEXPSB,KL,-,3 +RU,2024-03,TOTCRUDE,TOTEXPSB,KTONS,-,3 +RU,2024-03,TOTCRUDE,TOTIMPSB,CONVBBL,8797.0000,3 +RU,2024-03,TOTCRUDE,TOTIMPSB,KBBL,-,3 +RU,2024-03,TOTCRUDE,TOTIMPSB,KBD,-,3 +RU,2024-03,TOTCRUDE,TOTIMPSB,KL,-,3 +RU,2024-03,TOTCRUDE,TOTIMPSB,KTONS,-,3 +RU,2024-03,TOTCRUDE,TRANSBAK,CONVBBL,..,3 +RU,2024-03,TOTCRUDE,TRANSBAK,KBBL,-,3 +RU,2024-03,TOTCRUDE,TRANSBAK,KBD,-,3 +RU,2024-03,TOTCRUDE,TRANSBAK,KL,-,3 +RU,2024-03,TOTCRUDE,TRANSBAK,KTONS,-,3 +SA,2024-01,CRUDEOIL,CLOSTLV,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,CLOSTLV,KBBL,151823.0000,3 +SA,2024-01,CRUDEOIL,CLOSTLV,KBD,x,3 +SA,2024-01,CRUDEOIL,CLOSTLV,KL,24137.9694,3 +SA,2024-01,CRUDEOIL,CLOSTLV,KTONS,20732.3501,3 +SA,2024-01,CRUDEOIL,DIRECUSE,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,DIRECUSE,KBBL,9548.0000,3 +SA,2024-01,CRUDEOIL,DIRECUSE,KBD,308.0000,3 +SA,2024-01,CRUDEOIL,DIRECUSE,KL,1518.0133,3 +SA,2024-01,CRUDEOIL,DIRECUSE,KTONS,1303.8372,3 +SA,2024-01,CRUDEOIL,INDPROD,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,INDPROD,KBBL,277636.0000,1 +SA,2024-01,CRUDEOIL,INDPROD,KBD,8956.0000,1 +SA,2024-01,CRUDEOIL,INDPROD,KL,44140.6722,1 +SA,2024-01,CRUDEOIL,INDPROD,KTONS,37912.8772,1 +SA,2024-01,CRUDEOIL,OSOURCES,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,OSOURCES,KBBL,-,3 +SA,2024-01,CRUDEOIL,OSOURCES,KBD,-,3 +SA,2024-01,CRUDEOIL,OSOURCES,KL,-,3 +SA,2024-01,CRUDEOIL,OSOURCES,KTONS,-,3 +SA,2024-01,CRUDEOIL,REFINOBS,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,REFINOBS,KBBL,75175.0000,3 +SA,2024-01,CRUDEOIL,REFINOBS,KBD,2425.0000,3 +SA,2024-01,CRUDEOIL,REFINOBS,KL,11951.8904,3 +SA,2024-01,CRUDEOIL,REFINOBS,KTONS,10265.6015,3 +SA,2024-01,CRUDEOIL,STATDIFF,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,STATDIFF,KBBL,0.0000,3 +SA,2024-01,CRUDEOIL,STATDIFF,KBD,0.0000,3 +SA,2024-01,CRUDEOIL,STATDIFF,KL,0.0000,3 +SA,2024-01,CRUDEOIL,STATDIFF,KTONS,0.0000,3 +SA,2024-01,CRUDEOIL,STOCKCH,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,STOCKCH,KBBL,2613.0000,3 +SA,2024-01,CRUDEOIL,STOCKCH,KBD,x,3 +SA,2024-01,CRUDEOIL,STOCKCH,KL,415.4345,3 +SA,2024-01,CRUDEOIL,STOCKCH,KTONS,356.8210,3 +SA,2024-01,CRUDEOIL,TOTEXPSB,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,TOTEXPSB,KBBL,195207.0000,3 +SA,2024-01,CRUDEOIL,TOTEXPSB,KBD,6297.0000,3 +SA,2024-01,CRUDEOIL,TOTEXPSB,KL,31035.4860,3 +SA,2024-01,CRUDEOIL,TOTEXPSB,KTONS,26656.6981,3 +SA,2024-01,CRUDEOIL,TOTIMPSB,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,TOTIMPSB,KBBL,4929.0000,3 +SA,2024-01,CRUDEOIL,TOTIMPSB,KBD,159.0000,3 +SA,2024-01,CRUDEOIL,TOTIMPSB,KL,783.6497,3 +SA,2024-01,CRUDEOIL,TOTIMPSB,KTONS,673.0848,3 +SA,2024-01,CRUDEOIL,TRANSBAK,CONVBBL,7323.0000,3 +SA,2024-01,CRUDEOIL,TRANSBAK,KBBL,-,3 +SA,2024-01,CRUDEOIL,TRANSBAK,KBD,-,3 +SA,2024-01,CRUDEOIL,TRANSBAK,KL,-,3 +SA,2024-01,CRUDEOIL,TRANSBAK,KTONS,-,3 +SA,2024-02,CRUDEOIL,CLOSTLV,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,CLOSTLV,KBBL,145092.0000,3 +SA,2024-02,CRUDEOIL,CLOSTLV,KBD,x,3 +SA,2024-02,CRUDEOIL,CLOSTLV,KL,23067.8241,3 +SA,2024-02,CRUDEOIL,CLOSTLV,KTONS,19813.1913,3 +SA,2024-02,CRUDEOIL,DIRECUSE,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,DIRECUSE,KBBL,10440.0000,3 +SA,2024-02,CRUDEOIL,DIRECUSE,KBD,360.0000,3 +SA,2024-02,CRUDEOIL,DIRECUSE,KL,1659.8302,3 +SA,2024-02,CRUDEOIL,DIRECUSE,KTONS,1425.6452,3 +SA,2024-02,CRUDEOIL,INDPROD,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,INDPROD,KBBL,261319.0000,1 +SA,2024-02,CRUDEOIL,INDPROD,KBD,9011.0000,1 +SA,2024-02,CRUDEOIL,INDPROD,KL,41546.4721,1 +SA,2024-02,CRUDEOIL,INDPROD,KTONS,35684.6921,1 +SA,2024-02,CRUDEOIL,OSOURCES,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,OSOURCES,KBBL,-,3 +SA,2024-02,CRUDEOIL,OSOURCES,KBD,-,3 +SA,2024-02,CRUDEOIL,OSOURCES,KL,-,3 +SA,2024-02,CRUDEOIL,OSOURCES,KTONS,-,3 +SA,2024-02,CRUDEOIL,REFINOBS,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,REFINOBS,KBBL,77575.0000,3 +SA,2024-02,CRUDEOIL,REFINOBS,KBD,2675.0000,3 +SA,2024-02,CRUDEOIL,REFINOBS,KL,12333.4605,3 +SA,2024-02,CRUDEOIL,REFINOBS,KTONS,10593.3361,3 +SA,2024-02,CRUDEOIL,STATDIFF,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,STATDIFF,KBBL,0.0000,3 +SA,2024-02,CRUDEOIL,STATDIFF,KBD,0.0000,3 +SA,2024-02,CRUDEOIL,STATDIFF,KL,0.0000,3 +SA,2024-02,CRUDEOIL,STATDIFF,KTONS,0.0000,3 +SA,2024-02,CRUDEOIL,STOCKCH,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,STOCKCH,KBBL,-6731.0000,3 +SA,2024-02,CRUDEOIL,STOCKCH,KBD,x,3 +SA,2024-02,CRUDEOIL,STOCKCH,KL,-1070.1453,3 +SA,2024-02,CRUDEOIL,STOCKCH,KTONS,-919.1588,3 +SA,2024-02,CRUDEOIL,TOTEXPSB,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,TOTEXPSB,KBBL,183193.0000,3 +SA,2024-02,CRUDEOIL,TOTEXPSB,KBD,6317.0000,3 +SA,2024-02,CRUDEOIL,TOTEXPSB,KL,29125.4094,3 +SA,2024-02,CRUDEOIL,TOTEXPSB,KTONS,25016.1136,3 +SA,2024-02,CRUDEOIL,TOTIMPSB,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,TOTIMPSB,KBBL,3161.0000,3 +SA,2024-02,CRUDEOIL,TOTIMPSB,KBD,109.0000,3 +SA,2024-02,CRUDEOIL,TOTIMPSB,KL,502.5597,3 +SA,2024-02,CRUDEOIL,TOTIMPSB,KTONS,431.6537,3 +SA,2024-02,CRUDEOIL,TRANSBAK,CONVBBL,7323.0000,3 +SA,2024-02,CRUDEOIL,TRANSBAK,KBBL,-,3 +SA,2024-02,CRUDEOIL,TRANSBAK,KBD,-,3 +SA,2024-02,CRUDEOIL,TRANSBAK,KL,-,3 +SA,2024-02,CRUDEOIL,TRANSBAK,KTONS,-,3 +SA,2024-03,CRUDEOIL,CLOSTLV,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,CLOSTLV,KBBL,139285.0000,3 +SA,2024-03,CRUDEOIL,CLOSTLV,KBD,x,3 +SA,2024-03,CRUDEOIL,CLOSTLV,KL,22144.5833,3 +SA,2024-03,CRUDEOIL,CLOSTLV,KTONS,19020.2103,3 +SA,2024-03,CRUDEOIL,DIRECUSE,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,DIRECUSE,KBBL,9517.0000,3 +SA,2024-03,CRUDEOIL,DIRECUSE,KBD,307.0000,3 +SA,2024-03,CRUDEOIL,DIRECUSE,KL,1513.0847,3 +SA,2024-03,CRUDEOIL,DIRECUSE,KTONS,1299.6040,3 +SA,2024-03,CRUDEOIL,INDPROD,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,INDPROD,KBBL,278163.0000,1 +SA,2024-03,CRUDEOIL,INDPROD,KBD,8973.0000,1 +SA,2024-03,CRUDEOIL,INDPROD,KL,44224.4586,1 +SA,2024-03,CRUDEOIL,INDPROD,KTONS,37984.8423,1 +SA,2024-03,CRUDEOIL,OSOURCES,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,OSOURCES,KBBL,-,3 +SA,2024-03,CRUDEOIL,OSOURCES,KBD,-,3 +SA,2024-03,CRUDEOIL,OSOURCES,KL,-,3 +SA,2024-03,CRUDEOIL,OSOURCES,KTONS,-,3 +SA,2024-03,CRUDEOIL,REFINOBS,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,REFINOBS,KBBL,79360.0000,3 +SA,2024-03,CRUDEOIL,REFINOBS,KBD,2560.0000,3 +SA,2024-03,CRUDEOIL,REFINOBS,KL,12617.2533,3 +SA,2024-03,CRUDEOIL,REFINOBS,KTONS,10837.0886,3 +SA,2024-03,CRUDEOIL,STATDIFF,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,STATDIFF,KBBL,0.0000,3 +SA,2024-03,CRUDEOIL,STATDIFF,KBD,0.0000,3 +SA,2024-03,CRUDEOIL,STATDIFF,KL,0.0000,3 +SA,2024-03,CRUDEOIL,STATDIFF,KTONS,0.0000,3 +SA,2024-03,CRUDEOIL,STOCKCH,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,STOCKCH,KBBL,-5806.0000,3 +SA,2024-03,CRUDEOIL,STOCKCH,KBD,x,3 +SA,2024-03,CRUDEOIL,STOCKCH,KL,-923.0818,3 +SA,2024-03,CRUDEOIL,STOCKCH,KTONS,-792.8445,3 +SA,2024-03,CRUDEOIL,TOTEXPSB,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,TOTEXPSB,KBBL,198803.0000,3 +SA,2024-03,CRUDEOIL,TOTEXPSB,KBD,6413.0000,3 +SA,2024-03,CRUDEOIL,TOTEXPSB,KL,31607.2053,3 +SA,2024-03,CRUDEOIL,TOTEXPSB,KTONS,27147.7537,3 +SA,2024-03,CRUDEOIL,TOTIMPSB,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,TOTIMPSB,KBBL,3720.0000,3 +SA,2024-03,CRUDEOIL,TOTIMPSB,KBD,120.0000,3 +SA,2024-03,CRUDEOIL,TOTIMPSB,KL,591.4337,3 +SA,2024-03,CRUDEOIL,TOTIMPSB,KTONS,507.9885,3 +SA,2024-03,CRUDEOIL,TRANSBAK,CONVBBL,7323.0000,3 +SA,2024-03,CRUDEOIL,TRANSBAK,KBBL,-,3 +SA,2024-03,CRUDEOIL,TRANSBAK,KBD,-,3 +SA,2024-03,CRUDEOIL,TRANSBAK,KL,-,3 +SA,2024-03,CRUDEOIL,TRANSBAK,KTONS,-,3 +SA,2024-01,NGL,CLOSTLV,CONVBBL,11800.0000,3 +SA,2024-01,NGL,CLOSTLV,KBBL,0.0000,3 +SA,2024-01,NGL,CLOSTLV,KBD,x,3 +SA,2024-01,NGL,CLOSTLV,KL,0.0000,3 +SA,2024-01,NGL,CLOSTLV,KTONS,0.0000,3 +SA,2024-01,NGL,DIRECUSE,CONVBBL,11800.0000,3 +SA,2024-01,NGL,DIRECUSE,KBBL,0.0000,3 +SA,2024-01,NGL,DIRECUSE,KBD,0.0000,3 +SA,2024-01,NGL,DIRECUSE,KL,0.0000,3 +SA,2024-01,NGL,DIRECUSE,KTONS,0.0000,3 +SA,2024-01,NGL,INDPROD,CONVBBL,11800.0000,3 +SA,2024-01,NGL,INDPROD,KBBL,0.0000,3 +SA,2024-01,NGL,INDPROD,KBD,0.0000,3 +SA,2024-01,NGL,INDPROD,KL,0.0000,3 +SA,2024-01,NGL,INDPROD,KTONS,0.0000,3 +SA,2024-01,NGL,OSOURCES,CONVBBL,11800.0000,3 +SA,2024-01,NGL,OSOURCES,KBBL,-,3 +SA,2024-01,NGL,OSOURCES,KBD,-,3 +SA,2024-01,NGL,OSOURCES,KL,-,3 +SA,2024-01,NGL,OSOURCES,KTONS,-,3 +SA,2024-01,NGL,REFINOBS,CONVBBL,11800.0000,3 +SA,2024-01,NGL,REFINOBS,KBBL,0.0000,3 +SA,2024-01,NGL,REFINOBS,KBD,0.0000,3 +SA,2024-01,NGL,REFINOBS,KL,0.0000,3 +SA,2024-01,NGL,REFINOBS,KTONS,0.0000,3 +SA,2024-01,NGL,STATDIFF,CONVBBL,11800.0000,3 +SA,2024-01,NGL,STATDIFF,KBBL,0.0000,3 +SA,2024-01,NGL,STATDIFF,KBD,0.0000,3 +SA,2024-01,NGL,STATDIFF,KL,0.0000,3 +SA,2024-01,NGL,STATDIFF,KTONS,0.0000,3 +SA,2024-01,NGL,STOCKCH,CONVBBL,11800.0000,3 +SA,2024-01,NGL,STOCKCH,KBBL,0.0000,3 +SA,2024-01,NGL,STOCKCH,KBD,x,3 +SA,2024-01,NGL,STOCKCH,KL,0.0000,3 +SA,2024-01,NGL,STOCKCH,KTONS,0.0000,3 +SA,2024-01,NGL,TOTEXPSB,CONVBBL,11800.0000,3 +SA,2024-01,NGL,TOTEXPSB,KBBL,0.0000,3 +SA,2024-01,NGL,TOTEXPSB,KBD,0.0000,3 +SA,2024-01,NGL,TOTEXPSB,KL,0.0000,3 +SA,2024-01,NGL,TOTEXPSB,KTONS,0.0000,3 +SA,2024-01,NGL,TOTIMPSB,CONVBBL,11800.0000,3 +SA,2024-01,NGL,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,NGL,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,NGL,TOTIMPSB,KL,0.0000,3 +SA,2024-01,NGL,TOTIMPSB,KTONS,0.0000,3 +SA,2024-01,NGL,TRANSBAK,CONVBBL,11800.0000,3 +SA,2024-01,NGL,TRANSBAK,KBBL,-,3 +SA,2024-01,NGL,TRANSBAK,KBD,-,3 +SA,2024-01,NGL,TRANSBAK,KL,-,3 +SA,2024-01,NGL,TRANSBAK,KTONS,-,3 +SA,2024-02,NGL,CLOSTLV,CONVBBL,11800.0000,3 +SA,2024-02,NGL,CLOSTLV,KBBL,0.0000,3 +SA,2024-02,NGL,CLOSTLV,KBD,x,3 +SA,2024-02,NGL,CLOSTLV,KL,0.0000,3 +SA,2024-02,NGL,CLOSTLV,KTONS,0.0000,3 +SA,2024-02,NGL,DIRECUSE,CONVBBL,11800.0000,3 +SA,2024-02,NGL,DIRECUSE,KBBL,0.0000,3 +SA,2024-02,NGL,DIRECUSE,KBD,0.0000,3 +SA,2024-02,NGL,DIRECUSE,KL,0.0000,3 +SA,2024-02,NGL,DIRECUSE,KTONS,0.0000,3 +SA,2024-02,NGL,INDPROD,CONVBBL,11800.0000,3 +SA,2024-02,NGL,INDPROD,KBBL,0.0000,3 +SA,2024-02,NGL,INDPROD,KBD,0.0000,3 +SA,2024-02,NGL,INDPROD,KL,0.0000,3 +SA,2024-02,NGL,INDPROD,KTONS,0.0000,3 +SA,2024-02,NGL,OSOURCES,CONVBBL,11800.0000,3 +SA,2024-02,NGL,OSOURCES,KBBL,-,3 +SA,2024-02,NGL,OSOURCES,KBD,-,3 +SA,2024-02,NGL,OSOURCES,KL,-,3 +SA,2024-02,NGL,OSOURCES,KTONS,-,3 +SA,2024-02,NGL,REFINOBS,CONVBBL,11800.0000,3 +SA,2024-02,NGL,REFINOBS,KBBL,0.0000,3 +SA,2024-02,NGL,REFINOBS,KBD,0.0000,3 +SA,2024-02,NGL,REFINOBS,KL,0.0000,3 +SA,2024-02,NGL,REFINOBS,KTONS,0.0000,3 +SA,2024-02,NGL,STATDIFF,CONVBBL,11800.0000,3 +SA,2024-02,NGL,STATDIFF,KBBL,0.0000,3 +SA,2024-02,NGL,STATDIFF,KBD,0.0000,3 +SA,2024-02,NGL,STATDIFF,KL,0.0000,3 +SA,2024-02,NGL,STATDIFF,KTONS,0.0000,3 +SA,2024-02,NGL,STOCKCH,CONVBBL,11800.0000,3 +SA,2024-02,NGL,STOCKCH,KBBL,0.0000,3 +SA,2024-02,NGL,STOCKCH,KBD,x,3 +SA,2024-02,NGL,STOCKCH,KL,0.0000,3 +SA,2024-02,NGL,STOCKCH,KTONS,0.0000,3 +SA,2024-02,NGL,TOTEXPSB,CONVBBL,11800.0000,3 +SA,2024-02,NGL,TOTEXPSB,KBBL,0.0000,3 +SA,2024-02,NGL,TOTEXPSB,KBD,0.0000,3 +SA,2024-02,NGL,TOTEXPSB,KL,0.0000,3 +SA,2024-02,NGL,TOTEXPSB,KTONS,0.0000,3 +SA,2024-02,NGL,TOTIMPSB,CONVBBL,11800.0000,3 +SA,2024-02,NGL,TOTIMPSB,KBBL,0.0000,3 +SA,2024-02,NGL,TOTIMPSB,KBD,0.0000,3 +SA,2024-02,NGL,TOTIMPSB,KL,0.0000,3 +SA,2024-02,NGL,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,NGL,TRANSBAK,CONVBBL,11800.0000,3 +SA,2024-02,NGL,TRANSBAK,KBBL,-,3 +SA,2024-02,NGL,TRANSBAK,KBD,-,3 +SA,2024-02,NGL,TRANSBAK,KL,-,3 +SA,2024-02,NGL,TRANSBAK,KTONS,-,3 +SA,2024-03,NGL,CLOSTLV,CONVBBL,11800.0000,3 +SA,2024-03,NGL,CLOSTLV,KBBL,0.0000,3 +SA,2024-03,NGL,CLOSTLV,KBD,x,3 +SA,2024-03,NGL,CLOSTLV,KL,0.0000,3 +SA,2024-03,NGL,CLOSTLV,KTONS,0.0000,3 +SA,2024-03,NGL,DIRECUSE,CONVBBL,11800.0000,3 +SA,2024-03,NGL,DIRECUSE,KBBL,0.0000,3 +SA,2024-03,NGL,DIRECUSE,KBD,0.0000,3 +SA,2024-03,NGL,DIRECUSE,KL,0.0000,3 +SA,2024-03,NGL,DIRECUSE,KTONS,0.0000,3 +SA,2024-03,NGL,INDPROD,CONVBBL,11800.0000,3 +SA,2024-03,NGL,INDPROD,KBBL,0.0000,3 +SA,2024-03,NGL,INDPROD,KBD,0.0000,3 +SA,2024-03,NGL,INDPROD,KL,0.0000,3 +SA,2024-03,NGL,INDPROD,KTONS,0.0000,3 +SA,2024-03,NGL,OSOURCES,CONVBBL,11800.0000,3 +SA,2024-03,NGL,OSOURCES,KBBL,-,3 +SA,2024-03,NGL,OSOURCES,KBD,-,3 +SA,2024-03,NGL,OSOURCES,KL,-,3 +SA,2024-03,NGL,OSOURCES,KTONS,-,3 +SA,2024-03,NGL,REFINOBS,CONVBBL,11800.0000,3 +SA,2024-03,NGL,REFINOBS,KBBL,0.0000,3 +SA,2024-03,NGL,REFINOBS,KBD,0.0000,3 +SA,2024-03,NGL,REFINOBS,KL,0.0000,3 +SA,2024-03,NGL,REFINOBS,KTONS,0.0000,3 +SA,2024-03,NGL,STATDIFF,CONVBBL,11800.0000,3 +SA,2024-03,NGL,STATDIFF,KBBL,0.0000,3 +SA,2024-03,NGL,STATDIFF,KBD,0.0000,3 +SA,2024-03,NGL,STATDIFF,KL,0.0000,3 +SA,2024-03,NGL,STATDIFF,KTONS,0.0000,3 +SA,2024-03,NGL,STOCKCH,CONVBBL,11800.0000,3 +SA,2024-03,NGL,STOCKCH,KBBL,0.0000,3 +SA,2024-03,NGL,STOCKCH,KBD,x,3 +SA,2024-03,NGL,STOCKCH,KL,0.0000,3 +SA,2024-03,NGL,STOCKCH,KTONS,0.0000,3 +SA,2024-03,NGL,TOTEXPSB,CONVBBL,11800.0000,3 +SA,2024-03,NGL,TOTEXPSB,KBBL,0.0000,3 +SA,2024-03,NGL,TOTEXPSB,KBD,0.0000,3 +SA,2024-03,NGL,TOTEXPSB,KL,0.0000,3 +SA,2024-03,NGL,TOTEXPSB,KTONS,0.0000,3 +SA,2024-03,NGL,TOTIMPSB,CONVBBL,11800.0000,3 +SA,2024-03,NGL,TOTIMPSB,KBBL,0.0000,3 +SA,2024-03,NGL,TOTIMPSB,KBD,0.0000,3 +SA,2024-03,NGL,TOTIMPSB,KL,0.0000,3 +SA,2024-03,NGL,TOTIMPSB,KTONS,0.0000,3 +SA,2024-03,NGL,TRANSBAK,CONVBBL,11800.0000,3 +SA,2024-03,NGL,TRANSBAK,KBBL,-,3 +SA,2024-03,NGL,TRANSBAK,KBD,-,3 +SA,2024-03,NGL,TRANSBAK,KL,-,3 +SA,2024-03,NGL,TRANSBAK,KTONS,-,3 +SA,2024-01,OTHERCRUDE,CLOSTLV,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,CLOSTLV,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,CLOSTLV,KBD,x,3 +SA,2024-01,OTHERCRUDE,CLOSTLV,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,CLOSTLV,KTONS,-20732.3501,3 +SA,2024-01,OTHERCRUDE,DIRECUSE,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,DIRECUSE,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,DIRECUSE,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,DIRECUSE,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,DIRECUSE,KTONS,-1303.8372,3 +SA,2024-01,OTHERCRUDE,INDPROD,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,INDPROD,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,INDPROD,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,INDPROD,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,INDPROD,KTONS,-37912.8772,3 +SA,2024-01,OTHERCRUDE,OSOURCES,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,OSOURCES,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,OSOURCES,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,OSOURCES,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,OSOURCES,KTONS,0.0000,3 +SA,2024-01,OTHERCRUDE,REFINOBS,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,REFINOBS,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,REFINOBS,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,REFINOBS,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,REFINOBS,KTONS,-10265.6015,3 +SA,2024-01,OTHERCRUDE,STATDIFF,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,STATDIFF,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,STATDIFF,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,STATDIFF,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,STATDIFF,KTONS,0.0000,3 +SA,2024-01,OTHERCRUDE,STOCKCH,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,STOCKCH,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,STOCKCH,KBD,x,3 +SA,2024-01,OTHERCRUDE,STOCKCH,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,STOCKCH,KTONS,-356.8210,3 +SA,2024-01,OTHERCRUDE,TOTEXPSB,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,TOTEXPSB,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,TOTEXPSB,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,TOTEXPSB,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,TOTEXPSB,KTONS,-26656.6981,3 +SA,2024-01,OTHERCRUDE,TOTIMPSB,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,OTHERCRUDE,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,OTHERCRUDE,TOTIMPSB,KL,0.0000,3 +SA,2024-01,OTHERCRUDE,TOTIMPSB,KTONS,-673.0848,3 +SA,2024-01,OTHERCRUDE,TRANSBAK,CONVBBL,..,3 +SA,2024-01,OTHERCRUDE,TRANSBAK,KBBL,7998.0000,3 +SA,2024-01,OTHERCRUDE,TRANSBAK,KBD,258.0000,3 +SA,2024-01,OTHERCRUDE,TRANSBAK,KL,1271.5826,3 +SA,2024-01,OTHERCRUDE,TRANSBAK,KTONS,0.0000,3 +SA,2024-02,OTHERCRUDE,CLOSTLV,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,CLOSTLV,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,CLOSTLV,KBD,x,3 +SA,2024-02,OTHERCRUDE,CLOSTLV,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,CLOSTLV,KTONS,-19813.1913,3 +SA,2024-02,OTHERCRUDE,DIRECUSE,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,DIRECUSE,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,DIRECUSE,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,DIRECUSE,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,DIRECUSE,KTONS,-1425.6452,3 +SA,2024-02,OTHERCRUDE,INDPROD,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,INDPROD,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,INDPROD,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,INDPROD,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,INDPROD,KTONS,-35684.6921,3 +SA,2024-02,OTHERCRUDE,OSOURCES,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,OSOURCES,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,OSOURCES,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,OSOURCES,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,OSOURCES,KTONS,0.0000,3 +SA,2024-02,OTHERCRUDE,REFINOBS,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,REFINOBS,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,REFINOBS,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,REFINOBS,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,REFINOBS,KTONS,-10593.3361,3 +SA,2024-02,OTHERCRUDE,STATDIFF,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,STATDIFF,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,STATDIFF,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,STATDIFF,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,STATDIFF,KTONS,0.0000,3 +SA,2024-02,OTHERCRUDE,STOCKCH,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,STOCKCH,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,STOCKCH,KBD,x,3 +SA,2024-02,OTHERCRUDE,STOCKCH,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,STOCKCH,KTONS,919.1588,3 +SA,2024-02,OTHERCRUDE,TOTEXPSB,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,TOTEXPSB,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,TOTEXPSB,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,TOTEXPSB,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,TOTEXPSB,KTONS,-25016.1136,3 +SA,2024-02,OTHERCRUDE,TOTIMPSB,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,TOTIMPSB,KBBL,0.0000,3 +SA,2024-02,OTHERCRUDE,TOTIMPSB,KBD,0.0000,3 +SA,2024-02,OTHERCRUDE,TOTIMPSB,KL,0.0000,3 +SA,2024-02,OTHERCRUDE,TOTIMPSB,KTONS,-431.6537,3 +SA,2024-02,OTHERCRUDE,TRANSBAK,CONVBBL,..,3 +SA,2024-02,OTHERCRUDE,TRANSBAK,KBBL,12325.0000,3 +SA,2024-02,OTHERCRUDE,TRANSBAK,KBD,425.0000,3 +SA,2024-02,OTHERCRUDE,TRANSBAK,KL,1959.5218,3 +SA,2024-02,OTHERCRUDE,TRANSBAK,KTONS,0.0000,3 +SA,2024-03,OTHERCRUDE,CLOSTLV,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,CLOSTLV,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,CLOSTLV,KBD,x,3 +SA,2024-03,OTHERCRUDE,CLOSTLV,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,CLOSTLV,KTONS,-19020.2103,3 +SA,2024-03,OTHERCRUDE,DIRECUSE,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,DIRECUSE,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,DIRECUSE,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,DIRECUSE,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,DIRECUSE,KTONS,-1299.6040,3 +SA,2024-03,OTHERCRUDE,INDPROD,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,INDPROD,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,INDPROD,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,INDPROD,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,INDPROD,KTONS,-37984.8423,3 +SA,2024-03,OTHERCRUDE,OSOURCES,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,OSOURCES,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,OSOURCES,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,OSOURCES,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,OSOURCES,KTONS,0.0000,3 +SA,2024-03,OTHERCRUDE,REFINOBS,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,REFINOBS,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,REFINOBS,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,REFINOBS,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,REFINOBS,KTONS,-10837.0886,3 +SA,2024-03,OTHERCRUDE,STATDIFF,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,STATDIFF,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,STATDIFF,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,STATDIFF,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,STATDIFF,KTONS,0.0000,3 +SA,2024-03,OTHERCRUDE,STOCKCH,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,STOCKCH,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,STOCKCH,KBD,x,3 +SA,2024-03,OTHERCRUDE,STOCKCH,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,STOCKCH,KTONS,792.8445,3 +SA,2024-03,OTHERCRUDE,TOTEXPSB,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,TOTEXPSB,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,TOTEXPSB,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,TOTEXPSB,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,TOTEXPSB,KTONS,-27147.7537,3 +SA,2024-03,OTHERCRUDE,TOTIMPSB,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,TOTIMPSB,KBBL,0.0000,3 +SA,2024-03,OTHERCRUDE,TOTIMPSB,KBD,0.0000,3 +SA,2024-03,OTHERCRUDE,TOTIMPSB,KL,0.0000,3 +SA,2024-03,OTHERCRUDE,TOTIMPSB,KTONS,-507.9885,3 +SA,2024-03,OTHERCRUDE,TRANSBAK,CONVBBL,..,3 +SA,2024-03,OTHERCRUDE,TRANSBAK,KBBL,12865.0000,3 +SA,2024-03,OTHERCRUDE,TRANSBAK,KBD,415.0000,3 +SA,2024-03,OTHERCRUDE,TRANSBAK,KL,2045.3751,3 +SA,2024-03,OTHERCRUDE,TRANSBAK,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,CLOSTLV,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,CLOSTLV,KBBL,151823.0000,3 +SA,2024-01,TOTCRUDE,CLOSTLV,KBD,x,3 +SA,2024-01,TOTCRUDE,CLOSTLV,KL,24137.9694,3 +SA,2024-01,TOTCRUDE,CLOSTLV,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,DIRECUSE,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,DIRECUSE,KBBL,9548.0000,3 +SA,2024-01,TOTCRUDE,DIRECUSE,KBD,308.0000,3 +SA,2024-01,TOTCRUDE,DIRECUSE,KL,1518.0133,3 +SA,2024-01,TOTCRUDE,DIRECUSE,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,INDPROD,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,INDPROD,KBBL,277636.0000,3 +SA,2024-01,TOTCRUDE,INDPROD,KBD,8956.0000,3 +SA,2024-01,TOTCRUDE,INDPROD,KL,44140.6722,3 +SA,2024-01,TOTCRUDE,INDPROD,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,OSOURCES,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,OSOURCES,KBBL,0.0000,3 +SA,2024-01,TOTCRUDE,OSOURCES,KBD,0.0000,3 +SA,2024-01,TOTCRUDE,OSOURCES,KL,0.0000,3 +SA,2024-01,TOTCRUDE,OSOURCES,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,REFINOBS,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,REFINOBS,KBBL,75175.0000,3 +SA,2024-01,TOTCRUDE,REFINOBS,KBD,2425.0000,3 +SA,2024-01,TOTCRUDE,REFINOBS,KL,11951.8904,3 +SA,2024-01,TOTCRUDE,REFINOBS,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,STATDIFF,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,STATDIFF,KBBL,0.0000,3 +SA,2024-01,TOTCRUDE,STATDIFF,KBD,0.0000,3 +SA,2024-01,TOTCRUDE,STATDIFF,KL,0.0000,3 +SA,2024-01,TOTCRUDE,STATDIFF,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,STOCKCH,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,STOCKCH,KBBL,2613.0000,3 +SA,2024-01,TOTCRUDE,STOCKCH,KBD,x,3 +SA,2024-01,TOTCRUDE,STOCKCH,KL,415.4345,3 +SA,2024-01,TOTCRUDE,STOCKCH,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,TOTEXPSB,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,TOTEXPSB,KBBL,195207.0000,3 +SA,2024-01,TOTCRUDE,TOTEXPSB,KBD,6297.0000,3 +SA,2024-01,TOTCRUDE,TOTEXPSB,KL,31035.4860,3 +SA,2024-01,TOTCRUDE,TOTEXPSB,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,TOTIMPSB,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,TOTIMPSB,KBBL,4929.0000,3 +SA,2024-01,TOTCRUDE,TOTIMPSB,KBD,159.0000,3 +SA,2024-01,TOTCRUDE,TOTIMPSB,KL,783.6497,3 +SA,2024-01,TOTCRUDE,TOTIMPSB,KTONS,0.0000,3 +SA,2024-01,TOTCRUDE,TRANSBAK,CONVBBL,..,3 +SA,2024-01,TOTCRUDE,TRANSBAK,KBBL,7998.0000,3 +SA,2024-01,TOTCRUDE,TRANSBAK,KBD,258.0000,3 +SA,2024-01,TOTCRUDE,TRANSBAK,KL,1271.5826,3 +SA,2024-01,TOTCRUDE,TRANSBAK,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,CLOSTLV,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,CLOSTLV,KBBL,145092.0000,3 +SA,2024-02,TOTCRUDE,CLOSTLV,KBD,x,3 +SA,2024-02,TOTCRUDE,CLOSTLV,KL,23067.8241,3 +SA,2024-02,TOTCRUDE,CLOSTLV,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,DIRECUSE,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,DIRECUSE,KBBL,10440.0000,3 +SA,2024-02,TOTCRUDE,DIRECUSE,KBD,360.0000,3 +SA,2024-02,TOTCRUDE,DIRECUSE,KL,1659.8302,3 +SA,2024-02,TOTCRUDE,DIRECUSE,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,INDPROD,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,INDPROD,KBBL,261319.0000,3 +SA,2024-02,TOTCRUDE,INDPROD,KBD,9011.0000,3 +SA,2024-02,TOTCRUDE,INDPROD,KL,41546.4721,3 +SA,2024-02,TOTCRUDE,INDPROD,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,OSOURCES,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,OSOURCES,KBBL,0.0000,3 +SA,2024-02,TOTCRUDE,OSOURCES,KBD,0.0000,3 +SA,2024-02,TOTCRUDE,OSOURCES,KL,0.0000,3 +SA,2024-02,TOTCRUDE,OSOURCES,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,REFINOBS,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,REFINOBS,KBBL,77575.0000,3 +SA,2024-02,TOTCRUDE,REFINOBS,KBD,2675.0000,3 +SA,2024-02,TOTCRUDE,REFINOBS,KL,12333.4605,3 +SA,2024-02,TOTCRUDE,REFINOBS,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,STATDIFF,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,STATDIFF,KBBL,0.0000,3 +SA,2024-02,TOTCRUDE,STATDIFF,KBD,0.0000,3 +SA,2024-02,TOTCRUDE,STATDIFF,KL,0.0000,3 +SA,2024-02,TOTCRUDE,STATDIFF,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,STOCKCH,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,STOCKCH,KBBL,-6731.0000,3 +SA,2024-02,TOTCRUDE,STOCKCH,KBD,x,3 +SA,2024-02,TOTCRUDE,STOCKCH,KL,-1070.1453,3 +SA,2024-02,TOTCRUDE,STOCKCH,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,TOTEXPSB,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,TOTEXPSB,KBBL,183193.0000,3 +SA,2024-02,TOTCRUDE,TOTEXPSB,KBD,6317.0000,3 +SA,2024-02,TOTCRUDE,TOTEXPSB,KL,29125.4094,3 +SA,2024-02,TOTCRUDE,TOTEXPSB,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,TOTIMPSB,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,TOTIMPSB,KBBL,3161.0000,3 +SA,2024-02,TOTCRUDE,TOTIMPSB,KBD,109.0000,3 +SA,2024-02,TOTCRUDE,TOTIMPSB,KL,502.5597,3 +SA,2024-02,TOTCRUDE,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,TOTCRUDE,TRANSBAK,CONVBBL,..,3 +SA,2024-02,TOTCRUDE,TRANSBAK,KBBL,12325.0000,3 +SA,2024-02,TOTCRUDE,TRANSBAK,KBD,425.0000,3 +SA,2024-02,TOTCRUDE,TRANSBAK,KL,1959.5218,3 +SA,2024-02,TOTCRUDE,TRANSBAK,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,CLOSTLV,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,CLOSTLV,KBBL,139285.0000,3 +SA,2024-03,TOTCRUDE,CLOSTLV,KBD,x,3 +SA,2024-03,TOTCRUDE,CLOSTLV,KL,22144.5833,3 +SA,2024-03,TOTCRUDE,CLOSTLV,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,DIRECUSE,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,DIRECUSE,KBBL,9517.0000,3 +SA,2024-03,TOTCRUDE,DIRECUSE,KBD,307.0000,3 +SA,2024-03,TOTCRUDE,DIRECUSE,KL,1513.0847,3 +SA,2024-03,TOTCRUDE,DIRECUSE,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,INDPROD,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,INDPROD,KBBL,278163.0000,3 +SA,2024-03,TOTCRUDE,INDPROD,KBD,8973.0000,3 +SA,2024-03,TOTCRUDE,INDPROD,KL,44224.4586,3 +SA,2024-03,TOTCRUDE,INDPROD,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,OSOURCES,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,OSOURCES,KBBL,0.0000,3 +SA,2024-03,TOTCRUDE,OSOURCES,KBD,0.0000,3 +SA,2024-03,TOTCRUDE,OSOURCES,KL,0.0000,3 +SA,2024-03,TOTCRUDE,OSOURCES,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,REFINOBS,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,REFINOBS,KBBL,79360.0000,3 +SA,2024-03,TOTCRUDE,REFINOBS,KBD,2560.0000,3 +SA,2024-03,TOTCRUDE,REFINOBS,KL,12617.2533,3 +SA,2024-03,TOTCRUDE,REFINOBS,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,STATDIFF,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,STATDIFF,KBBL,0.0000,3 +SA,2024-03,TOTCRUDE,STATDIFF,KBD,0.0000,3 +SA,2024-03,TOTCRUDE,STATDIFF,KL,0.0000,3 +SA,2024-03,TOTCRUDE,STATDIFF,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,STOCKCH,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,STOCKCH,KBBL,-5806.0000,3 +SA,2024-03,TOTCRUDE,STOCKCH,KBD,x,3 +SA,2024-03,TOTCRUDE,STOCKCH,KL,-923.0818,3 +SA,2024-03,TOTCRUDE,STOCKCH,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,TOTEXPSB,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,TOTEXPSB,KBBL,198803.0000,3 +SA,2024-03,TOTCRUDE,TOTEXPSB,KBD,6413.0000,3 +SA,2024-03,TOTCRUDE,TOTEXPSB,KL,31607.2053,3 +SA,2024-03,TOTCRUDE,TOTEXPSB,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,TOTIMPSB,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,TOTIMPSB,KBBL,3720.0000,3 +SA,2024-03,TOTCRUDE,TOTIMPSB,KBD,120.0000,3 +SA,2024-03,TOTCRUDE,TOTIMPSB,KL,591.4337,3 +SA,2024-03,TOTCRUDE,TOTIMPSB,KTONS,0.0000,3 +SA,2024-03,TOTCRUDE,TRANSBAK,CONVBBL,..,3 +SA,2024-03,TOTCRUDE,TRANSBAK,KBBL,12865.0000,3 +SA,2024-03,TOTCRUDE,TRANSBAK,KBD,415.0000,3 +SA,2024-03,TOTCRUDE,TRANSBAK,KL,2045.3751,3 +SA,2024-03,TOTCRUDE,TRANSBAK,KTONS,0.0000,3 +US,2024-01,CRUDEOIL,CLOSTLV,CONVBBL,7400.0000,3 +US,2024-01,CRUDEOIL,CLOSTLV,KBBL,652110.0000,1 +US,2024-01,CRUDEOIL,CLOSTLV,KBD,x,3 +US,2024-01,CRUDEOIL,CLOSTLV,KL,103677.4142,1 +US,2024-01,CRUDEOIL,CLOSTLV,KTONS,88123.0000,1 +US,2024-01,CRUDEOIL,DIRECUSE,CONVBBL,..,3 +US,2024-01,CRUDEOIL,DIRECUSE,KBBL,0.0000,1 +US,2024-01,CRUDEOIL,DIRECUSE,KBD,0.0000,1 +US,2024-01,CRUDEOIL,DIRECUSE,KL,-,3 +US,2024-01,CRUDEOIL,DIRECUSE,KTONS,0.0000,1 +US,2024-01,CRUDEOIL,INDPROD,CONVBBL,7412.0000,3 +US,2024-01,CRUDEOIL,INDPROD,KBBL,389161.0000,1 +US,2024-01,CRUDEOIL,INDPROD,KBD,12553.5806,1 +US,2024-01,CRUDEOIL,INDPROD,KL,61871.5457,1 +US,2024-01,CRUDEOIL,INDPROD,KTONS,52504.0000,1 +US,2024-01,CRUDEOIL,OSOURCES,CONVBBL,..,3 +US,2024-01,CRUDEOIL,OSOURCES,KBBL,-,3 +US,2024-01,CRUDEOIL,OSOURCES,KBD,-,3 +US,2024-01,CRUDEOIL,OSOURCES,KL,-,3 +US,2024-01,CRUDEOIL,OSOURCES,KTONS,-,3 +US,2024-01,CRUDEOIL,REFINOBS,CONVBBL,7403.0000,3 +US,2024-01,CRUDEOIL,REFINOBS,KBBL,477381.0000,1 +US,2024-01,CRUDEOIL,REFINOBS,KBD,15399.3871,1 +US,2024-01,CRUDEOIL,REFINOBS,KL,75896.6981,1 +US,2024-01,CRUDEOIL,REFINOBS,KTONS,64484.0000,1 +US,2024-01,CRUDEOIL,STATDIFF,CONVBBL,7156.0000,3 +US,2024-01,CRUDEOIL,STATDIFF,KBBL,-13095.0000,3 +US,2024-01,CRUDEOIL,STATDIFF,KBD,-422.4194,3 +US,2024-01,CRUDEOIL,STATDIFF,KL,-2082.0185,3 +US,2024-01,CRUDEOIL,STATDIFF,KTONS,-1830.0000,3 +US,2024-01,CRUDEOIL,STOCKCH,CONVBBL,7399.0000,3 +US,2024-01,CRUDEOIL,STOCKCH,KBBL,4802.0000,1 +US,2024-01,CRUDEOIL,STOCKCH,KBD,x,3 +US,2024-01,CRUDEOIL,STOCKCH,KL,763.4505,1 +US,2024-01,CRUDEOIL,STOCKCH,KTONS,649.0000,1 +US,2024-01,CRUDEOIL,TOTEXPSB,CONVBBL,7399.0000,3 +US,2024-01,CRUDEOIL,TOTEXPSB,KBBL,125520.0000,1 +US,2024-01,CRUDEOIL,TOTEXPSB,KBD,4049.0323,1 +US,2024-01,CRUDEOIL,TOTEXPSB,KL,19956.7609,1 +US,2024-01,CRUDEOIL,TOTEXPSB,KTONS,16965.0000,1 +US,2024-01,CRUDEOIL,TOTIMPSB,CONVBBL,7400.0000,3 +US,2024-01,CRUDEOIL,TOTIMPSB,KBBL,205447.0000,1 +US,2024-01,CRUDEOIL,TOTIMPSB,KBD,6627.3226,1 +US,2024-01,CRUDEOIL,TOTIMPSB,KL,32664.5680,1 +US,2024-01,CRUDEOIL,TOTIMPSB,KTONS,27764.0000,1 +US,2024-01,CRUDEOIL,TRANSBAK,CONVBBL,..,3 +US,2024-01,CRUDEOIL,TRANSBAK,KBBL,-,3 +US,2024-01,CRUDEOIL,TRANSBAK,KBD,-,3 +US,2024-01,CRUDEOIL,TRANSBAK,KL,-,3 +US,2024-01,CRUDEOIL,TRANSBAK,KTONS,-,3 +US,2024-02,CRUDEOIL,CLOSTLV,CONVBBL,7400.0000,3 +US,2024-02,CRUDEOIL,CLOSTLV,KBBL,674799.0000,1 +US,2024-02,CRUDEOIL,CLOSTLV,KBD,x,3 +US,2024-02,CRUDEOIL,CLOSTLV,KL,107284.5877,1 +US,2024-02,CRUDEOIL,CLOSTLV,KTONS,91189.0000,1 +US,2024-02,CRUDEOIL,DIRECUSE,CONVBBL,..,3 +US,2024-02,CRUDEOIL,DIRECUSE,KBBL,0.0000,1 +US,2024-02,CRUDEOIL,DIRECUSE,KBD,0.0000,1 +US,2024-02,CRUDEOIL,DIRECUSE,KL,-,3 +US,2024-02,CRUDEOIL,DIRECUSE,KTONS,0.0000,1 +US,2024-02,CRUDEOIL,INDPROD,CONVBBL,7371.0000,3 +US,2024-02,CRUDEOIL,INDPROD,KBBL,379960.0000,1 +US,2024-02,CRUDEOIL,INDPROD,KBD,13102.0690,1 +US,2024-02,CRUDEOIL,INDPROD,KL,60411.3088,1 +US,2024-02,CRUDEOIL,INDPROD,KTONS,51550.0000,1 +US,2024-02,CRUDEOIL,OSOURCES,CONVBBL,..,3 +US,2024-02,CRUDEOIL,OSOURCES,KBBL,-,3 +US,2024-02,CRUDEOIL,OSOURCES,KBD,-,3 +US,2024-02,CRUDEOIL,OSOURCES,KL,-,3 +US,2024-02,CRUDEOIL,OSOURCES,KTONS,-,3 +US,2024-02,CRUDEOIL,REFINOBS,CONVBBL,7408.0000,3 +US,2024-02,CRUDEOIL,REFINOBS,KBBL,431574.0000,1 +US,2024-02,CRUDEOIL,REFINOBS,KBD,14881.8621,1 +US,2024-02,CRUDEOIL,REFINOBS,KL,68612.7457,1 +US,2024-02,CRUDEOIL,REFINOBS,KTONS,58256.0000,1 +US,2024-02,CRUDEOIL,STATDIFF,CONVBBL,8225.0000,3 +US,2024-02,CRUDEOIL,STATDIFF,KBBL,-19879.0000,3 +US,2024-02,CRUDEOIL,STATDIFF,KBD,-685.4828,3 +US,2024-02,CRUDEOIL,STATDIFF,KL,-3160.6450,3 +US,2024-02,CRUDEOIL,STATDIFF,KTONS,-2417.0000,3 +US,2024-02,CRUDEOIL,STOCKCH,CONVBBL,7400.0000,3 +US,2024-02,CRUDEOIL,STOCKCH,KBBL,22689.0000,1 +US,2024-02,CRUDEOIL,STOCKCH,KBD,x,3 +US,2024-02,CRUDEOIL,STOCKCH,KL,3607.1735,1 +US,2024-02,CRUDEOIL,STOCKCH,KTONS,3066.0000,1 +US,2024-02,CRUDEOIL,TOTEXPSB,CONVBBL,7400.0000,3 +US,2024-02,CRUDEOIL,TOTEXPSB,KBBL,135152.0000,1 +US,2024-02,CRUDEOIL,TOTEXPSB,KBD,4660.4138,1 +US,2024-02,CRUDEOIL,TOTEXPSB,KL,21486.5656,1 +US,2024-02,CRUDEOIL,TOTEXPSB,KTONS,18263.0000,1 +US,2024-02,CRUDEOIL,TOTIMPSB,CONVBBL,7400.0000,3 +US,2024-02,CRUDEOIL,TOTIMPSB,KBBL,189576.0000,1 +US,2024-02,CRUDEOIL,TOTIMPSB,KBD,6537.1034,1 +US,2024-02,CRUDEOIL,TOTIMPSB,KL,30139.7819,1 +US,2024-02,CRUDEOIL,TOTIMPSB,KTONS,25618.0000,1 +US,2024-02,CRUDEOIL,TRANSBAK,CONVBBL,..,3 +US,2024-02,CRUDEOIL,TRANSBAK,KBBL,-,3 +US,2024-02,CRUDEOIL,TRANSBAK,KBD,-,3 +US,2024-02,CRUDEOIL,TRANSBAK,KL,-,3 +US,2024-02,CRUDEOIL,TRANSBAK,KTONS,-,3 +US,2024-03,CRUDEOIL,CLOSTLV,CONVBBL,7400.0000,3 +US,2024-03,CRUDEOIL,CLOSTLV,KBBL,675398.0000,1 +US,2024-03,CRUDEOIL,CLOSTLV,KBD,x,3 +US,2024-03,CRUDEOIL,CLOSTLV,KL,107379.8849,1 +US,2024-03,CRUDEOIL,CLOSTLV,KTONS,91270.0000,1 +US,2024-03,CRUDEOIL,DIRECUSE,CONVBBL,..,3 +US,2024-03,CRUDEOIL,DIRECUSE,KBBL,0.0000,1 +US,2024-03,CRUDEOIL,DIRECUSE,KBD,0.0000,1 +US,2024-03,CRUDEOIL,DIRECUSE,KL,-,3 +US,2024-03,CRUDEOIL,DIRECUSE,KTONS,0.0000,1 +US,2024-03,CRUDEOIL,INDPROD,CONVBBL,7394.0000,3 +US,2024-03,CRUDEOIL,INDPROD,KBBL,408294.0000,1 +US,2024-03,CRUDEOIL,INDPROD,KBD,13170.7742,1 +US,2024-03,CRUDEOIL,INDPROD,KL,64916.4469,1 +US,2024-03,CRUDEOIL,INDPROD,KTONS,55222.0000,1 +US,2024-03,CRUDEOIL,OSOURCES,CONVBBL,..,3 +US,2024-03,CRUDEOIL,OSOURCES,KBBL,-,3 +US,2024-03,CRUDEOIL,OSOURCES,KBD,-,3 +US,2024-03,CRUDEOIL,OSOURCES,KL,-,3 +US,2024-03,CRUDEOIL,OSOURCES,KTONS,-,3 +US,2024-03,CRUDEOIL,REFINOBS,CONVBBL,7397.0000,3 +US,2024-03,CRUDEOIL,REFINOBS,KBBL,491803.0000,1 +US,2024-03,CRUDEOIL,REFINOBS,KBD,15864.6129,1 +US,2024-03,CRUDEOIL,REFINOBS,KL,78189.5994,1 +US,2024-03,CRUDEOIL,REFINOBS,KTONS,66486.0000,1 +US,2024-03,CRUDEOIL,STATDIFF,CONVBBL,7450.0000,3 +US,2024-03,CRUDEOIL,STATDIFF,KBBL,-25331.0000,3 +US,2024-03,CRUDEOIL,STATDIFF,KBD,-817.1290,3 +US,2024-03,CRUDEOIL,STATDIFF,KL,-4027.1551,3 +US,2024-03,CRUDEOIL,STATDIFF,KTONS,-3400.0000,3 +US,2024-03,CRUDEOIL,STOCKCH,CONVBBL,7395.0000,3 +US,2024-03,CRUDEOIL,STOCKCH,KBBL,599.0000,1 +US,2024-03,CRUDEOIL,STOCKCH,KBD,x,3 +US,2024-03,CRUDEOIL,STOCKCH,KL,95.2328,1 +US,2024-03,CRUDEOIL,STOCKCH,KTONS,81.0000,1 +US,2024-03,CRUDEOIL,TOTEXPSB,CONVBBL,7400.0000,3 +US,2024-03,CRUDEOIL,TOTEXPSB,KBBL,133305.0000,1 +US,2024-03,CRUDEOIL,TOTEXPSB,KBD,4300.1613,1 +US,2024-03,CRUDEOIL,TOTEXPSB,KL,21193.6151,1 +US,2024-03,CRUDEOIL,TOTEXPSB,KTONS,18014.0000,1 +US,2024-03,CRUDEOIL,TOTIMPSB,CONVBBL,7399.0000,3 +US,2024-03,CRUDEOIL,TOTIMPSB,KBBL,192082.0000,1 +US,2024-03,CRUDEOIL,TOTIMPSB,KBD,6196.1935,1 +US,2024-03,CRUDEOIL,TOTIMPSB,KL,30536.8439,1 +US,2024-03,CRUDEOIL,TOTIMPSB,KTONS,25959.0000,1 +US,2024-03,CRUDEOIL,TRANSBAK,CONVBBL,..,3 +US,2024-03,CRUDEOIL,TRANSBAK,KBBL,-,3 +US,2024-03,CRUDEOIL,TRANSBAK,KBD,-,3 +US,2024-03,CRUDEOIL,TRANSBAK,KL,-,3 +US,2024-03,CRUDEOIL,TRANSBAK,KTONS,-,3 +US,2024-01,NGL,CLOSTLV,CONVBBL,10300.0000,3 +US,2024-01,NGL,CLOSTLV,KBBL,13287.0000,1 +US,2024-01,NGL,CLOSTLV,KBD,x,3 +US,2024-01,NGL,CLOSTLV,KL,2112.4678,1 +US,2024-01,NGL,CLOSTLV,KTONS,1290.0000,1 +US,2024-01,NGL,DIRECUSE,CONVBBL,13782.0000,3 +US,2024-01,NGL,DIRECUSE,KBBL,156024.0000,1 +US,2024-01,NGL,DIRECUSE,KBD,5033.0323,1 +US,2024-01,NGL,DIRECUSE,KL,24806.1977,1 +US,2024-01,NGL,DIRECUSE,KTONS,11321.0000,1 +US,2024-01,NGL,INDPROD,CONVBBL,13033.0000,3 +US,2024-01,NGL,INDPROD,KBBL,184412.0000,1 +US,2024-01,NGL,INDPROD,KBD,5948.7742,1 +US,2024-01,NGL,INDPROD,KL,29320.0022,1 +US,2024-01,NGL,INDPROD,KTONS,14150.0000,1 +US,2024-01,NGL,OSOURCES,CONVBBL,..,3 +US,2024-01,NGL,OSOURCES,KBBL,-,3 +US,2024-01,NGL,OSOURCES,KBD,-,3 +US,2024-01,NGL,OSOURCES,KL,-,3 +US,2024-01,NGL,OSOURCES,KTONS,-,3 +US,2024-01,NGL,REFINOBS,CONVBBL,10721.0000,3 +US,2024-01,NGL,REFINOBS,KBBL,16157.0000,1 +US,2024-01,NGL,REFINOBS,KBD,521.1935,1 +US,2024-01,NGL,REFINOBS,KL,2568.6901,1 +US,2024-01,NGL,REFINOBS,KTONS,1507.0000,1 +US,2024-01,NGL,STATDIFF,CONVBBL,9469.0000,3 +US,2024-01,NGL,STATDIFF,KBBL,9658.0000,3 +US,2024-01,NGL,STATDIFF,KBD,311.5484,3 +US,2024-01,NGL,STATDIFF,KL,1535.5623,3 +US,2024-01,NGL,STATDIFF,KTONS,1020.0000,3 +US,2024-01,NGL,STOCKCH,CONVBBL,10301.0000,3 +US,2024-01,NGL,STOCKCH,KBBL,-2153.0000,1 +US,2024-01,NGL,STOCKCH,KBD,x,3 +US,2024-01,NGL,STOCKCH,KL,-342.2858,1 +US,2024-01,NGL,STOCKCH,KTONS,-209.0000,1 +US,2024-01,NGL,TOTEXPSB,CONVBBL,9254.0000,3 +US,2024-01,NGL,TOTEXPSB,KBBL,4729.0000,1 +US,2024-01,NGL,TOTEXPSB,KBD,152.5484,1 +US,2024-01,NGL,TOTEXPSB,KL,751.8195,1 +US,2024-01,NGL,TOTEXPSB,KTONS,511.0000,1 +US,2024-01,NGL,TOTIMPSB,CONVBBL,7000.0000,3 +US,2024-01,NGL,TOTIMPSB,KBBL,3.0000,1 +US,2024-01,NGL,TOTIMPSB,KBD,0.0968,1 +US,2024-01,NGL,TOTIMPSB,KL,0.0000,1 +US,2024-01,NGL,TOTIMPSB,KTONS,0.0000,1 +US,2024-01,NGL,TRANSBAK,CONVBBL,..,3 +US,2024-01,NGL,TRANSBAK,KBBL,-,3 +US,2024-01,NGL,TRANSBAK,KBD,-,3 +US,2024-01,NGL,TRANSBAK,KL,-,3 +US,2024-01,NGL,TRANSBAK,KTONS,-,3 +US,2024-02,NGL,CLOSTLV,CONVBBL,10300.0000,3 +US,2024-02,NGL,CLOSTLV,KBBL,12422.0000,1 +US,2024-02,NGL,CLOSTLV,KBD,x,3 +US,2024-02,NGL,CLOSTLV,KL,1974.9118,1 +US,2024-02,NGL,CLOSTLV,KTONS,1206.0000,1 +US,2024-02,NGL,DIRECUSE,CONVBBL,13776.0000,3 +US,2024-02,NGL,DIRECUSE,KBBL,163608.0000,1 +US,2024-02,NGL,DIRECUSE,KBD,5641.6552,1 +US,2024-02,NGL,DIRECUSE,KL,26010.9663,1 +US,2024-02,NGL,DIRECUSE,KTONS,11876.0000,1 +US,2024-02,NGL,INDPROD,CONVBBL,13098.0000,3 +US,2024-02,NGL,INDPROD,KBBL,189173.0000,1 +US,2024-02,NGL,INDPROD,KBD,6523.2069,1 +US,2024-02,NGL,INDPROD,KL,30076.3799,1 +US,2024-02,NGL,INDPROD,KTONS,14443.0000,1 +US,2024-02,NGL,OSOURCES,CONVBBL,..,3 +US,2024-02,NGL,OSOURCES,KBBL,-,3 +US,2024-02,NGL,OSOURCES,KBD,-,3 +US,2024-02,NGL,OSOURCES,KL,-,3 +US,2024-02,NGL,OSOURCES,KTONS,-,3 +US,2024-02,NGL,REFINOBS,CONVBBL,10658.0000,3 +US,2024-02,NGL,REFINOBS,KBBL,13792.0000,1 +US,2024-02,NGL,REFINOBS,KBD,475.5862,1 +US,2024-02,NGL,REFINOBS,KL,2192.6694,1 +US,2024-02,NGL,REFINOBS,KTONS,1294.0000,1 +US,2024-02,NGL,STATDIFF,CONVBBL,9313.0000,3 +US,2024-02,NGL,STATDIFF,KBBL,10999.0000,3 +US,2024-02,NGL,STATDIFF,KBD,379.2759,3 +US,2024-02,NGL,STATDIFF,KL,1748.6491,3 +US,2024-02,NGL,STATDIFF,KTONS,1181.0000,3 +US,2024-02,NGL,STOCKCH,CONVBBL,10298.0000,3 +US,2024-02,NGL,STOCKCH,KBBL,-865.0000,1 +US,2024-02,NGL,STOCKCH,KBD,x,3 +US,2024-02,NGL,STOCKCH,KL,-137.5293,1 +US,2024-02,NGL,STOCKCH,KTONS,-84.0000,1 +US,2024-02,NGL,TOTEXPSB,CONVBBL,9288.0000,3 +US,2024-02,NGL,TOTEXPSB,KBBL,1644.0000,1 +US,2024-02,NGL,TOTEXPSB,KBD,56.6897,1 +US,2024-02,NGL,TOTEXPSB,KL,261.3717,1 +US,2024-02,NGL,TOTEXPSB,KTONS,177.0000,1 +US,2024-02,NGL,TOTIMPSB,CONVBBL,5000.0000,3 +US,2024-02,NGL,TOTIMPSB,KBBL,5.0000,1 +US,2024-02,NGL,TOTIMPSB,KBD,0.1724,1 +US,2024-02,NGL,TOTIMPSB,KL,0.7949,1 +US,2024-02,NGL,TOTIMPSB,KTONS,1.0000,1 +US,2024-02,NGL,TRANSBAK,CONVBBL,..,3 +US,2024-02,NGL,TRANSBAK,KBBL,-,3 +US,2024-02,NGL,TRANSBAK,KBD,-,3 +US,2024-02,NGL,TRANSBAK,KL,-,3 +US,2024-02,NGL,TRANSBAK,KTONS,-,3 +US,2024-03,NGL,CLOSTLV,CONVBBL,10300.0000,3 +US,2024-03,NGL,CLOSTLV,KBBL,11958.0000,1 +US,2024-03,NGL,CLOSTLV,KBD,x,3 +US,2024-03,NGL,CLOSTLV,KL,1901.2210,1 +US,2024-03,NGL,CLOSTLV,KTONS,1161.0000,1 +US,2024-03,NGL,DIRECUSE,CONVBBL,13796.0000,3 +US,2024-03,NGL,DIRECUSE,KBBL,181958.0000,1 +US,2024-03,NGL,DIRECUSE,KBD,5869.6129,1 +US,2024-03,NGL,DIRECUSE,KL,28928.6534,1 +US,2024-03,NGL,DIRECUSE,KTONS,13189.0000,1 +US,2024-03,NGL,INDPROD,CONVBBL,13152.0000,3 +US,2024-03,NGL,INDPROD,KBBL,207966.0000,1 +US,2024-03,NGL,INDPROD,KBD,6708.5806,1 +US,2024-03,NGL,INDPROD,KL,33062.9629,1 +US,2024-03,NGL,INDPROD,KTONS,15812.0000,1 +US,2024-03,NGL,OSOURCES,CONVBBL,..,3 +US,2024-03,NGL,OSOURCES,KBBL,-,3 +US,2024-03,NGL,OSOURCES,KBD,-,3 +US,2024-03,NGL,OSOURCES,KL,-,3 +US,2024-03,NGL,OSOURCES,KTONS,-,3 +US,2024-03,NGL,REFINOBS,CONVBBL,10034.0000,3 +US,2024-03,NGL,REFINOBS,KBBL,22447.0000,1 +US,2024-03,NGL,REFINOBS,KBD,724.0968,1 +US,2024-03,NGL,REFINOBS,KL,3568.6442,1 +US,2024-03,NGL,REFINOBS,KTONS,2237.0000,1 +US,2024-03,NGL,STATDIFF,CONVBBL,48.0000,3 +US,2024-03,NGL,STATDIFF,KBBL,42.0000,3 +US,2024-03,NGL,STATDIFF,KBD,1.3548,3 +US,2024-03,NGL,STATDIFF,KL,0.0000,3 +US,2024-03,NGL,STATDIFF,KTONS,0.0000,3 +US,2024-03,NGL,STOCKCH,CONVBBL,10311.0000,3 +US,2024-03,NGL,STOCKCH,KBBL,-464.0000,1 +US,2024-03,NGL,STOCKCH,KBD,x,3 +US,2024-03,NGL,STOCKCH,KL,-73.7694,1 +US,2024-03,NGL,STOCKCH,KTONS,-45.0000,1 +US,2024-03,NGL,TOTEXPSB,CONVBBL,9244.0000,3 +US,2024-03,NGL,TOTEXPSB,KBBL,3984.0000,1 +US,2024-03,NGL,TOTEXPSB,KBD,128.5161,1 +US,2024-03,NGL,TOTEXPSB,KL,633.4325,1 +US,2024-03,NGL,TOTEXPSB,KTONS,431.0000,1 +US,2024-03,NGL,TOTIMPSB,CONVBBL,7000.0000,3 +US,2024-03,NGL,TOTIMPSB,KBBL,1.0000,1 +US,2024-03,NGL,TOTIMPSB,KBD,0.0323,1 +US,2024-03,NGL,TOTIMPSB,KL,0.0000,1 +US,2024-03,NGL,TOTIMPSB,KTONS,0.0000,1 +US,2024-03,NGL,TRANSBAK,CONVBBL,..,3 +US,2024-03,NGL,TRANSBAK,KBBL,-,3 +US,2024-03,NGL,TRANSBAK,KBD,-,3 +US,2024-03,NGL,TRANSBAK,KL,-,3 +US,2024-03,NGL,TRANSBAK,KTONS,-,3 +US,2024-01,OTHERCRUDE,CLOSTLV,CONVBBL,7461.0000,3 +US,2024-01,OTHERCRUDE,CLOSTLV,KBBL,80871.0000,1 +US,2024-01,OTHERCRUDE,CLOSTLV,KBD,x,3 +US,2024-01,OTHERCRUDE,CLOSTLV,KL,12857.2894,1 +US,2024-01,OTHERCRUDE,CLOSTLV,KTONS,10839.0000,1 +US,2024-01,OTHERCRUDE,DIRECUSE,CONVBBL,7874.0000,3 +US,2024-01,OTHERCRUDE,DIRECUSE,KBBL,26921.0000,1 +US,2024-01,OTHERCRUDE,DIRECUSE,KBD,868.4194,1 +US,2024-01,OTHERCRUDE,DIRECUSE,KL,4280.1370,1 +US,2024-01,OTHERCRUDE,DIRECUSE,KTONS,3419.0000,1 +US,2024-01,OTHERCRUDE,INDPROD,CONVBBL,7401.0000,3 +US,2024-01,OTHERCRUDE,INDPROD,KBBL,0.0000,1 +US,2024-01,OTHERCRUDE,INDPROD,KBD,0.0000,1 +US,2024-01,OTHERCRUDE,INDPROD,KL,0.0000,1 +US,2024-01,OTHERCRUDE,INDPROD,KTONS,0.0000,1 +US,2024-01,OTHERCRUDE,OSOURCES,CONVBBL,8967.0000,3 +US,2024-01,OTHERCRUDE,OSOURCES,KBBL,33823.0000,1 +US,2024-01,OTHERCRUDE,OSOURCES,KBD,1091.0645,1 +US,2024-01,OTHERCRUDE,OSOURCES,KL,5377.5198,1 +US,2024-01,OTHERCRUDE,OSOURCES,KTONS,3772.0000,1 +US,2024-01,OTHERCRUDE,REFINOBS,CONVBBL,10679.0000,3 +US,2024-01,OTHERCRUDE,REFINOBS,KBBL,10348.0000,1 +US,2024-01,OTHERCRUDE,REFINOBS,KBD,333.8065,1 +US,2024-01,OTHERCRUDE,REFINOBS,KL,1645.1956,1 +US,2024-01,OTHERCRUDE,REFINOBS,KTONS,969.0000,1 +US,2024-01,OTHERCRUDE,STATDIFF,CONVBBL,4274.0000,3 +US,2024-01,OTHERCRUDE,STATDIFF,KBBL,1419.0000,3 +US,2024-01,OTHERCRUDE,STATDIFF,KBD,45.7742,3 +US,2024-01,OTHERCRUDE,STATDIFF,KL,225.5983,3 +US,2024-01,OTHERCRUDE,STATDIFF,KTONS,332.0000,3 +US,2024-01,OTHERCRUDE,STOCKCH,CONVBBL,7461.0000,3 +US,2024-01,OTHERCRUDE,STOCKCH,KBBL,-1992.0000,1 +US,2024-01,OTHERCRUDE,STOCKCH,KBD,x,3 +US,2024-01,OTHERCRUDE,STOCKCH,KL,-316.7171,1 +US,2024-01,OTHERCRUDE,STOCKCH,KTONS,-267.0000,1 +US,2024-01,OTHERCRUDE,TOTEXPSB,CONVBBL,8457.0000,3 +US,2024-01,OTHERCRUDE,TOTEXPSB,KBBL,12830.0000,1 +US,2024-01,OTHERCRUDE,TOTEXPSB,KBD,413.8710,1 +US,2024-01,OTHERCRUDE,TOTEXPSB,KL,2039.6943,1 +US,2024-01,OTHERCRUDE,TOTEXPSB,KTONS,1517.0000,1 +US,2024-01,OTHERCRUDE,TOTIMPSB,CONVBBL,7144.0000,3 +US,2024-01,OTHERCRUDE,TOTIMPSB,KBBL,15703.0000,1 +US,2024-01,OTHERCRUDE,TOTIMPSB,KBD,506.5484,1 +US,2024-01,OTHERCRUDE,TOTIMPSB,KL,2496.5042,1 +US,2024-01,OTHERCRUDE,TOTIMPSB,KTONS,2198.0000,1 +US,2024-01,OTHERCRUDE,TRANSBAK,CONVBBL,7418.0000,3 +US,2024-01,OTHERCRUDE,TRANSBAK,KBBL,0.0000,1 +US,2024-01,OTHERCRUDE,TRANSBAK,KBD,0.0000,1 +US,2024-01,OTHERCRUDE,TRANSBAK,KL,0.0000,1 +US,2024-01,OTHERCRUDE,TRANSBAK,KTONS,0.0000,1 +US,2024-02,OTHERCRUDE,CLOSTLV,CONVBBL,7461.0000,3 +US,2024-02,OTHERCRUDE,CLOSTLV,KBBL,90017.0000,1 +US,2024-02,OTHERCRUDE,CLOSTLV,KBD,x,3 +US,2024-02,OTHERCRUDE,CLOSTLV,KL,14311.5783,1 +US,2024-02,OTHERCRUDE,CLOSTLV,KTONS,12065.0000,1 +US,2024-02,OTHERCRUDE,DIRECUSE,CONVBBL,7882.0000,3 +US,2024-02,OTHERCRUDE,DIRECUSE,KBBL,27146.0000,1 +US,2024-02,OTHERCRUDE,DIRECUSE,KBD,936.0690,1 +US,2024-02,OTHERCRUDE,DIRECUSE,KL,4315.8142,1 +US,2024-02,OTHERCRUDE,DIRECUSE,KTONS,3444.0000,1 +US,2024-02,OTHERCRUDE,INDPROD,CONVBBL,7400.0000,3 +US,2024-02,OTHERCRUDE,INDPROD,KBBL,0.0000,1 +US,2024-02,OTHERCRUDE,INDPROD,KBD,0.0000,1 +US,2024-02,OTHERCRUDE,INDPROD,KL,0.0000,1 +US,2024-02,OTHERCRUDE,INDPROD,KTONS,0.0000,1 +US,2024-02,OTHERCRUDE,OSOURCES,CONVBBL,8778.0000,3 +US,2024-02,OTHERCRUDE,OSOURCES,KBBL,32749.0000,1 +US,2024-02,OTHERCRUDE,OSOURCES,KBD,1129.2759,1 +US,2024-02,OTHERCRUDE,OSOURCES,KL,5206.9570,1 +US,2024-02,OTHERCRUDE,OSOURCES,KTONS,3731.0000,1 +US,2024-02,OTHERCRUDE,REFINOBS,CONVBBL,19580.0000,3 +US,2024-02,OTHERCRUDE,REFINOBS,KBBL,5600.0000,1 +US,2024-02,OTHERCRUDE,REFINOBS,KBD,193.1034,1 +US,2024-02,OTHERCRUDE,REFINOBS,KL,890.3113,1 +US,2024-02,OTHERCRUDE,REFINOBS,KTONS,286.0000,1 +US,2024-02,OTHERCRUDE,STATDIFF,CONVBBL,10024.0000,3 +US,2024-02,OTHERCRUDE,STATDIFF,KBBL,-7488.0000,3 +US,2024-02,OTHERCRUDE,STATDIFF,KBD,-258.2069,3 +US,2024-02,OTHERCRUDE,STATDIFF,KL,-1190.4875,3 +US,2024-02,OTHERCRUDE,STATDIFF,KTONS,-747.0000,3 +US,2024-02,OTHERCRUDE,STOCKCH,CONVBBL,7460.0000,3 +US,2024-02,OTHERCRUDE,STOCKCH,KBBL,9146.0000,1 +US,2024-02,OTHERCRUDE,STOCKCH,KBD,x,3 +US,2024-02,OTHERCRUDE,STOCKCH,KL,1454.0939,1 +US,2024-02,OTHERCRUDE,STOCKCH,KTONS,1226.0000,1 +US,2024-02,OTHERCRUDE,TOTEXPSB,CONVBBL,8426.0000,3 +US,2024-02,OTHERCRUDE,TOTEXPSB,KBBL,10928.0000,1 +US,2024-02,OTHERCRUDE,TOTEXPSB,KBD,376.8276,1 +US,2024-02,OTHERCRUDE,TOTEXPSB,KL,1737.4991,1 +US,2024-02,OTHERCRUDE,TOTEXPSB,KTONS,1297.0000,1 +US,2024-02,OTHERCRUDE,TOTIMPSB,CONVBBL,7089.0000,3 +US,2024-02,OTHERCRUDE,TOTIMPSB,KBBL,12583.0000,1 +US,2024-02,OTHERCRUDE,TOTIMPSB,KBD,433.8966,1 +US,2024-02,OTHERCRUDE,TOTIMPSB,KL,2000.5366,1 +US,2024-02,OTHERCRUDE,TOTIMPSB,KTONS,1775.0000,1 +US,2024-02,OTHERCRUDE,TRANSBAK,CONVBBL,7418.0000,3 +US,2024-02,OTHERCRUDE,TRANSBAK,KBBL,0.0000,1 +US,2024-02,OTHERCRUDE,TRANSBAK,KBD,0.0000,1 +US,2024-02,OTHERCRUDE,TRANSBAK,KL,0.0000,1 +US,2024-02,OTHERCRUDE,TRANSBAK,KTONS,0.0000,1 +US,2024-03,OTHERCRUDE,CLOSTLV,CONVBBL,7461.0000,3 +US,2024-03,OTHERCRUDE,CLOSTLV,KBBL,89943.0000,1 +US,2024-03,OTHERCRUDE,CLOSTLV,KBD,x,3 +US,2024-03,OTHERCRUDE,CLOSTLV,KL,14299.7162,1 +US,2024-03,OTHERCRUDE,CLOSTLV,KTONS,12055.0000,1 +US,2024-03,OTHERCRUDE,DIRECUSE,CONVBBL,7885.0000,3 +US,2024-03,OTHERCRUDE,DIRECUSE,KBBL,29491.0000,1 +US,2024-03,OTHERCRUDE,DIRECUSE,KBD,951.3226,1 +US,2024-03,OTHERCRUDE,DIRECUSE,KL,4688.5275,1 +US,2024-03,OTHERCRUDE,DIRECUSE,KTONS,3740.0000,1 +US,2024-03,OTHERCRUDE,INDPROD,CONVBBL,7400.0000,3 +US,2024-03,OTHERCRUDE,INDPROD,KBBL,0.0000,1 +US,2024-03,OTHERCRUDE,INDPROD,KBD,0.0000,1 +US,2024-03,OTHERCRUDE,INDPROD,KL,0.0000,1 +US,2024-03,OTHERCRUDE,INDPROD,KTONS,0.0000,1 +US,2024-03,OTHERCRUDE,OSOURCES,CONVBBL,8888.0000,3 +US,2024-03,OTHERCRUDE,OSOURCES,KBBL,36069.0000,1 +US,2024-03,OTHERCRUDE,OSOURCES,KBD,1163.5161,1 +US,2024-03,OTHERCRUDE,OSOURCES,KL,5734.2847,1 +US,2024-03,OTHERCRUDE,OSOURCES,KTONS,4058.0000,1 +US,2024-03,OTHERCRUDE,REFINOBS,CONVBBL,9393.0000,3 +US,2024-03,OTHERCRUDE,REFINOBS,KBBL,10154.0000,1 +US,2024-03,OTHERCRUDE,REFINOBS,KBD,327.5484,1 +US,2024-03,OTHERCRUDE,REFINOBS,KL,1614.3332,1 +US,2024-03,OTHERCRUDE,REFINOBS,KTONS,1081.0000,1 +US,2024-03,OTHERCRUDE,STATDIFF,CONVBBL,7322.0000,3 +US,2024-03,OTHERCRUDE,STATDIFF,KBBL,344.0000,3 +US,2024-03,OTHERCRUDE,STATDIFF,KBD,11.0968,3 +US,2024-03,OTHERCRUDE,STATDIFF,KL,0.0000,3 +US,2024-03,OTHERCRUDE,STATDIFF,KTONS,0.0000,3 +US,2024-03,OTHERCRUDE,STOCKCH,CONVBBL,7400.0000,3 +US,2024-03,OTHERCRUDE,STOCKCH,KBBL,-74.0000,1 +US,2024-03,OTHERCRUDE,STOCKCH,KBD,x,3 +US,2024-03,OTHERCRUDE,STOCKCH,KL,-11.7651,1 +US,2024-03,OTHERCRUDE,STOCKCH,KTONS,-10.0000,1 +US,2024-03,OTHERCRUDE,TOTEXPSB,CONVBBL,8421.0000,3 +US,2024-03,OTHERCRUDE,TOTEXPSB,KBBL,10787.0000,1 +US,2024-03,OTHERCRUDE,TOTEXPSB,KBD,347.9677,1 +US,2024-03,OTHERCRUDE,TOTEXPSB,KL,1715.0467,1 +US,2024-03,OTHERCRUDE,TOTEXPSB,KTONS,1281.0000,1 +US,2024-03,OTHERCRUDE,TOTIMPSB,CONVBBL,7194.0000,3 +US,2024-03,OTHERCRUDE,TOTIMPSB,KBBL,14633.0000,1 +US,2024-03,OTHERCRUDE,TOTIMPSB,KBD,472.0323,1 +US,2024-03,OTHERCRUDE,TOTIMPSB,KL,2326.4008,1 +US,2024-03,OTHERCRUDE,TOTIMPSB,KTONS,2034.0000,1 +US,2024-03,OTHERCRUDE,TRANSBAK,CONVBBL,7418.0000,3 +US,2024-03,OTHERCRUDE,TRANSBAK,KBBL,0.0000,1 +US,2024-03,OTHERCRUDE,TRANSBAK,KBD,0.0000,1 +US,2024-03,OTHERCRUDE,TRANSBAK,KL,0.0000,1 +US,2024-03,OTHERCRUDE,TRANSBAK,KTONS,0.0000,1 +US,2024-01,TOTCRUDE,CLOSTLV,CONVBBL,7444.0000,3 +US,2024-01,TOTCRUDE,CLOSTLV,KBBL,746268.0000,1 +US,2024-01,TOTCRUDE,CLOSTLV,KBD,x,3 +US,2024-01,TOTCRUDE,CLOSTLV,KL,118648.5879,1 +US,2024-01,TOTCRUDE,CLOSTLV,KTONS,100252.0000,1 +US,2024-01,TOTCRUDE,DIRECUSE,CONVBBL,12411.0000,3 +US,2024-01,TOTCRUDE,DIRECUSE,KBBL,182945.0000,1 +US,2024-01,TOTCRUDE,DIRECUSE,KBD,5901.4516,1 +US,2024-01,TOTCRUDE,DIRECUSE,KL,29084.8898,1 +US,2024-01,TOTCRUDE,DIRECUSE,KTONS,14740.0000,1 +US,2024-01,TOTCRUDE,INDPROD,CONVBBL,8605.0000,3 +US,2024-01,TOTCRUDE,INDPROD,KBBL,573573.0000,1 +US,2024-01,TOTCRUDE,INDPROD,KBD,18502.3548,1 +US,2024-01,TOTCRUDE,INDPROD,KL,91188.5386,1 +US,2024-01,TOTCRUDE,INDPROD,KTONS,66654.0000,1 +US,2024-01,TOTCRUDE,OSOURCES,CONVBBL,8967.0000,3 +US,2024-01,TOTCRUDE,OSOURCES,KBBL,33823.0000,1 +US,2024-01,TOTCRUDE,OSOURCES,KBD,1091.0645,1 +US,2024-01,TOTCRUDE,OSOURCES,KL,5377.5198,1 +US,2024-01,TOTCRUDE,OSOURCES,KTONS,3772.0000,1 +US,2024-01,TOTCRUDE,REFINOBS,CONVBBL,7525.0000,3 +US,2024-01,TOTCRUDE,REFINOBS,KBBL,503886.0000,1 +US,2024-01,TOTCRUDE,REFINOBS,KBD,16254.3871,1 +US,2024-01,TOTCRUDE,REFINOBS,KL,80109.7014,1 +US,2024-01,TOTCRUDE,REFINOBS,KTONS,66960.0000,1 +US,2024-01,TOTCRUDE,STATDIFF,CONVBBL,4222.0000,3 +US,2024-01,TOTCRUDE,STATDIFF,KBBL,-2018.0000,3 +US,2024-01,TOTCRUDE,STATDIFF,KBD,-65.0968,3 +US,2024-01,TOTCRUDE,STATDIFF,KL,-320.8554,3 +US,2024-01,TOTCRUDE,STATDIFF,KTONS,-478.0000,3 +US,2024-01,TOTCRUDE,STOCKCH,CONVBBL,3798.0000,3 +US,2024-01,TOTCRUDE,STOCKCH,KBBL,657.0000,1 +US,2024-01,TOTCRUDE,STOCKCH,KBD,x,3 +US,2024-01,TOTCRUDE,STOCKCH,KL,104.4634,1 +US,2024-01,TOTCRUDE,STOCKCH,KTONS,173.0000,1 +US,2024-01,TOTCRUDE,TOTEXPSB,CONVBBL,7533.0000,3 +US,2024-01,TOTCRUDE,TOTEXPSB,KBBL,143079.0000,1 +US,2024-01,TOTCRUDE,TOTEXPSB,KBD,4615.4516,1 +US,2024-01,TOTCRUDE,TOTEXPSB,KL,22747.0300,1 +US,2024-01,TOTCRUDE,TOTEXPSB,KTONS,18993.0000,1 +US,2024-01,TOTCRUDE,TOTIMPSB,CONVBBL,7381.0000,3 +US,2024-01,TOTCRUDE,TOTIMPSB,KBBL,221153.0000,1 +US,2024-01,TOTCRUDE,TOTIMPSB,KBD,7133.9677,1 +US,2024-01,TOTCRUDE,TOTIMPSB,KL,35160.0245,1 +US,2024-01,TOTCRUDE,TOTIMPSB,KTONS,29962.0000,1 +US,2024-01,TOTCRUDE,TRANSBAK,CONVBBL,7418.0000,3 +US,2024-01,TOTCRUDE,TRANSBAK,KBBL,0.0000,1 +US,2024-01,TOTCRUDE,TRANSBAK,KBD,0.0000,1 +US,2024-01,TOTCRUDE,TRANSBAK,KL,0.0000,1 +US,2024-01,TOTCRUDE,TRANSBAK,KTONS,0.0000,1 +US,2024-02,TOTCRUDE,CLOSTLV,CONVBBL,7441.0000,3 +US,2024-02,TOTCRUDE,CLOSTLV,KBBL,777238.0000,1 +US,2024-02,TOTCRUDE,CLOSTLV,KBD,x,3 +US,2024-02,TOTCRUDE,CLOSTLV,KL,123578.9469,1 +US,2024-02,TOTCRUDE,CLOSTLV,KTONS,104460.0000,1 +US,2024-02,TOTCRUDE,DIRECUSE,CONVBBL,12451.0000,3 +US,2024-02,TOTCRUDE,DIRECUSE,KBBL,190754.0000,1 +US,2024-02,TOTCRUDE,DIRECUSE,KBD,6577.7241,1 +US,2024-02,TOTCRUDE,DIRECUSE,KL,30326.7703,1 +US,2024-02,TOTCRUDE,DIRECUSE,KTONS,15320.0000,1 +US,2024-02,TOTCRUDE,INDPROD,CONVBBL,8624.0000,3 +US,2024-02,TOTCRUDE,INDPROD,KBBL,569133.0000,1 +US,2024-02,TOTCRUDE,INDPROD,KBD,19625.2759,1 +US,2024-02,TOTCRUDE,INDPROD,KL,90483.5817,1 +US,2024-02,TOTCRUDE,INDPROD,KTONS,65993.0000,1 +US,2024-02,TOTCRUDE,OSOURCES,CONVBBL,8778.0000,3 +US,2024-02,TOTCRUDE,OSOURCES,KBBL,32749.0000,1 +US,2024-02,TOTCRUDE,OSOURCES,KBD,1129.2759,1 +US,2024-02,TOTCRUDE,OSOURCES,KL,5206.9570,1 +US,2024-02,TOTCRUDE,OSOURCES,KTONS,3731.0000,1 +US,2024-02,TOTCRUDE,REFINOBS,CONVBBL,7537.0000,3 +US,2024-02,TOTCRUDE,REFINOBS,KBBL,450966.0000,1 +US,2024-02,TOTCRUDE,REFINOBS,KBD,15550.5517,1 +US,2024-02,TOTCRUDE,REFINOBS,KL,71700.8382,1 +US,2024-02,TOTCRUDE,REFINOBS,KTONS,59836.0000,1 +US,2024-02,TOTCRUDE,STATDIFF,CONVBBL,8254.0000,3 +US,2024-02,TOTCRUDE,STATDIFF,KBBL,-16368.0000,3 +US,2024-02,TOTCRUDE,STATDIFF,KBD,-564.4138,3 +US,2024-02,TOTCRUDE,STATDIFF,KL,-2602.2579,3 +US,2024-02,TOTCRUDE,STATDIFF,KTONS,-1983.0000,3 +US,2024-02,TOTCRUDE,STOCKCH,CONVBBL,7360.0000,3 +US,2024-02,TOTCRUDE,STOCKCH,KBBL,30970.0000,1 +US,2024-02,TOTCRUDE,STOCKCH,KBD,x,3 +US,2024-02,TOTCRUDE,STOCKCH,KL,4923.9849,1 +US,2024-02,TOTCRUDE,STOCKCH,KTONS,4208.0000,1 +US,2024-02,TOTCRUDE,TOTEXPSB,CONVBBL,7485.0000,3 +US,2024-02,TOTCRUDE,TOTEXPSB,KBBL,147724.0000,1 +US,2024-02,TOTCRUDE,TOTEXPSB,KBD,5093.9310,1 +US,2024-02,TOTCRUDE,TOTEXPSB,KL,23487.4630,1 +US,2024-02,TOTCRUDE,TOTEXPSB,KTONS,19737.0000,1 +US,2024-02,TOTCRUDE,TOTIMPSB,CONVBBL,7380.0000,3 +US,2024-02,TOTCRUDE,TOTIMPSB,KBBL,202164.0000,1 +US,2024-02,TOTCRUDE,TOTIMPSB,KBD,6971.1724,1 +US,2024-02,TOTCRUDE,TOTIMPSB,KL,32142.1540,1 +US,2024-02,TOTCRUDE,TOTIMPSB,KTONS,27394.0000,1 +US,2024-02,TOTCRUDE,TRANSBAK,CONVBBL,7418.0000,3 +US,2024-02,TOTCRUDE,TRANSBAK,KBBL,0.0000,1 +US,2024-02,TOTCRUDE,TRANSBAK,KBD,0.0000,1 +US,2024-02,TOTCRUDE,TRANSBAK,KL,0.0000,1 +US,2024-02,TOTCRUDE,TRANSBAK,KTONS,0.0000,1 +US,2024-03,TOTCRUDE,CLOSTLV,CONVBBL,7439.0000,3 +US,2024-03,TOTCRUDE,CLOSTLV,KBBL,777299.0000,1 +US,2024-03,TOTCRUDE,CLOSTLV,KBD,x,3 +US,2024-03,TOTCRUDE,CLOSTLV,KL,123576.4816,1 +US,2024-03,TOTCRUDE,CLOSTLV,KTONS,104486.0000,1 +US,2024-03,TOTCRUDE,DIRECUSE,CONVBBL,12490.0000,3 +US,2024-03,TOTCRUDE,DIRECUSE,KBBL,211449.0000,1 +US,2024-03,TOTCRUDE,DIRECUSE,KBD,6820.9355,1 +US,2024-03,TOTCRUDE,DIRECUSE,KL,33616.8416,1 +US,2024-03,TOTCRUDE,DIRECUSE,KTONS,16929.0000,1 +US,2024-03,TOTCRUDE,INDPROD,CONVBBL,8676.0000,3 +US,2024-03,TOTCRUDE,INDPROD,KBBL,616260.0000,1 +US,2024-03,TOTCRUDE,INDPROD,KBD,19879.3548,1 +US,2024-03,TOTCRUDE,INDPROD,KL,97982.6042,1 +US,2024-03,TOTCRUDE,INDPROD,KTONS,71034.0000,1 +US,2024-03,TOTCRUDE,OSOURCES,CONVBBL,8888.0000,3 +US,2024-03,TOTCRUDE,OSOURCES,KBBL,36069.0000,1 +US,2024-03,TOTCRUDE,OSOURCES,KBD,1163.5161,1 +US,2024-03,TOTCRUDE,OSOURCES,KL,5734.2847,1 +US,2024-03,TOTCRUDE,OSOURCES,KTONS,4058.0000,1 +US,2024-03,TOTCRUDE,REFINOBS,CONVBBL,7513.0000,3 +US,2024-03,TOTCRUDE,REFINOBS,KBBL,524404.0000,1 +US,2024-03,TOTCRUDE,REFINOBS,KBD,16916.2581,1 +US,2024-03,TOTCRUDE,REFINOBS,KL,83379.0346,1 +US,2024-03,TOTCRUDE,REFINOBS,KTONS,69804.0000,1 +US,2024-03,TOTCRUDE,STATDIFF,CONVBBL,7337.0000,3 +US,2024-03,TOTCRUDE,STATDIFF,KBBL,-24945.0000,3 +US,2024-03,TOTCRUDE,STATDIFF,KBD,-804.6774,3 +US,2024-03,TOTCRUDE,STATDIFF,KL,-3966.0721,3 +US,2024-03,TOTCRUDE,STATDIFF,KTONS,-3400.0000,3 +US,2024-03,TOTCRUDE,STOCKCH,CONVBBL,2346.0000,3 +US,2024-03,TOTCRUDE,STOCKCH,KBBL,61.0000,1 +US,2024-03,TOTCRUDE,STOCKCH,KBD,x,3 +US,2024-03,TOTCRUDE,STOCKCH,KL,9.6976,1 +US,2024-03,TOTCRUDE,STOCKCH,KTONS,26.0000,1 +US,2024-03,TOTCRUDE,TOTEXPSB,CONVBBL,7507.0000,3 +US,2024-03,TOTCRUDE,TOTEXPSB,KBBL,148076.0000,1 +US,2024-03,TOTCRUDE,TOTEXPSB,KBD,4776.6452,1 +US,2024-03,TOTCRUDE,TOTEXPSB,KL,23543.3689,1 +US,2024-03,TOTCRUDE,TOTEXPSB,KTONS,19726.0000,1 +US,2024-03,TOTCRUDE,TOTIMPSB,CONVBBL,7385.0000,3 +US,2024-03,TOTCRUDE,TOTIMPSB,KBBL,206716.0000,1 +US,2024-03,TOTCRUDE,TOTIMPSB,KBD,6668.2581,1 +US,2024-03,TOTCRUDE,TOTIMPSB,KL,32867.2303,1 +US,2024-03,TOTCRUDE,TOTIMPSB,KTONS,27993.0000,1 +US,2024-03,TOTCRUDE,TRANSBAK,CONVBBL,7418.0000,3 +US,2024-03,TOTCRUDE,TRANSBAK,KBBL,0.0000,1 +US,2024-03,TOTCRUDE,TRANSBAK,KBD,0.0000,1 +US,2024-03,TOTCRUDE,TRANSBAK,KL,0.0000,1 +US,2024-03,TOTCRUDE,TRANSBAK,KTONS,0.0000,1 diff --git a/openbb_platform/providers/jodi/tests/fixtures/oil_secondary_sample.csv b/openbb_platform/providers/jodi/tests/fixtures/oil_secondary_sample.csv new file mode 100644 index 00000000000..9b601a3f571 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/fixtures/oil_secondary_sample.csv @@ -0,0 +1,4051 @@ +REF_AREA,TIME_PERIOD,ENERGY_PRODUCT,FLOW_BREAKDOWN,UNIT_MEASURE,OBS_VALUE,ASSESSMENT_CODE +RU,2024-01,GASDIES,CLOSTLV,CONVBBL,7461.0000,3 +RU,2024-01,GASDIES,CLOSTLV,KBBL,-,3 +RU,2024-01,GASDIES,CLOSTLV,KBD,x,3 +RU,2024-01,GASDIES,CLOSTLV,KL,-,3 +RU,2024-01,GASDIES,CLOSTLV,KTONS,-,3 +RU,2024-01,GASDIES,IPTRANSF,CONVBBL,..,3 +RU,2024-01,GASDIES,IPTRANSF,KBBL,-,3 +RU,2024-01,GASDIES,IPTRANSF,KBD,-,3 +RU,2024-01,GASDIES,IPTRANSF,KL,-,3 +RU,2024-01,GASDIES,IPTRANSF,KTONS,-,3 +RU,2024-01,GASDIES,PTRANSF,CONVBBL,..,3 +RU,2024-01,GASDIES,PTRANSF,KBBL,-,3 +RU,2024-01,GASDIES,PTRANSF,KBD,-,3 +RU,2024-01,GASDIES,PTRANSF,KL,-,3 +RU,2024-01,GASDIES,PTRANSF,KTONS,-,3 +RU,2024-01,GASDIES,RECEIPTS,CONVBBL,..,3 +RU,2024-01,GASDIES,RECEIPTS,KBBL,-,3 +RU,2024-01,GASDIES,RECEIPTS,KBD,-,3 +RU,2024-01,GASDIES,RECEIPTS,KL,-,3 +RU,2024-01,GASDIES,RECEIPTS,KTONS,-,3 +RU,2024-01,GASDIES,REFGROUT,CONVBBL,7461.0000,3 +RU,2024-01,GASDIES,REFGROUT,KBBL,-,3 +RU,2024-01,GASDIES,REFGROUT,KBD,-,3 +RU,2024-01,GASDIES,REFGROUT,KL,-,3 +RU,2024-01,GASDIES,REFGROUT,KTONS,-,3 +RU,2024-01,GASDIES,STATDIFF,CONVBBL,7461.0000,3 +RU,2024-01,GASDIES,STATDIFF,KBBL,-,3 +RU,2024-01,GASDIES,STATDIFF,KBD,-,3 +RU,2024-01,GASDIES,STATDIFF,KL,-,3 +RU,2024-01,GASDIES,STATDIFF,KTONS,-,3 +RU,2024-01,GASDIES,STOCKCH,CONVBBL,7461.0000,3 +RU,2024-01,GASDIES,STOCKCH,KBBL,-,3 +RU,2024-01,GASDIES,STOCKCH,KBD,x,3 +RU,2024-01,GASDIES,STOCKCH,KL,-,3 +RU,2024-01,GASDIES,STOCKCH,KTONS,-,3 +RU,2024-01,GASDIES,TOTDEMO,CONVBBL,7461.0000,3 +RU,2024-01,GASDIES,TOTDEMO,KBBL,-,3 +RU,2024-01,GASDIES,TOTDEMO,KBD,-,3 +RU,2024-01,GASDIES,TOTDEMO,KL,-,3 +RU,2024-01,GASDIES,TOTDEMO,KTONS,-,3 +RU,2024-01,GASDIES,TOTEXPSB,CONVBBL,7461.0000,3 +RU,2024-01,GASDIES,TOTEXPSB,KBBL,-,3 +RU,2024-01,GASDIES,TOTEXPSB,KBD,-,3 +RU,2024-01,GASDIES,TOTEXPSB,KL,-,3 +RU,2024-01,GASDIES,TOTEXPSB,KTONS,-,3 +RU,2024-01,GASDIES,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,GASDIES,TOTIMPSB,KBBL,-,3 +RU,2024-01,GASDIES,TOTIMPSB,KBD,-,3 +RU,2024-01,GASDIES,TOTIMPSB,KL,-,3 +RU,2024-01,GASDIES,TOTIMPSB,KTONS,-,3 +RU,2024-02,GASDIES,CLOSTLV,CONVBBL,7461.0000,3 +RU,2024-02,GASDIES,CLOSTLV,KBBL,-,3 +RU,2024-02,GASDIES,CLOSTLV,KBD,x,3 +RU,2024-02,GASDIES,CLOSTLV,KL,-,3 +RU,2024-02,GASDIES,CLOSTLV,KTONS,-,3 +RU,2024-02,GASDIES,IPTRANSF,CONVBBL,..,3 +RU,2024-02,GASDIES,IPTRANSF,KBBL,-,3 +RU,2024-02,GASDIES,IPTRANSF,KBD,-,3 +RU,2024-02,GASDIES,IPTRANSF,KL,-,3 +RU,2024-02,GASDIES,IPTRANSF,KTONS,-,3 +RU,2024-02,GASDIES,PTRANSF,CONVBBL,..,3 +RU,2024-02,GASDIES,PTRANSF,KBBL,-,3 +RU,2024-02,GASDIES,PTRANSF,KBD,-,3 +RU,2024-02,GASDIES,PTRANSF,KL,-,3 +RU,2024-02,GASDIES,PTRANSF,KTONS,-,3 +RU,2024-02,GASDIES,RECEIPTS,CONVBBL,..,3 +RU,2024-02,GASDIES,RECEIPTS,KBBL,-,3 +RU,2024-02,GASDIES,RECEIPTS,KBD,-,3 +RU,2024-02,GASDIES,RECEIPTS,KL,-,3 +RU,2024-02,GASDIES,RECEIPTS,KTONS,-,3 +RU,2024-02,GASDIES,REFGROUT,CONVBBL,7461.0000,3 +RU,2024-02,GASDIES,REFGROUT,KBBL,-,3 +RU,2024-02,GASDIES,REFGROUT,KBD,-,3 +RU,2024-02,GASDIES,REFGROUT,KL,-,3 +RU,2024-02,GASDIES,REFGROUT,KTONS,-,3 +RU,2024-02,GASDIES,STATDIFF,CONVBBL,7461.0000,3 +RU,2024-02,GASDIES,STATDIFF,KBBL,-,3 +RU,2024-02,GASDIES,STATDIFF,KBD,-,3 +RU,2024-02,GASDIES,STATDIFF,KL,-,3 +RU,2024-02,GASDIES,STATDIFF,KTONS,-,3 +RU,2024-02,GASDIES,STOCKCH,CONVBBL,7461.0000,3 +RU,2024-02,GASDIES,STOCKCH,KBBL,-,3 +RU,2024-02,GASDIES,STOCKCH,KBD,x,3 +RU,2024-02,GASDIES,STOCKCH,KL,-,3 +RU,2024-02,GASDIES,STOCKCH,KTONS,-,3 +RU,2024-02,GASDIES,TOTDEMO,CONVBBL,7461.0000,3 +RU,2024-02,GASDIES,TOTDEMO,KBBL,-,3 +RU,2024-02,GASDIES,TOTDEMO,KBD,-,3 +RU,2024-02,GASDIES,TOTDEMO,KL,-,3 +RU,2024-02,GASDIES,TOTDEMO,KTONS,-,3 +RU,2024-02,GASDIES,TOTEXPSB,CONVBBL,7461.0000,3 +RU,2024-02,GASDIES,TOTEXPSB,KBBL,-,3 +RU,2024-02,GASDIES,TOTEXPSB,KBD,-,3 +RU,2024-02,GASDIES,TOTEXPSB,KL,-,3 +RU,2024-02,GASDIES,TOTEXPSB,KTONS,-,3 +RU,2024-02,GASDIES,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,GASDIES,TOTIMPSB,KBBL,-,3 +RU,2024-02,GASDIES,TOTIMPSB,KBD,-,3 +RU,2024-02,GASDIES,TOTIMPSB,KL,-,3 +RU,2024-02,GASDIES,TOTIMPSB,KTONS,-,3 +RU,2024-03,GASDIES,CLOSTLV,CONVBBL,7461.0000,3 +RU,2024-03,GASDIES,CLOSTLV,KBBL,-,3 +RU,2024-03,GASDIES,CLOSTLV,KBD,x,3 +RU,2024-03,GASDIES,CLOSTLV,KL,-,3 +RU,2024-03,GASDIES,CLOSTLV,KTONS,-,3 +RU,2024-03,GASDIES,IPTRANSF,CONVBBL,..,3 +RU,2024-03,GASDIES,IPTRANSF,KBBL,-,3 +RU,2024-03,GASDIES,IPTRANSF,KBD,-,3 +RU,2024-03,GASDIES,IPTRANSF,KL,-,3 +RU,2024-03,GASDIES,IPTRANSF,KTONS,-,3 +RU,2024-03,GASDIES,PTRANSF,CONVBBL,..,3 +RU,2024-03,GASDIES,PTRANSF,KBBL,-,3 +RU,2024-03,GASDIES,PTRANSF,KBD,-,3 +RU,2024-03,GASDIES,PTRANSF,KL,-,3 +RU,2024-03,GASDIES,PTRANSF,KTONS,-,3 +RU,2024-03,GASDIES,RECEIPTS,CONVBBL,..,3 +RU,2024-03,GASDIES,RECEIPTS,KBBL,-,3 +RU,2024-03,GASDIES,RECEIPTS,KBD,-,3 +RU,2024-03,GASDIES,RECEIPTS,KL,-,3 +RU,2024-03,GASDIES,RECEIPTS,KTONS,-,3 +RU,2024-03,GASDIES,REFGROUT,CONVBBL,7461.0000,3 +RU,2024-03,GASDIES,REFGROUT,KBBL,-,3 +RU,2024-03,GASDIES,REFGROUT,KBD,-,3 +RU,2024-03,GASDIES,REFGROUT,KL,-,3 +RU,2024-03,GASDIES,REFGROUT,KTONS,-,3 +RU,2024-03,GASDIES,STATDIFF,CONVBBL,7461.0000,3 +RU,2024-03,GASDIES,STATDIFF,KBBL,-,3 +RU,2024-03,GASDIES,STATDIFF,KBD,-,3 +RU,2024-03,GASDIES,STATDIFF,KL,-,3 +RU,2024-03,GASDIES,STATDIFF,KTONS,-,3 +RU,2024-03,GASDIES,STOCKCH,CONVBBL,7461.0000,3 +RU,2024-03,GASDIES,STOCKCH,KBBL,-,3 +RU,2024-03,GASDIES,STOCKCH,KBD,x,3 +RU,2024-03,GASDIES,STOCKCH,KL,-,3 +RU,2024-03,GASDIES,STOCKCH,KTONS,-,3 +RU,2024-03,GASDIES,TOTDEMO,CONVBBL,7461.0000,3 +RU,2024-03,GASDIES,TOTDEMO,KBBL,-,3 +RU,2024-03,GASDIES,TOTDEMO,KBD,-,3 +RU,2024-03,GASDIES,TOTDEMO,KL,-,3 +RU,2024-03,GASDIES,TOTDEMO,KTONS,-,3 +RU,2024-03,GASDIES,TOTEXPSB,CONVBBL,7461.0000,3 +RU,2024-03,GASDIES,TOTEXPSB,KBBL,-,3 +RU,2024-03,GASDIES,TOTEXPSB,KBD,-,3 +RU,2024-03,GASDIES,TOTEXPSB,KL,-,3 +RU,2024-03,GASDIES,TOTEXPSB,KTONS,-,3 +RU,2024-03,GASDIES,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,GASDIES,TOTIMPSB,KBBL,-,3 +RU,2024-03,GASDIES,TOTIMPSB,KBD,-,3 +RU,2024-03,GASDIES,TOTIMPSB,KL,-,3 +RU,2024-03,GASDIES,TOTIMPSB,KTONS,-,3 +RU,2024-01,GASOLINE,CLOSTLV,CONVBBL,8534.0000,3 +RU,2024-01,GASOLINE,CLOSTLV,KBBL,-,3 +RU,2024-01,GASOLINE,CLOSTLV,KBD,x,3 +RU,2024-01,GASOLINE,CLOSTLV,KL,-,3 +RU,2024-01,GASOLINE,CLOSTLV,KTONS,-,3 +RU,2024-01,GASOLINE,IPTRANSF,CONVBBL,..,3 +RU,2024-01,GASOLINE,IPTRANSF,KBBL,-,3 +RU,2024-01,GASOLINE,IPTRANSF,KBD,-,3 +RU,2024-01,GASOLINE,IPTRANSF,KL,-,3 +RU,2024-01,GASOLINE,IPTRANSF,KTONS,-,3 +RU,2024-01,GASOLINE,PTRANSF,CONVBBL,..,3 +RU,2024-01,GASOLINE,PTRANSF,KBBL,-,3 +RU,2024-01,GASOLINE,PTRANSF,KBD,-,3 +RU,2024-01,GASOLINE,PTRANSF,KL,-,3 +RU,2024-01,GASOLINE,PTRANSF,KTONS,-,3 +RU,2024-01,GASOLINE,RECEIPTS,CONVBBL,..,3 +RU,2024-01,GASOLINE,RECEIPTS,KBBL,-,3 +RU,2024-01,GASOLINE,RECEIPTS,KBD,-,3 +RU,2024-01,GASOLINE,RECEIPTS,KL,-,3 +RU,2024-01,GASOLINE,RECEIPTS,KTONS,-,3 +RU,2024-01,GASOLINE,REFGROUT,CONVBBL,8535.0000,3 +RU,2024-01,GASOLINE,REFGROUT,KBBL,-,3 +RU,2024-01,GASOLINE,REFGROUT,KBD,-,3 +RU,2024-01,GASOLINE,REFGROUT,KL,-,3 +RU,2024-01,GASOLINE,REFGROUT,KTONS,-,3 +RU,2024-01,GASOLINE,STATDIFF,CONVBBL,8534.0000,3 +RU,2024-01,GASOLINE,STATDIFF,KBBL,-,3 +RU,2024-01,GASOLINE,STATDIFF,KBD,-,3 +RU,2024-01,GASOLINE,STATDIFF,KL,-,3 +RU,2024-01,GASOLINE,STATDIFF,KTONS,-,3 +RU,2024-01,GASOLINE,STOCKCH,CONVBBL,8534.0000,3 +RU,2024-01,GASOLINE,STOCKCH,KBBL,-,3 +RU,2024-01,GASOLINE,STOCKCH,KBD,x,3 +RU,2024-01,GASOLINE,STOCKCH,KL,-,3 +RU,2024-01,GASOLINE,STOCKCH,KTONS,-,3 +RU,2024-01,GASOLINE,TOTDEMO,CONVBBL,8534.0000,3 +RU,2024-01,GASOLINE,TOTDEMO,KBBL,-,3 +RU,2024-01,GASOLINE,TOTDEMO,KBD,-,3 +RU,2024-01,GASOLINE,TOTDEMO,KL,-,3 +RU,2024-01,GASOLINE,TOTDEMO,KTONS,-,3 +RU,2024-01,GASOLINE,TOTEXPSB,CONVBBL,8534.0000,3 +RU,2024-01,GASOLINE,TOTEXPSB,KBBL,-,3 +RU,2024-01,GASOLINE,TOTEXPSB,KBD,-,3 +RU,2024-01,GASOLINE,TOTEXPSB,KL,-,3 +RU,2024-01,GASOLINE,TOTEXPSB,KTONS,-,3 +RU,2024-01,GASOLINE,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,GASOLINE,TOTIMPSB,KBBL,-,3 +RU,2024-01,GASOLINE,TOTIMPSB,KBD,-,3 +RU,2024-01,GASOLINE,TOTIMPSB,KL,-,3 +RU,2024-01,GASOLINE,TOTIMPSB,KTONS,-,3 +RU,2024-02,GASOLINE,CLOSTLV,CONVBBL,8534.0000,3 +RU,2024-02,GASOLINE,CLOSTLV,KBBL,-,3 +RU,2024-02,GASOLINE,CLOSTLV,KBD,x,3 +RU,2024-02,GASOLINE,CLOSTLV,KL,-,3 +RU,2024-02,GASOLINE,CLOSTLV,KTONS,-,3 +RU,2024-02,GASOLINE,IPTRANSF,CONVBBL,..,3 +RU,2024-02,GASOLINE,IPTRANSF,KBBL,-,3 +RU,2024-02,GASOLINE,IPTRANSF,KBD,-,3 +RU,2024-02,GASOLINE,IPTRANSF,KL,-,3 +RU,2024-02,GASOLINE,IPTRANSF,KTONS,-,3 +RU,2024-02,GASOLINE,PTRANSF,CONVBBL,..,3 +RU,2024-02,GASOLINE,PTRANSF,KBBL,-,3 +RU,2024-02,GASOLINE,PTRANSF,KBD,-,3 +RU,2024-02,GASOLINE,PTRANSF,KL,-,3 +RU,2024-02,GASOLINE,PTRANSF,KTONS,-,3 +RU,2024-02,GASOLINE,RECEIPTS,CONVBBL,..,3 +RU,2024-02,GASOLINE,RECEIPTS,KBBL,-,3 +RU,2024-02,GASOLINE,RECEIPTS,KBD,-,3 +RU,2024-02,GASOLINE,RECEIPTS,KL,-,3 +RU,2024-02,GASOLINE,RECEIPTS,KTONS,-,3 +RU,2024-02,GASOLINE,REFGROUT,CONVBBL,8535.0000,3 +RU,2024-02,GASOLINE,REFGROUT,KBBL,-,3 +RU,2024-02,GASOLINE,REFGROUT,KBD,-,3 +RU,2024-02,GASOLINE,REFGROUT,KL,-,3 +RU,2024-02,GASOLINE,REFGROUT,KTONS,-,3 +RU,2024-02,GASOLINE,STATDIFF,CONVBBL,8534.0000,3 +RU,2024-02,GASOLINE,STATDIFF,KBBL,-,3 +RU,2024-02,GASOLINE,STATDIFF,KBD,-,3 +RU,2024-02,GASOLINE,STATDIFF,KL,-,3 +RU,2024-02,GASOLINE,STATDIFF,KTONS,-,3 +RU,2024-02,GASOLINE,STOCKCH,CONVBBL,8534.0000,3 +RU,2024-02,GASOLINE,STOCKCH,KBBL,-,3 +RU,2024-02,GASOLINE,STOCKCH,KBD,x,3 +RU,2024-02,GASOLINE,STOCKCH,KL,-,3 +RU,2024-02,GASOLINE,STOCKCH,KTONS,-,3 +RU,2024-02,GASOLINE,TOTDEMO,CONVBBL,8534.0000,3 +RU,2024-02,GASOLINE,TOTDEMO,KBBL,-,3 +RU,2024-02,GASOLINE,TOTDEMO,KBD,-,3 +RU,2024-02,GASOLINE,TOTDEMO,KL,-,3 +RU,2024-02,GASOLINE,TOTDEMO,KTONS,-,3 +RU,2024-02,GASOLINE,TOTEXPSB,CONVBBL,8534.0000,3 +RU,2024-02,GASOLINE,TOTEXPSB,KBBL,-,3 +RU,2024-02,GASOLINE,TOTEXPSB,KBD,-,3 +RU,2024-02,GASOLINE,TOTEXPSB,KL,-,3 +RU,2024-02,GASOLINE,TOTEXPSB,KTONS,-,3 +RU,2024-02,GASOLINE,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,GASOLINE,TOTIMPSB,KBBL,-,3 +RU,2024-02,GASOLINE,TOTIMPSB,KBD,-,3 +RU,2024-02,GASOLINE,TOTIMPSB,KL,-,3 +RU,2024-02,GASOLINE,TOTIMPSB,KTONS,-,3 +RU,2024-03,GASOLINE,CLOSTLV,CONVBBL,8534.0000,3 +RU,2024-03,GASOLINE,CLOSTLV,KBBL,-,3 +RU,2024-03,GASOLINE,CLOSTLV,KBD,x,3 +RU,2024-03,GASOLINE,CLOSTLV,KL,-,3 +RU,2024-03,GASOLINE,CLOSTLV,KTONS,-,3 +RU,2024-03,GASOLINE,IPTRANSF,CONVBBL,..,3 +RU,2024-03,GASOLINE,IPTRANSF,KBBL,-,3 +RU,2024-03,GASOLINE,IPTRANSF,KBD,-,3 +RU,2024-03,GASOLINE,IPTRANSF,KL,-,3 +RU,2024-03,GASOLINE,IPTRANSF,KTONS,-,3 +RU,2024-03,GASOLINE,PTRANSF,CONVBBL,..,3 +RU,2024-03,GASOLINE,PTRANSF,KBBL,-,3 +RU,2024-03,GASOLINE,PTRANSF,KBD,-,3 +RU,2024-03,GASOLINE,PTRANSF,KL,-,3 +RU,2024-03,GASOLINE,PTRANSF,KTONS,-,3 +RU,2024-03,GASOLINE,RECEIPTS,CONVBBL,..,3 +RU,2024-03,GASOLINE,RECEIPTS,KBBL,-,3 +RU,2024-03,GASOLINE,RECEIPTS,KBD,-,3 +RU,2024-03,GASOLINE,RECEIPTS,KL,-,3 +RU,2024-03,GASOLINE,RECEIPTS,KTONS,-,3 +RU,2024-03,GASOLINE,REFGROUT,CONVBBL,8535.0000,3 +RU,2024-03,GASOLINE,REFGROUT,KBBL,-,3 +RU,2024-03,GASOLINE,REFGROUT,KBD,-,3 +RU,2024-03,GASOLINE,REFGROUT,KL,-,3 +RU,2024-03,GASOLINE,REFGROUT,KTONS,-,3 +RU,2024-03,GASOLINE,STATDIFF,CONVBBL,8534.0000,3 +RU,2024-03,GASOLINE,STATDIFF,KBBL,-,3 +RU,2024-03,GASOLINE,STATDIFF,KBD,-,3 +RU,2024-03,GASOLINE,STATDIFF,KL,-,3 +RU,2024-03,GASOLINE,STATDIFF,KTONS,-,3 +RU,2024-03,GASOLINE,STOCKCH,CONVBBL,8534.0000,3 +RU,2024-03,GASOLINE,STOCKCH,KBBL,-,3 +RU,2024-03,GASOLINE,STOCKCH,KBD,x,3 +RU,2024-03,GASOLINE,STOCKCH,KL,-,3 +RU,2024-03,GASOLINE,STOCKCH,KTONS,-,3 +RU,2024-03,GASOLINE,TOTDEMO,CONVBBL,8534.0000,3 +RU,2024-03,GASOLINE,TOTDEMO,KBBL,-,3 +RU,2024-03,GASOLINE,TOTDEMO,KBD,-,3 +RU,2024-03,GASOLINE,TOTDEMO,KL,-,3 +RU,2024-03,GASOLINE,TOTDEMO,KTONS,-,3 +RU,2024-03,GASOLINE,TOTEXPSB,CONVBBL,8534.0000,3 +RU,2024-03,GASOLINE,TOTEXPSB,KBBL,-,3 +RU,2024-03,GASOLINE,TOTEXPSB,KBD,-,3 +RU,2024-03,GASOLINE,TOTEXPSB,KL,-,3 +RU,2024-03,GASOLINE,TOTEXPSB,KTONS,-,3 +RU,2024-03,GASOLINE,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,GASOLINE,TOTIMPSB,KBBL,-,3 +RU,2024-03,GASOLINE,TOTIMPSB,KBD,-,3 +RU,2024-03,GASOLINE,TOTIMPSB,KL,-,3 +RU,2024-03,GASOLINE,TOTIMPSB,KTONS,-,3 +RU,2024-01,JETKERO,CLOSTLV,CONVBBL,..,3 +RU,2024-01,JETKERO,CLOSTLV,KBBL,-,3 +RU,2024-01,JETKERO,CLOSTLV,KBD,x,3 +RU,2024-01,JETKERO,CLOSTLV,KL,-,3 +RU,2024-01,JETKERO,CLOSTLV,KTONS,-,3 +RU,2024-01,JETKERO,IPTRANSF,CONVBBL,..,3 +RU,2024-01,JETKERO,IPTRANSF,KBBL,-,3 +RU,2024-01,JETKERO,IPTRANSF,KBD,-,3 +RU,2024-01,JETKERO,IPTRANSF,KL,-,3 +RU,2024-01,JETKERO,IPTRANSF,KTONS,-,3 +RU,2024-01,JETKERO,PTRANSF,CONVBBL,..,3 +RU,2024-01,JETKERO,PTRANSF,KBBL,-,3 +RU,2024-01,JETKERO,PTRANSF,KBD,-,3 +RU,2024-01,JETKERO,PTRANSF,KL,-,3 +RU,2024-01,JETKERO,PTRANSF,KTONS,-,3 +RU,2024-01,JETKERO,RECEIPTS,CONVBBL,..,3 +RU,2024-01,JETKERO,RECEIPTS,KBBL,-,3 +RU,2024-01,JETKERO,RECEIPTS,KBD,-,3 +RU,2024-01,JETKERO,RECEIPTS,KL,-,3 +RU,2024-01,JETKERO,RECEIPTS,KTONS,-,3 +RU,2024-01,JETKERO,REFGROUT,CONVBBL,..,3 +RU,2024-01,JETKERO,REFGROUT,KBBL,-,3 +RU,2024-01,JETKERO,REFGROUT,KBD,-,3 +RU,2024-01,JETKERO,REFGROUT,KL,-,3 +RU,2024-01,JETKERO,REFGROUT,KTONS,-,3 +RU,2024-01,JETKERO,STATDIFF,CONVBBL,..,3 +RU,2024-01,JETKERO,STATDIFF,KBBL,-,3 +RU,2024-01,JETKERO,STATDIFF,KBD,-,3 +RU,2024-01,JETKERO,STATDIFF,KL,-,3 +RU,2024-01,JETKERO,STATDIFF,KTONS,-,3 +RU,2024-01,JETKERO,STOCKCH,CONVBBL,..,3 +RU,2024-01,JETKERO,STOCKCH,KBBL,-,3 +RU,2024-01,JETKERO,STOCKCH,KBD,x,3 +RU,2024-01,JETKERO,STOCKCH,KL,-,3 +RU,2024-01,JETKERO,STOCKCH,KTONS,-,3 +RU,2024-01,JETKERO,TOTDEMO,CONVBBL,..,3 +RU,2024-01,JETKERO,TOTDEMO,KBBL,-,3 +RU,2024-01,JETKERO,TOTDEMO,KBD,-,3 +RU,2024-01,JETKERO,TOTDEMO,KL,-,3 +RU,2024-01,JETKERO,TOTDEMO,KTONS,-,3 +RU,2024-01,JETKERO,TOTEXPSB,CONVBBL,7727.0000,3 +RU,2024-01,JETKERO,TOTEXPSB,KBBL,-,3 +RU,2024-01,JETKERO,TOTEXPSB,KBD,-,3 +RU,2024-01,JETKERO,TOTEXPSB,KL,-,3 +RU,2024-01,JETKERO,TOTEXPSB,KTONS,-,3 +RU,2024-01,JETKERO,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,JETKERO,TOTIMPSB,KBBL,-,3 +RU,2024-01,JETKERO,TOTIMPSB,KBD,-,3 +RU,2024-01,JETKERO,TOTIMPSB,KL,-,3 +RU,2024-01,JETKERO,TOTIMPSB,KTONS,-,3 +RU,2024-02,JETKERO,CLOSTLV,CONVBBL,..,3 +RU,2024-02,JETKERO,CLOSTLV,KBBL,-,3 +RU,2024-02,JETKERO,CLOSTLV,KBD,x,3 +RU,2024-02,JETKERO,CLOSTLV,KL,-,3 +RU,2024-02,JETKERO,CLOSTLV,KTONS,-,3 +RU,2024-02,JETKERO,IPTRANSF,CONVBBL,..,3 +RU,2024-02,JETKERO,IPTRANSF,KBBL,-,3 +RU,2024-02,JETKERO,IPTRANSF,KBD,-,3 +RU,2024-02,JETKERO,IPTRANSF,KL,-,3 +RU,2024-02,JETKERO,IPTRANSF,KTONS,-,3 +RU,2024-02,JETKERO,PTRANSF,CONVBBL,..,3 +RU,2024-02,JETKERO,PTRANSF,KBBL,-,3 +RU,2024-02,JETKERO,PTRANSF,KBD,-,3 +RU,2024-02,JETKERO,PTRANSF,KL,-,3 +RU,2024-02,JETKERO,PTRANSF,KTONS,-,3 +RU,2024-02,JETKERO,RECEIPTS,CONVBBL,..,3 +RU,2024-02,JETKERO,RECEIPTS,KBBL,-,3 +RU,2024-02,JETKERO,RECEIPTS,KBD,-,3 +RU,2024-02,JETKERO,RECEIPTS,KL,-,3 +RU,2024-02,JETKERO,RECEIPTS,KTONS,-,3 +RU,2024-02,JETKERO,REFGROUT,CONVBBL,..,3 +RU,2024-02,JETKERO,REFGROUT,KBBL,-,3 +RU,2024-02,JETKERO,REFGROUT,KBD,-,3 +RU,2024-02,JETKERO,REFGROUT,KL,-,3 +RU,2024-02,JETKERO,REFGROUT,KTONS,-,3 +RU,2024-02,JETKERO,STATDIFF,CONVBBL,..,3 +RU,2024-02,JETKERO,STATDIFF,KBBL,-,3 +RU,2024-02,JETKERO,STATDIFF,KBD,-,3 +RU,2024-02,JETKERO,STATDIFF,KL,-,3 +RU,2024-02,JETKERO,STATDIFF,KTONS,-,3 +RU,2024-02,JETKERO,STOCKCH,CONVBBL,..,3 +RU,2024-02,JETKERO,STOCKCH,KBBL,-,3 +RU,2024-02,JETKERO,STOCKCH,KBD,x,3 +RU,2024-02,JETKERO,STOCKCH,KL,-,3 +RU,2024-02,JETKERO,STOCKCH,KTONS,-,3 +RU,2024-02,JETKERO,TOTDEMO,CONVBBL,..,3 +RU,2024-02,JETKERO,TOTDEMO,KBBL,-,3 +RU,2024-02,JETKERO,TOTDEMO,KBD,-,3 +RU,2024-02,JETKERO,TOTDEMO,KL,-,3 +RU,2024-02,JETKERO,TOTDEMO,KTONS,-,3 +RU,2024-02,JETKERO,TOTEXPSB,CONVBBL,7727.0000,3 +RU,2024-02,JETKERO,TOTEXPSB,KBBL,-,3 +RU,2024-02,JETKERO,TOTEXPSB,KBD,-,3 +RU,2024-02,JETKERO,TOTEXPSB,KL,-,3 +RU,2024-02,JETKERO,TOTEXPSB,KTONS,-,3 +RU,2024-02,JETKERO,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,JETKERO,TOTIMPSB,KBBL,-,3 +RU,2024-02,JETKERO,TOTIMPSB,KBD,-,3 +RU,2024-02,JETKERO,TOTIMPSB,KL,-,3 +RU,2024-02,JETKERO,TOTIMPSB,KTONS,-,3 +RU,2024-03,JETKERO,CLOSTLV,CONVBBL,..,3 +RU,2024-03,JETKERO,CLOSTLV,KBBL,-,3 +RU,2024-03,JETKERO,CLOSTLV,KBD,x,3 +RU,2024-03,JETKERO,CLOSTLV,KL,-,3 +RU,2024-03,JETKERO,CLOSTLV,KTONS,-,3 +RU,2024-03,JETKERO,IPTRANSF,CONVBBL,..,3 +RU,2024-03,JETKERO,IPTRANSF,KBBL,-,3 +RU,2024-03,JETKERO,IPTRANSF,KBD,-,3 +RU,2024-03,JETKERO,IPTRANSF,KL,-,3 +RU,2024-03,JETKERO,IPTRANSF,KTONS,-,3 +RU,2024-03,JETKERO,PTRANSF,CONVBBL,..,3 +RU,2024-03,JETKERO,PTRANSF,KBBL,-,3 +RU,2024-03,JETKERO,PTRANSF,KBD,-,3 +RU,2024-03,JETKERO,PTRANSF,KL,-,3 +RU,2024-03,JETKERO,PTRANSF,KTONS,-,3 +RU,2024-03,JETKERO,RECEIPTS,CONVBBL,..,3 +RU,2024-03,JETKERO,RECEIPTS,KBBL,-,3 +RU,2024-03,JETKERO,RECEIPTS,KBD,-,3 +RU,2024-03,JETKERO,RECEIPTS,KL,-,3 +RU,2024-03,JETKERO,RECEIPTS,KTONS,-,3 +RU,2024-03,JETKERO,REFGROUT,CONVBBL,..,3 +RU,2024-03,JETKERO,REFGROUT,KBBL,-,3 +RU,2024-03,JETKERO,REFGROUT,KBD,-,3 +RU,2024-03,JETKERO,REFGROUT,KL,-,3 +RU,2024-03,JETKERO,REFGROUT,KTONS,-,3 +RU,2024-03,JETKERO,STATDIFF,CONVBBL,..,3 +RU,2024-03,JETKERO,STATDIFF,KBBL,-,3 +RU,2024-03,JETKERO,STATDIFF,KBD,-,3 +RU,2024-03,JETKERO,STATDIFF,KL,-,3 +RU,2024-03,JETKERO,STATDIFF,KTONS,-,3 +RU,2024-03,JETKERO,STOCKCH,CONVBBL,..,3 +RU,2024-03,JETKERO,STOCKCH,KBBL,-,3 +RU,2024-03,JETKERO,STOCKCH,KBD,x,3 +RU,2024-03,JETKERO,STOCKCH,KL,-,3 +RU,2024-03,JETKERO,STOCKCH,KTONS,-,3 +RU,2024-03,JETKERO,TOTDEMO,CONVBBL,..,3 +RU,2024-03,JETKERO,TOTDEMO,KBBL,-,3 +RU,2024-03,JETKERO,TOTDEMO,KBD,-,3 +RU,2024-03,JETKERO,TOTDEMO,KL,-,3 +RU,2024-03,JETKERO,TOTDEMO,KTONS,-,3 +RU,2024-03,JETKERO,TOTEXPSB,CONVBBL,7727.0000,3 +RU,2024-03,JETKERO,TOTEXPSB,KBBL,-,3 +RU,2024-03,JETKERO,TOTEXPSB,KBD,-,3 +RU,2024-03,JETKERO,TOTEXPSB,KL,-,3 +RU,2024-03,JETKERO,TOTEXPSB,KTONS,-,3 +RU,2024-03,JETKERO,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,JETKERO,TOTIMPSB,KBBL,-,3 +RU,2024-03,JETKERO,TOTIMPSB,KBD,-,3 +RU,2024-03,JETKERO,TOTIMPSB,KL,-,3 +RU,2024-03,JETKERO,TOTIMPSB,KTONS,-,3 +RU,2024-01,KEROSENE,CLOSTLV,CONVBBL,..,3 +RU,2024-01,KEROSENE,CLOSTLV,KBBL,-,3 +RU,2024-01,KEROSENE,CLOSTLV,KBD,x,3 +RU,2024-01,KEROSENE,CLOSTLV,KL,-,3 +RU,2024-01,KEROSENE,CLOSTLV,KTONS,-,3 +RU,2024-01,KEROSENE,IPTRANSF,CONVBBL,..,3 +RU,2024-01,KEROSENE,IPTRANSF,KBBL,-,3 +RU,2024-01,KEROSENE,IPTRANSF,KBD,-,3 +RU,2024-01,KEROSENE,IPTRANSF,KL,-,3 +RU,2024-01,KEROSENE,IPTRANSF,KTONS,-,3 +RU,2024-01,KEROSENE,PTRANSF,CONVBBL,..,3 +RU,2024-01,KEROSENE,PTRANSF,KBBL,-,3 +RU,2024-01,KEROSENE,PTRANSF,KBD,-,3 +RU,2024-01,KEROSENE,PTRANSF,KL,-,3 +RU,2024-01,KEROSENE,PTRANSF,KTONS,-,3 +RU,2024-01,KEROSENE,RECEIPTS,CONVBBL,..,3 +RU,2024-01,KEROSENE,RECEIPTS,KBBL,-,3 +RU,2024-01,KEROSENE,RECEIPTS,KBD,-,3 +RU,2024-01,KEROSENE,RECEIPTS,KL,-,3 +RU,2024-01,KEROSENE,RECEIPTS,KTONS,-,3 +RU,2024-01,KEROSENE,REFGROUT,CONVBBL,..,3 +RU,2024-01,KEROSENE,REFGROUT,KBBL,-,3 +RU,2024-01,KEROSENE,REFGROUT,KBD,-,3 +RU,2024-01,KEROSENE,REFGROUT,KL,-,3 +RU,2024-01,KEROSENE,REFGROUT,KTONS,-,3 +RU,2024-01,KEROSENE,STATDIFF,CONVBBL,..,3 +RU,2024-01,KEROSENE,STATDIFF,KBBL,-,3 +RU,2024-01,KEROSENE,STATDIFF,KBD,-,3 +RU,2024-01,KEROSENE,STATDIFF,KL,-,3 +RU,2024-01,KEROSENE,STATDIFF,KTONS,-,3 +RU,2024-01,KEROSENE,STOCKCH,CONVBBL,..,3 +RU,2024-01,KEROSENE,STOCKCH,KBBL,-,3 +RU,2024-01,KEROSENE,STOCKCH,KBD,x,3 +RU,2024-01,KEROSENE,STOCKCH,KL,-,3 +RU,2024-01,KEROSENE,STOCKCH,KTONS,-,3 +RU,2024-01,KEROSENE,TOTDEMO,CONVBBL,..,3 +RU,2024-01,KEROSENE,TOTDEMO,KBBL,-,3 +RU,2024-01,KEROSENE,TOTDEMO,KBD,-,3 +RU,2024-01,KEROSENE,TOTDEMO,KL,-,3 +RU,2024-01,KEROSENE,TOTDEMO,KTONS,-,3 +RU,2024-01,KEROSENE,TOTEXPSB,CONVBBL,7727.0000,3 +RU,2024-01,KEROSENE,TOTEXPSB,KBBL,-,3 +RU,2024-01,KEROSENE,TOTEXPSB,KBD,-,3 +RU,2024-01,KEROSENE,TOTEXPSB,KL,-,3 +RU,2024-01,KEROSENE,TOTEXPSB,KTONS,-,3 +RU,2024-01,KEROSENE,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,KEROSENE,TOTIMPSB,KBBL,-,3 +RU,2024-01,KEROSENE,TOTIMPSB,KBD,-,3 +RU,2024-01,KEROSENE,TOTIMPSB,KL,-,3 +RU,2024-01,KEROSENE,TOTIMPSB,KTONS,-,3 +RU,2024-02,KEROSENE,CLOSTLV,CONVBBL,..,3 +RU,2024-02,KEROSENE,CLOSTLV,KBBL,-,3 +RU,2024-02,KEROSENE,CLOSTLV,KBD,x,3 +RU,2024-02,KEROSENE,CLOSTLV,KL,-,3 +RU,2024-02,KEROSENE,CLOSTLV,KTONS,-,3 +RU,2024-02,KEROSENE,IPTRANSF,CONVBBL,..,3 +RU,2024-02,KEROSENE,IPTRANSF,KBBL,-,3 +RU,2024-02,KEROSENE,IPTRANSF,KBD,-,3 +RU,2024-02,KEROSENE,IPTRANSF,KL,-,3 +RU,2024-02,KEROSENE,IPTRANSF,KTONS,-,3 +RU,2024-02,KEROSENE,PTRANSF,CONVBBL,..,3 +RU,2024-02,KEROSENE,PTRANSF,KBBL,-,3 +RU,2024-02,KEROSENE,PTRANSF,KBD,-,3 +RU,2024-02,KEROSENE,PTRANSF,KL,-,3 +RU,2024-02,KEROSENE,PTRANSF,KTONS,-,3 +RU,2024-02,KEROSENE,RECEIPTS,CONVBBL,..,3 +RU,2024-02,KEROSENE,RECEIPTS,KBBL,-,3 +RU,2024-02,KEROSENE,RECEIPTS,KBD,-,3 +RU,2024-02,KEROSENE,RECEIPTS,KL,-,3 +RU,2024-02,KEROSENE,RECEIPTS,KTONS,-,3 +RU,2024-02,KEROSENE,REFGROUT,CONVBBL,..,3 +RU,2024-02,KEROSENE,REFGROUT,KBBL,-,3 +RU,2024-02,KEROSENE,REFGROUT,KBD,-,3 +RU,2024-02,KEROSENE,REFGROUT,KL,-,3 +RU,2024-02,KEROSENE,REFGROUT,KTONS,-,3 +RU,2024-02,KEROSENE,STATDIFF,CONVBBL,..,3 +RU,2024-02,KEROSENE,STATDIFF,KBBL,-,3 +RU,2024-02,KEROSENE,STATDIFF,KBD,-,3 +RU,2024-02,KEROSENE,STATDIFF,KL,-,3 +RU,2024-02,KEROSENE,STATDIFF,KTONS,-,3 +RU,2024-02,KEROSENE,STOCKCH,CONVBBL,..,3 +RU,2024-02,KEROSENE,STOCKCH,KBBL,-,3 +RU,2024-02,KEROSENE,STOCKCH,KBD,x,3 +RU,2024-02,KEROSENE,STOCKCH,KL,-,3 +RU,2024-02,KEROSENE,STOCKCH,KTONS,-,3 +RU,2024-02,KEROSENE,TOTDEMO,CONVBBL,..,3 +RU,2024-02,KEROSENE,TOTDEMO,KBBL,-,3 +RU,2024-02,KEROSENE,TOTDEMO,KBD,-,3 +RU,2024-02,KEROSENE,TOTDEMO,KL,-,3 +RU,2024-02,KEROSENE,TOTDEMO,KTONS,-,3 +RU,2024-02,KEROSENE,TOTEXPSB,CONVBBL,7727.0000,3 +RU,2024-02,KEROSENE,TOTEXPSB,KBBL,-,3 +RU,2024-02,KEROSENE,TOTEXPSB,KBD,-,3 +RU,2024-02,KEROSENE,TOTEXPSB,KL,-,3 +RU,2024-02,KEROSENE,TOTEXPSB,KTONS,-,3 +RU,2024-02,KEROSENE,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,KEROSENE,TOTIMPSB,KBBL,-,3 +RU,2024-02,KEROSENE,TOTIMPSB,KBD,-,3 +RU,2024-02,KEROSENE,TOTIMPSB,KL,-,3 +RU,2024-02,KEROSENE,TOTIMPSB,KTONS,-,3 +RU,2024-03,KEROSENE,CLOSTLV,CONVBBL,..,3 +RU,2024-03,KEROSENE,CLOSTLV,KBBL,-,3 +RU,2024-03,KEROSENE,CLOSTLV,KBD,x,3 +RU,2024-03,KEROSENE,CLOSTLV,KL,-,3 +RU,2024-03,KEROSENE,CLOSTLV,KTONS,-,3 +RU,2024-03,KEROSENE,IPTRANSF,CONVBBL,..,3 +RU,2024-03,KEROSENE,IPTRANSF,KBBL,-,3 +RU,2024-03,KEROSENE,IPTRANSF,KBD,-,3 +RU,2024-03,KEROSENE,IPTRANSF,KL,-,3 +RU,2024-03,KEROSENE,IPTRANSF,KTONS,-,3 +RU,2024-03,KEROSENE,PTRANSF,CONVBBL,..,3 +RU,2024-03,KEROSENE,PTRANSF,KBBL,-,3 +RU,2024-03,KEROSENE,PTRANSF,KBD,-,3 +RU,2024-03,KEROSENE,PTRANSF,KL,-,3 +RU,2024-03,KEROSENE,PTRANSF,KTONS,-,3 +RU,2024-03,KEROSENE,RECEIPTS,CONVBBL,..,3 +RU,2024-03,KEROSENE,RECEIPTS,KBBL,-,3 +RU,2024-03,KEROSENE,RECEIPTS,KBD,-,3 +RU,2024-03,KEROSENE,RECEIPTS,KL,-,3 +RU,2024-03,KEROSENE,RECEIPTS,KTONS,-,3 +RU,2024-03,KEROSENE,REFGROUT,CONVBBL,..,3 +RU,2024-03,KEROSENE,REFGROUT,KBBL,-,3 +RU,2024-03,KEROSENE,REFGROUT,KBD,-,3 +RU,2024-03,KEROSENE,REFGROUT,KL,-,3 +RU,2024-03,KEROSENE,REFGROUT,KTONS,-,3 +RU,2024-03,KEROSENE,STATDIFF,CONVBBL,..,3 +RU,2024-03,KEROSENE,STATDIFF,KBBL,-,3 +RU,2024-03,KEROSENE,STATDIFF,KBD,-,3 +RU,2024-03,KEROSENE,STATDIFF,KL,-,3 +RU,2024-03,KEROSENE,STATDIFF,KTONS,-,3 +RU,2024-03,KEROSENE,STOCKCH,CONVBBL,..,3 +RU,2024-03,KEROSENE,STOCKCH,KBBL,-,3 +RU,2024-03,KEROSENE,STOCKCH,KBD,x,3 +RU,2024-03,KEROSENE,STOCKCH,KL,-,3 +RU,2024-03,KEROSENE,STOCKCH,KTONS,-,3 +RU,2024-03,KEROSENE,TOTDEMO,CONVBBL,..,3 +RU,2024-03,KEROSENE,TOTDEMO,KBBL,-,3 +RU,2024-03,KEROSENE,TOTDEMO,KBD,-,3 +RU,2024-03,KEROSENE,TOTDEMO,KL,-,3 +RU,2024-03,KEROSENE,TOTDEMO,KTONS,-,3 +RU,2024-03,KEROSENE,TOTEXPSB,CONVBBL,7727.0000,3 +RU,2024-03,KEROSENE,TOTEXPSB,KBBL,-,3 +RU,2024-03,KEROSENE,TOTEXPSB,KBD,-,3 +RU,2024-03,KEROSENE,TOTEXPSB,KL,-,3 +RU,2024-03,KEROSENE,TOTEXPSB,KTONS,-,3 +RU,2024-03,KEROSENE,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,KEROSENE,TOTIMPSB,KBBL,-,3 +RU,2024-03,KEROSENE,TOTIMPSB,KBD,-,3 +RU,2024-03,KEROSENE,TOTIMPSB,KL,-,3 +RU,2024-03,KEROSENE,TOTIMPSB,KTONS,-,3 +RU,2024-01,LPG,CLOSTLV,CONVBBL,11436.0000,3 +RU,2024-01,LPG,CLOSTLV,KBBL,-,3 +RU,2024-01,LPG,CLOSTLV,KBD,x,3 +RU,2024-01,LPG,CLOSTLV,KL,-,3 +RU,2024-01,LPG,CLOSTLV,KTONS,-,3 +RU,2024-01,LPG,IPTRANSF,CONVBBL,..,3 +RU,2024-01,LPG,IPTRANSF,KBBL,-,3 +RU,2024-01,LPG,IPTRANSF,KBD,-,3 +RU,2024-01,LPG,IPTRANSF,KL,-,3 +RU,2024-01,LPG,IPTRANSF,KTONS,-,3 +RU,2024-01,LPG,PTRANSF,CONVBBL,..,3 +RU,2024-01,LPG,PTRANSF,KBBL,-,3 +RU,2024-01,LPG,PTRANSF,KBD,-,3 +RU,2024-01,LPG,PTRANSF,KL,-,3 +RU,2024-01,LPG,PTRANSF,KTONS,-,3 +RU,2024-01,LPG,RECEIPTS,CONVBBL,..,3 +RU,2024-01,LPG,RECEIPTS,KBBL,-,3 +RU,2024-01,LPG,RECEIPTS,KBD,-,3 +RU,2024-01,LPG,RECEIPTS,KL,-,3 +RU,2024-01,LPG,RECEIPTS,KTONS,-,3 +RU,2024-01,LPG,REFGROUT,CONVBBL,11436.0000,3 +RU,2024-01,LPG,REFGROUT,KBBL,-,3 +RU,2024-01,LPG,REFGROUT,KBD,-,3 +RU,2024-01,LPG,REFGROUT,KL,-,3 +RU,2024-01,LPG,REFGROUT,KTONS,-,3 +RU,2024-01,LPG,STATDIFF,CONVBBL,11436.0000,3 +RU,2024-01,LPG,STATDIFF,KBBL,-,3 +RU,2024-01,LPG,STATDIFF,KBD,-,3 +RU,2024-01,LPG,STATDIFF,KL,-,3 +RU,2024-01,LPG,STATDIFF,KTONS,-,3 +RU,2024-01,LPG,STOCKCH,CONVBBL,..,3 +RU,2024-01,LPG,STOCKCH,KBBL,-,3 +RU,2024-01,LPG,STOCKCH,KBD,x,3 +RU,2024-01,LPG,STOCKCH,KL,-,3 +RU,2024-01,LPG,STOCKCH,KTONS,-,3 +RU,2024-01,LPG,TOTDEMO,CONVBBL,11436.0000,3 +RU,2024-01,LPG,TOTDEMO,KBBL,-,3 +RU,2024-01,LPG,TOTDEMO,KBD,-,3 +RU,2024-01,LPG,TOTDEMO,KL,-,3 +RU,2024-01,LPG,TOTDEMO,KTONS,-,3 +RU,2024-01,LPG,TOTEXPSB,CONVBBL,11436.0000,3 +RU,2024-01,LPG,TOTEXPSB,KBBL,-,3 +RU,2024-01,LPG,TOTEXPSB,KBD,-,3 +RU,2024-01,LPG,TOTEXPSB,KL,-,3 +RU,2024-01,LPG,TOTEXPSB,KTONS,-,3 +RU,2024-01,LPG,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,LPG,TOTIMPSB,KBBL,-,3 +RU,2024-01,LPG,TOTIMPSB,KBD,-,3 +RU,2024-01,LPG,TOTIMPSB,KL,-,3 +RU,2024-01,LPG,TOTIMPSB,KTONS,-,3 +RU,2024-02,LPG,CLOSTLV,CONVBBL,11436.0000,3 +RU,2024-02,LPG,CLOSTLV,KBBL,-,3 +RU,2024-02,LPG,CLOSTLV,KBD,x,3 +RU,2024-02,LPG,CLOSTLV,KL,-,3 +RU,2024-02,LPG,CLOSTLV,KTONS,-,3 +RU,2024-02,LPG,IPTRANSF,CONVBBL,..,3 +RU,2024-02,LPG,IPTRANSF,KBBL,-,3 +RU,2024-02,LPG,IPTRANSF,KBD,-,3 +RU,2024-02,LPG,IPTRANSF,KL,-,3 +RU,2024-02,LPG,IPTRANSF,KTONS,-,3 +RU,2024-02,LPG,PTRANSF,CONVBBL,..,3 +RU,2024-02,LPG,PTRANSF,KBBL,-,3 +RU,2024-02,LPG,PTRANSF,KBD,-,3 +RU,2024-02,LPG,PTRANSF,KL,-,3 +RU,2024-02,LPG,PTRANSF,KTONS,-,3 +RU,2024-02,LPG,RECEIPTS,CONVBBL,..,3 +RU,2024-02,LPG,RECEIPTS,KBBL,-,3 +RU,2024-02,LPG,RECEIPTS,KBD,-,3 +RU,2024-02,LPG,RECEIPTS,KL,-,3 +RU,2024-02,LPG,RECEIPTS,KTONS,-,3 +RU,2024-02,LPG,REFGROUT,CONVBBL,11436.0000,3 +RU,2024-02,LPG,REFGROUT,KBBL,-,3 +RU,2024-02,LPG,REFGROUT,KBD,-,3 +RU,2024-02,LPG,REFGROUT,KL,-,3 +RU,2024-02,LPG,REFGROUT,KTONS,-,3 +RU,2024-02,LPG,STATDIFF,CONVBBL,11436.0000,3 +RU,2024-02,LPG,STATDIFF,KBBL,-,3 +RU,2024-02,LPG,STATDIFF,KBD,-,3 +RU,2024-02,LPG,STATDIFF,KL,-,3 +RU,2024-02,LPG,STATDIFF,KTONS,-,3 +RU,2024-02,LPG,STOCKCH,CONVBBL,..,3 +RU,2024-02,LPG,STOCKCH,KBBL,-,3 +RU,2024-02,LPG,STOCKCH,KBD,x,3 +RU,2024-02,LPG,STOCKCH,KL,-,3 +RU,2024-02,LPG,STOCKCH,KTONS,-,3 +RU,2024-02,LPG,TOTDEMO,CONVBBL,11436.0000,3 +RU,2024-02,LPG,TOTDEMO,KBBL,-,3 +RU,2024-02,LPG,TOTDEMO,KBD,-,3 +RU,2024-02,LPG,TOTDEMO,KL,-,3 +RU,2024-02,LPG,TOTDEMO,KTONS,-,3 +RU,2024-02,LPG,TOTEXPSB,CONVBBL,11436.0000,3 +RU,2024-02,LPG,TOTEXPSB,KBBL,-,3 +RU,2024-02,LPG,TOTEXPSB,KBD,-,3 +RU,2024-02,LPG,TOTEXPSB,KL,-,3 +RU,2024-02,LPG,TOTEXPSB,KTONS,-,3 +RU,2024-02,LPG,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,LPG,TOTIMPSB,KBBL,-,3 +RU,2024-02,LPG,TOTIMPSB,KBD,-,3 +RU,2024-02,LPG,TOTIMPSB,KL,-,3 +RU,2024-02,LPG,TOTIMPSB,KTONS,-,3 +RU,2024-03,LPG,CLOSTLV,CONVBBL,11436.0000,3 +RU,2024-03,LPG,CLOSTLV,KBBL,-,3 +RU,2024-03,LPG,CLOSTLV,KBD,x,3 +RU,2024-03,LPG,CLOSTLV,KL,-,3 +RU,2024-03,LPG,CLOSTLV,KTONS,-,3 +RU,2024-03,LPG,IPTRANSF,CONVBBL,..,3 +RU,2024-03,LPG,IPTRANSF,KBBL,-,3 +RU,2024-03,LPG,IPTRANSF,KBD,-,3 +RU,2024-03,LPG,IPTRANSF,KL,-,3 +RU,2024-03,LPG,IPTRANSF,KTONS,-,3 +RU,2024-03,LPG,PTRANSF,CONVBBL,..,3 +RU,2024-03,LPG,PTRANSF,KBBL,-,3 +RU,2024-03,LPG,PTRANSF,KBD,-,3 +RU,2024-03,LPG,PTRANSF,KL,-,3 +RU,2024-03,LPG,PTRANSF,KTONS,-,3 +RU,2024-03,LPG,RECEIPTS,CONVBBL,..,3 +RU,2024-03,LPG,RECEIPTS,KBBL,-,3 +RU,2024-03,LPG,RECEIPTS,KBD,-,3 +RU,2024-03,LPG,RECEIPTS,KL,-,3 +RU,2024-03,LPG,RECEIPTS,KTONS,-,3 +RU,2024-03,LPG,REFGROUT,CONVBBL,11436.0000,3 +RU,2024-03,LPG,REFGROUT,KBBL,-,3 +RU,2024-03,LPG,REFGROUT,KBD,-,3 +RU,2024-03,LPG,REFGROUT,KL,-,3 +RU,2024-03,LPG,REFGROUT,KTONS,-,3 +RU,2024-03,LPG,STATDIFF,CONVBBL,11436.0000,3 +RU,2024-03,LPG,STATDIFF,KBBL,-,3 +RU,2024-03,LPG,STATDIFF,KBD,-,3 +RU,2024-03,LPG,STATDIFF,KL,-,3 +RU,2024-03,LPG,STATDIFF,KTONS,-,3 +RU,2024-03,LPG,STOCKCH,CONVBBL,..,3 +RU,2024-03,LPG,STOCKCH,KBBL,-,3 +RU,2024-03,LPG,STOCKCH,KBD,x,3 +RU,2024-03,LPG,STOCKCH,KL,-,3 +RU,2024-03,LPG,STOCKCH,KTONS,-,3 +RU,2024-03,LPG,TOTDEMO,CONVBBL,11436.0000,3 +RU,2024-03,LPG,TOTDEMO,KBBL,-,3 +RU,2024-03,LPG,TOTDEMO,KBD,-,3 +RU,2024-03,LPG,TOTDEMO,KL,-,3 +RU,2024-03,LPG,TOTDEMO,KTONS,-,3 +RU,2024-03,LPG,TOTEXPSB,CONVBBL,11436.0000,3 +RU,2024-03,LPG,TOTEXPSB,KBBL,-,3 +RU,2024-03,LPG,TOTEXPSB,KBD,-,3 +RU,2024-03,LPG,TOTEXPSB,KL,-,3 +RU,2024-03,LPG,TOTEXPSB,KTONS,-,3 +RU,2024-03,LPG,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,LPG,TOTIMPSB,KBBL,-,3 +RU,2024-03,LPG,TOTIMPSB,KBD,-,3 +RU,2024-03,LPG,TOTIMPSB,KL,-,3 +RU,2024-03,LPG,TOTIMPSB,KTONS,-,3 +RU,2024-01,NAPHTHA,CLOSTLV,CONVBBL,..,3 +RU,2024-01,NAPHTHA,CLOSTLV,KBBL,-,3 +RU,2024-01,NAPHTHA,CLOSTLV,KBD,x,3 +RU,2024-01,NAPHTHA,CLOSTLV,KL,-,3 +RU,2024-01,NAPHTHA,CLOSTLV,KTONS,-,3 +RU,2024-01,NAPHTHA,IPTRANSF,CONVBBL,..,3 +RU,2024-01,NAPHTHA,IPTRANSF,KBBL,-,3 +RU,2024-01,NAPHTHA,IPTRANSF,KBD,-,3 +RU,2024-01,NAPHTHA,IPTRANSF,KL,-,3 +RU,2024-01,NAPHTHA,IPTRANSF,KTONS,-,3 +RU,2024-01,NAPHTHA,PTRANSF,CONVBBL,..,3 +RU,2024-01,NAPHTHA,PTRANSF,KBBL,-,3 +RU,2024-01,NAPHTHA,PTRANSF,KBD,-,3 +RU,2024-01,NAPHTHA,PTRANSF,KL,-,3 +RU,2024-01,NAPHTHA,PTRANSF,KTONS,-,3 +RU,2024-01,NAPHTHA,RECEIPTS,CONVBBL,..,3 +RU,2024-01,NAPHTHA,RECEIPTS,KBBL,-,3 +RU,2024-01,NAPHTHA,RECEIPTS,KBD,-,3 +RU,2024-01,NAPHTHA,RECEIPTS,KL,-,3 +RU,2024-01,NAPHTHA,RECEIPTS,KTONS,-,3 +RU,2024-01,NAPHTHA,REFGROUT,CONVBBL,0.0000,3 +RU,2024-01,NAPHTHA,REFGROUT,KBBL,-,3 +RU,2024-01,NAPHTHA,REFGROUT,KBD,-,3 +RU,2024-01,NAPHTHA,REFGROUT,KL,-,3 +RU,2024-01,NAPHTHA,REFGROUT,KTONS,-,3 +RU,2024-01,NAPHTHA,STATDIFF,CONVBBL,0.0000,3 +RU,2024-01,NAPHTHA,STATDIFF,KBBL,-,3 +RU,2024-01,NAPHTHA,STATDIFF,KBD,-,3 +RU,2024-01,NAPHTHA,STATDIFF,KL,-,3 +RU,2024-01,NAPHTHA,STATDIFF,KTONS,-,3 +RU,2024-01,NAPHTHA,STOCKCH,CONVBBL,..,3 +RU,2024-01,NAPHTHA,STOCKCH,KBBL,-,3 +RU,2024-01,NAPHTHA,STOCKCH,KBD,x,3 +RU,2024-01,NAPHTHA,STOCKCH,KL,-,3 +RU,2024-01,NAPHTHA,STOCKCH,KTONS,-,3 +RU,2024-01,NAPHTHA,TOTDEMO,CONVBBL,..,3 +RU,2024-01,NAPHTHA,TOTDEMO,KBBL,-,3 +RU,2024-01,NAPHTHA,TOTDEMO,KBD,-,3 +RU,2024-01,NAPHTHA,TOTDEMO,KL,-,3 +RU,2024-01,NAPHTHA,TOTDEMO,KTONS,-,3 +RU,2024-01,NAPHTHA,TOTEXPSB,CONVBBL,0.0000,3 +RU,2024-01,NAPHTHA,TOTEXPSB,KBBL,-,3 +RU,2024-01,NAPHTHA,TOTEXPSB,KBD,-,3 +RU,2024-01,NAPHTHA,TOTEXPSB,KL,-,3 +RU,2024-01,NAPHTHA,TOTEXPSB,KTONS,-,3 +RU,2024-01,NAPHTHA,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,NAPHTHA,TOTIMPSB,KBBL,-,3 +RU,2024-01,NAPHTHA,TOTIMPSB,KBD,-,3 +RU,2024-01,NAPHTHA,TOTIMPSB,KL,-,3 +RU,2024-01,NAPHTHA,TOTIMPSB,KTONS,-,3 +RU,2024-02,NAPHTHA,CLOSTLV,CONVBBL,..,3 +RU,2024-02,NAPHTHA,CLOSTLV,KBBL,-,3 +RU,2024-02,NAPHTHA,CLOSTLV,KBD,x,3 +RU,2024-02,NAPHTHA,CLOSTLV,KL,-,3 +RU,2024-02,NAPHTHA,CLOSTLV,KTONS,-,3 +RU,2024-02,NAPHTHA,IPTRANSF,CONVBBL,..,3 +RU,2024-02,NAPHTHA,IPTRANSF,KBBL,-,3 +RU,2024-02,NAPHTHA,IPTRANSF,KBD,-,3 +RU,2024-02,NAPHTHA,IPTRANSF,KL,-,3 +RU,2024-02,NAPHTHA,IPTRANSF,KTONS,-,3 +RU,2024-02,NAPHTHA,PTRANSF,CONVBBL,..,3 +RU,2024-02,NAPHTHA,PTRANSF,KBBL,-,3 +RU,2024-02,NAPHTHA,PTRANSF,KBD,-,3 +RU,2024-02,NAPHTHA,PTRANSF,KL,-,3 +RU,2024-02,NAPHTHA,PTRANSF,KTONS,-,3 +RU,2024-02,NAPHTHA,RECEIPTS,CONVBBL,..,3 +RU,2024-02,NAPHTHA,RECEIPTS,KBBL,-,3 +RU,2024-02,NAPHTHA,RECEIPTS,KBD,-,3 +RU,2024-02,NAPHTHA,RECEIPTS,KL,-,3 +RU,2024-02,NAPHTHA,RECEIPTS,KTONS,-,3 +RU,2024-02,NAPHTHA,REFGROUT,CONVBBL,0.0000,3 +RU,2024-02,NAPHTHA,REFGROUT,KBBL,-,3 +RU,2024-02,NAPHTHA,REFGROUT,KBD,-,3 +RU,2024-02,NAPHTHA,REFGROUT,KL,-,3 +RU,2024-02,NAPHTHA,REFGROUT,KTONS,-,3 +RU,2024-02,NAPHTHA,STATDIFF,CONVBBL,0.0000,3 +RU,2024-02,NAPHTHA,STATDIFF,KBBL,-,3 +RU,2024-02,NAPHTHA,STATDIFF,KBD,-,3 +RU,2024-02,NAPHTHA,STATDIFF,KL,-,3 +RU,2024-02,NAPHTHA,STATDIFF,KTONS,-,3 +RU,2024-02,NAPHTHA,STOCKCH,CONVBBL,..,3 +RU,2024-02,NAPHTHA,STOCKCH,KBBL,-,3 +RU,2024-02,NAPHTHA,STOCKCH,KBD,x,3 +RU,2024-02,NAPHTHA,STOCKCH,KL,-,3 +RU,2024-02,NAPHTHA,STOCKCH,KTONS,-,3 +RU,2024-02,NAPHTHA,TOTDEMO,CONVBBL,..,3 +RU,2024-02,NAPHTHA,TOTDEMO,KBBL,-,3 +RU,2024-02,NAPHTHA,TOTDEMO,KBD,-,3 +RU,2024-02,NAPHTHA,TOTDEMO,KL,-,3 +RU,2024-02,NAPHTHA,TOTDEMO,KTONS,-,3 +RU,2024-02,NAPHTHA,TOTEXPSB,CONVBBL,0.0000,3 +RU,2024-02,NAPHTHA,TOTEXPSB,KBBL,-,3 +RU,2024-02,NAPHTHA,TOTEXPSB,KBD,-,3 +RU,2024-02,NAPHTHA,TOTEXPSB,KL,-,3 +RU,2024-02,NAPHTHA,TOTEXPSB,KTONS,-,3 +RU,2024-02,NAPHTHA,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,NAPHTHA,TOTIMPSB,KBBL,-,3 +RU,2024-02,NAPHTHA,TOTIMPSB,KBD,-,3 +RU,2024-02,NAPHTHA,TOTIMPSB,KL,-,3 +RU,2024-02,NAPHTHA,TOTIMPSB,KTONS,-,3 +RU,2024-03,NAPHTHA,CLOSTLV,CONVBBL,..,3 +RU,2024-03,NAPHTHA,CLOSTLV,KBBL,-,3 +RU,2024-03,NAPHTHA,CLOSTLV,KBD,x,3 +RU,2024-03,NAPHTHA,CLOSTLV,KL,-,3 +RU,2024-03,NAPHTHA,CLOSTLV,KTONS,-,3 +RU,2024-03,NAPHTHA,IPTRANSF,CONVBBL,..,3 +RU,2024-03,NAPHTHA,IPTRANSF,KBBL,-,3 +RU,2024-03,NAPHTHA,IPTRANSF,KBD,-,3 +RU,2024-03,NAPHTHA,IPTRANSF,KL,-,3 +RU,2024-03,NAPHTHA,IPTRANSF,KTONS,-,3 +RU,2024-03,NAPHTHA,PTRANSF,CONVBBL,..,3 +RU,2024-03,NAPHTHA,PTRANSF,KBBL,-,3 +RU,2024-03,NAPHTHA,PTRANSF,KBD,-,3 +RU,2024-03,NAPHTHA,PTRANSF,KL,-,3 +RU,2024-03,NAPHTHA,PTRANSF,KTONS,-,3 +RU,2024-03,NAPHTHA,RECEIPTS,CONVBBL,..,3 +RU,2024-03,NAPHTHA,RECEIPTS,KBBL,-,3 +RU,2024-03,NAPHTHA,RECEIPTS,KBD,-,3 +RU,2024-03,NAPHTHA,RECEIPTS,KL,-,3 +RU,2024-03,NAPHTHA,RECEIPTS,KTONS,-,3 +RU,2024-03,NAPHTHA,REFGROUT,CONVBBL,0.0000,3 +RU,2024-03,NAPHTHA,REFGROUT,KBBL,-,3 +RU,2024-03,NAPHTHA,REFGROUT,KBD,-,3 +RU,2024-03,NAPHTHA,REFGROUT,KL,-,3 +RU,2024-03,NAPHTHA,REFGROUT,KTONS,-,3 +RU,2024-03,NAPHTHA,STATDIFF,CONVBBL,0.0000,3 +RU,2024-03,NAPHTHA,STATDIFF,KBBL,-,3 +RU,2024-03,NAPHTHA,STATDIFF,KBD,-,3 +RU,2024-03,NAPHTHA,STATDIFF,KL,-,3 +RU,2024-03,NAPHTHA,STATDIFF,KTONS,-,3 +RU,2024-03,NAPHTHA,STOCKCH,CONVBBL,..,3 +RU,2024-03,NAPHTHA,STOCKCH,KBBL,-,3 +RU,2024-03,NAPHTHA,STOCKCH,KBD,x,3 +RU,2024-03,NAPHTHA,STOCKCH,KL,-,3 +RU,2024-03,NAPHTHA,STOCKCH,KTONS,-,3 +RU,2024-03,NAPHTHA,TOTDEMO,CONVBBL,..,3 +RU,2024-03,NAPHTHA,TOTDEMO,KBBL,-,3 +RU,2024-03,NAPHTHA,TOTDEMO,KBD,-,3 +RU,2024-03,NAPHTHA,TOTDEMO,KL,-,3 +RU,2024-03,NAPHTHA,TOTDEMO,KTONS,-,3 +RU,2024-03,NAPHTHA,TOTEXPSB,CONVBBL,0.0000,3 +RU,2024-03,NAPHTHA,TOTEXPSB,KBBL,-,3 +RU,2024-03,NAPHTHA,TOTEXPSB,KBD,-,3 +RU,2024-03,NAPHTHA,TOTEXPSB,KL,-,3 +RU,2024-03,NAPHTHA,TOTEXPSB,KTONS,-,3 +RU,2024-03,NAPHTHA,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,NAPHTHA,TOTIMPSB,KBBL,-,3 +RU,2024-03,NAPHTHA,TOTIMPSB,KBD,-,3 +RU,2024-03,NAPHTHA,TOTIMPSB,KL,-,3 +RU,2024-03,NAPHTHA,TOTIMPSB,KTONS,-,3 +RU,2024-01,ONONSPEC,CLOSTLV,CONVBBL,..,3 +RU,2024-01,ONONSPEC,CLOSTLV,KBBL,-,3 +RU,2024-01,ONONSPEC,CLOSTLV,KBD,x,3 +RU,2024-01,ONONSPEC,CLOSTLV,KL,-,3 +RU,2024-01,ONONSPEC,CLOSTLV,KTONS,-,3 +RU,2024-01,ONONSPEC,IPTRANSF,CONVBBL,..,3 +RU,2024-01,ONONSPEC,IPTRANSF,KBBL,-,3 +RU,2024-01,ONONSPEC,IPTRANSF,KBD,-,3 +RU,2024-01,ONONSPEC,IPTRANSF,KL,-,3 +RU,2024-01,ONONSPEC,IPTRANSF,KTONS,-,3 +RU,2024-01,ONONSPEC,PTRANSF,CONVBBL,..,3 +RU,2024-01,ONONSPEC,PTRANSF,KBBL,-,3 +RU,2024-01,ONONSPEC,PTRANSF,KBD,-,3 +RU,2024-01,ONONSPEC,PTRANSF,KL,-,3 +RU,2024-01,ONONSPEC,PTRANSF,KTONS,-,3 +RU,2024-01,ONONSPEC,RECEIPTS,CONVBBL,..,3 +RU,2024-01,ONONSPEC,RECEIPTS,KBBL,-,3 +RU,2024-01,ONONSPEC,RECEIPTS,KBD,-,3 +RU,2024-01,ONONSPEC,RECEIPTS,KL,-,3 +RU,2024-01,ONONSPEC,RECEIPTS,KTONS,-,3 +RU,2024-01,ONONSPEC,REFGROUT,CONVBBL,8734.0000,3 +RU,2024-01,ONONSPEC,REFGROUT,KBBL,-,3 +RU,2024-01,ONONSPEC,REFGROUT,KBD,-,3 +RU,2024-01,ONONSPEC,REFGROUT,KL,-,3 +RU,2024-01,ONONSPEC,REFGROUT,KTONS,-,3 +RU,2024-01,ONONSPEC,STATDIFF,CONVBBL,8733.0000,3 +RU,2024-01,ONONSPEC,STATDIFF,KBBL,-,3 +RU,2024-01,ONONSPEC,STATDIFF,KBD,-,3 +RU,2024-01,ONONSPEC,STATDIFF,KL,-,3 +RU,2024-01,ONONSPEC,STATDIFF,KTONS,-,3 +RU,2024-01,ONONSPEC,STOCKCH,CONVBBL,..,3 +RU,2024-01,ONONSPEC,STOCKCH,KBBL,-,3 +RU,2024-01,ONONSPEC,STOCKCH,KBD,x,3 +RU,2024-01,ONONSPEC,STOCKCH,KL,-,3 +RU,2024-01,ONONSPEC,STOCKCH,KTONS,-,3 +RU,2024-01,ONONSPEC,TOTDEMO,CONVBBL,..,3 +RU,2024-01,ONONSPEC,TOTDEMO,KBBL,-,3 +RU,2024-01,ONONSPEC,TOTDEMO,KBD,-,3 +RU,2024-01,ONONSPEC,TOTDEMO,KL,-,3 +RU,2024-01,ONONSPEC,TOTDEMO,KTONS,-,3 +RU,2024-01,ONONSPEC,TOTEXPSB,CONVBBL,..,3 +RU,2024-01,ONONSPEC,TOTEXPSB,KBBL,-,3 +RU,2024-01,ONONSPEC,TOTEXPSB,KBD,-,3 +RU,2024-01,ONONSPEC,TOTEXPSB,KL,-,3 +RU,2024-01,ONONSPEC,TOTEXPSB,KTONS,-,3 +RU,2024-01,ONONSPEC,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,ONONSPEC,TOTIMPSB,KBBL,-,3 +RU,2024-01,ONONSPEC,TOTIMPSB,KBD,-,3 +RU,2024-01,ONONSPEC,TOTIMPSB,KL,-,3 +RU,2024-01,ONONSPEC,TOTIMPSB,KTONS,-,3 +RU,2024-02,ONONSPEC,CLOSTLV,CONVBBL,..,3 +RU,2024-02,ONONSPEC,CLOSTLV,KBBL,-,3 +RU,2024-02,ONONSPEC,CLOSTLV,KBD,x,3 +RU,2024-02,ONONSPEC,CLOSTLV,KL,-,3 +RU,2024-02,ONONSPEC,CLOSTLV,KTONS,-,3 +RU,2024-02,ONONSPEC,IPTRANSF,CONVBBL,..,3 +RU,2024-02,ONONSPEC,IPTRANSF,KBBL,-,3 +RU,2024-02,ONONSPEC,IPTRANSF,KBD,-,3 +RU,2024-02,ONONSPEC,IPTRANSF,KL,-,3 +RU,2024-02,ONONSPEC,IPTRANSF,KTONS,-,3 +RU,2024-02,ONONSPEC,PTRANSF,CONVBBL,..,3 +RU,2024-02,ONONSPEC,PTRANSF,KBBL,-,3 +RU,2024-02,ONONSPEC,PTRANSF,KBD,-,3 +RU,2024-02,ONONSPEC,PTRANSF,KL,-,3 +RU,2024-02,ONONSPEC,PTRANSF,KTONS,-,3 +RU,2024-02,ONONSPEC,RECEIPTS,CONVBBL,..,3 +RU,2024-02,ONONSPEC,RECEIPTS,KBBL,-,3 +RU,2024-02,ONONSPEC,RECEIPTS,KBD,-,3 +RU,2024-02,ONONSPEC,RECEIPTS,KL,-,3 +RU,2024-02,ONONSPEC,RECEIPTS,KTONS,-,3 +RU,2024-02,ONONSPEC,REFGROUT,CONVBBL,8734.0000,3 +RU,2024-02,ONONSPEC,REFGROUT,KBBL,-,3 +RU,2024-02,ONONSPEC,REFGROUT,KBD,-,3 +RU,2024-02,ONONSPEC,REFGROUT,KL,-,3 +RU,2024-02,ONONSPEC,REFGROUT,KTONS,-,3 +RU,2024-02,ONONSPEC,STATDIFF,CONVBBL,8733.0000,3 +RU,2024-02,ONONSPEC,STATDIFF,KBBL,-,3 +RU,2024-02,ONONSPEC,STATDIFF,KBD,-,3 +RU,2024-02,ONONSPEC,STATDIFF,KL,-,3 +RU,2024-02,ONONSPEC,STATDIFF,KTONS,-,3 +RU,2024-02,ONONSPEC,STOCKCH,CONVBBL,..,3 +RU,2024-02,ONONSPEC,STOCKCH,KBBL,-,3 +RU,2024-02,ONONSPEC,STOCKCH,KBD,x,3 +RU,2024-02,ONONSPEC,STOCKCH,KL,-,3 +RU,2024-02,ONONSPEC,STOCKCH,KTONS,-,3 +RU,2024-02,ONONSPEC,TOTDEMO,CONVBBL,..,3 +RU,2024-02,ONONSPEC,TOTDEMO,KBBL,-,3 +RU,2024-02,ONONSPEC,TOTDEMO,KBD,-,3 +RU,2024-02,ONONSPEC,TOTDEMO,KL,-,3 +RU,2024-02,ONONSPEC,TOTDEMO,KTONS,-,3 +RU,2024-02,ONONSPEC,TOTEXPSB,CONVBBL,..,3 +RU,2024-02,ONONSPEC,TOTEXPSB,KBBL,-,3 +RU,2024-02,ONONSPEC,TOTEXPSB,KBD,-,3 +RU,2024-02,ONONSPEC,TOTEXPSB,KL,-,3 +RU,2024-02,ONONSPEC,TOTEXPSB,KTONS,-,3 +RU,2024-02,ONONSPEC,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,ONONSPEC,TOTIMPSB,KBBL,-,3 +RU,2024-02,ONONSPEC,TOTIMPSB,KBD,-,3 +RU,2024-02,ONONSPEC,TOTIMPSB,KL,-,3 +RU,2024-02,ONONSPEC,TOTIMPSB,KTONS,-,3 +RU,2024-03,ONONSPEC,CLOSTLV,CONVBBL,..,3 +RU,2024-03,ONONSPEC,CLOSTLV,KBBL,-,3 +RU,2024-03,ONONSPEC,CLOSTLV,KBD,x,3 +RU,2024-03,ONONSPEC,CLOSTLV,KL,-,3 +RU,2024-03,ONONSPEC,CLOSTLV,KTONS,-,3 +RU,2024-03,ONONSPEC,IPTRANSF,CONVBBL,..,3 +RU,2024-03,ONONSPEC,IPTRANSF,KBBL,-,3 +RU,2024-03,ONONSPEC,IPTRANSF,KBD,-,3 +RU,2024-03,ONONSPEC,IPTRANSF,KL,-,3 +RU,2024-03,ONONSPEC,IPTRANSF,KTONS,-,3 +RU,2024-03,ONONSPEC,PTRANSF,CONVBBL,..,3 +RU,2024-03,ONONSPEC,PTRANSF,KBBL,-,3 +RU,2024-03,ONONSPEC,PTRANSF,KBD,-,3 +RU,2024-03,ONONSPEC,PTRANSF,KL,-,3 +RU,2024-03,ONONSPEC,PTRANSF,KTONS,-,3 +RU,2024-03,ONONSPEC,RECEIPTS,CONVBBL,..,3 +RU,2024-03,ONONSPEC,RECEIPTS,KBBL,-,3 +RU,2024-03,ONONSPEC,RECEIPTS,KBD,-,3 +RU,2024-03,ONONSPEC,RECEIPTS,KL,-,3 +RU,2024-03,ONONSPEC,RECEIPTS,KTONS,-,3 +RU,2024-03,ONONSPEC,REFGROUT,CONVBBL,8734.0000,3 +RU,2024-03,ONONSPEC,REFGROUT,KBBL,-,3 +RU,2024-03,ONONSPEC,REFGROUT,KBD,-,3 +RU,2024-03,ONONSPEC,REFGROUT,KL,-,3 +RU,2024-03,ONONSPEC,REFGROUT,KTONS,-,3 +RU,2024-03,ONONSPEC,STATDIFF,CONVBBL,8733.0000,3 +RU,2024-03,ONONSPEC,STATDIFF,KBBL,-,3 +RU,2024-03,ONONSPEC,STATDIFF,KBD,-,3 +RU,2024-03,ONONSPEC,STATDIFF,KL,-,3 +RU,2024-03,ONONSPEC,STATDIFF,KTONS,-,3 +RU,2024-03,ONONSPEC,STOCKCH,CONVBBL,..,3 +RU,2024-03,ONONSPEC,STOCKCH,KBBL,-,3 +RU,2024-03,ONONSPEC,STOCKCH,KBD,x,3 +RU,2024-03,ONONSPEC,STOCKCH,KL,-,3 +RU,2024-03,ONONSPEC,STOCKCH,KTONS,-,3 +RU,2024-03,ONONSPEC,TOTDEMO,CONVBBL,..,3 +RU,2024-03,ONONSPEC,TOTDEMO,KBBL,-,3 +RU,2024-03,ONONSPEC,TOTDEMO,KBD,-,3 +RU,2024-03,ONONSPEC,TOTDEMO,KL,-,3 +RU,2024-03,ONONSPEC,TOTDEMO,KTONS,-,3 +RU,2024-03,ONONSPEC,TOTEXPSB,CONVBBL,..,3 +RU,2024-03,ONONSPEC,TOTEXPSB,KBBL,-,3 +RU,2024-03,ONONSPEC,TOTEXPSB,KBD,-,3 +RU,2024-03,ONONSPEC,TOTEXPSB,KL,-,3 +RU,2024-03,ONONSPEC,TOTEXPSB,KTONS,-,3 +RU,2024-03,ONONSPEC,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,ONONSPEC,TOTIMPSB,KBBL,-,3 +RU,2024-03,ONONSPEC,TOTIMPSB,KBD,-,3 +RU,2024-03,ONONSPEC,TOTIMPSB,KL,-,3 +RU,2024-03,ONONSPEC,TOTIMPSB,KTONS,-,3 +RU,2024-01,RESFUEL,CLOSTLV,CONVBBL,6989.0000,3 +RU,2024-01,RESFUEL,CLOSTLV,KBBL,-,3 +RU,2024-01,RESFUEL,CLOSTLV,KBD,x,3 +RU,2024-01,RESFUEL,CLOSTLV,KL,-,3 +RU,2024-01,RESFUEL,CLOSTLV,KTONS,-,3 +RU,2024-01,RESFUEL,IPTRANSF,CONVBBL,..,3 +RU,2024-01,RESFUEL,IPTRANSF,KBBL,-,3 +RU,2024-01,RESFUEL,IPTRANSF,KBD,-,3 +RU,2024-01,RESFUEL,IPTRANSF,KL,-,3 +RU,2024-01,RESFUEL,IPTRANSF,KTONS,-,3 +RU,2024-01,RESFUEL,PTRANSF,CONVBBL,..,3 +RU,2024-01,RESFUEL,PTRANSF,KBBL,-,3 +RU,2024-01,RESFUEL,PTRANSF,KBD,-,3 +RU,2024-01,RESFUEL,PTRANSF,KL,-,3 +RU,2024-01,RESFUEL,PTRANSF,KTONS,-,3 +RU,2024-01,RESFUEL,RECEIPTS,CONVBBL,..,3 +RU,2024-01,RESFUEL,RECEIPTS,KBBL,-,3 +RU,2024-01,RESFUEL,RECEIPTS,KBD,-,3 +RU,2024-01,RESFUEL,RECEIPTS,KL,-,3 +RU,2024-01,RESFUEL,RECEIPTS,KTONS,-,3 +RU,2024-01,RESFUEL,REFGROUT,CONVBBL,6988.0000,3 +RU,2024-01,RESFUEL,REFGROUT,KBBL,-,3 +RU,2024-01,RESFUEL,REFGROUT,KBD,-,3 +RU,2024-01,RESFUEL,REFGROUT,KL,-,3 +RU,2024-01,RESFUEL,REFGROUT,KTONS,-,3 +RU,2024-01,RESFUEL,STATDIFF,CONVBBL,6989.0000,3 +RU,2024-01,RESFUEL,STATDIFF,KBBL,-,3 +RU,2024-01,RESFUEL,STATDIFF,KBD,-,3 +RU,2024-01,RESFUEL,STATDIFF,KL,-,3 +RU,2024-01,RESFUEL,STATDIFF,KTONS,-,3 +RU,2024-01,RESFUEL,STOCKCH,CONVBBL,6989.0000,3 +RU,2024-01,RESFUEL,STOCKCH,KBBL,-,3 +RU,2024-01,RESFUEL,STOCKCH,KBD,x,3 +RU,2024-01,RESFUEL,STOCKCH,KL,-,3 +RU,2024-01,RESFUEL,STOCKCH,KTONS,-,3 +RU,2024-01,RESFUEL,TOTDEMO,CONVBBL,6989.0000,3 +RU,2024-01,RESFUEL,TOTDEMO,KBBL,-,3 +RU,2024-01,RESFUEL,TOTDEMO,KBD,-,3 +RU,2024-01,RESFUEL,TOTDEMO,KL,-,3 +RU,2024-01,RESFUEL,TOTDEMO,KTONS,-,3 +RU,2024-01,RESFUEL,TOTEXPSB,CONVBBL,6989.0000,3 +RU,2024-01,RESFUEL,TOTEXPSB,KBBL,-,3 +RU,2024-01,RESFUEL,TOTEXPSB,KBD,-,3 +RU,2024-01,RESFUEL,TOTEXPSB,KL,-,3 +RU,2024-01,RESFUEL,TOTEXPSB,KTONS,-,3 +RU,2024-01,RESFUEL,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,RESFUEL,TOTIMPSB,KBBL,-,3 +RU,2024-01,RESFUEL,TOTIMPSB,KBD,-,3 +RU,2024-01,RESFUEL,TOTIMPSB,KL,-,3 +RU,2024-01,RESFUEL,TOTIMPSB,KTONS,-,3 +RU,2024-02,RESFUEL,CLOSTLV,CONVBBL,6989.0000,3 +RU,2024-02,RESFUEL,CLOSTLV,KBBL,-,3 +RU,2024-02,RESFUEL,CLOSTLV,KBD,x,3 +RU,2024-02,RESFUEL,CLOSTLV,KL,-,3 +RU,2024-02,RESFUEL,CLOSTLV,KTONS,-,3 +RU,2024-02,RESFUEL,IPTRANSF,CONVBBL,..,3 +RU,2024-02,RESFUEL,IPTRANSF,KBBL,-,3 +RU,2024-02,RESFUEL,IPTRANSF,KBD,-,3 +RU,2024-02,RESFUEL,IPTRANSF,KL,-,3 +RU,2024-02,RESFUEL,IPTRANSF,KTONS,-,3 +RU,2024-02,RESFUEL,PTRANSF,CONVBBL,..,3 +RU,2024-02,RESFUEL,PTRANSF,KBBL,-,3 +RU,2024-02,RESFUEL,PTRANSF,KBD,-,3 +RU,2024-02,RESFUEL,PTRANSF,KL,-,3 +RU,2024-02,RESFUEL,PTRANSF,KTONS,-,3 +RU,2024-02,RESFUEL,RECEIPTS,CONVBBL,..,3 +RU,2024-02,RESFUEL,RECEIPTS,KBBL,-,3 +RU,2024-02,RESFUEL,RECEIPTS,KBD,-,3 +RU,2024-02,RESFUEL,RECEIPTS,KL,-,3 +RU,2024-02,RESFUEL,RECEIPTS,KTONS,-,3 +RU,2024-02,RESFUEL,REFGROUT,CONVBBL,6988.0000,3 +RU,2024-02,RESFUEL,REFGROUT,KBBL,-,3 +RU,2024-02,RESFUEL,REFGROUT,KBD,-,3 +RU,2024-02,RESFUEL,REFGROUT,KL,-,3 +RU,2024-02,RESFUEL,REFGROUT,KTONS,-,3 +RU,2024-02,RESFUEL,STATDIFF,CONVBBL,6989.0000,3 +RU,2024-02,RESFUEL,STATDIFF,KBBL,-,3 +RU,2024-02,RESFUEL,STATDIFF,KBD,-,3 +RU,2024-02,RESFUEL,STATDIFF,KL,-,3 +RU,2024-02,RESFUEL,STATDIFF,KTONS,-,3 +RU,2024-02,RESFUEL,STOCKCH,CONVBBL,6989.0000,3 +RU,2024-02,RESFUEL,STOCKCH,KBBL,-,3 +RU,2024-02,RESFUEL,STOCKCH,KBD,x,3 +RU,2024-02,RESFUEL,STOCKCH,KL,-,3 +RU,2024-02,RESFUEL,STOCKCH,KTONS,-,3 +RU,2024-02,RESFUEL,TOTDEMO,CONVBBL,6989.0000,3 +RU,2024-02,RESFUEL,TOTDEMO,KBBL,-,3 +RU,2024-02,RESFUEL,TOTDEMO,KBD,-,3 +RU,2024-02,RESFUEL,TOTDEMO,KL,-,3 +RU,2024-02,RESFUEL,TOTDEMO,KTONS,-,3 +RU,2024-02,RESFUEL,TOTEXPSB,CONVBBL,6989.0000,3 +RU,2024-02,RESFUEL,TOTEXPSB,KBBL,-,3 +RU,2024-02,RESFUEL,TOTEXPSB,KBD,-,3 +RU,2024-02,RESFUEL,TOTEXPSB,KL,-,3 +RU,2024-02,RESFUEL,TOTEXPSB,KTONS,-,3 +RU,2024-02,RESFUEL,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,RESFUEL,TOTIMPSB,KBBL,-,3 +RU,2024-02,RESFUEL,TOTIMPSB,KBD,-,3 +RU,2024-02,RESFUEL,TOTIMPSB,KL,-,3 +RU,2024-02,RESFUEL,TOTIMPSB,KTONS,-,3 +RU,2024-03,RESFUEL,CLOSTLV,CONVBBL,6989.0000,3 +RU,2024-03,RESFUEL,CLOSTLV,KBBL,-,3 +RU,2024-03,RESFUEL,CLOSTLV,KBD,x,3 +RU,2024-03,RESFUEL,CLOSTLV,KL,-,3 +RU,2024-03,RESFUEL,CLOSTLV,KTONS,-,3 +RU,2024-03,RESFUEL,IPTRANSF,CONVBBL,..,3 +RU,2024-03,RESFUEL,IPTRANSF,KBBL,-,3 +RU,2024-03,RESFUEL,IPTRANSF,KBD,-,3 +RU,2024-03,RESFUEL,IPTRANSF,KL,-,3 +RU,2024-03,RESFUEL,IPTRANSF,KTONS,-,3 +RU,2024-03,RESFUEL,PTRANSF,CONVBBL,..,3 +RU,2024-03,RESFUEL,PTRANSF,KBBL,-,3 +RU,2024-03,RESFUEL,PTRANSF,KBD,-,3 +RU,2024-03,RESFUEL,PTRANSF,KL,-,3 +RU,2024-03,RESFUEL,PTRANSF,KTONS,-,3 +RU,2024-03,RESFUEL,RECEIPTS,CONVBBL,..,3 +RU,2024-03,RESFUEL,RECEIPTS,KBBL,-,3 +RU,2024-03,RESFUEL,RECEIPTS,KBD,-,3 +RU,2024-03,RESFUEL,RECEIPTS,KL,-,3 +RU,2024-03,RESFUEL,RECEIPTS,KTONS,-,3 +RU,2024-03,RESFUEL,REFGROUT,CONVBBL,6988.0000,3 +RU,2024-03,RESFUEL,REFGROUT,KBBL,-,3 +RU,2024-03,RESFUEL,REFGROUT,KBD,-,3 +RU,2024-03,RESFUEL,REFGROUT,KL,-,3 +RU,2024-03,RESFUEL,REFGROUT,KTONS,-,3 +RU,2024-03,RESFUEL,STATDIFF,CONVBBL,6989.0000,3 +RU,2024-03,RESFUEL,STATDIFF,KBBL,-,3 +RU,2024-03,RESFUEL,STATDIFF,KBD,-,3 +RU,2024-03,RESFUEL,STATDIFF,KL,-,3 +RU,2024-03,RESFUEL,STATDIFF,KTONS,-,3 +RU,2024-03,RESFUEL,STOCKCH,CONVBBL,6989.0000,3 +RU,2024-03,RESFUEL,STOCKCH,KBBL,-,3 +RU,2024-03,RESFUEL,STOCKCH,KBD,x,3 +RU,2024-03,RESFUEL,STOCKCH,KL,-,3 +RU,2024-03,RESFUEL,STOCKCH,KTONS,-,3 +RU,2024-03,RESFUEL,TOTDEMO,CONVBBL,6989.0000,3 +RU,2024-03,RESFUEL,TOTDEMO,KBBL,-,3 +RU,2024-03,RESFUEL,TOTDEMO,KBD,-,3 +RU,2024-03,RESFUEL,TOTDEMO,KL,-,3 +RU,2024-03,RESFUEL,TOTDEMO,KTONS,-,3 +RU,2024-03,RESFUEL,TOTEXPSB,CONVBBL,6989.0000,3 +RU,2024-03,RESFUEL,TOTEXPSB,KBBL,-,3 +RU,2024-03,RESFUEL,TOTEXPSB,KBD,-,3 +RU,2024-03,RESFUEL,TOTEXPSB,KL,-,3 +RU,2024-03,RESFUEL,TOTEXPSB,KTONS,-,3 +RU,2024-03,RESFUEL,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,RESFUEL,TOTIMPSB,KBBL,-,3 +RU,2024-03,RESFUEL,TOTIMPSB,KBD,-,3 +RU,2024-03,RESFUEL,TOTIMPSB,KL,-,3 +RU,2024-03,RESFUEL,TOTIMPSB,KTONS,-,3 +RU,2024-01,TOTPRODS,CLOSTLV,CONVBBL,7800.0000,3 +RU,2024-01,TOTPRODS,CLOSTLV,KBBL,-,3 +RU,2024-01,TOTPRODS,CLOSTLV,KBD,x,3 +RU,2024-01,TOTPRODS,CLOSTLV,KL,-,3 +RU,2024-01,TOTPRODS,CLOSTLV,KTONS,-,3 +RU,2024-01,TOTPRODS,IPTRANSF,CONVBBL,..,3 +RU,2024-01,TOTPRODS,IPTRANSF,KBBL,-,3 +RU,2024-01,TOTPRODS,IPTRANSF,KBD,-,3 +RU,2024-01,TOTPRODS,IPTRANSF,KL,-,3 +RU,2024-01,TOTPRODS,IPTRANSF,KTONS,-,3 +RU,2024-01,TOTPRODS,PTRANSF,CONVBBL,..,3 +RU,2024-01,TOTPRODS,PTRANSF,KBBL,-,3 +RU,2024-01,TOTPRODS,PTRANSF,KBD,-,3 +RU,2024-01,TOTPRODS,PTRANSF,KL,-,3 +RU,2024-01,TOTPRODS,PTRANSF,KTONS,-,3 +RU,2024-01,TOTPRODS,RECEIPTS,CONVBBL,..,3 +RU,2024-01,TOTPRODS,RECEIPTS,KBBL,-,3 +RU,2024-01,TOTPRODS,RECEIPTS,KBD,-,3 +RU,2024-01,TOTPRODS,RECEIPTS,KL,-,3 +RU,2024-01,TOTPRODS,RECEIPTS,KTONS,-,3 +RU,2024-01,TOTPRODS,REFGROUT,CONVBBL,7607.0000,3 +RU,2024-01,TOTPRODS,REFGROUT,KBBL,-,3 +RU,2024-01,TOTPRODS,REFGROUT,KBD,-,3 +RU,2024-01,TOTPRODS,REFGROUT,KL,-,3 +RU,2024-01,TOTPRODS,REFGROUT,KTONS,-,3 +RU,2024-01,TOTPRODS,STATDIFF,CONVBBL,7824.0000,3 +RU,2024-01,TOTPRODS,STATDIFF,KBBL,-,3 +RU,2024-01,TOTPRODS,STATDIFF,KBD,-,3 +RU,2024-01,TOTPRODS,STATDIFF,KL,-,3 +RU,2024-01,TOTPRODS,STATDIFF,KTONS,-,3 +RU,2024-01,TOTPRODS,STOCKCH,CONVBBL,7998.0000,3 +RU,2024-01,TOTPRODS,STOCKCH,KBBL,-,3 +RU,2024-01,TOTPRODS,STOCKCH,KBD,x,3 +RU,2024-01,TOTPRODS,STOCKCH,KL,-,3 +RU,2024-01,TOTPRODS,STOCKCH,KTONS,-,3 +RU,2024-01,TOTPRODS,TOTDEMO,CONVBBL,8834.0000,3 +RU,2024-01,TOTPRODS,TOTDEMO,KBBL,-,3 +RU,2024-01,TOTPRODS,TOTDEMO,KBD,-,3 +RU,2024-01,TOTPRODS,TOTDEMO,KL,-,3 +RU,2024-01,TOTPRODS,TOTDEMO,KTONS,-,3 +RU,2024-01,TOTPRODS,TOTEXPSB,CONVBBL,5438.0000,3 +RU,2024-01,TOTPRODS,TOTEXPSB,KBBL,-,3 +RU,2024-01,TOTPRODS,TOTEXPSB,KBD,-,3 +RU,2024-01,TOTPRODS,TOTEXPSB,KL,-,3 +RU,2024-01,TOTPRODS,TOTEXPSB,KTONS,-,3 +RU,2024-01,TOTPRODS,TOTIMPSB,CONVBBL,..,3 +RU,2024-01,TOTPRODS,TOTIMPSB,KBBL,-,3 +RU,2024-01,TOTPRODS,TOTIMPSB,KBD,-,3 +RU,2024-01,TOTPRODS,TOTIMPSB,KL,-,3 +RU,2024-01,TOTPRODS,TOTIMPSB,KTONS,-,3 +RU,2024-02,TOTPRODS,CLOSTLV,CONVBBL,7800.0000,3 +RU,2024-02,TOTPRODS,CLOSTLV,KBBL,-,3 +RU,2024-02,TOTPRODS,CLOSTLV,KBD,x,3 +RU,2024-02,TOTPRODS,CLOSTLV,KL,-,3 +RU,2024-02,TOTPRODS,CLOSTLV,KTONS,-,3 +RU,2024-02,TOTPRODS,IPTRANSF,CONVBBL,..,3 +RU,2024-02,TOTPRODS,IPTRANSF,KBBL,-,3 +RU,2024-02,TOTPRODS,IPTRANSF,KBD,-,3 +RU,2024-02,TOTPRODS,IPTRANSF,KL,-,3 +RU,2024-02,TOTPRODS,IPTRANSF,KTONS,-,3 +RU,2024-02,TOTPRODS,PTRANSF,CONVBBL,..,3 +RU,2024-02,TOTPRODS,PTRANSF,KBBL,-,3 +RU,2024-02,TOTPRODS,PTRANSF,KBD,-,3 +RU,2024-02,TOTPRODS,PTRANSF,KL,-,3 +RU,2024-02,TOTPRODS,PTRANSF,KTONS,-,3 +RU,2024-02,TOTPRODS,RECEIPTS,CONVBBL,..,3 +RU,2024-02,TOTPRODS,RECEIPTS,KBBL,-,3 +RU,2024-02,TOTPRODS,RECEIPTS,KBD,-,3 +RU,2024-02,TOTPRODS,RECEIPTS,KL,-,3 +RU,2024-02,TOTPRODS,RECEIPTS,KTONS,-,3 +RU,2024-02,TOTPRODS,REFGROUT,CONVBBL,7607.0000,3 +RU,2024-02,TOTPRODS,REFGROUT,KBBL,-,3 +RU,2024-02,TOTPRODS,REFGROUT,KBD,-,3 +RU,2024-02,TOTPRODS,REFGROUT,KL,-,3 +RU,2024-02,TOTPRODS,REFGROUT,KTONS,-,3 +RU,2024-02,TOTPRODS,STATDIFF,CONVBBL,7824.0000,3 +RU,2024-02,TOTPRODS,STATDIFF,KBBL,-,3 +RU,2024-02,TOTPRODS,STATDIFF,KBD,-,3 +RU,2024-02,TOTPRODS,STATDIFF,KL,-,3 +RU,2024-02,TOTPRODS,STATDIFF,KTONS,-,3 +RU,2024-02,TOTPRODS,STOCKCH,CONVBBL,7998.0000,3 +RU,2024-02,TOTPRODS,STOCKCH,KBBL,-,3 +RU,2024-02,TOTPRODS,STOCKCH,KBD,x,3 +RU,2024-02,TOTPRODS,STOCKCH,KL,-,3 +RU,2024-02,TOTPRODS,STOCKCH,KTONS,-,3 +RU,2024-02,TOTPRODS,TOTDEMO,CONVBBL,8834.0000,3 +RU,2024-02,TOTPRODS,TOTDEMO,KBBL,-,3 +RU,2024-02,TOTPRODS,TOTDEMO,KBD,-,3 +RU,2024-02,TOTPRODS,TOTDEMO,KL,-,3 +RU,2024-02,TOTPRODS,TOTDEMO,KTONS,-,3 +RU,2024-02,TOTPRODS,TOTEXPSB,CONVBBL,5438.0000,3 +RU,2024-02,TOTPRODS,TOTEXPSB,KBBL,-,3 +RU,2024-02,TOTPRODS,TOTEXPSB,KBD,-,3 +RU,2024-02,TOTPRODS,TOTEXPSB,KL,-,3 +RU,2024-02,TOTPRODS,TOTEXPSB,KTONS,-,3 +RU,2024-02,TOTPRODS,TOTIMPSB,CONVBBL,..,3 +RU,2024-02,TOTPRODS,TOTIMPSB,KBBL,-,3 +RU,2024-02,TOTPRODS,TOTIMPSB,KBD,-,3 +RU,2024-02,TOTPRODS,TOTIMPSB,KL,-,3 +RU,2024-02,TOTPRODS,TOTIMPSB,KTONS,-,3 +RU,2024-03,TOTPRODS,CLOSTLV,CONVBBL,7800.0000,3 +RU,2024-03,TOTPRODS,CLOSTLV,KBBL,-,3 +RU,2024-03,TOTPRODS,CLOSTLV,KBD,x,3 +RU,2024-03,TOTPRODS,CLOSTLV,KL,-,3 +RU,2024-03,TOTPRODS,CLOSTLV,KTONS,-,3 +RU,2024-03,TOTPRODS,IPTRANSF,CONVBBL,..,3 +RU,2024-03,TOTPRODS,IPTRANSF,KBBL,-,3 +RU,2024-03,TOTPRODS,IPTRANSF,KBD,-,3 +RU,2024-03,TOTPRODS,IPTRANSF,KL,-,3 +RU,2024-03,TOTPRODS,IPTRANSF,KTONS,-,3 +RU,2024-03,TOTPRODS,PTRANSF,CONVBBL,..,3 +RU,2024-03,TOTPRODS,PTRANSF,KBBL,-,3 +RU,2024-03,TOTPRODS,PTRANSF,KBD,-,3 +RU,2024-03,TOTPRODS,PTRANSF,KL,-,3 +RU,2024-03,TOTPRODS,PTRANSF,KTONS,-,3 +RU,2024-03,TOTPRODS,RECEIPTS,CONVBBL,..,3 +RU,2024-03,TOTPRODS,RECEIPTS,KBBL,-,3 +RU,2024-03,TOTPRODS,RECEIPTS,KBD,-,3 +RU,2024-03,TOTPRODS,RECEIPTS,KL,-,3 +RU,2024-03,TOTPRODS,RECEIPTS,KTONS,-,3 +RU,2024-03,TOTPRODS,REFGROUT,CONVBBL,7607.0000,3 +RU,2024-03,TOTPRODS,REFGROUT,KBBL,-,3 +RU,2024-03,TOTPRODS,REFGROUT,KBD,-,3 +RU,2024-03,TOTPRODS,REFGROUT,KL,-,3 +RU,2024-03,TOTPRODS,REFGROUT,KTONS,-,3 +RU,2024-03,TOTPRODS,STATDIFF,CONVBBL,7824.0000,3 +RU,2024-03,TOTPRODS,STATDIFF,KBBL,-,3 +RU,2024-03,TOTPRODS,STATDIFF,KBD,-,3 +RU,2024-03,TOTPRODS,STATDIFF,KL,-,3 +RU,2024-03,TOTPRODS,STATDIFF,KTONS,-,3 +RU,2024-03,TOTPRODS,STOCKCH,CONVBBL,7998.0000,3 +RU,2024-03,TOTPRODS,STOCKCH,KBBL,-,3 +RU,2024-03,TOTPRODS,STOCKCH,KBD,x,3 +RU,2024-03,TOTPRODS,STOCKCH,KL,-,3 +RU,2024-03,TOTPRODS,STOCKCH,KTONS,-,3 +RU,2024-03,TOTPRODS,TOTDEMO,CONVBBL,8834.0000,3 +RU,2024-03,TOTPRODS,TOTDEMO,KBBL,-,3 +RU,2024-03,TOTPRODS,TOTDEMO,KBD,-,3 +RU,2024-03,TOTPRODS,TOTDEMO,KL,-,3 +RU,2024-03,TOTPRODS,TOTDEMO,KTONS,-,3 +RU,2024-03,TOTPRODS,TOTEXPSB,CONVBBL,5438.0000,3 +RU,2024-03,TOTPRODS,TOTEXPSB,KBBL,-,3 +RU,2024-03,TOTPRODS,TOTEXPSB,KBD,-,3 +RU,2024-03,TOTPRODS,TOTEXPSB,KL,-,3 +RU,2024-03,TOTPRODS,TOTEXPSB,KTONS,-,3 +RU,2024-03,TOTPRODS,TOTIMPSB,CONVBBL,..,3 +RU,2024-03,TOTPRODS,TOTIMPSB,KBBL,-,3 +RU,2024-03,TOTPRODS,TOTIMPSB,KBD,-,3 +RU,2024-03,TOTPRODS,TOTIMPSB,KL,-,3 +RU,2024-03,TOTPRODS,TOTIMPSB,KTONS,-,3 +SA,2024-01,GASDIES,CLOSTLV,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,CLOSTLV,KBBL,29473.0000,3 +SA,2024-01,GASDIES,CLOSTLV,KBD,x,3 +SA,2024-01,GASDIES,CLOSTLV,KL,4685.8406,3 +SA,2024-01,GASDIES,CLOSTLV,KTONS,3982.8378,3 +SA,2024-01,GASDIES,IPTRANSF,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,GASDIES,IPTRANSF,KBD,0.0000,3 +SA,2024-01,GASDIES,IPTRANSF,KL,0.0000,3 +SA,2024-01,GASDIES,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,GASDIES,PTRANSF,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,PTRANSF,KBBL,-124.0000,3 +SA,2024-01,GASDIES,PTRANSF,KBD,-4.0000,3 +SA,2024-01,GASDIES,PTRANSF,KL,-19.7145,3 +SA,2024-01,GASDIES,PTRANSF,KTONS,-16.7568,3 +SA,2024-01,GASDIES,RECEIPTS,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,GASDIES,RECEIPTS,KBD,0.0000,3 +SA,2024-01,GASDIES,RECEIPTS,KL,0.0000,3 +SA,2024-01,GASDIES,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,GASDIES,REFGROUT,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,REFGROUT,KBBL,33790.0000,3 +SA,2024-01,GASDIES,REFGROUT,KBD,1090.0000,3 +SA,2024-01,GASDIES,REFGROUT,KL,5372.1899,3 +SA,2024-01,GASDIES,REFGROUT,KTONS,4566.2162,3 +SA,2024-01,GASDIES,STATDIFF,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,STATDIFF,KBBL,0.0000,3 +SA,2024-01,GASDIES,STATDIFF,KBD,0.0000,3 +SA,2024-01,GASDIES,STATDIFF,KL,0.0000,3 +SA,2024-01,GASDIES,STATDIFF,KTONS,0.0000,3 +SA,2024-01,GASDIES,STOCKCH,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,STOCKCH,KBBL,408.0000,3 +SA,2024-01,GASDIES,STOCKCH,KBD,x,3 +SA,2024-01,GASDIES,STOCKCH,KL,64.8669,3 +SA,2024-01,GASDIES,STOCKCH,KTONS,55.1351,3 +SA,2024-01,GASDIES,TOTDEMO,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,TOTDEMO,KBBL,17794.0000,3 +SA,2024-01,GASDIES,TOTDEMO,KBD,574.0000,3 +SA,2024-01,GASDIES,TOTDEMO,KL,2829.0248,3 +SA,2024-01,GASDIES,TOTDEMO,KTONS,2404.5946,3 +SA,2024-01,GASDIES,TOTEXPSB,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,TOTEXPSB,KBBL,17329.0000,3 +SA,2024-01,GASDIES,TOTEXPSB,KBD,559.0000,3 +SA,2024-01,GASDIES,TOTEXPSB,KL,2755.0956,3 +SA,2024-01,GASDIES,TOTEXPSB,KTONS,2341.7568,3 +SA,2024-01,GASDIES,TOTIMPSB,CONVBBL,7400.0000,3 +SA,2024-01,GASDIES,TOTIMPSB,KBBL,1891.0000,3 +SA,2024-01,GASDIES,TOTIMPSB,KBD,61.0000,3 +SA,2024-01,GASDIES,TOTIMPSB,KL,300.6455,3 +SA,2024-01,GASDIES,TOTIMPSB,KTONS,255.5405,3 +SA,2024-02,GASDIES,CLOSTLV,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,CLOSTLV,KBBL,30596.0000,3 +SA,2024-02,GASDIES,CLOSTLV,KBD,x,3 +SA,2024-02,GASDIES,CLOSTLV,KL,4864.3836,3 +SA,2024-02,GASDIES,CLOSTLV,KTONS,4134.5946,3 +SA,2024-02,GASDIES,IPTRANSF,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,GASDIES,IPTRANSF,KBD,0.0000,3 +SA,2024-02,GASDIES,IPTRANSF,KL,0.0000,3 +SA,2024-02,GASDIES,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,GASDIES,PTRANSF,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,PTRANSF,KBBL,899.0000,3 +SA,2024-02,GASDIES,PTRANSF,KBD,31.0000,3 +SA,2024-02,GASDIES,PTRANSF,KL,142.9298,3 +SA,2024-02,GASDIES,PTRANSF,KTONS,121.4865,3 +SA,2024-02,GASDIES,RECEIPTS,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,GASDIES,RECEIPTS,KBD,0.0000,3 +SA,2024-02,GASDIES,RECEIPTS,KL,0.0000,3 +SA,2024-02,GASDIES,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,GASDIES,REFGROUT,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,REFGROUT,KBBL,29493.0000,3 +SA,2024-02,GASDIES,REFGROUT,KBD,1017.0000,3 +SA,2024-02,GASDIES,REFGROUT,KL,4689.0203,3 +SA,2024-02,GASDIES,REFGROUT,KTONS,3985.5405,3 +SA,2024-02,GASDIES,STATDIFF,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,STATDIFF,KBBL,0.0000,3 +SA,2024-02,GASDIES,STATDIFF,KBD,0.0000,3 +SA,2024-02,GASDIES,STATDIFF,KL,0.0000,3 +SA,2024-02,GASDIES,STATDIFF,KTONS,0.0000,3 +SA,2024-02,GASDIES,STOCKCH,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,STOCKCH,KBBL,-648.0000,3 +SA,2024-02,GASDIES,STOCKCH,KBD,x,3 +SA,2024-02,GASDIES,STOCKCH,KL,-103.0239,3 +SA,2024-02,GASDIES,STOCKCH,KTONS,-87.5676,3 +SA,2024-02,GASDIES,TOTDEMO,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,TOTDEMO,KBBL,17226.0000,3 +SA,2024-02,GASDIES,TOTDEMO,KBD,594.0000,3 +SA,2024-02,GASDIES,TOTDEMO,KL,2738.7198,3 +SA,2024-02,GASDIES,TOTDEMO,KTONS,2327.8378,3 +SA,2024-02,GASDIES,TOTEXPSB,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,TOTEXPSB,KBBL,18241.0000,3 +SA,2024-02,GASDIES,TOTEXPSB,KBD,629.0000,3 +SA,2024-02,GASDIES,TOTEXPSB,KL,2900.0922,3 +SA,2024-02,GASDIES,TOTEXPSB,KTONS,2465.0000,3 +SA,2024-02,GASDIES,TOTIMPSB,CONVBBL,7400.0000,3 +SA,2024-02,GASDIES,TOTIMPSB,KBBL,4437.0000,3 +SA,2024-02,GASDIES,TOTIMPSB,KBD,153.0000,3 +SA,2024-02,GASDIES,TOTIMPSB,KL,705.4278,3 +SA,2024-02,GASDIES,TOTIMPSB,KTONS,599.5946,3 +SA,2024-03,GASDIES,CLOSTLV,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,CLOSTLV,KBBL,33268.0000,3 +SA,2024-03,GASDIES,CLOSTLV,KBD,x,3 +SA,2024-03,GASDIES,CLOSTLV,KL,5289.1984,3 +SA,2024-03,GASDIES,CLOSTLV,KTONS,4495.6757,3 +SA,2024-03,GASDIES,IPTRANSF,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,GASDIES,IPTRANSF,KBD,0.0000,3 +SA,2024-03,GASDIES,IPTRANSF,KL,0.0000,3 +SA,2024-03,GASDIES,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,GASDIES,PTRANSF,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,PTRANSF,KBBL,2852.0000,3 +SA,2024-03,GASDIES,PTRANSF,KBD,92.0000,3 +SA,2024-03,GASDIES,PTRANSF,KL,453.4325,3 +SA,2024-03,GASDIES,PTRANSF,KTONS,385.4054,3 +SA,2024-03,GASDIES,RECEIPTS,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,GASDIES,RECEIPTS,KBD,0.0000,3 +SA,2024-03,GASDIES,RECEIPTS,KL,0.0000,3 +SA,2024-03,GASDIES,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,GASDIES,REFGROUT,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,REFGROUT,KBBL,31930.0000,3 +SA,2024-03,GASDIES,REFGROUT,KBD,1030.0000,3 +SA,2024-03,GASDIES,REFGROUT,KL,5076.4730,3 +SA,2024-03,GASDIES,REFGROUT,KTONS,4314.8649,3 +SA,2024-03,GASDIES,STATDIFF,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,STATDIFF,KBBL,0.0000,3 +SA,2024-03,GASDIES,STATDIFF,KBD,0.0000,3 +SA,2024-03,GASDIES,STATDIFF,KL,0.0000,3 +SA,2024-03,GASDIES,STATDIFF,KTONS,0.0000,3 +SA,2024-03,GASDIES,STOCKCH,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,STOCKCH,KBBL,2197.0000,3 +SA,2024-03,GASDIES,STOCKCH,KBD,x,3 +SA,2024-03,GASDIES,STOCKCH,KL,349.2957,3 +SA,2024-03,GASDIES,STOCKCH,KTONS,296.8919,3 +SA,2024-03,GASDIES,TOTDEMO,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,TOTDEMO,KBBL,17670.0000,3 +SA,2024-03,GASDIES,TOTDEMO,KBD,570.0000,3 +SA,2024-03,GASDIES,TOTDEMO,KL,2809.3103,3 +SA,2024-03,GASDIES,TOTDEMO,KTONS,2387.8378,3 +SA,2024-03,GASDIES,TOTEXPSB,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,TOTEXPSB,KBBL,15438.0000,3 +SA,2024-03,GASDIES,TOTEXPSB,KBD,498.0000,3 +SA,2024-03,GASDIES,TOTEXPSB,KL,2454.4501,3 +SA,2024-03,GASDIES,TOTEXPSB,KTONS,2086.2162,3 +SA,2024-03,GASDIES,TOTIMPSB,CONVBBL,7400.0000,3 +SA,2024-03,GASDIES,TOTIMPSB,KBBL,527.0000,3 +SA,2024-03,GASDIES,TOTIMPSB,KBD,17.0000,3 +SA,2024-03,GASDIES,TOTIMPSB,KL,83.7864,3 +SA,2024-03,GASDIES,TOTIMPSB,KTONS,71.2162,3 +SA,2024-01,GASOLINE,CLOSTLV,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,CLOSTLV,KBBL,25838.0000,3 +SA,2024-01,GASOLINE,CLOSTLV,KBD,x,3 +SA,2024-01,GASOLINE,CLOSTLV,KL,4107.9208,3 +SA,2024-01,GASOLINE,CLOSTLV,KTONS,3039.7647,3 +SA,2024-01,GASOLINE,IPTRANSF,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,GASOLINE,IPTRANSF,KBD,0.0000,3 +SA,2024-01,GASOLINE,IPTRANSF,KL,0.0000,3 +SA,2024-01,GASOLINE,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,GASOLINE,PTRANSF,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,PTRANSF,KBBL,2294.0000,3 +SA,2024-01,GASOLINE,PTRANSF,KBD,74.0000,3 +SA,2024-01,GASOLINE,PTRANSF,KL,364.7175,3 +SA,2024-01,GASOLINE,PTRANSF,KTONS,269.8824,3 +SA,2024-01,GASOLINE,RECEIPTS,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,GASOLINE,RECEIPTS,KBD,0.0000,3 +SA,2024-01,GASOLINE,RECEIPTS,KL,0.0000,3 +SA,2024-01,GASOLINE,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,GASOLINE,REFGROUT,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,REFGROUT,KBBL,16740.0000,3 +SA,2024-01,GASOLINE,REFGROUT,KBD,540.0000,3 +SA,2024-01,GASOLINE,REFGROUT,KL,2661.4519,3 +SA,2024-01,GASOLINE,REFGROUT,KTONS,1969.4118,3 +SA,2024-01,GASOLINE,STATDIFF,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,STATDIFF,KBBL,0.0000,3 +SA,2024-01,GASOLINE,STATDIFF,KBD,0.0000,3 +SA,2024-01,GASOLINE,STATDIFF,KL,0.0000,3 +SA,2024-01,GASOLINE,STATDIFF,KTONS,0.0000,3 +SA,2024-01,GASOLINE,STOCKCH,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,STOCKCH,KBBL,245.0000,3 +SA,2024-01,GASOLINE,STOCKCH,KBD,x,3 +SA,2024-01,GASOLINE,STOCKCH,KL,38.9520,3 +SA,2024-01,GASOLINE,STOCKCH,KTONS,28.8235,3 +SA,2024-01,GASOLINE,TOTDEMO,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,TOTDEMO,KBBL,15903.0000,3 +SA,2024-01,GASOLINE,TOTDEMO,KBD,513.0000,3 +SA,2024-01,GASOLINE,TOTDEMO,KL,2528.3793,3 +SA,2024-01,GASOLINE,TOTDEMO,KTONS,1870.9412,3 +SA,2024-01,GASOLINE,TOTEXPSB,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,TOTEXPSB,KBBL,5890.0000,3 +SA,2024-01,GASOLINE,TOTEXPSB,KBD,190.0000,3 +SA,2024-01,GASOLINE,TOTEXPSB,KL,936.4368,3 +SA,2024-01,GASOLINE,TOTEXPSB,KTONS,692.9412,3 +SA,2024-01,GASOLINE,TOTIMPSB,CONVBBL,8500.0000,3 +SA,2024-01,GASOLINE,TOTIMPSB,KBBL,3007.0000,3 +SA,2024-01,GASOLINE,TOTIMPSB,KBD,97.0000,3 +SA,2024-01,GASOLINE,TOTIMPSB,KL,478.0756,3 +SA,2024-01,GASOLINE,TOTIMPSB,KTONS,353.7647,3 +SA,2024-02,GASOLINE,CLOSTLV,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,CLOSTLV,KBBL,27703.0000,3 +SA,2024-02,GASOLINE,CLOSTLV,KBD,x,3 +SA,2024-02,GASOLINE,CLOSTLV,KL,4404.4326,3 +SA,2024-02,GASOLINE,CLOSTLV,KTONS,3259.1765,3 +SA,2024-02,GASOLINE,IPTRANSF,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,GASOLINE,IPTRANSF,KBD,0.0000,3 +SA,2024-02,GASOLINE,IPTRANSF,KL,0.0000,3 +SA,2024-02,GASOLINE,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,GASOLINE,PTRANSF,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,PTRANSF,KBBL,2088.0000,3 +SA,2024-02,GASOLINE,PTRANSF,KBD,72.0000,3 +SA,2024-02,GASOLINE,PTRANSF,KL,331.9660,3 +SA,2024-02,GASOLINE,PTRANSF,KTONS,245.6471,3 +SA,2024-02,GASOLINE,RECEIPTS,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,GASOLINE,RECEIPTS,KBD,0.0000,3 +SA,2024-02,GASOLINE,RECEIPTS,KL,0.0000,3 +SA,2024-02,GASOLINE,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,GASOLINE,REFGROUT,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,REFGROUT,KBBL,17313.0000,3 +SA,2024-02,GASOLINE,REFGROUT,KBD,597.0000,3 +SA,2024-02,GASOLINE,REFGROUT,KL,2752.5518,3 +SA,2024-02,GASOLINE,REFGROUT,KTONS,2036.8235,3 +SA,2024-02,GASOLINE,STATDIFF,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,STATDIFF,KBBL,0.0000,3 +SA,2024-02,GASOLINE,STATDIFF,KBD,0.0000,3 +SA,2024-02,GASOLINE,STATDIFF,KL,0.0000,3 +SA,2024-02,GASOLINE,STATDIFF,KTONS,0.0000,3 +SA,2024-02,GASOLINE,STOCKCH,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,STOCKCH,KBBL,-321.0000,3 +SA,2024-02,GASOLINE,STOCKCH,KBD,x,3 +SA,2024-02,GASOLINE,STOCKCH,KL,-51.0350,3 +SA,2024-02,GASOLINE,STOCKCH,KTONS,-37.7647,3 +SA,2024-02,GASOLINE,TOTDEMO,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,TOTDEMO,KBBL,14732.0000,3 +SA,2024-02,GASOLINE,TOTDEMO,KBD,508.0000,3 +SA,2024-02,GASOLINE,TOTDEMO,KL,2342.2048,3 +SA,2024-02,GASOLINE,TOTDEMO,KTONS,1733.1765,3 +SA,2024-02,GASOLINE,TOTEXPSB,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,TOTEXPSB,KBBL,7975.0000,3 +SA,2024-02,GASOLINE,TOTEXPSB,KBD,275.0000,3 +SA,2024-02,GASOLINE,TOTEXPSB,KL,1267.9258,3 +SA,2024-02,GASOLINE,TOTEXPSB,KTONS,938.2353,3 +SA,2024-02,GASOLINE,TOTIMPSB,CONVBBL,8500.0000,3 +SA,2024-02,GASOLINE,TOTIMPSB,KBBL,2958.0000,3 +SA,2024-02,GASOLINE,TOTIMPSB,KBD,102.0000,3 +SA,2024-02,GASOLINE,TOTIMPSB,KL,470.2852,3 +SA,2024-02,GASOLINE,TOTIMPSB,KTONS,348.0000,3 +SA,2024-03,GASOLINE,CLOSTLV,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,CLOSTLV,KBBL,29852.0000,3 +SA,2024-03,GASOLINE,CLOSTLV,KBD,x,3 +SA,2024-03,GASOLINE,CLOSTLV,KL,4746.0969,3 +SA,2024-03,GASOLINE,CLOSTLV,KTONS,3512.0000,3 +SA,2024-03,GASOLINE,IPTRANSF,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,GASOLINE,IPTRANSF,KBD,0.0000,3 +SA,2024-03,GASOLINE,IPTRANSF,KL,0.0000,3 +SA,2024-03,GASOLINE,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,GASOLINE,PTRANSF,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,PTRANSF,KBBL,-868.0000,3 +SA,2024-03,GASOLINE,PTRANSF,KBD,-28.0000,3 +SA,2024-03,GASOLINE,PTRANSF,KL,-138.0012,3 +SA,2024-03,GASOLINE,PTRANSF,KTONS,-102.1176,3 +SA,2024-03,GASOLINE,RECEIPTS,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,GASOLINE,RECEIPTS,KBD,0.0000,3 +SA,2024-03,GASOLINE,RECEIPTS,KL,0.0000,3 +SA,2024-03,GASOLINE,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,GASOLINE,REFGROUT,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,REFGROUT,KBBL,19499.0000,3 +SA,2024-03,GASOLINE,REFGROUT,KBD,629.0000,3 +SA,2024-03,GASOLINE,REFGROUT,KL,3100.0986,3 +SA,2024-03,GASOLINE,REFGROUT,KTONS,2294.0000,3 +SA,2024-03,GASOLINE,STATDIFF,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,STATDIFF,KBBL,0.0000,3 +SA,2024-03,GASOLINE,STATDIFF,KBD,0.0000,3 +SA,2024-03,GASOLINE,STATDIFF,KL,0.0000,3 +SA,2024-03,GASOLINE,STATDIFF,KTONS,0.0000,3 +SA,2024-03,GASOLINE,STOCKCH,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,STOCKCH,KBBL,436.0000,3 +SA,2024-03,GASOLINE,STOCKCH,KBD,x,3 +SA,2024-03,GASOLINE,STOCKCH,KL,69.3186,3 +SA,2024-03,GASOLINE,STOCKCH,KTONS,51.2941,3 +SA,2024-03,GASOLINE,TOTDEMO,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,TOTDEMO,KBBL,15283.0000,3 +SA,2024-03,GASOLINE,TOTDEMO,KBD,493.0000,3 +SA,2024-03,GASOLINE,TOTDEMO,KL,2429.8070,3 +SA,2024-03,GASOLINE,TOTDEMO,KTONS,1798.0000,3 +SA,2024-03,GASOLINE,TOTEXPSB,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,TOTEXPSB,KBBL,7347.0000,3 +SA,2024-03,GASOLINE,TOTEXPSB,KBD,237.0000,3 +SA,2024-03,GASOLINE,TOTEXPSB,KL,1168.0817,3 +SA,2024-03,GASOLINE,TOTEXPSB,KTONS,864.3529,3 +SA,2024-03,GASOLINE,TOTIMPSB,CONVBBL,8500.0000,3 +SA,2024-03,GASOLINE,TOTIMPSB,KBBL,4464.0000,3 +SA,2024-03,GASOLINE,TOTIMPSB,KBD,144.0000,3 +SA,2024-03,GASOLINE,TOTIMPSB,KL,709.7205,3 +SA,2024-03,GASOLINE,TOTIMPSB,KTONS,525.1765,3 +SA,2024-01,JETKERO,CLOSTLV,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,CLOSTLV,KBBL,0.0000,3 +SA,2024-01,JETKERO,CLOSTLV,KBD,x,3 +SA,2024-01,JETKERO,CLOSTLV,KL,0.0000,3 +SA,2024-01,JETKERO,CLOSTLV,KTONS,0.0000,3 +SA,2024-01,JETKERO,IPTRANSF,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,JETKERO,IPTRANSF,KBD,0.0000,3 +SA,2024-01,JETKERO,IPTRANSF,KL,0.0000,3 +SA,2024-01,JETKERO,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,JETKERO,PTRANSF,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,PTRANSF,KBBL,0.0000,3 +SA,2024-01,JETKERO,PTRANSF,KBD,0.0000,3 +SA,2024-01,JETKERO,PTRANSF,KL,0.0000,3 +SA,2024-01,JETKERO,PTRANSF,KTONS,0.0000,3 +SA,2024-01,JETKERO,RECEIPTS,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,JETKERO,RECEIPTS,KBD,0.0000,3 +SA,2024-01,JETKERO,RECEIPTS,KL,0.0000,3 +SA,2024-01,JETKERO,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,JETKERO,REFGROUT,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,REFGROUT,KBBL,0.0000,3 +SA,2024-01,JETKERO,REFGROUT,KBD,0.0000,3 +SA,2024-01,JETKERO,REFGROUT,KL,0.0000,3 +SA,2024-01,JETKERO,REFGROUT,KTONS,0.0000,3 +SA,2024-01,JETKERO,STATDIFF,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,STATDIFF,KBBL,0.0000,3 +SA,2024-01,JETKERO,STATDIFF,KBD,0.0000,3 +SA,2024-01,JETKERO,STATDIFF,KL,0.0000,3 +SA,2024-01,JETKERO,STATDIFF,KTONS,0.0000,3 +SA,2024-01,JETKERO,STOCKCH,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,STOCKCH,KBBL,0.0000,3 +SA,2024-01,JETKERO,STOCKCH,KBD,x,3 +SA,2024-01,JETKERO,STOCKCH,KL,0.0000,3 +SA,2024-01,JETKERO,STOCKCH,KTONS,0.0000,3 +SA,2024-01,JETKERO,TOTDEMO,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,TOTDEMO,KBBL,0.0000,3 +SA,2024-01,JETKERO,TOTDEMO,KBD,0.0000,3 +SA,2024-01,JETKERO,TOTDEMO,KL,0.0000,3 +SA,2024-01,JETKERO,TOTDEMO,KTONS,0.0000,3 +SA,2024-01,JETKERO,TOTEXPSB,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,TOTEXPSB,KBBL,0.0000,3 +SA,2024-01,JETKERO,TOTEXPSB,KBD,0.0000,3 +SA,2024-01,JETKERO,TOTEXPSB,KL,0.0000,3 +SA,2024-01,JETKERO,TOTEXPSB,KTONS,0.0000,3 +SA,2024-01,JETKERO,TOTIMPSB,CONVBBL,7770.0000,3 +SA,2024-01,JETKERO,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,JETKERO,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,JETKERO,TOTIMPSB,KL,0.0000,3 +SA,2024-01,JETKERO,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,JETKERO,CLOSTLV,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,CLOSTLV,KBBL,0.0000,3 +SA,2024-02,JETKERO,CLOSTLV,KBD,x,3 +SA,2024-02,JETKERO,CLOSTLV,KL,0.0000,3 +SA,2024-02,JETKERO,CLOSTLV,KTONS,0.0000,3 +SA,2024-02,JETKERO,IPTRANSF,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,JETKERO,IPTRANSF,KBD,0.0000,3 +SA,2024-02,JETKERO,IPTRANSF,KL,0.0000,3 +SA,2024-02,JETKERO,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,JETKERO,PTRANSF,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,PTRANSF,KBBL,0.0000,3 +SA,2024-02,JETKERO,PTRANSF,KBD,0.0000,3 +SA,2024-02,JETKERO,PTRANSF,KL,0.0000,3 +SA,2024-02,JETKERO,PTRANSF,KTONS,0.0000,3 +SA,2024-02,JETKERO,RECEIPTS,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,JETKERO,RECEIPTS,KBD,0.0000,3 +SA,2024-02,JETKERO,RECEIPTS,KL,0.0000,3 +SA,2024-02,JETKERO,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,JETKERO,REFGROUT,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,REFGROUT,KBBL,0.0000,3 +SA,2024-02,JETKERO,REFGROUT,KBD,0.0000,3 +SA,2024-02,JETKERO,REFGROUT,KL,0.0000,3 +SA,2024-02,JETKERO,REFGROUT,KTONS,0.0000,3 +SA,2024-02,JETKERO,STATDIFF,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,STATDIFF,KBBL,0.0000,3 +SA,2024-02,JETKERO,STATDIFF,KBD,0.0000,3 +SA,2024-02,JETKERO,STATDIFF,KL,0.0000,3 +SA,2024-02,JETKERO,STATDIFF,KTONS,0.0000,3 +SA,2024-02,JETKERO,STOCKCH,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,STOCKCH,KBBL,0.0000,3 +SA,2024-02,JETKERO,STOCKCH,KBD,x,3 +SA,2024-02,JETKERO,STOCKCH,KL,0.0000,3 +SA,2024-02,JETKERO,STOCKCH,KTONS,0.0000,3 +SA,2024-02,JETKERO,TOTDEMO,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,TOTDEMO,KBBL,0.0000,3 +SA,2024-02,JETKERO,TOTDEMO,KBD,0.0000,3 +SA,2024-02,JETKERO,TOTDEMO,KL,0.0000,3 +SA,2024-02,JETKERO,TOTDEMO,KTONS,0.0000,3 +SA,2024-02,JETKERO,TOTEXPSB,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,TOTEXPSB,KBBL,0.0000,3 +SA,2024-02,JETKERO,TOTEXPSB,KBD,0.0000,3 +SA,2024-02,JETKERO,TOTEXPSB,KL,0.0000,3 +SA,2024-02,JETKERO,TOTEXPSB,KTONS,0.0000,3 +SA,2024-02,JETKERO,TOTIMPSB,CONVBBL,7770.0000,3 +SA,2024-02,JETKERO,TOTIMPSB,KBBL,0.0000,3 +SA,2024-02,JETKERO,TOTIMPSB,KBD,0.0000,3 +SA,2024-02,JETKERO,TOTIMPSB,KL,0.0000,3 +SA,2024-02,JETKERO,TOTIMPSB,KTONS,0.0000,3 +SA,2024-03,JETKERO,CLOSTLV,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,CLOSTLV,KBBL,0.0000,3 +SA,2024-03,JETKERO,CLOSTLV,KBD,x,3 +SA,2024-03,JETKERO,CLOSTLV,KL,0.0000,3 +SA,2024-03,JETKERO,CLOSTLV,KTONS,0.0000,3 +SA,2024-03,JETKERO,IPTRANSF,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,JETKERO,IPTRANSF,KBD,0.0000,3 +SA,2024-03,JETKERO,IPTRANSF,KL,0.0000,3 +SA,2024-03,JETKERO,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,JETKERO,PTRANSF,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,PTRANSF,KBBL,0.0000,3 +SA,2024-03,JETKERO,PTRANSF,KBD,0.0000,3 +SA,2024-03,JETKERO,PTRANSF,KL,0.0000,3 +SA,2024-03,JETKERO,PTRANSF,KTONS,0.0000,3 +SA,2024-03,JETKERO,RECEIPTS,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,JETKERO,RECEIPTS,KBD,0.0000,3 +SA,2024-03,JETKERO,RECEIPTS,KL,0.0000,3 +SA,2024-03,JETKERO,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,JETKERO,REFGROUT,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,REFGROUT,KBBL,0.0000,3 +SA,2024-03,JETKERO,REFGROUT,KBD,0.0000,3 +SA,2024-03,JETKERO,REFGROUT,KL,0.0000,3 +SA,2024-03,JETKERO,REFGROUT,KTONS,0.0000,3 +SA,2024-03,JETKERO,STATDIFF,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,STATDIFF,KBBL,0.0000,3 +SA,2024-03,JETKERO,STATDIFF,KBD,0.0000,3 +SA,2024-03,JETKERO,STATDIFF,KL,0.0000,3 +SA,2024-03,JETKERO,STATDIFF,KTONS,0.0000,3 +SA,2024-03,JETKERO,STOCKCH,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,STOCKCH,KBBL,0.0000,3 +SA,2024-03,JETKERO,STOCKCH,KBD,x,3 +SA,2024-03,JETKERO,STOCKCH,KL,0.0000,3 +SA,2024-03,JETKERO,STOCKCH,KTONS,0.0000,3 +SA,2024-03,JETKERO,TOTDEMO,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,TOTDEMO,KBBL,0.0000,3 +SA,2024-03,JETKERO,TOTDEMO,KBD,0.0000,3 +SA,2024-03,JETKERO,TOTDEMO,KL,0.0000,3 +SA,2024-03,JETKERO,TOTDEMO,KTONS,0.0000,3 +SA,2024-03,JETKERO,TOTEXPSB,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,TOTEXPSB,KBBL,0.0000,3 +SA,2024-03,JETKERO,TOTEXPSB,KBD,0.0000,3 +SA,2024-03,JETKERO,TOTEXPSB,KL,0.0000,3 +SA,2024-03,JETKERO,TOTEXPSB,KTONS,0.0000,3 +SA,2024-03,JETKERO,TOTIMPSB,CONVBBL,7770.0000,3 +SA,2024-03,JETKERO,TOTIMPSB,KBBL,0.0000,3 +SA,2024-03,JETKERO,TOTIMPSB,KBD,0.0000,3 +SA,2024-03,JETKERO,TOTIMPSB,KL,0.0000,3 +SA,2024-03,JETKERO,TOTIMPSB,KTONS,0.0000,3 +SA,2024-01,KEROSENE,CLOSTLV,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,CLOSTLV,KBBL,14370.0000,3 +SA,2024-01,KEROSENE,CLOSTLV,KBD,x,3 +SA,2024-01,KEROSENE,CLOSTLV,KL,2284.6513,3 +SA,2024-01,KEROSENE,CLOSTLV,KTONS,1818.9873,3 +SA,2024-01,KEROSENE,IPTRANSF,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,KEROSENE,IPTRANSF,KBD,0.0000,3 +SA,2024-01,KEROSENE,IPTRANSF,KL,0.0000,3 +SA,2024-01,KEROSENE,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,KEROSENE,PTRANSF,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,PTRANSF,KBBL,837.0000,3 +SA,2024-01,KEROSENE,PTRANSF,KBD,27.0000,3 +SA,2024-01,KEROSENE,PTRANSF,KL,133.0726,3 +SA,2024-01,KEROSENE,PTRANSF,KTONS,105.9494,3 +SA,2024-01,KEROSENE,RECEIPTS,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,KEROSENE,RECEIPTS,KBD,0.0000,3 +SA,2024-01,KEROSENE,RECEIPTS,KL,0.0000,3 +SA,2024-01,KEROSENE,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,KEROSENE,REFGROUT,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,REFGROUT,KBBL,6200.0000,3 +SA,2024-01,KEROSENE,REFGROUT,KBD,200.0000,3 +SA,2024-01,KEROSENE,REFGROUT,KL,985.7229,3 +SA,2024-01,KEROSENE,REFGROUT,KTONS,784.8101,3 +SA,2024-01,KEROSENE,STATDIFF,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,STATDIFF,KBBL,0.0000,3 +SA,2024-01,KEROSENE,STATDIFF,KBD,0.0000,3 +SA,2024-01,KEROSENE,STATDIFF,KL,0.0000,3 +SA,2024-01,KEROSENE,STATDIFF,KTONS,0.0000,3 +SA,2024-01,KEROSENE,STOCKCH,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,STOCKCH,KBBL,-291.0000,3 +SA,2024-01,KEROSENE,STOCKCH,KBD,x,3 +SA,2024-01,KEROSENE,STOCKCH,KL,-46.2654,3 +SA,2024-01,KEROSENE,STOCKCH,KTONS,-36.8354,3 +SA,2024-01,KEROSENE,TOTDEMO,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,TOTDEMO,KBBL,3007.0000,3 +SA,2024-01,KEROSENE,TOTDEMO,KBD,97.0000,3 +SA,2024-01,KEROSENE,TOTDEMO,KL,478.0756,3 +SA,2024-01,KEROSENE,TOTDEMO,KTONS,380.6329,3 +SA,2024-01,KEROSENE,TOTEXPSB,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,TOTEXPSB,KBBL,4309.0000,3 +SA,2024-01,KEROSENE,TOTEXPSB,KBD,139.0000,3 +SA,2024-01,KEROSENE,TOTEXPSB,KL,685.0774,3 +SA,2024-01,KEROSENE,TOTEXPSB,KTONS,545.4430,3 +SA,2024-01,KEROSENE,TOTIMPSB,CONVBBL,7900.0000,3 +SA,2024-01,KEROSENE,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,KEROSENE,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,KEROSENE,TOTIMPSB,KL,0.0000,3 +SA,2024-01,KEROSENE,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,KEROSENE,CLOSTLV,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,CLOSTLV,KBBL,15207.0000,3 +SA,2024-02,KEROSENE,CLOSTLV,KBD,x,3 +SA,2024-02,KEROSENE,CLOSTLV,KL,2417.7239,3 +SA,2024-02,KEROSENE,CLOSTLV,KTONS,1924.9367,3 +SA,2024-02,KEROSENE,IPTRANSF,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,KEROSENE,IPTRANSF,KBD,0.0000,3 +SA,2024-02,KEROSENE,IPTRANSF,KL,0.0000,3 +SA,2024-02,KEROSENE,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,KEROSENE,PTRANSF,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,PTRANSF,KBBL,435.0000,3 +SA,2024-02,KEROSENE,PTRANSF,KBD,15.0000,3 +SA,2024-02,KEROSENE,PTRANSF,KL,69.1596,3 +SA,2024-02,KEROSENE,PTRANSF,KTONS,55.0633,3 +SA,2024-02,KEROSENE,RECEIPTS,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,KEROSENE,RECEIPTS,KBD,0.0000,3 +SA,2024-02,KEROSENE,RECEIPTS,KL,0.0000,3 +SA,2024-02,KEROSENE,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,KEROSENE,REFGROUT,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,REFGROUT,KBBL,6119.0000,3 +SA,2024-02,KEROSENE,REFGROUT,KBD,211.0000,3 +SA,2024-02,KEROSENE,REFGROUT,KL,972.8449,3 +SA,2024-02,KEROSENE,REFGROUT,KTONS,774.5570,3 +SA,2024-02,KEROSENE,STATDIFF,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,STATDIFF,KBBL,0.0000,3 +SA,2024-02,KEROSENE,STATDIFF,KBD,0.0000,3 +SA,2024-02,KEROSENE,STATDIFF,KL,0.0000,3 +SA,2024-02,KEROSENE,STATDIFF,KTONS,0.0000,3 +SA,2024-02,KEROSENE,STOCKCH,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,STOCKCH,KBBL,1432.0000,3 +SA,2024-02,KEROSENE,STOCKCH,KBD,x,3 +SA,2024-02,KEROSENE,STOCKCH,KL,227.6702,3 +SA,2024-02,KEROSENE,STOCKCH,KTONS,181.2658,3 +SA,2024-02,KEROSENE,TOTDEMO,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,TOTDEMO,KBBL,2871.0000,3 +SA,2024-02,KEROSENE,TOTDEMO,KBD,99.0000,3 +SA,2024-02,KEROSENE,TOTDEMO,KL,456.4533,3 +SA,2024-02,KEROSENE,TOTDEMO,KTONS,363.4177,3 +SA,2024-02,KEROSENE,TOTEXPSB,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,TOTEXPSB,KBBL,2726.0000,3 +SA,2024-02,KEROSENE,TOTEXPSB,KBD,94.0000,3 +SA,2024-02,KEROSENE,TOTEXPSB,KL,433.4001,3 +SA,2024-02,KEROSENE,TOTEXPSB,KTONS,345.0633,3 +SA,2024-02,KEROSENE,TOTIMPSB,CONVBBL,7900.0000,3 +SA,2024-02,KEROSENE,TOTIMPSB,KBBL,493.0000,3 +SA,2024-02,KEROSENE,TOTIMPSB,KBD,17.0000,3 +SA,2024-02,KEROSENE,TOTIMPSB,KL,78.3809,3 +SA,2024-02,KEROSENE,TOTIMPSB,KTONS,62.4051,3 +SA,2024-03,KEROSENE,CLOSTLV,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,CLOSTLV,KBBL,15429.0000,3 +SA,2024-03,KEROSENE,CLOSTLV,KBD,x,3 +SA,2024-03,KEROSENE,CLOSTLV,KL,2453.0192,3 +SA,2024-03,KEROSENE,CLOSTLV,KTONS,1953.0380,3 +SA,2024-03,KEROSENE,IPTRANSF,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,KEROSENE,IPTRANSF,KBD,0.0000,3 +SA,2024-03,KEROSENE,IPTRANSF,KL,0.0000,3 +SA,2024-03,KEROSENE,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,KEROSENE,PTRANSF,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,PTRANSF,KBBL,1209.0000,3 +SA,2024-03,KEROSENE,PTRANSF,KBD,39.0000,3 +SA,2024-03,KEROSENE,PTRANSF,KL,192.2160,3 +SA,2024-03,KEROSENE,PTRANSF,KTONS,153.0380,3 +SA,2024-03,KEROSENE,RECEIPTS,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,KEROSENE,RECEIPTS,KBD,0.0000,3 +SA,2024-03,KEROSENE,RECEIPTS,KL,0.0000,3 +SA,2024-03,KEROSENE,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,KEROSENE,REFGROUT,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,REFGROUT,KBBL,6696.0000,3 +SA,2024-03,KEROSENE,REFGROUT,KBD,216.0000,3 +SA,2024-03,KEROSENE,REFGROUT,KL,1064.5807,3 +SA,2024-03,KEROSENE,REFGROUT,KTONS,847.5949,3 +SA,2024-03,KEROSENE,STATDIFF,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,STATDIFF,KBBL,0.0000,3 +SA,2024-03,KEROSENE,STATDIFF,KBD,0.0000,3 +SA,2024-03,KEROSENE,STATDIFF,KL,0.0000,3 +SA,2024-03,KEROSENE,STATDIFF,KTONS,0.0000,3 +SA,2024-03,KEROSENE,STOCKCH,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,STOCKCH,KBBL,-384.0000,3 +SA,2024-03,KEROSENE,STOCKCH,KBD,x,3 +SA,2024-03,KEROSENE,STOCKCH,KL,-61.0512,3 +SA,2024-03,KEROSENE,STOCKCH,KTONS,-48.6076,3 +SA,2024-03,KEROSENE,TOTDEMO,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,TOTDEMO,KBBL,3193.0000,3 +SA,2024-03,KEROSENE,TOTDEMO,KBD,103.0000,3 +SA,2024-03,KEROSENE,TOTDEMO,KL,507.6473,3 +SA,2024-03,KEROSENE,TOTDEMO,KTONS,404.1772,3 +SA,2024-03,KEROSENE,TOTEXPSB,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,TOTEXPSB,KBBL,5363.0000,3 +SA,2024-03,KEROSENE,TOTEXPSB,KBD,173.0000,3 +SA,2024-03,KEROSENE,TOTEXPSB,KL,852.6503,3 +SA,2024-03,KEROSENE,TOTEXPSB,KTONS,678.8608,3 +SA,2024-03,KEROSENE,TOTIMPSB,CONVBBL,7900.0000,3 +SA,2024-03,KEROSENE,TOTIMPSB,KBBL,248.0000,3 +SA,2024-03,KEROSENE,TOTIMPSB,KBD,8.0000,3 +SA,2024-03,KEROSENE,TOTIMPSB,KL,39.4289,3 +SA,2024-03,KEROSENE,TOTIMPSB,KTONS,31.3924,3 +SA,2024-01,LPG,CLOSTLV,CONVBBL,11600.0000,3 +SA,2024-01,LPG,CLOSTLV,KBBL,547.0000,3 +SA,2024-01,LPG,CLOSTLV,KBD,x,3 +SA,2024-01,LPG,CLOSTLV,KL,86.9662,3 +SA,2024-01,LPG,CLOSTLV,KTONS,47.1552,3 +SA,2024-01,LPG,IPTRANSF,CONVBBL,11600.0000,3 +SA,2024-01,LPG,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,LPG,IPTRANSF,KBD,0.0000,3 +SA,2024-01,LPG,IPTRANSF,KL,0.0000,3 +SA,2024-01,LPG,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,LPG,PTRANSF,CONVBBL,11600.0000,3 +SA,2024-01,LPG,PTRANSF,KBBL,2356.0000,3 +SA,2024-01,LPG,PTRANSF,KBD,76.0000,3 +SA,2024-01,LPG,PTRANSF,KL,374.5747,3 +SA,2024-01,LPG,PTRANSF,KTONS,203.1034,3 +SA,2024-01,LPG,RECEIPTS,CONVBBL,11600.0000,3 +SA,2024-01,LPG,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,LPG,RECEIPTS,KBD,0.0000,3 +SA,2024-01,LPG,RECEIPTS,KL,0.0000,3 +SA,2024-01,LPG,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,LPG,REFGROUT,CONVBBL,11600.0000,3 +SA,2024-01,LPG,REFGROUT,KBBL,403.0000,3 +SA,2024-01,LPG,REFGROUT,KBD,13.0000,3 +SA,2024-01,LPG,REFGROUT,KL,64.0720,3 +SA,2024-01,LPG,REFGROUT,KTONS,34.7414,3 +SA,2024-01,LPG,STATDIFF,CONVBBL,11600.0000,3 +SA,2024-01,LPG,STATDIFF,KBBL,0.0000,3 +SA,2024-01,LPG,STATDIFF,KBD,0.0000,3 +SA,2024-01,LPG,STATDIFF,KL,0.0000,3 +SA,2024-01,LPG,STATDIFF,KTONS,0.0000,3 +SA,2024-01,LPG,STOCKCH,CONVBBL,11600.0000,3 +SA,2024-01,LPG,STOCKCH,KBBL,932.0000,3 +SA,2024-01,LPG,STOCKCH,KBD,x,3 +SA,2024-01,LPG,STOCKCH,KL,148.1764,3 +SA,2024-01,LPG,STOCKCH,KTONS,80.3448,3 +SA,2024-01,LPG,TOTDEMO,CONVBBL,11600.0000,3 +SA,2024-01,LPG,TOTDEMO,KBBL,1829.0000,3 +SA,2024-01,LPG,TOTDEMO,KBD,59.0000,3 +SA,2024-01,LPG,TOTDEMO,KL,290.7883,3 +SA,2024-01,LPG,TOTDEMO,KTONS,157.6724,3 +SA,2024-01,LPG,TOTEXPSB,CONVBBL,11600.0000,3 +SA,2024-01,LPG,TOTEXPSB,KBBL,0.0000,3 +SA,2024-01,LPG,TOTEXPSB,KBD,0.0000,3 +SA,2024-01,LPG,TOTEXPSB,KL,0.0000,3 +SA,2024-01,LPG,TOTEXPSB,KTONS,0.0000,3 +SA,2024-01,LPG,TOTIMPSB,CONVBBL,11600.0000,3 +SA,2024-01,LPG,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,LPG,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,LPG,TOTIMPSB,KL,0.0000,3 +SA,2024-01,LPG,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,LPG,CLOSTLV,CONVBBL,11600.0000,3 +SA,2024-02,LPG,CLOSTLV,KBBL,589.0000,3 +SA,2024-02,LPG,CLOSTLV,KBD,x,3 +SA,2024-02,LPG,CLOSTLV,KL,93.6437,3 +SA,2024-02,LPG,CLOSTLV,KTONS,50.7759,3 +SA,2024-02,LPG,IPTRANSF,CONVBBL,11600.0000,3 +SA,2024-02,LPG,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,LPG,IPTRANSF,KBD,0.0000,3 +SA,2024-02,LPG,IPTRANSF,KL,0.0000,3 +SA,2024-02,LPG,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,LPG,PTRANSF,CONVBBL,11600.0000,3 +SA,2024-02,LPG,PTRANSF,KBBL,2030.0000,3 +SA,2024-02,LPG,PTRANSF,KBD,70.0000,3 +SA,2024-02,LPG,PTRANSF,KL,322.7448,3 +SA,2024-02,LPG,PTRANSF,KTONS,175.0000,3 +SA,2024-02,LPG,RECEIPTS,CONVBBL,11600.0000,3 +SA,2024-02,LPG,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,LPG,RECEIPTS,KBD,0.0000,3 +SA,2024-02,LPG,RECEIPTS,KL,0.0000,3 +SA,2024-02,LPG,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,LPG,REFGROUT,CONVBBL,11600.0000,3 +SA,2024-02,LPG,REFGROUT,KBBL,754.0000,3 +SA,2024-02,LPG,REFGROUT,KBD,26.0000,3 +SA,2024-02,LPG,REFGROUT,KL,119.8766,3 +SA,2024-02,LPG,REFGROUT,KTONS,65.0000,3 +SA,2024-02,LPG,STATDIFF,CONVBBL,11600.0000,3 +SA,2024-02,LPG,STATDIFF,KBBL,0.0000,3 +SA,2024-02,LPG,STATDIFF,KBD,0.0000,3 +SA,2024-02,LPG,STATDIFF,KL,0.0000,3 +SA,2024-02,LPG,STATDIFF,KTONS,0.0000,3 +SA,2024-02,LPG,STOCKCH,CONVBBL,11600.0000,3 +SA,2024-02,LPG,STOCKCH,KBBL,524.0000,3 +SA,2024-02,LPG,STOCKCH,KBD,x,3 +SA,2024-02,LPG,STOCKCH,KL,83.3095,3 +SA,2024-02,LPG,STOCKCH,KTONS,45.1724,3 +SA,2024-02,LPG,TOTDEMO,CONVBBL,11600.0000,3 +SA,2024-02,LPG,TOTDEMO,KBBL,2262.0000,3 +SA,2024-02,LPG,TOTDEMO,KBD,78.0000,3 +SA,2024-02,LPG,TOTDEMO,KL,359.6299,3 +SA,2024-02,LPG,TOTDEMO,KTONS,195.0000,3 +SA,2024-02,LPG,TOTEXPSB,CONVBBL,11600.0000,3 +SA,2024-02,LPG,TOTEXPSB,KBBL,0.0000,3 +SA,2024-02,LPG,TOTEXPSB,KBD,0.0000,3 +SA,2024-02,LPG,TOTEXPSB,KL,0.0000,3 +SA,2024-02,LPG,TOTEXPSB,KTONS,0.0000,3 +SA,2024-02,LPG,TOTIMPSB,CONVBBL,11600.0000,3 +SA,2024-02,LPG,TOTIMPSB,KBBL,0.0000,3 +SA,2024-02,LPG,TOTIMPSB,KBD,0.0000,3 +SA,2024-02,LPG,TOTIMPSB,KL,0.0000,3 +SA,2024-02,LPG,TOTIMPSB,KTONS,0.0000,3 +SA,2024-03,LPG,CLOSTLV,CONVBBL,11600.0000,3 +SA,2024-03,LPG,CLOSTLV,KBBL,682.0000,3 +SA,2024-03,LPG,CLOSTLV,KBD,x,3 +SA,2024-03,LPG,CLOSTLV,KL,108.4295,3 +SA,2024-03,LPG,CLOSTLV,KTONS,58.7931,3 +SA,2024-03,LPG,IPTRANSF,CONVBBL,11600.0000,3 +SA,2024-03,LPG,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,LPG,IPTRANSF,KBD,0.0000,3 +SA,2024-03,LPG,IPTRANSF,KL,0.0000,3 +SA,2024-03,LPG,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,LPG,PTRANSF,CONVBBL,11600.0000,3 +SA,2024-03,LPG,PTRANSF,KBBL,1829.0000,3 +SA,2024-03,LPG,PTRANSF,KBD,59.0000,3 +SA,2024-03,LPG,PTRANSF,KL,290.7883,3 +SA,2024-03,LPG,PTRANSF,KTONS,157.6724,3 +SA,2024-03,LPG,RECEIPTS,CONVBBL,11600.0000,3 +SA,2024-03,LPG,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,LPG,RECEIPTS,KBD,0.0000,3 +SA,2024-03,LPG,RECEIPTS,KL,0.0000,3 +SA,2024-03,LPG,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,LPG,REFGROUT,CONVBBL,11600.0000,3 +SA,2024-03,LPG,REFGROUT,KBBL,1302.0000,3 +SA,2024-03,LPG,REFGROUT,KBD,42.0000,3 +SA,2024-03,LPG,REFGROUT,KL,207.0018,3 +SA,2024-03,LPG,REFGROUT,KTONS,112.2414,3 +SA,2024-03,LPG,STATDIFF,CONVBBL,11600.0000,3 +SA,2024-03,LPG,STATDIFF,KBBL,0.0000,3 +SA,2024-03,LPG,STATDIFF,KBD,0.0000,3 +SA,2024-03,LPG,STATDIFF,KL,0.0000,3 +SA,2024-03,LPG,STATDIFF,KTONS,0.0000,3 +SA,2024-03,LPG,STOCKCH,CONVBBL,11600.0000,3 +SA,2024-03,LPG,STOCKCH,KBBL,785.0000,3 +SA,2024-03,LPG,STOCKCH,KBD,x,3 +SA,2024-03,LPG,STOCKCH,KL,124.8052,3 +SA,2024-03,LPG,STOCKCH,KTONS,67.6724,3 +SA,2024-03,LPG,TOTDEMO,CONVBBL,11600.0000,3 +SA,2024-03,LPG,TOTDEMO,KBBL,2356.0000,3 +SA,2024-03,LPG,TOTDEMO,KBD,76.0000,3 +SA,2024-03,LPG,TOTDEMO,KL,374.5747,3 +SA,2024-03,LPG,TOTDEMO,KTONS,203.1034,3 +SA,2024-03,LPG,TOTEXPSB,CONVBBL,11600.0000,3 +SA,2024-03,LPG,TOTEXPSB,KBBL,0.0000,3 +SA,2024-03,LPG,TOTEXPSB,KBD,0.0000,3 +SA,2024-03,LPG,TOTEXPSB,KL,0.0000,3 +SA,2024-03,LPG,TOTEXPSB,KTONS,0.0000,3 +SA,2024-03,LPG,TOTIMPSB,CONVBBL,11600.0000,3 +SA,2024-03,LPG,TOTIMPSB,KBBL,0.0000,3 +SA,2024-03,LPG,TOTIMPSB,KBD,0.0000,3 +SA,2024-03,LPG,TOTIMPSB,KL,0.0000,3 +SA,2024-03,LPG,TOTIMPSB,KTONS,0.0000,3 +SA,2024-01,NAPHTHA,CLOSTLV,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,CLOSTLV,KBBL,4718.0000,3 +SA,2024-01,NAPHTHA,CLOSTLV,KBD,x,3 +SA,2024-01,NAPHTHA,CLOSTLV,KL,750.1033,3 +SA,2024-01,NAPHTHA,CLOSTLV,KTONS,539.8169,3 +SA,2024-01,NAPHTHA,IPTRANSF,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,NAPHTHA,IPTRANSF,KBD,0.0000,3 +SA,2024-01,NAPHTHA,IPTRANSF,KL,0.0000,3 +SA,2024-01,NAPHTHA,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,NAPHTHA,PTRANSF,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,PTRANSF,KBBL,2418.0000,3 +SA,2024-01,NAPHTHA,PTRANSF,KBD,78.0000,3 +SA,2024-01,NAPHTHA,PTRANSF,KL,384.4319,3 +SA,2024-01,NAPHTHA,PTRANSF,KTONS,276.6590,3 +SA,2024-01,NAPHTHA,RECEIPTS,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,NAPHTHA,RECEIPTS,KBD,0.0000,3 +SA,2024-01,NAPHTHA,RECEIPTS,KL,0.0000,3 +SA,2024-01,NAPHTHA,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,NAPHTHA,REFGROUT,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,REFGROUT,KBBL,775.0000,3 +SA,2024-01,NAPHTHA,REFGROUT,KBD,25.0000,3 +SA,2024-01,NAPHTHA,REFGROUT,KL,123.2154,3 +SA,2024-01,NAPHTHA,REFGROUT,KTONS,88.6728,3 +SA,2024-01,NAPHTHA,STATDIFF,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,STATDIFF,KBBL,0.0000,3 +SA,2024-01,NAPHTHA,STATDIFF,KBD,0.0000,3 +SA,2024-01,NAPHTHA,STATDIFF,KL,0.0000,3 +SA,2024-01,NAPHTHA,STATDIFF,KTONS,0.0000,3 +SA,2024-01,NAPHTHA,STOCKCH,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,STOCKCH,KBBL,140.0000,3 +SA,2024-01,NAPHTHA,STOCKCH,KBD,x,3 +SA,2024-01,NAPHTHA,STOCKCH,KL,22.2583,3 +SA,2024-01,NAPHTHA,STOCKCH,KTONS,16.0183,3 +SA,2024-01,NAPHTHA,TOTDEMO,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,TOTDEMO,KBBL,0.0000,3 +SA,2024-01,NAPHTHA,TOTDEMO,KBD,0.0000,3 +SA,2024-01,NAPHTHA,TOTDEMO,KL,0.0000,3 +SA,2024-01,NAPHTHA,TOTDEMO,KTONS,0.0000,3 +SA,2024-01,NAPHTHA,TOTEXPSB,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,TOTEXPSB,KBBL,3069.0000,3 +SA,2024-01,NAPHTHA,TOTEXPSB,KBD,99.0000,3 +SA,2024-01,NAPHTHA,TOTEXPSB,KL,487.9328,3 +SA,2024-01,NAPHTHA,TOTEXPSB,KTONS,351.1442,3 +SA,2024-01,NAPHTHA,TOTIMPSB,CONVBBL,8740.0000,3 +SA,2024-01,NAPHTHA,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,NAPHTHA,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,NAPHTHA,TOTIMPSB,KL,0.0000,3 +SA,2024-01,NAPHTHA,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,NAPHTHA,CLOSTLV,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,CLOSTLV,KBBL,3829.0000,3 +SA,2024-02,NAPHTHA,CLOSTLV,KBD,x,3 +SA,2024-02,NAPHTHA,CLOSTLV,KL,608.7634,3 +SA,2024-02,NAPHTHA,CLOSTLV,KTONS,438.1007,3 +SA,2024-02,NAPHTHA,IPTRANSF,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,NAPHTHA,IPTRANSF,KBD,0.0000,3 +SA,2024-02,NAPHTHA,IPTRANSF,KL,0.0000,3 +SA,2024-02,NAPHTHA,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,NAPHTHA,PTRANSF,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,PTRANSF,KBBL,2784.0000,3 +SA,2024-02,NAPHTHA,PTRANSF,KBD,96.0000,3 +SA,2024-02,NAPHTHA,PTRANSF,KL,442.6214,3 +SA,2024-02,NAPHTHA,PTRANSF,KTONS,318.5355,3 +SA,2024-02,NAPHTHA,RECEIPTS,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,NAPHTHA,RECEIPTS,KBD,0.0000,3 +SA,2024-02,NAPHTHA,RECEIPTS,KL,0.0000,3 +SA,2024-02,NAPHTHA,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,NAPHTHA,REFGROUT,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,REFGROUT,KBBL,29.0000,3 +SA,2024-02,NAPHTHA,REFGROUT,KBD,1.0000,3 +SA,2024-02,NAPHTHA,REFGROUT,KL,4.6106,3 +SA,2024-02,NAPHTHA,REFGROUT,KTONS,3.3181,3 +SA,2024-02,NAPHTHA,STATDIFF,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,STATDIFF,KBBL,0.0000,3 +SA,2024-02,NAPHTHA,STATDIFF,KBD,0.0000,3 +SA,2024-02,NAPHTHA,STATDIFF,KL,0.0000,3 +SA,2024-02,NAPHTHA,STATDIFF,KTONS,0.0000,3 +SA,2024-02,NAPHTHA,STOCKCH,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,STOCKCH,KBBL,88.0000,3 +SA,2024-02,NAPHTHA,STOCKCH,KBD,x,3 +SA,2024-02,NAPHTHA,STOCKCH,KL,13.9909,3 +SA,2024-02,NAPHTHA,STOCKCH,KTONS,10.0686,3 +SA,2024-02,NAPHTHA,TOTDEMO,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,TOTDEMO,KBBL,0.0000,3 +SA,2024-02,NAPHTHA,TOTDEMO,KBD,0.0000,3 +SA,2024-02,NAPHTHA,TOTDEMO,KL,0.0000,3 +SA,2024-02,NAPHTHA,TOTDEMO,KTONS,0.0000,3 +SA,2024-02,NAPHTHA,TOTEXPSB,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,TOTEXPSB,KBBL,2726.0000,3 +SA,2024-02,NAPHTHA,TOTEXPSB,KBD,94.0000,3 +SA,2024-02,NAPHTHA,TOTEXPSB,KL,433.4001,3 +SA,2024-02,NAPHTHA,TOTEXPSB,KTONS,311.8993,3 +SA,2024-02,NAPHTHA,TOTIMPSB,CONVBBL,8740.0000,3 +SA,2024-02,NAPHTHA,TOTIMPSB,KBBL,0.0000,3 +SA,2024-02,NAPHTHA,TOTIMPSB,KBD,0.0000,3 +SA,2024-02,NAPHTHA,TOTIMPSB,KL,0.0000,3 +SA,2024-02,NAPHTHA,TOTIMPSB,KTONS,0.0000,3 +SA,2024-03,NAPHTHA,CLOSTLV,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,CLOSTLV,KBBL,3481.0000,3 +SA,2024-03,NAPHTHA,CLOSTLV,KBD,x,3 +SA,2024-03,NAPHTHA,CLOSTLV,KL,553.4357,3 +SA,2024-03,NAPHTHA,CLOSTLV,KTONS,398.2838,3 +SA,2024-03,NAPHTHA,IPTRANSF,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,NAPHTHA,IPTRANSF,KBD,0.0000,3 +SA,2024-03,NAPHTHA,IPTRANSF,KL,0.0000,3 +SA,2024-03,NAPHTHA,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,NAPHTHA,PTRANSF,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,PTRANSF,KBBL,3193.0000,3 +SA,2024-03,NAPHTHA,PTRANSF,KBD,103.0000,3 +SA,2024-03,NAPHTHA,PTRANSF,KL,507.6473,3 +SA,2024-03,NAPHTHA,PTRANSF,KTONS,365.3318,3 +SA,2024-03,NAPHTHA,RECEIPTS,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,NAPHTHA,RECEIPTS,KBD,0.0000,3 +SA,2024-03,NAPHTHA,RECEIPTS,KL,0.0000,3 +SA,2024-03,NAPHTHA,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,NAPHTHA,REFGROUT,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,REFGROUT,KBBL,-1054.0000,3 +SA,2024-03,NAPHTHA,REFGROUT,KBD,-34.0000,3 +SA,2024-03,NAPHTHA,REFGROUT,KL,-167.5729,3 +SA,2024-03,NAPHTHA,REFGROUT,KTONS,-120.5950,3 +SA,2024-03,NAPHTHA,STATDIFF,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,STATDIFF,KBBL,0.0000,3 +SA,2024-03,NAPHTHA,STATDIFF,KBD,0.0000,3 +SA,2024-03,NAPHTHA,STATDIFF,KL,0.0000,3 +SA,2024-03,NAPHTHA,STATDIFF,KTONS,0.0000,3 +SA,2024-03,NAPHTHA,STOCKCH,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,STOCKCH,KBBL,-1395.0000,3 +SA,2024-03,NAPHTHA,STOCKCH,KBD,x,3 +SA,2024-03,NAPHTHA,STOCKCH,KL,-221.7877,3 +SA,2024-03,NAPHTHA,STOCKCH,KTONS,-159.6110,3 +SA,2024-03,NAPHTHA,TOTDEMO,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,TOTDEMO,KBBL,0.0000,3 +SA,2024-03,NAPHTHA,TOTDEMO,KBD,0.0000,3 +SA,2024-03,NAPHTHA,TOTDEMO,KL,0.0000,3 +SA,2024-03,NAPHTHA,TOTDEMO,KTONS,0.0000,3 +SA,2024-03,NAPHTHA,TOTEXPSB,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,TOTEXPSB,KBBL,3534.0000,3 +SA,2024-03,NAPHTHA,TOTEXPSB,KBD,114.0000,3 +SA,2024-03,NAPHTHA,TOTEXPSB,KL,561.8621,3 +SA,2024-03,NAPHTHA,TOTEXPSB,KTONS,404.3478,3 +SA,2024-03,NAPHTHA,TOTIMPSB,CONVBBL,8740.0000,3 +SA,2024-03,NAPHTHA,TOTIMPSB,KBBL,0.0000,3 +SA,2024-03,NAPHTHA,TOTIMPSB,KBD,0.0000,3 +SA,2024-03,NAPHTHA,TOTIMPSB,KL,0.0000,3 +SA,2024-03,NAPHTHA,TOTIMPSB,KTONS,0.0000,3 +SA,2024-01,ONONSPEC,CLOSTLV,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,CLOSTLV,KBBL,1143.0000,3 +SA,2024-01,ONONSPEC,CLOSTLV,KBD,x,3 +SA,2024-01,ONONSPEC,CLOSTLV,KL,181.7228,3 +SA,2024-01,ONONSPEC,CLOSTLV,KTONS,135.2663,3 +SA,2024-01,ONONSPEC,IPTRANSF,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,ONONSPEC,IPTRANSF,KBD,0.0000,3 +SA,2024-01,ONONSPEC,IPTRANSF,KL,0.0000,3 +SA,2024-01,ONONSPEC,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,ONONSPEC,PTRANSF,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,PTRANSF,KBBL,-775.0000,3 +SA,2024-01,ONONSPEC,PTRANSF,KBD,-25.0000,3 +SA,2024-01,ONONSPEC,PTRANSF,KL,-123.2154,3 +SA,2024-01,ONONSPEC,PTRANSF,KTONS,-91.7160,3 +SA,2024-01,ONONSPEC,RECEIPTS,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,RECEIPTS,KBBL,9548.0000,3 +SA,2024-01,ONONSPEC,RECEIPTS,KBD,308.0000,3 +SA,2024-01,ONONSPEC,RECEIPTS,KL,1518.0133,3 +SA,2024-01,ONONSPEC,RECEIPTS,KTONS,1129.9408,3 +SA,2024-01,ONONSPEC,REFGROUT,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,REFGROUT,KBBL,3193.0000,3 +SA,2024-01,ONONSPEC,REFGROUT,KBD,103.0000,3 +SA,2024-01,ONONSPEC,REFGROUT,KL,507.6473,3 +SA,2024-01,ONONSPEC,REFGROUT,KTONS,377.8698,3 +SA,2024-01,ONONSPEC,STATDIFF,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,STATDIFF,KBBL,0.0000,3 +SA,2024-01,ONONSPEC,STATDIFF,KBD,0.0000,3 +SA,2024-01,ONONSPEC,STATDIFF,KL,0.0000,3 +SA,2024-01,ONONSPEC,STATDIFF,KTONS,0.0000,3 +SA,2024-01,ONONSPEC,STOCKCH,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,STOCKCH,KBBL,-2706.0000,3 +SA,2024-01,ONONSPEC,STOCKCH,KBD,x,3 +SA,2024-01,ONONSPEC,STOCKCH,KL,-430.2204,3 +SA,2024-01,ONONSPEC,STOCKCH,KTONS,-320.2367,3 +SA,2024-01,ONONSPEC,TOTDEMO,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,TOTDEMO,KBBL,11656.0000,3 +SA,2024-01,ONONSPEC,TOTDEMO,KBD,376.0000,3 +SA,2024-01,ONONSPEC,TOTDEMO,KL,1853.1591,3 +SA,2024-01,ONONSPEC,TOTDEMO,KTONS,1379.4083,3 +SA,2024-01,ONONSPEC,TOTEXPSB,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,TOTEXPSB,KBBL,3007.0000,3 +SA,2024-01,ONONSPEC,TOTEXPSB,KBD,97.0000,3 +SA,2024-01,ONONSPEC,TOTEXPSB,KL,478.0756,3 +SA,2024-01,ONONSPEC,TOTEXPSB,KTONS,355.8580,3 +SA,2024-01,ONONSPEC,TOTIMPSB,CONVBBL,8450.0000,3 +SA,2024-01,ONONSPEC,TOTIMPSB,KBBL,0.0000,3 +SA,2024-01,ONONSPEC,TOTIMPSB,KBD,0.0000,3 +SA,2024-01,ONONSPEC,TOTIMPSB,KL,0.0000,3 +SA,2024-01,ONONSPEC,TOTIMPSB,KTONS,0.0000,3 +SA,2024-02,ONONSPEC,CLOSTLV,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,CLOSTLV,KBBL,1480.0000,3 +SA,2024-02,ONONSPEC,CLOSTLV,KBD,x,3 +SA,2024-02,ONONSPEC,CLOSTLV,KL,235.3016,3 +SA,2024-02,ONONSPEC,CLOSTLV,KTONS,175.1479,3 +SA,2024-02,ONONSPEC,IPTRANSF,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,ONONSPEC,IPTRANSF,KBD,0.0000,3 +SA,2024-02,ONONSPEC,IPTRANSF,KL,0.0000,3 +SA,2024-02,ONONSPEC,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,ONONSPEC,PTRANSF,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,PTRANSF,KBBL,2436.0000,3 +SA,2024-02,ONONSPEC,PTRANSF,KBD,84.0000,3 +SA,2024-02,ONONSPEC,PTRANSF,KL,387.2937,3 +SA,2024-02,ONONSPEC,PTRANSF,KTONS,288.2840,3 +SA,2024-02,ONONSPEC,RECEIPTS,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,RECEIPTS,KBBL,10440.0000,3 +SA,2024-02,ONONSPEC,RECEIPTS,KBD,360.0000,3 +SA,2024-02,ONONSPEC,RECEIPTS,KL,1659.8302,3 +SA,2024-02,ONONSPEC,RECEIPTS,KTONS,1235.5030,3 +SA,2024-02,ONONSPEC,REFGROUT,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,REFGROUT,KBBL,10730.0000,3 +SA,2024-02,ONONSPEC,REFGROUT,KBD,370.0000,3 +SA,2024-02,ONONSPEC,REFGROUT,KL,1705.9366,3 +SA,2024-02,ONONSPEC,REFGROUT,KTONS,1269.8225,3 +SA,2024-02,ONONSPEC,STATDIFF,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,STATDIFF,KBBL,0.0000,3 +SA,2024-02,ONONSPEC,STATDIFF,KBD,0.0000,3 +SA,2024-02,ONONSPEC,STATDIFF,KL,0.0000,3 +SA,2024-02,ONONSPEC,STATDIFF,KTONS,0.0000,3 +SA,2024-02,ONONSPEC,STOCKCH,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,STOCKCH,KBBL,9201.0000,3 +SA,2024-02,ONONSPEC,STOCKCH,KBD,x,3 +SA,2024-02,ONONSPEC,STOCKCH,KL,1462.8446,3 +SA,2024-02,ONONSPEC,STOCKCH,KTONS,1088.8757,3 +SA,2024-02,ONONSPEC,TOTDEMO,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,TOTDEMO,KBBL,12093.0000,3 +SA,2024-02,ONONSPEC,TOTDEMO,KBD,417.0000,3 +SA,2024-02,ONONSPEC,TOTDEMO,KL,1922.6366,3 +SA,2024-02,ONONSPEC,TOTDEMO,KTONS,1431.1243,3 +SA,2024-02,ONONSPEC,TOTEXPSB,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,TOTEXPSB,KBBL,2291.0000,3 +SA,2024-02,ONONSPEC,TOTEXPSB,KBD,79.0000,3 +SA,2024-02,ONONSPEC,TOTEXPSB,KL,364.2405,3 +SA,2024-02,ONONSPEC,TOTEXPSB,KTONS,271.1243,3 +SA,2024-02,ONONSPEC,TOTIMPSB,CONVBBL,8450.0000,3 +SA,2024-02,ONONSPEC,TOTIMPSB,KBBL,0.0000,3 +SA,2024-02,ONONSPEC,TOTIMPSB,KBD,0.0000,3 +SA,2024-02,ONONSPEC,TOTIMPSB,KL,0.0000,3 +SA,2024-02,ONONSPEC,TOTIMPSB,KTONS,0.0000,3 +SA,2024-03,ONONSPEC,CLOSTLV,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,CLOSTLV,KBBL,1513.0000,3 +SA,2024-03,ONONSPEC,CLOSTLV,KBD,x,3 +SA,2024-03,ONONSPEC,CLOSTLV,KL,240.5482,3 +SA,2024-03,ONONSPEC,CLOSTLV,KTONS,179.0533,3 +SA,2024-03,ONONSPEC,IPTRANSF,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,ONONSPEC,IPTRANSF,KBD,0.0000,3 +SA,2024-03,ONONSPEC,IPTRANSF,KL,0.0000,3 +SA,2024-03,ONONSPEC,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,ONONSPEC,PTRANSF,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,PTRANSF,KBBL,3720.0000,3 +SA,2024-03,ONONSPEC,PTRANSF,KBD,120.0000,3 +SA,2024-03,ONONSPEC,PTRANSF,KL,591.4337,3 +SA,2024-03,ONONSPEC,PTRANSF,KTONS,440.2367,3 +SA,2024-03,ONONSPEC,RECEIPTS,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,RECEIPTS,KBBL,9517.0000,3 +SA,2024-03,ONONSPEC,RECEIPTS,KBD,307.0000,3 +SA,2024-03,ONONSPEC,RECEIPTS,KL,1513.0847,3 +SA,2024-03,ONONSPEC,RECEIPTS,KTONS,1126.2722,3 +SA,2024-03,ONONSPEC,REFGROUT,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,REFGROUT,KBBL,7564.0000,3 +SA,2024-03,ONONSPEC,REFGROUT,KBD,244.0000,3 +SA,2024-03,ONONSPEC,REFGROUT,KL,1202.5820,3 +SA,2024-03,ONONSPEC,REFGROUT,KTONS,895.1479,3 +SA,2024-03,ONONSPEC,STATDIFF,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,STATDIFF,KBBL,0.0000,3 +SA,2024-03,ONONSPEC,STATDIFF,KBD,0.0000,3 +SA,2024-03,ONONSPEC,STATDIFF,KL,0.0000,3 +SA,2024-03,ONONSPEC,STATDIFF,KTONS,0.0000,3 +SA,2024-03,ONONSPEC,STOCKCH,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,STOCKCH,KBBL,6712.0000,3 +SA,2024-03,ONONSPEC,STOCKCH,KBD,x,3 +SA,2024-03,ONONSPEC,STOCKCH,KL,1067.1246,3 +SA,2024-03,ONONSPEC,STOCKCH,KTONS,794.3195,3 +SA,2024-03,ONONSPEC,TOTDEMO,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,TOTDEMO,KBBL,10850.0000,3 +SA,2024-03,ONONSPEC,TOTDEMO,KBD,350.0000,3 +SA,2024-03,ONONSPEC,TOTDEMO,KL,1725.0151,3 +SA,2024-03,ONONSPEC,TOTDEMO,KTONS,1284.0237,3 +SA,2024-03,ONONSPEC,TOTEXPSB,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,TOTEXPSB,KBBL,3224.0000,3 +SA,2024-03,ONONSPEC,TOTEXPSB,KBD,104.0000,3 +SA,2024-03,ONONSPEC,TOTEXPSB,KL,512.5759,3 +SA,2024-03,ONONSPEC,TOTEXPSB,KTONS,381.5385,3 +SA,2024-03,ONONSPEC,TOTIMPSB,CONVBBL,8450.0000,3 +SA,2024-03,ONONSPEC,TOTIMPSB,KBBL,0.0000,3 +SA,2024-03,ONONSPEC,TOTIMPSB,KBD,0.0000,3 +SA,2024-03,ONONSPEC,TOTIMPSB,KL,0.0000,3 +SA,2024-03,ONONSPEC,TOTIMPSB,KTONS,0.0000,3 +SA,2024-01,RESFUEL,CLOSTLV,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,CLOSTLV,KBBL,1137.0000,3 +SA,2024-01,RESFUEL,CLOSTLV,KBD,x,3 +SA,2024-01,RESFUEL,CLOSTLV,KL,180.7689,3 +SA,2024-01,RESFUEL,CLOSTLV,KTONS,174.9231,3 +SA,2024-01,RESFUEL,IPTRANSF,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,RESFUEL,IPTRANSF,KBD,0.0000,3 +SA,2024-01,RESFUEL,IPTRANSF,KL,0.0000,3 +SA,2024-01,RESFUEL,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,RESFUEL,PTRANSF,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,PTRANSF,KBBL,992.0000,3 +SA,2024-01,RESFUEL,PTRANSF,KBD,32.0000,3 +SA,2024-01,RESFUEL,PTRANSF,KL,157.7157,3 +SA,2024-01,RESFUEL,PTRANSF,KTONS,152.6154,3 +SA,2024-01,RESFUEL,RECEIPTS,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,RECEIPTS,KBBL,0.0000,3 +SA,2024-01,RESFUEL,RECEIPTS,KBD,0.0000,3 +SA,2024-01,RESFUEL,RECEIPTS,KL,0.0000,3 +SA,2024-01,RESFUEL,RECEIPTS,KTONS,0.0000,3 +SA,2024-01,RESFUEL,REFGROUT,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,REFGROUT,KBBL,14074.0000,3 +SA,2024-01,RESFUEL,REFGROUT,KBD,454.0000,3 +SA,2024-01,RESFUEL,REFGROUT,KL,2237.5910,3 +SA,2024-01,RESFUEL,REFGROUT,KTONS,2165.2308,3 +SA,2024-01,RESFUEL,STATDIFF,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,STATDIFF,KBBL,0.0000,3 +SA,2024-01,RESFUEL,STATDIFF,KBD,0.0000,3 +SA,2024-01,RESFUEL,STATDIFF,KL,0.0000,3 +SA,2024-01,RESFUEL,STATDIFF,KTONS,0.0000,3 +SA,2024-01,RESFUEL,STOCKCH,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,STOCKCH,KBBL,-1754.0000,3 +SA,2024-01,RESFUEL,STOCKCH,KBD,x,3 +SA,2024-01,RESFUEL,STOCKCH,KL,-278.8642,3 +SA,2024-01,RESFUEL,STOCKCH,KTONS,-269.8462,3 +SA,2024-01,RESFUEL,TOTDEMO,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,TOTDEMO,KBBL,18569.0000,3 +SA,2024-01,RESFUEL,TOTDEMO,KBD,599.0000,3 +SA,2024-01,RESFUEL,TOTDEMO,KL,2952.2401,3 +SA,2024-01,RESFUEL,TOTDEMO,KTONS,2856.7692,3 +SA,2024-01,RESFUEL,TOTEXPSB,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,TOTEXPSB,KBBL,4929.0000,3 +SA,2024-01,RESFUEL,TOTEXPSB,KBD,159.0000,3 +SA,2024-01,RESFUEL,TOTEXPSB,KL,783.6497,3 +SA,2024-01,RESFUEL,TOTEXPSB,KTONS,758.3077,3 +SA,2024-01,RESFUEL,TOTIMPSB,CONVBBL,6500.0000,3 +SA,2024-01,RESFUEL,TOTIMPSB,KBBL,6665.0000,3 +SA,2024-01,RESFUEL,TOTIMPSB,KBD,215.0000,3 +SA,2024-01,RESFUEL,TOTIMPSB,KL,1059.6521,3 +SA,2024-01,RESFUEL,TOTIMPSB,KTONS,1025.3846,3 +SA,2024-02,RESFUEL,CLOSTLV,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,CLOSTLV,KBBL,5716.0000,3 +SA,2024-02,RESFUEL,CLOSTLV,KBD,x,3 +SA,2024-02,RESFUEL,CLOSTLV,KL,908.7729,3 +SA,2024-02,RESFUEL,CLOSTLV,KTONS,879.3846,3 +SA,2024-02,RESFUEL,IPTRANSF,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,RESFUEL,IPTRANSF,KBD,0.0000,3 +SA,2024-02,RESFUEL,IPTRANSF,KL,0.0000,3 +SA,2024-02,RESFUEL,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,RESFUEL,PTRANSF,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,PTRANSF,KBBL,1653.0000,3 +SA,2024-02,RESFUEL,PTRANSF,KBD,57.0000,3 +SA,2024-02,RESFUEL,PTRANSF,KL,262.8064,3 +SA,2024-02,RESFUEL,PTRANSF,KTONS,254.3077,3 +SA,2024-02,RESFUEL,RECEIPTS,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,RECEIPTS,KBBL,0.0000,3 +SA,2024-02,RESFUEL,RECEIPTS,KBD,0.0000,3 +SA,2024-02,RESFUEL,RECEIPTS,KL,0.0000,3 +SA,2024-02,RESFUEL,RECEIPTS,KTONS,0.0000,3 +SA,2024-02,RESFUEL,REFGROUT,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,REFGROUT,KBBL,13195.0000,3 +SA,2024-02,RESFUEL,REFGROUT,KBD,455.0000,3 +SA,2024-02,RESFUEL,REFGROUT,KL,2097.8409,3 +SA,2024-02,RESFUEL,REFGROUT,KTONS,2030.0000,3 +SA,2024-02,RESFUEL,STATDIFF,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,STATDIFF,KBBL,0.0000,3 +SA,2024-02,RESFUEL,STATDIFF,KBD,0.0000,3 +SA,2024-02,RESFUEL,STATDIFF,KL,0.0000,3 +SA,2024-02,RESFUEL,STATDIFF,KTONS,0.0000,3 +SA,2024-02,RESFUEL,STOCKCH,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,STOCKCH,KBBL,-2381.0000,3 +SA,2024-02,RESFUEL,STOCKCH,KBD,x,3 +SA,2024-02,RESFUEL,STOCKCH,KL,-378.5494,3 +SA,2024-02,RESFUEL,STOCKCH,KTONS,-366.3077,3 +SA,2024-02,RESFUEL,TOTDEMO,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,TOTDEMO,KBBL,14500.0000,3 +SA,2024-02,RESFUEL,TOTDEMO,KBD,500.0000,3 +SA,2024-02,RESFUEL,TOTDEMO,KL,2305.3197,3 +SA,2024-02,RESFUEL,TOTDEMO,KTONS,2230.7692,3 +SA,2024-02,RESFUEL,TOTEXPSB,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,TOTEXPSB,KBBL,6351.0000,3 +SA,2024-02,RESFUEL,TOTEXPSB,KBD,219.0000,3 +SA,2024-02,RESFUEL,TOTEXPSB,KL,1009.7300,3 +SA,2024-02,RESFUEL,TOTEXPSB,KTONS,977.0769,3 +SA,2024-02,RESFUEL,TOTIMPSB,CONVBBL,6500.0000,3 +SA,2024-02,RESFUEL,TOTIMPSB,KBBL,3625.0000,3 +SA,2024-02,RESFUEL,TOTIMPSB,KBD,125.0000,3 +SA,2024-02,RESFUEL,TOTIMPSB,KL,576.3299,3 +SA,2024-02,RESFUEL,TOTIMPSB,KTONS,557.6923,3 +SA,2024-03,RESFUEL,CLOSTLV,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,CLOSTLV,KBBL,6829.0000,3 +SA,2024-03,RESFUEL,CLOSTLV,KBD,x,3 +SA,2024-03,RESFUEL,CLOSTLV,KL,1085.7261,3 +SA,2024-03,RESFUEL,CLOSTLV,KTONS,1050.6154,3 +SA,2024-03,RESFUEL,IPTRANSF,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,RESFUEL,IPTRANSF,KBD,0.0000,3 +SA,2024-03,RESFUEL,IPTRANSF,KL,0.0000,3 +SA,2024-03,RESFUEL,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,RESFUEL,PTRANSF,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,PTRANSF,KBBL,930.0000,3 +SA,2024-03,RESFUEL,PTRANSF,KBD,30.0000,3 +SA,2024-03,RESFUEL,PTRANSF,KL,147.8584,3 +SA,2024-03,RESFUEL,PTRANSF,KTONS,143.0769,3 +SA,2024-03,RESFUEL,RECEIPTS,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,RECEIPTS,KBBL,0.0000,3 +SA,2024-03,RESFUEL,RECEIPTS,KBD,0.0000,3 +SA,2024-03,RESFUEL,RECEIPTS,KL,0.0000,3 +SA,2024-03,RESFUEL,RECEIPTS,KTONS,0.0000,3 +SA,2024-03,RESFUEL,REFGROUT,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,REFGROUT,KBBL,13423.0000,3 +SA,2024-03,RESFUEL,REFGROUT,KBD,433.0000,3 +SA,2024-03,RESFUEL,REFGROUT,KL,2134.0901,3 +SA,2024-03,RESFUEL,REFGROUT,KTONS,2065.0769,3 +SA,2024-03,RESFUEL,STATDIFF,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,STATDIFF,KBBL,0.0000,3 +SA,2024-03,RESFUEL,STATDIFF,KBD,0.0000,3 +SA,2024-03,RESFUEL,STATDIFF,KL,0.0000,3 +SA,2024-03,RESFUEL,STATDIFF,KTONS,0.0000,3 +SA,2024-03,RESFUEL,STOCKCH,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,STOCKCH,KBBL,-2420.0000,3 +SA,2024-03,RESFUEL,STOCKCH,KBD,x,3 +SA,2024-03,RESFUEL,STOCKCH,KL,-384.7499,3 +SA,2024-03,RESFUEL,STOCKCH,KTONS,-372.3077,3 +SA,2024-03,RESFUEL,TOTDEMO,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,TOTDEMO,KBBL,16089.0000,3 +SA,2024-03,RESFUEL,TOTDEMO,KBD,519.0000,3 +SA,2024-03,RESFUEL,TOTDEMO,KL,2557.9510,3 +SA,2024-03,RESFUEL,TOTDEMO,KTONS,2475.2308,3 +SA,2024-03,RESFUEL,TOTEXPSB,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,TOTEXPSB,KBBL,3906.0000,3 +SA,2024-03,RESFUEL,TOTEXPSB,KBD,126.0000,3 +SA,2024-03,RESFUEL,TOTEXPSB,KL,621.0054,3 +SA,2024-03,RESFUEL,TOTEXPSB,KTONS,600.9231,3 +SA,2024-03,RESFUEL,TOTIMPSB,CONVBBL,6500.0000,3 +SA,2024-03,RESFUEL,TOTIMPSB,KBBL,3255.0000,3 +SA,2024-03,RESFUEL,TOTIMPSB,KBD,105.0000,3 +SA,2024-03,RESFUEL,TOTIMPSB,KL,517.5045,3 +SA,2024-03,RESFUEL,TOTIMPSB,KTONS,500.7692,3 +SA,2024-01,TOTPRODS,CLOSTLV,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,CLOSTLV,KBBL,77226.0000,3 +SA,2024-01,TOTPRODS,CLOSTLV,KBD,x,3 +SA,2024-01,TOTPRODS,CLOSTLV,KL,12278.0000,3 +SA,2024-01,TOTPRODS,CLOSTLV,KTONS,9739.0000,3 +SA,2024-01,TOTPRODS,IPTRANSF,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,IPTRANSF,KBBL,0.0000,3 +SA,2024-01,TOTPRODS,IPTRANSF,KBD,0.0000,3 +SA,2024-01,TOTPRODS,IPTRANSF,KL,0.0000,3 +SA,2024-01,TOTPRODS,IPTRANSF,KTONS,0.0000,3 +SA,2024-01,TOTPRODS,PTRANSF,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,PTRANSF,KBBL,7998.0000,3 +SA,2024-01,TOTPRODS,PTRANSF,KBD,258.0000,3 +SA,2024-01,TOTPRODS,PTRANSF,KL,1272.0000,3 +SA,2024-01,TOTPRODS,PTRANSF,KTONS,900.0000,3 +SA,2024-01,TOTPRODS,RECEIPTS,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,RECEIPTS,KBBL,9548.0000,3 +SA,2024-01,TOTPRODS,RECEIPTS,KBD,308.0000,3 +SA,2024-01,TOTPRODS,RECEIPTS,KL,1518.0000,3 +SA,2024-01,TOTPRODS,RECEIPTS,KTONS,1130.0000,3 +SA,2024-01,TOTPRODS,REFGROUT,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,REFGROUT,KBBL,75175.0000,3 +SA,2024-01,TOTPRODS,REFGROUT,KBD,2425.0000,3 +SA,2024-01,TOTPRODS,REFGROUT,KL,11952.0000,3 +SA,2024-01,TOTPRODS,REFGROUT,KTONS,9987.0000,3 +SA,2024-01,TOTPRODS,STATDIFF,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,STATDIFF,KBBL,0.0000,3 +SA,2024-01,TOTPRODS,STATDIFF,KBD,0.0000,3 +SA,2024-01,TOTPRODS,STATDIFF,KL,0.0000,3 +SA,2024-01,TOTPRODS,STATDIFF,KTONS,0.0000,3 +SA,2024-01,TOTPRODS,STOCKCH,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,STOCKCH,KBBL,-3026.0000,3 +SA,2024-01,TOTPRODS,STOCKCH,KBD,x,3 +SA,2024-01,TOTPRODS,STOCKCH,KL,-481.0000,3 +SA,2024-01,TOTPRODS,STOCKCH,KTONS,-447.0000,3 +SA,2024-01,TOTPRODS,TOTDEMO,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,TOTDEMO,KBBL,68758.0000,3 +SA,2024-01,TOTPRODS,TOTDEMO,KBD,2218.0000,3 +SA,2024-01,TOTPRODS,TOTDEMO,KL,10932.0000,3 +SA,2024-01,TOTPRODS,TOTDEMO,KTONS,9050.0000,3 +SA,2024-01,TOTPRODS,TOTEXPSB,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,TOTEXPSB,KBBL,38533.0000,3 +SA,2024-01,TOTPRODS,TOTEXPSB,KBD,1243.0000,3 +SA,2024-01,TOTPRODS,TOTEXPSB,KL,6126.0000,3 +SA,2024-01,TOTPRODS,TOTEXPSB,KTONS,5045.0000,3 +SA,2024-01,TOTPRODS,TOTIMPSB,CONVBBL,7600.0000,3 +SA,2024-01,TOTPRODS,TOTIMPSB,KBBL,11563.0000,3 +SA,2024-01,TOTPRODS,TOTIMPSB,KBD,373.0000,3 +SA,2024-01,TOTPRODS,TOTIMPSB,KL,1838.0000,3 +SA,2024-01,TOTPRODS,TOTIMPSB,KTONS,1635.0000,3 +SA,2024-02,TOTPRODS,CLOSTLV,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,CLOSTLV,KBBL,85120.0000,3 +SA,2024-02,TOTPRODS,CLOSTLV,KBD,x,3 +SA,2024-02,TOTPRODS,CLOSTLV,KL,13533.0000,3 +SA,2024-02,TOTPRODS,CLOSTLV,KTONS,10862.0000,3 +SA,2024-02,TOTPRODS,IPTRANSF,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,IPTRANSF,KBBL,0.0000,3 +SA,2024-02,TOTPRODS,IPTRANSF,KBD,0.0000,3 +SA,2024-02,TOTPRODS,IPTRANSF,KL,0.0000,3 +SA,2024-02,TOTPRODS,IPTRANSF,KTONS,0.0000,3 +SA,2024-02,TOTPRODS,PTRANSF,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,PTRANSF,KBBL,12325.0000,3 +SA,2024-02,TOTPRODS,PTRANSF,KBD,425.0000,3 +SA,2024-02,TOTPRODS,PTRANSF,KL,1960.0000,3 +SA,2024-02,TOTPRODS,PTRANSF,KTONS,1458.0000,3 +SA,2024-02,TOTPRODS,RECEIPTS,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,RECEIPTS,KBBL,10440.0000,3 +SA,2024-02,TOTPRODS,RECEIPTS,KBD,360.0000,3 +SA,2024-02,TOTPRODS,RECEIPTS,KL,1660.0000,3 +SA,2024-02,TOTPRODS,RECEIPTS,KTONS,1236.0000,3 +SA,2024-02,TOTPRODS,REFGROUT,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,REFGROUT,KBBL,77633.0000,3 +SA,2024-02,TOTPRODS,REFGROUT,KBD,2677.0000,3 +SA,2024-02,TOTPRODS,REFGROUT,KL,12343.0000,3 +SA,2024-02,TOTPRODS,REFGROUT,KTONS,10165.0000,3 +SA,2024-02,TOTPRODS,STATDIFF,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,STATDIFF,KBBL,0.0000,3 +SA,2024-02,TOTPRODS,STATDIFF,KBD,0.0000,3 +SA,2024-02,TOTPRODS,STATDIFF,KL,0.0000,3 +SA,2024-02,TOTPRODS,STATDIFF,KTONS,0.0000,3 +SA,2024-02,TOTPRODS,STOCKCH,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,STOCKCH,KBBL,7895.0000,3 +SA,2024-02,TOTPRODS,STOCKCH,KBD,x,3 +SA,2024-02,TOTPRODS,STOCKCH,KL,1255.0000,3 +SA,2024-02,TOTPRODS,STOCKCH,KTONS,834.0000,3 +SA,2024-02,TOTPRODS,TOTDEMO,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,TOTDEMO,KBBL,63684.0000,3 +SA,2024-02,TOTPRODS,TOTDEMO,KBD,2196.0000,3 +SA,2024-02,TOTPRODS,TOTDEMO,KL,10125.0000,3 +SA,2024-02,TOTPRODS,TOTDEMO,KTONS,8281.0000,3 +SA,2024-02,TOTPRODS,TOTEXPSB,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,TOTEXPSB,KBBL,40310.0000,3 +SA,2024-02,TOTPRODS,TOTEXPSB,KBD,1390.0000,3 +SA,2024-02,TOTPRODS,TOTEXPSB,KL,6409.0000,3 +SA,2024-02,TOTPRODS,TOTEXPSB,KTONS,5308.0000,3 +SA,2024-02,TOTPRODS,TOTIMPSB,CONVBBL,7600.0000,3 +SA,2024-02,TOTPRODS,TOTIMPSB,KBBL,11513.0000,3 +SA,2024-02,TOTPRODS,TOTIMPSB,KBD,397.0000,3 +SA,2024-02,TOTPRODS,TOTIMPSB,KL,1830.0000,3 +SA,2024-02,TOTPRODS,TOTIMPSB,KTONS,1568.0000,3 +SA,2024-03,TOTPRODS,CLOSTLV,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,CLOSTLV,KBBL,91054.0000,3 +SA,2024-03,TOTPRODS,CLOSTLV,KBD,x,3 +SA,2024-03,TOTPRODS,CLOSTLV,KL,14476.0000,3 +SA,2024-03,TOTPRODS,CLOSTLV,KTONS,11647.0000,3 +SA,2024-03,TOTPRODS,IPTRANSF,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,IPTRANSF,KBBL,0.0000,3 +SA,2024-03,TOTPRODS,IPTRANSF,KBD,0.0000,3 +SA,2024-03,TOTPRODS,IPTRANSF,KL,0.0000,3 +SA,2024-03,TOTPRODS,IPTRANSF,KTONS,0.0000,3 +SA,2024-03,TOTPRODS,PTRANSF,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,PTRANSF,KBBL,12865.0000,3 +SA,2024-03,TOTPRODS,PTRANSF,KBD,415.0000,3 +SA,2024-03,TOTPRODS,PTRANSF,KL,2045.0000,3 +SA,2024-03,TOTPRODS,PTRANSF,KTONS,1543.0000,3 +SA,2024-03,TOTPRODS,RECEIPTS,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,RECEIPTS,KBBL,9517.0000,3 +SA,2024-03,TOTPRODS,RECEIPTS,KBD,307.0000,3 +SA,2024-03,TOTPRODS,RECEIPTS,KL,1513.0000,3 +SA,2024-03,TOTPRODS,RECEIPTS,KTONS,1126.0000,3 +SA,2024-03,TOTPRODS,REFGROUT,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,REFGROUT,KBBL,79360.0000,3 +SA,2024-03,TOTPRODS,REFGROUT,KBD,2560.0000,3 +SA,2024-03,TOTPRODS,REFGROUT,KL,12617.0000,3 +SA,2024-03,TOTPRODS,REFGROUT,KTONS,10408.0000,3 +SA,2024-03,TOTPRODS,STATDIFF,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,STATDIFF,KBBL,0.0000,3 +SA,2024-03,TOTPRODS,STATDIFF,KBD,0.0000,3 +SA,2024-03,TOTPRODS,STATDIFF,KL,0.0000,3 +SA,2024-03,TOTPRODS,STATDIFF,KTONS,0.0000,3 +SA,2024-03,TOTPRODS,STOCKCH,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,STOCKCH,KBBL,5931.0000,3 +SA,2024-03,TOTPRODS,STOCKCH,KBD,x,3 +SA,2024-03,TOTPRODS,STOCKCH,KL,943.0000,3 +SA,2024-03,TOTPRODS,STOCKCH,KTONS,630.0000,3 +SA,2024-03,TOTPRODS,TOTDEMO,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,TOTDEMO,KBBL,65441.0000,3 +SA,2024-03,TOTPRODS,TOTDEMO,KBD,2111.0000,3 +SA,2024-03,TOTPRODS,TOTDEMO,KL,10404.0000,3 +SA,2024-03,TOTPRODS,TOTDEMO,KTONS,8552.0000,3 +SA,2024-03,TOTPRODS,TOTEXPSB,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,TOTEXPSB,KBBL,38812.0000,3 +SA,2024-03,TOTPRODS,TOTEXPSB,KBD,1252.0000,3 +SA,2024-03,TOTPRODS,TOTEXPSB,KL,6171.0000,3 +SA,2024-03,TOTPRODS,TOTEXPSB,KTONS,5016.0000,3 +SA,2024-03,TOTPRODS,TOTIMPSB,CONVBBL,7600.0000,3 +SA,2024-03,TOTPRODS,TOTIMPSB,KBBL,8494.0000,3 +SA,2024-03,TOTPRODS,TOTIMPSB,KBD,274.0000,3 +SA,2024-03,TOTPRODS,TOTIMPSB,KL,1350.0000,3 +SA,2024-03,TOTPRODS,TOTIMPSB,KTONS,1129.0000,3 +US,2024-01,GASDIES,CLOSTLV,CONVBBL,7460.0000,3 +US,2024-01,GASDIES,CLOSTLV,KBBL,116555.0000,1 +US,2024-01,GASDIES,CLOSTLV,KBD,x,3 +US,2024-01,GASDIES,CLOSTLV,KL,18530.8023,1 +US,2024-01,GASDIES,CLOSTLV,KTONS,15624.0000,1 +US,2024-01,GASDIES,IPTRANSF,CONVBBL,7454.0000,3 +US,2024-01,GASDIES,IPTRANSF,KBBL,1051.0000,1 +US,2024-01,GASDIES,IPTRANSF,KBD,33.9032,1 +US,2024-01,GASDIES,IPTRANSF,KL,167.0982,1 +US,2024-01,GASDIES,IPTRANSF,KTONS,141.0000,1 +US,2024-01,GASDIES,PTRANSF,CONVBBL,..,3 +US,2024-01,GASDIES,PTRANSF,KBBL,0.0000,1 +US,2024-01,GASDIES,PTRANSF,KBD,0.0000,1 +US,2024-01,GASDIES,PTRANSF,KL,-,3 +US,2024-01,GASDIES,PTRANSF,KTONS,0.0000,1 +US,2024-01,GASDIES,RECEIPTS,CONVBBL,7150.0000,3 +US,2024-01,GASDIES,RECEIPTS,KBBL,1766.0000,1 +US,2024-01,GASDIES,RECEIPTS,KBD,56.9677,1 +US,2024-01,GASDIES,RECEIPTS,KL,280.7800,1 +US,2024-01,GASDIES,RECEIPTS,KTONS,247.0000,1 +US,2024-01,GASDIES,REFGROUT,CONVBBL,7464.0000,3 +US,2024-01,GASDIES,REFGROUT,KBBL,141244.0000,1 +US,2024-01,GASDIES,REFGROUT,KBD,4556.2581,1 +US,2024-01,GASDIES,REFGROUT,KL,22455.6062,1 +US,2024-01,GASDIES,REFGROUT,KTONS,18923.0000,1 +US,2024-01,GASDIES,STATDIFF,CONVBBL,8045.0000,3 +US,2024-01,GASDIES,STATDIFF,KBBL,-8455.0000,3 +US,2024-01,GASDIES,STATDIFF,KBD,-272.7419,3 +US,2024-01,GASDIES,STATDIFF,KL,-1344.2868,3 +US,2024-01,GASDIES,STATDIFF,KTONS,-1051.0000,3 +US,2024-01,GASDIES,STOCKCH,CONVBBL,7461.0000,3 +US,2024-01,GASDIES,STOCKCH,KBBL,-2559.0000,1 +US,2024-01,GASDIES,STOCKCH,KBD,x,3 +US,2024-01,GASDIES,STOCKCH,KL,-406.8687,1 +US,2024-01,GASDIES,STOCKCH,KTONS,-343.0000,1 +US,2024-01,GASDIES,TOTDEMO,CONVBBL,7495.0000,3 +US,2024-01,GASDIES,TOTDEMO,KBBL,128999.0000,1 +US,2024-01,GASDIES,TOTDEMO,KBD,4161.2581,1 +US,2024-01,GASDIES,TOTDEMO,KL,20510.0226,1 +US,2024-01,GASDIES,TOTDEMO,KTONS,17212.0000,1 +US,2024-01,GASDIES,TOTEXPSB,CONVBBL,7465.0000,3 +US,2024-01,GASDIES,TOTEXPSB,KBBL,31949.0000,1 +US,2024-01,GASDIES,TOTEXPSB,KBD,1030.6129,1 +US,2024-01,GASDIES,TOTEXPSB,KL,5079.6846,1 +US,2024-01,GASDIES,TOTEXPSB,KTONS,4280.0000,1 +US,2024-01,GASDIES,TOTIMPSB,CONVBBL,7463.0000,3 +US,2024-01,GASDIES,TOTIMPSB,KBBL,5873.0000,1 +US,2024-01,GASDIES,TOTIMPSB,KBD,189.4516,1 +US,2024-01,GASDIES,TOTIMPSB,KL,933.7946,1 +US,2024-01,GASDIES,TOTIMPSB,KTONS,787.0000,1 +US,2024-02,GASDIES,CLOSTLV,CONVBBL,7460.0000,3 +US,2024-02,GASDIES,CLOSTLV,KBBL,108692.0000,1 +US,2024-02,GASDIES,CLOSTLV,KBD,x,3 +US,2024-02,GASDIES,CLOSTLV,KL,17280.7084,1 +US,2024-02,GASDIES,CLOSTLV,KTONS,14570.0000,1 +US,2024-02,GASDIES,IPTRANSF,CONVBBL,7475.0000,3 +US,2024-02,GASDIES,IPTRANSF,KBBL,1039.0000,1 +US,2024-02,GASDIES,IPTRANSF,KBD,35.8276,1 +US,2024-02,GASDIES,IPTRANSF,KL,165.1921,1 +US,2024-02,GASDIES,IPTRANSF,KTONS,139.0000,1 +US,2024-02,GASDIES,PTRANSF,CONVBBL,..,3 +US,2024-02,GASDIES,PTRANSF,KBBL,0.0000,1 +US,2024-02,GASDIES,PTRANSF,KBD,0.0000,1 +US,2024-02,GASDIES,PTRANSF,KL,-,3 +US,2024-02,GASDIES,PTRANSF,KTONS,0.0000,1 +US,2024-02,GASDIES,RECEIPTS,CONVBBL,7164.0000,3 +US,2024-02,GASDIES,RECEIPTS,KBBL,1612.0000,1 +US,2024-02,GASDIES,RECEIPTS,KBD,55.5862,1 +US,2024-02,GASDIES,RECEIPTS,KL,256.2721,1 +US,2024-02,GASDIES,RECEIPTS,KTONS,225.0000,1 +US,2024-02,GASDIES,REFGROUT,CONVBBL,7464.0000,3 +US,2024-02,GASDIES,REFGROUT,KBBL,122647.0000,1 +US,2024-02,GASDIES,REFGROUT,KBD,4229.2069,1 +US,2024-02,GASDIES,REFGROUT,KL,19499.5784,1 +US,2024-02,GASDIES,REFGROUT,KTONS,16432.0000,1 +US,2024-02,GASDIES,STATDIFF,CONVBBL,7748.0000,3 +US,2024-02,GASDIES,STATDIFF,KBBL,-13257.0000,3 +US,2024-02,GASDIES,STATDIFF,KBD,-457.1379,3 +US,2024-02,GASDIES,STATDIFF,KL,-2107.6708,3 +US,2024-02,GASDIES,STATDIFF,KTONS,-1711.0000,3 +US,2024-02,GASDIES,STOCKCH,CONVBBL,7460.0000,3 +US,2024-02,GASDIES,STOCKCH,KBBL,-7863.0000,1 +US,2024-02,GASDIES,STOCKCH,KBD,x,3 +US,2024-02,GASDIES,STOCKCH,KL,-1250.0938,1 +US,2024-02,GASDIES,STOCKCH,KTONS,-1054.0000,1 +US,2024-02,GASDIES,TOTDEMO,CONVBBL,7488.0000,3 +US,2024-02,GASDIES,TOTDEMO,KBBL,124178.0000,1 +US,2024-02,GASDIES,TOTDEMO,KBD,4282.0000,1 +US,2024-02,GASDIES,TOTDEMO,KL,19742.0433,1 +US,2024-02,GASDIES,TOTDEMO,KTONS,16583.0000,1 +US,2024-02,GASDIES,TOTEXPSB,CONVBBL,7468.0000,3 +US,2024-02,GASDIES,TOTEXPSB,KBBL,27832.0000,1 +US,2024-02,GASDIES,TOTEXPSB,KBD,959.7241,1 +US,2024-02,GASDIES,TOTEXPSB,KL,4425.1385,1 +US,2024-02,GASDIES,TOTEXPSB,KTONS,3727.0000,1 +US,2024-02,GASDIES,TOTIMPSB,CONVBBL,7466.0000,3 +US,2024-02,GASDIES,TOTIMPSB,KBBL,5592.0000,1 +US,2024-02,GASDIES,TOTIMPSB,KBD,192.8276,1 +US,2024-02,GASDIES,TOTIMPSB,KL,889.0639,1 +US,2024-02,GASDIES,TOTIMPSB,KTONS,749.0000,1 +US,2024-03,GASDIES,CLOSTLV,CONVBBL,7460.0000,3 +US,2024-03,GASDIES,CLOSTLV,KBBL,111408.0000,1 +US,2024-03,GASDIES,CLOSTLV,KBD,x,3 +US,2024-03,GASDIES,CLOSTLV,KL,17712.4296,1 +US,2024-03,GASDIES,CLOSTLV,KTONS,14934.0000,1 +US,2024-03,GASDIES,IPTRANSF,CONVBBL,7434.0000,3 +US,2024-03,GASDIES,IPTRANSF,KBBL,1011.0000,1 +US,2024-03,GASDIES,IPTRANSF,KBD,32.6129,1 +US,2024-03,GASDIES,IPTRANSF,KL,160.7402,1 +US,2024-03,GASDIES,IPTRANSF,KTONS,136.0000,1 +US,2024-03,GASDIES,PTRANSF,CONVBBL,..,3 +US,2024-03,GASDIES,PTRANSF,KBBL,0.0000,1 +US,2024-03,GASDIES,PTRANSF,KBD,0.0000,1 +US,2024-03,GASDIES,PTRANSF,KL,-,3 +US,2024-03,GASDIES,PTRANSF,KTONS,0.0000,1 +US,2024-03,GASDIES,RECEIPTS,CONVBBL,7155.0000,3 +US,2024-03,GASDIES,RECEIPTS,KBBL,1710.0000,1 +US,2024-03,GASDIES,RECEIPTS,KBD,55.1613,1 +US,2024-03,GASDIES,RECEIPTS,KL,271.8759,1 +US,2024-03,GASDIES,RECEIPTS,KTONS,239.0000,1 +US,2024-03,GASDIES,REFGROUT,CONVBBL,7464.0000,3 +US,2024-03,GASDIES,REFGROUT,KBBL,143869.0000,1 +US,2024-03,GASDIES,REFGROUT,KBD,4640.9355,1 +US,2024-03,GASDIES,REFGROUT,KL,22873.3187,1 +US,2024-03,GASDIES,REFGROUT,KTONS,19275.0000,1 +US,2024-03,GASDIES,STATDIFF,CONVBBL,6957.0000,3 +US,2024-03,GASDIES,STATDIFF,KBBL,-3541.0000,3 +US,2024-03,GASDIES,STATDIFF,KBD,-114.2258,3 +US,2024-03,GASDIES,STATDIFF,KL,-562.9929,3 +US,2024-03,GASDIES,STATDIFF,KTONS,-509.0000,3 +US,2024-03,GASDIES,STOCKCH,CONVBBL,7462.0000,3 +US,2024-03,GASDIES,STOCKCH,KBBL,2716.0000,1 +US,2024-03,GASDIES,STOCKCH,KBD,x,3 +US,2024-03,GASDIES,STOCKCH,KL,431.8369,1 +US,2024-03,GASDIES,STOCKCH,KTONS,364.0000,1 +US,2024-03,GASDIES,TOTDEMO,CONVBBL,7445.0000,3 +US,2024-03,GASDIES,TOTDEMO,KBBL,124343.0000,1 +US,2024-03,GASDIES,TOTDEMO,KBD,4011.0645,1 +US,2024-03,GASDIES,TOTDEMO,KL,19769.5300,1 +US,2024-03,GASDIES,TOTDEMO,KTONS,16702.0000,1 +US,2024-03,GASDIES,TOTEXPSB,CONVBBL,7460.0000,3 +US,2024-03,GASDIES,TOTEXPSB,KBBL,34979.0000,1 +US,2024-03,GASDIES,TOTEXPSB,KBD,1128.3548,1 +US,2024-03,GASDIES,TOTEXPSB,KL,5561.3756,1 +US,2024-03,GASDIES,TOTEXPSB,KTONS,4689.0000,1 +US,2024-03,GASDIES,TOTIMPSB,CONVBBL,7461.0000,3 +US,2024-03,GASDIES,TOTIMPSB,KBBL,11907.0000,1 +US,2024-03,GASDIES,TOTIMPSB,KBD,384.0968,1 +US,2024-03,GASDIES,TOTIMPSB,KL,1893.1852,1 +US,2024-03,GASDIES,TOTIMPSB,KTONS,1596.0000,1 +US,2024-01,GASOLINE,CLOSTLV,CONVBBL,8532.0000,3 +US,2024-01,GASOLINE,CLOSTLV,KBBL,209278.0000,1 +US,2024-01,GASOLINE,CLOSTLV,KBD,x,3 +US,2024-01,GASOLINE,CLOSTLV,KL,33271.7886,1 +US,2024-01,GASOLINE,CLOSTLV,KTONS,24528.0000,1 +US,2024-01,GASOLINE,IPTRANSF,CONVBBL,9774.0000,3 +US,2024-01,GASOLINE,IPTRANSF,KBBL,6949.0000,1 +US,2024-01,GASOLINE,IPTRANSF,KBD,224.1613,1 +US,2024-01,GASOLINE,IPTRANSF,KL,1104.8545,1 +US,2024-01,GASOLINE,IPTRANSF,KTONS,711.0000,1 +US,2024-01,GASOLINE,PTRANSF,CONVBBL,..,3 +US,2024-01,GASOLINE,PTRANSF,KBBL,0.0000,1 +US,2024-01,GASOLINE,PTRANSF,KBD,0.0000,1 +US,2024-01,GASOLINE,PTRANSF,KL,-,3 +US,2024-01,GASOLINE,PTRANSF,KTONS,0.0000,1 +US,2024-01,GASOLINE,RECEIPTS,CONVBBL,7930.0000,3 +US,2024-01,GASOLINE,RECEIPTS,KBBL,25153.0000,1 +US,2024-01,GASOLINE,RECEIPTS,KBD,811.3871,1 +US,2024-01,GASOLINE,RECEIPTS,KL,3999.1669,1 +US,2024-01,GASOLINE,RECEIPTS,KTONS,3172.0000,1 +US,2024-01,GASOLINE,REFGROUT,CONVBBL,8583.0000,3 +US,2024-01,GASOLINE,REFGROUT,KBBL,252347.0000,1 +US,2024-01,GASOLINE,REFGROUT,KBD,8140.2258,1 +US,2024-01,GASOLINE,REFGROUT,KL,40121.6837,1 +US,2024-01,GASOLINE,REFGROUT,KTONS,29402.0000,1 +US,2024-01,GASOLINE,STATDIFF,CONVBBL,29881.0000,3 +US,2024-01,GASOLINE,STATDIFF,KBBL,3018.0000,3 +US,2024-01,GASOLINE,STATDIFF,KBD,97.3548,3 +US,2024-01,GASOLINE,STATDIFF,KL,479.8215,3 +US,2024-01,GASOLINE,STATDIFF,KTONS,101.0000,3 +US,2024-01,GASOLINE,STOCKCH,CONVBBL,8533.0000,3 +US,2024-01,GASOLINE,STOCKCH,KBBL,9873.0000,1 +US,2024-01,GASOLINE,STOCKCH,KBD,x,3 +US,2024-01,GASOLINE,STOCKCH,KL,1569.6335,1 +US,2024-01,GASOLINE,STOCKCH,KTONS,1157.0000,1 +US,2024-01,GASOLINE,TOTDEMO,CONVBBL,8476.0000,3 +US,2024-01,GASOLINE,TOTDEMO,KBBL,256274.0000,1 +US,2024-01,GASOLINE,TOTDEMO,KBD,8266.9032,1 +US,2024-01,GASOLINE,TOTDEMO,KL,40744.0396,1 +US,2024-01,GASOLINE,TOTDEMO,KTONS,30235.0000,1 +US,2024-01,GASOLINE,TOTEXPSB,CONVBBL,8528.0000,3 +US,2024-01,GASOLINE,TOTEXPSB,KBBL,31825.0000,1 +US,2024-01,GASOLINE,TOTEXPSB,KBD,1026.6129,1 +US,2024-01,GASOLINE,TOTEXPSB,KL,5060.0172,1 +US,2024-01,GASOLINE,TOTEXPSB,KTONS,3732.0000,1 +US,2024-01,GASOLINE,TOTIMPSB,CONVBBL,8526.0000,3 +US,2024-01,GASOLINE,TOTIMPSB,KBBL,16541.0000,1 +US,2024-01,GASOLINE,TOTIMPSB,KBD,533.5806,1 +US,2024-01,GASOLINE,TOTIMPSB,KL,2629.7243,1 +US,2024-01,GASOLINE,TOTIMPSB,KTONS,1940.0000,1 +US,2024-02,GASOLINE,CLOSTLV,CONVBBL,8532.0000,3 +US,2024-02,GASOLINE,CLOSTLV,KBBL,199062.0000,1 +US,2024-02,GASOLINE,CLOSTLV,KBD,x,3 +US,2024-02,GASOLINE,CLOSTLV,KL,31648.0797,1 +US,2024-02,GASOLINE,CLOSTLV,KTONS,23331.0000,1 +US,2024-02,GASOLINE,IPTRANSF,CONVBBL,9717.0000,3 +US,2024-02,GASOLINE,IPTRANSF,KBBL,6977.0000,1 +US,2024-02,GASOLINE,IPTRANSF,KBD,240.5862,1 +US,2024-02,GASOLINE,IPTRANSF,KL,1109.2254,1 +US,2024-02,GASOLINE,IPTRANSF,KTONS,718.0000,1 +US,2024-02,GASOLINE,PTRANSF,CONVBBL,..,3 +US,2024-02,GASOLINE,PTRANSF,KBBL,0.0000,1 +US,2024-02,GASOLINE,PTRANSF,KBD,0.0000,1 +US,2024-02,GASOLINE,PTRANSF,KL,-,3 +US,2024-02,GASOLINE,PTRANSF,KTONS,0.0000,1 +US,2024-02,GASOLINE,RECEIPTS,CONVBBL,7932.0000,3 +US,2024-02,GASOLINE,RECEIPTS,KBBL,25532.0000,1 +US,2024-02,GASOLINE,RECEIPTS,KBD,880.4138,1 +US,2024-02,GASOLINE,RECEIPTS,KL,4059.4467,1 +US,2024-02,GASOLINE,RECEIPTS,KTONS,3219.0000,1 +US,2024-02,GASOLINE,REFGROUT,CONVBBL,8590.0000,3 +US,2024-02,GASOLINE,REFGROUT,KBBL,215293.0000,1 +US,2024-02,GASOLINE,REFGROUT,KBD,7423.8966,1 +US,2024-02,GASOLINE,REFGROUT,KL,34228.6194,1 +US,2024-02,GASOLINE,REFGROUT,KTONS,25063.0000,1 +US,2024-02,GASOLINE,STATDIFF,CONVBBL,-914.0000,3 +US,2024-02,GASOLINE,STATDIFF,KBBL,203.0000,3 +US,2024-02,GASOLINE,STATDIFF,KBD,7.0000,3 +US,2024-02,GASOLINE,STATDIFF,KL,32.2598,3 +US,2024-02,GASOLINE,STATDIFF,KTONS,-222.0000,3 +US,2024-02,GASOLINE,STOCKCH,CONVBBL,8535.0000,3 +US,2024-02,GASOLINE,STOCKCH,KBBL,-10216.0000,1 +US,2024-02,GASOLINE,STOCKCH,KBD,x,3 +US,2024-02,GASOLINE,STOCKCH,KL,-1624.2798,1 +US,2024-02,GASOLINE,STOCKCH,KTONS,-1197.0000,1 +US,2024-02,GASOLINE,TOTDEMO,CONVBBL,8473.0000,3 +US,2024-02,GASOLINE,TOTDEMO,KBBL,250501.0000,1 +US,2024-02,GASOLINE,TOTDEMO,KBD,8637.9655,1 +US,2024-02,GASOLINE,TOTDEMO,KL,39825.7134,1 +US,2024-02,GASOLINE,TOTDEMO,KTONS,29564.0000,1 +US,2024-02,GASOLINE,TOTEXPSB,CONVBBL,8532.0000,3 +US,2024-02,GASOLINE,TOTEXPSB,KBBL,24624.0000,1 +US,2024-02,GASOLINE,TOTEXPSB,KBD,849.1034,1 +US,2024-02,GASOLINE,TOTEXPSB,KL,3914.8068,1 +US,2024-02,GASOLINE,TOTEXPSB,KTONS,2886.0000,1 +US,2024-02,GASOLINE,TOTIMPSB,CONVBBL,8523.0000,3 +US,2024-02,GASOLINE,TOTIMPSB,KBBL,17310.0000,1 +US,2024-02,GASOLINE,TOTIMPSB,KBD,596.8966,1 +US,2024-02,GASOLINE,TOTIMPSB,KL,2752.1087,1 +US,2024-02,GASOLINE,TOTIMPSB,KTONS,2031.0000,1 +US,2024-03,GASOLINE,CLOSTLV,CONVBBL,8532.0000,3 +US,2024-03,GASOLINE,CLOSTLV,KBBL,196182.0000,1 +US,2024-03,GASOLINE,CLOSTLV,KBD,x,3 +US,2024-03,GASOLINE,CLOSTLV,KL,31189.5889,1 +US,2024-03,GASOLINE,CLOSTLV,KTONS,22993.0000,1 +US,2024-03,GASOLINE,IPTRANSF,CONVBBL,9649.0000,3 +US,2024-03,GASOLINE,IPTRANSF,KBBL,7073.0000,1 +US,2024-03,GASOLINE,IPTRANSF,KBD,228.1613,1 +US,2024-03,GASOLINE,IPTRANSF,KL,1124.4741,1 +US,2024-03,GASOLINE,IPTRANSF,KTONS,733.0000,1 +US,2024-03,GASOLINE,PTRANSF,CONVBBL,..,3 +US,2024-03,GASOLINE,PTRANSF,KBBL,0.0000,1 +US,2024-03,GASOLINE,PTRANSF,KBD,0.0000,1 +US,2024-03,GASOLINE,PTRANSF,KL,-,3 +US,2024-03,GASOLINE,PTRANSF,KTONS,0.0000,1 +US,2024-03,GASOLINE,RECEIPTS,CONVBBL,7932.0000,3 +US,2024-03,GASOLINE,RECEIPTS,KBBL,27516.0000,1 +US,2024-03,GASOLINE,RECEIPTS,KBD,887.6129,1 +US,2024-03,GASOLINE,RECEIPTS,KL,4374.7191,1 +US,2024-03,GASOLINE,RECEIPTS,KTONS,3469.0000,1 +US,2024-03,GASOLINE,REFGROUT,CONVBBL,8587.0000,3 +US,2024-03,GASOLINE,REFGROUT,KBBL,245638.0000,1 +US,2024-03,GASOLINE,REFGROUT,KBD,7923.8065,1 +US,2024-03,GASOLINE,REFGROUT,KL,39052.2966,1 +US,2024-03,GASOLINE,REFGROUT,KTONS,28605.0000,1 +US,2024-03,GASOLINE,STATDIFF,CONVBBL,3917.0000,3 +US,2024-03,GASOLINE,STATDIFF,KBBL,-1602.0000,3 +US,2024-03,GASOLINE,STATDIFF,KBD,-51.6774,3 +US,2024-03,GASOLINE,STATDIFF,KL,-254.7065,3 +US,2024-03,GASOLINE,STATDIFF,KTONS,-409.0000,3 +US,2024-03,GASOLINE,STOCKCH,CONVBBL,8521.0000,3 +US,2024-03,GASOLINE,STOCKCH,KBBL,-2880.0000,1 +US,2024-03,GASOLINE,STOCKCH,KBD,x,3 +US,2024-03,GASOLINE,STOCKCH,KL,-457.8998,1 +US,2024-03,GASOLINE,STOCKCH,KTONS,-338.0000,1 +US,2024-03,GASOLINE,TOTDEMO,CONVBBL,8483.0000,3 +US,2024-03,GASOLINE,TOTDEMO,KBBL,276488.0000,1 +US,2024-03,GASOLINE,TOTDEMO,KBD,8918.9677,1 +US,2024-03,GASOLINE,TOTDEMO,KL,43957.9031,1 +US,2024-03,GASOLINE,TOTDEMO,KTONS,32593.0000,1 +US,2024-03,GASOLINE,TOTEXPSB,CONVBBL,8529.0000,3 +US,2024-03,GASOLINE,TOTEXPSB,KBBL,27131.0000,1 +US,2024-03,GASOLINE,TOTEXPSB,KBD,875.1935,1 +US,2024-03,GASOLINE,TOTEXPSB,KL,4313.4518,1 +US,2024-03,GASOLINE,TOTEXPSB,KTONS,3181.0000,1 +US,2024-03,GASOLINE,TOTIMPSB,CONVBBL,8518.0000,3 +US,2024-03,GASOLINE,TOTIMPSB,KBBL,18910.0000,1 +US,2024-03,GASOLINE,TOTIMPSB,KBD,610.0000,1 +US,2024-03,GASOLINE,TOTIMPSB,KL,3006.4485,1 +US,2024-03,GASOLINE,TOTIMPSB,KTONS,2220.0000,1 +US,2024-01,JETKERO,CLOSTLV,CONVBBL,7930.0000,3 +US,2024-01,JETKERO,CLOSTLV,KBBL,33695.0000,1 +US,2024-01,JETKERO,CLOSTLV,KBD,x,3 +US,2024-01,JETKERO,CLOSTLV,KL,5357.0177,1 +US,2024-01,JETKERO,CLOSTLV,KTONS,4249.0000,1 +US,2024-01,JETKERO,IPTRANSF,CONVBBL,7429.0000,3 +US,2024-01,JETKERO,IPTRANSF,KBBL,52.0000,1 +US,2024-01,JETKERO,IPTRANSF,KBD,1.6774,1 +US,2024-01,JETKERO,IPTRANSF,KL,8.2678,1 +US,2024-01,JETKERO,IPTRANSF,KTONS,7.0000,1 +US,2024-01,JETKERO,PTRANSF,CONVBBL,..,3 +US,2024-01,JETKERO,PTRANSF,KBBL,0.0000,1 +US,2024-01,JETKERO,PTRANSF,KBD,0.0000,1 +US,2024-01,JETKERO,PTRANSF,KL,-,3 +US,2024-01,JETKERO,PTRANSF,KTONS,0.0000,1 +US,2024-01,JETKERO,RECEIPTS,CONVBBL,..,3 +US,2024-01,JETKERO,RECEIPTS,KBBL,0.0000,1 +US,2024-01,JETKERO,RECEIPTS,KBD,0.0000,1 +US,2024-01,JETKERO,RECEIPTS,KL,-,3 +US,2024-01,JETKERO,RECEIPTS,KTONS,0.0000,1 +US,2024-01,JETKERO,REFGROUT,CONVBBL,7930.0000,3 +US,2024-01,JETKERO,REFGROUT,KBBL,52385.0000,1 +US,2024-01,JETKERO,REFGROUT,KBD,1689.8387,1 +US,2024-01,JETKERO,REFGROUT,KL,8328.6559,1 +US,2024-01,JETKERO,REFGROUT,KTONS,6606.0000,1 +US,2024-01,JETKERO,STATDIFF,CONVBBL,9494.0000,3 +US,2024-01,JETKERO,STATDIFF,KBBL,-788.0000,3 +US,2024-01,JETKERO,STATDIFF,KBD,-25.4194,3 +US,2024-01,JETKERO,STATDIFF,KL,-125.2825,3 +US,2024-01,JETKERO,STATDIFF,KTONS,-83.0000,3 +US,2024-01,JETKERO,STOCKCH,CONVBBL,7931.0000,3 +US,2024-01,JETKERO,STOCKCH,KBBL,2522.0000,1 +US,2024-01,JETKERO,STOCKCH,KBD,x,3 +US,2024-01,JETKERO,STOCKCH,KL,400.9759,1 +US,2024-01,JETKERO,STOCKCH,KTONS,318.0000,1 +US,2024-01,JETKERO,TOTDEMO,CONVBBL,7951.0000,3 +US,2024-01,JETKERO,TOTDEMO,KBBL,48009.0000,1 +US,2024-01,JETKERO,TOTDEMO,KBD,1548.6774,1 +US,2024-01,JETKERO,TOTDEMO,KL,7632.6971,1 +US,2024-01,JETKERO,TOTDEMO,KTONS,6038.0000,1 +US,2024-01,JETKERO,TOTEXPSB,CONVBBL,7925.0000,3 +US,2024-01,JETKERO,TOTEXPSB,KBBL,6847.0000,1 +US,2024-01,JETKERO,TOTEXPSB,KBD,220.8710,1 +US,2024-01,JETKERO,TOTEXPSB,KL,1088.6197,1 +US,2024-01,JETKERO,TOTEXPSB,KTONS,864.0000,1 +US,2024-01,JETKERO,TOTIMPSB,CONVBBL,7926.0000,3 +US,2024-01,JETKERO,TOTIMPSB,KBBL,4153.0000,1 +US,2024-01,JETKERO,TOTIMPSB,KBD,133.9677,1 +US,2024-01,JETKERO,TOTIMPSB,KL,660.3110,1 +US,2024-01,JETKERO,TOTIMPSB,KTONS,524.0000,1 +US,2024-02,JETKERO,CLOSTLV,CONVBBL,7930.0000,3 +US,2024-02,JETKERO,CLOSTLV,KBBL,32029.0000,1 +US,2024-02,JETKERO,CLOSTLV,KBD,x,3 +US,2024-02,JETKERO,CLOSTLV,KL,5092.2557,1 +US,2024-02,JETKERO,CLOSTLV,KTONS,4039.0000,1 +US,2024-02,JETKERO,IPTRANSF,CONVBBL,7667.0000,3 +US,2024-02,JETKERO,IPTRANSF,KBBL,69.0000,1 +US,2024-02,JETKERO,IPTRANSF,KBD,2.3793,1 +US,2024-02,JETKERO,IPTRANSF,KL,10.9706,1 +US,2024-02,JETKERO,IPTRANSF,KTONS,9.0000,1 +US,2024-02,JETKERO,PTRANSF,CONVBBL,..,3 +US,2024-02,JETKERO,PTRANSF,KBBL,0.0000,1 +US,2024-02,JETKERO,PTRANSF,KBD,0.0000,1 +US,2024-02,JETKERO,PTRANSF,KL,-,3 +US,2024-02,JETKERO,PTRANSF,KTONS,0.0000,1 +US,2024-02,JETKERO,RECEIPTS,CONVBBL,..,3 +US,2024-02,JETKERO,RECEIPTS,KBBL,0.0000,1 +US,2024-02,JETKERO,RECEIPTS,KBD,0.0000,1 +US,2024-02,JETKERO,RECEIPTS,KL,-,3 +US,2024-02,JETKERO,RECEIPTS,KTONS,0.0000,1 +US,2024-02,JETKERO,REFGROUT,CONVBBL,7928.0000,3 +US,2024-02,JETKERO,REFGROUT,KBBL,47617.0000,1 +US,2024-02,JETKERO,REFGROUT,KBD,1641.9655,1 +US,2024-02,JETKERO,REFGROUT,KL,7570.2833,1 +US,2024-02,JETKERO,REFGROUT,KTONS,6006.0000,1 +US,2024-02,JETKERO,STATDIFF,CONVBBL,-15500.0000,3 +US,2024-02,JETKERO,STATDIFF,KBBL,-248.0000,3 +US,2024-02,JETKERO,STATDIFF,KBD,-8.5517,3 +US,2024-02,JETKERO,STATDIFF,KL,-39.4289,3 +US,2024-02,JETKERO,STATDIFF,KTONS,16.0000,3 +US,2024-02,JETKERO,STOCKCH,CONVBBL,7933.0000,3 +US,2024-02,JETKERO,STOCKCH,KBBL,-1666.0000,1 +US,2024-02,JETKERO,STOCKCH,KBD,x,3 +US,2024-02,JETKERO,STOCKCH,KL,-264.8622,1 +US,2024-02,JETKERO,STOCKCH,KTONS,-210.0000,1 +US,2024-02,JETKERO,TOTDEMO,CONVBBL,7991.0000,3 +US,2024-02,JETKERO,TOTDEMO,KBBL,45717.0000,1 +US,2024-02,JETKERO,TOTDEMO,KBD,1576.4483,1 +US,2024-02,JETKERO,TOTDEMO,KL,7268.3569,1 +US,2024-02,JETKERO,TOTDEMO,KTONS,5721.0000,1 +US,2024-02,JETKERO,TOTEXPSB,CONVBBL,7945.0000,3 +US,2024-02,JETKERO,TOTEXPSB,KBBL,6801.0000,1 +US,2024-02,JETKERO,TOTEXPSB,KBD,234.5172,1 +US,2024-02,JETKERO,TOTEXPSB,KL,1081.2617,1 +US,2024-02,JETKERO,TOTEXPSB,KTONS,856.0000,1 +US,2024-02,JETKERO,TOTIMPSB,CONVBBL,7929.0000,3 +US,2024-02,JETKERO,TOTIMPSB,KBBL,2918.0000,1 +US,2024-02,JETKERO,TOTIMPSB,KBD,100.6207,1 +US,2024-02,JETKERO,TOTIMPSB,KL,463.9054,1 +US,2024-02,JETKERO,TOTIMPSB,KTONS,368.0000,1 +US,2024-03,JETKERO,CLOSTLV,CONVBBL,7930.0000,3 +US,2024-03,JETKERO,CLOSTLV,KBBL,33124.0000,1 +US,2024-03,JETKERO,CLOSTLV,KBD,x,3 +US,2024-03,JETKERO,CLOSTLV,KL,5266.2422,1 +US,2024-03,JETKERO,CLOSTLV,KTONS,4177.0000,1 +US,2024-03,JETKERO,IPTRANSF,CONVBBL,7929.0000,3 +US,2024-03,JETKERO,IPTRANSF,KBBL,111.0000,1 +US,2024-03,JETKERO,IPTRANSF,KBD,3.5806,1 +US,2024-03,JETKERO,IPTRANSF,KL,17.6486,1 +US,2024-03,JETKERO,IPTRANSF,KTONS,14.0000,1 +US,2024-03,JETKERO,PTRANSF,CONVBBL,..,3 +US,2024-03,JETKERO,PTRANSF,KBBL,0.0000,1 +US,2024-03,JETKERO,PTRANSF,KBD,0.0000,1 +US,2024-03,JETKERO,PTRANSF,KL,-,3 +US,2024-03,JETKERO,PTRANSF,KTONS,0.0000,1 +US,2024-03,JETKERO,RECEIPTS,CONVBBL,..,3 +US,2024-03,JETKERO,RECEIPTS,KBBL,0.0000,1 +US,2024-03,JETKERO,RECEIPTS,KBD,0.0000,1 +US,2024-03,JETKERO,RECEIPTS,KL,-,3 +US,2024-03,JETKERO,RECEIPTS,KTONS,0.0000,1 +US,2024-03,JETKERO,REFGROUT,CONVBBL,7928.0000,3 +US,2024-03,JETKERO,REFGROUT,KBBL,54384.0000,1 +US,2024-03,JETKERO,REFGROUT,KBD,1754.3226,1 +US,2024-03,JETKERO,REFGROUT,KL,8646.7105,1 +US,2024-03,JETKERO,REFGROUT,KTONS,6860.0000,1 +US,2024-03,JETKERO,STATDIFF,CONVBBL,7822.0000,3 +US,2024-03,JETKERO,STATDIFF,KBBL,1056.0000,3 +US,2024-03,JETKERO,STATDIFF,KBD,34.0645,3 +US,2024-03,JETKERO,STATDIFF,KL,167.8861,3 +US,2024-03,JETKERO,STATDIFF,KTONS,135.0000,3 +US,2024-03,JETKERO,STOCKCH,CONVBBL,7935.0000,3 +US,2024-03,JETKERO,STOCKCH,KBBL,1095.0000,1 +US,2024-03,JETKERO,STOCKCH,KBD,x,3 +US,2024-03,JETKERO,STOCKCH,KL,174.0962,1 +US,2024-03,JETKERO,STOCKCH,KTONS,138.0000,1 +US,2024-03,JETKERO,TOTDEMO,CONVBBL,7929.0000,3 +US,2024-03,JETKERO,TOTDEMO,KBBL,51564.0000,1 +US,2024-03,JETKERO,TOTDEMO,KBD,1663.3548,1 +US,2024-03,JETKERO,TOTDEMO,KL,8197.7626,1 +US,2024-03,JETKERO,TOTDEMO,KTONS,6503.0000,1 +US,2024-03,JETKERO,TOTEXPSB,CONVBBL,7935.0000,3 +US,2024-03,JETKERO,TOTEXPSB,KBBL,5729.0000,1 +US,2024-03,JETKERO,TOTEXPSB,KBD,184.8065,1 +US,2024-03,JETKERO,TOTEXPSB,KL,910.8509,1 +US,2024-03,JETKERO,TOTEXPSB,KTONS,722.0000,1 +US,2024-03,JETKERO,TOTIMPSB,CONVBBL,7931.0000,3 +US,2024-03,JETKERO,TOTIMPSB,KBBL,4949.0000,1 +US,2024-03,JETKERO,TOTIMPSB,KBD,159.6452,1 +US,2024-03,JETKERO,TOTIMPSB,KL,786.8206,1 +US,2024-03,JETKERO,TOTIMPSB,KTONS,624.0000,1 +US,2024-01,KEROSENE,CLOSTLV,CONVBBL,7920.0000,3 +US,2024-01,KEROSENE,CLOSTLV,KBBL,35607.0000,1 +US,2024-01,KEROSENE,CLOSTLV,KBD,x,3 +US,2024-01,KEROSENE,CLOSTLV,KL,5661.2802,1 +US,2024-01,KEROSENE,CLOSTLV,KTONS,4496.0000,1 +US,2024-01,KEROSENE,IPTRANSF,CONVBBL,7000.0000,3 +US,2024-01,KEROSENE,IPTRANSF,KBBL,21.0000,1 +US,2024-01,KEROSENE,IPTRANSF,KBD,0.6774,1 +US,2024-01,KEROSENE,IPTRANSF,KL,3.3387,1 +US,2024-01,KEROSENE,IPTRANSF,KTONS,3.0000,1 +US,2024-01,KEROSENE,PTRANSF,CONVBBL,..,3 +US,2024-01,KEROSENE,PTRANSF,KBBL,0.0000,1 +US,2024-01,KEROSENE,PTRANSF,KBD,0.0000,1 +US,2024-01,KEROSENE,PTRANSF,KL,-,3 +US,2024-01,KEROSENE,PTRANSF,KTONS,0.0000,1 +US,2024-01,KEROSENE,RECEIPTS,CONVBBL,..,3 +US,2024-01,KEROSENE,RECEIPTS,KBBL,0.0000,1 +US,2024-01,KEROSENE,RECEIPTS,KBD,0.0000,1 +US,2024-01,KEROSENE,RECEIPTS,KL,-,3 +US,2024-01,KEROSENE,RECEIPTS,KTONS,0.0000,1 +US,2024-01,KEROSENE,REFGROUT,CONVBBL,7926.0000,3 +US,2024-01,KEROSENE,REFGROUT,KBBL,53131.0000,1 +US,2024-01,KEROSENE,REFGROUT,KBD,1713.9032,1 +US,2024-01,KEROSENE,REFGROUT,KL,8446.6880,1 +US,2024-01,KEROSENE,REFGROUT,KTONS,6703.0000,1 +US,2024-01,KEROSENE,STATDIFF,CONVBBL,9000.0000,3 +US,2024-01,KEROSENE,STATDIFF,KBBL,-1008.0000,3 +US,2024-01,KEROSENE,STATDIFF,KBD,-32.5161,3 +US,2024-01,KEROSENE,STATDIFF,KL,-160.2595,3 +US,2024-01,KEROSENE,STATDIFF,KTONS,-112.0000,3 +US,2024-01,KEROSENE,STOCKCH,CONVBBL,7918.0000,3 +US,2024-01,KEROSENE,STOCKCH,KBBL,2692.0000,1 +US,2024-01,KEROSENE,STOCKCH,KBD,x,3 +US,2024-01,KEROSENE,STOCKCH,KL,428.0136,1 +US,2024-01,KEROSENE,STOCKCH,KTONS,340.0000,1 +US,2024-01,KEROSENE,TOTDEMO,CONVBBL,7949.0000,3 +US,2024-01,KEROSENE,TOTDEMO,KBBL,48526.0000,1 +US,2024-01,KEROSENE,TOTDEMO,KBD,1565.3548,1 +US,2024-01,KEROSENE,TOTDEMO,KL,7715.4512,1 +US,2024-01,KEROSENE,TOTDEMO,KTONS,6105.0000,1 +US,2024-01,KEROSENE,TOTEXPSB,CONVBBL,7910.0000,3 +US,2024-01,KEROSENE,TOTEXPSB,KBBL,7095.0000,1 +US,2024-01,KEROSENE,TOTEXPSB,KBD,228.8710,1 +US,2024-01,KEROSENE,TOTEXPSB,KL,1128.0597,1 +US,2024-01,KEROSENE,TOTEXPSB,KTONS,897.0000,1 +US,2024-01,KEROSENE,TOTIMPSB,CONVBBL,7926.0000,3 +US,2024-01,KEROSENE,TOTIMPSB,KBBL,4153.0000,1 +US,2024-01,KEROSENE,TOTIMPSB,KBD,133.9677,1 +US,2024-01,KEROSENE,TOTIMPSB,KL,660.3110,1 +US,2024-01,KEROSENE,TOTIMPSB,KTONS,524.0000,1 +US,2024-02,KEROSENE,CLOSTLV,CONVBBL,7920.0000,3 +US,2024-02,KEROSENE,CLOSTLV,KBBL,33654.0000,1 +US,2024-02,KEROSENE,CLOSTLV,KBD,x,3 +US,2024-02,KEROSENE,CLOSTLV,KL,5350.2623,1 +US,2024-02,KEROSENE,CLOSTLV,KTONS,4249.0000,1 +US,2024-02,KEROSENE,IPTRANSF,CONVBBL,8667.0000,3 +US,2024-02,KEROSENE,IPTRANSF,KBBL,26.0000,1 +US,2024-02,KEROSENE,IPTRANSF,KBD,0.8966,1 +US,2024-02,KEROSENE,IPTRANSF,KL,4.1338,1 +US,2024-02,KEROSENE,IPTRANSF,KTONS,3.0000,1 +US,2024-02,KEROSENE,PTRANSF,CONVBBL,..,3 +US,2024-02,KEROSENE,PTRANSF,KBBL,0.0000,1 +US,2024-02,KEROSENE,PTRANSF,KBD,0.0000,1 +US,2024-02,KEROSENE,PTRANSF,KL,-,3 +US,2024-02,KEROSENE,PTRANSF,KTONS,0.0000,1 +US,2024-02,KEROSENE,RECEIPTS,CONVBBL,..,3 +US,2024-02,KEROSENE,RECEIPTS,KBBL,0.0000,1 +US,2024-02,KEROSENE,RECEIPTS,KBD,0.0000,1 +US,2024-02,KEROSENE,RECEIPTS,KL,-,3 +US,2024-02,KEROSENE,RECEIPTS,KTONS,0.0000,1 +US,2024-02,KEROSENE,REFGROUT,CONVBBL,7927.0000,3 +US,2024-02,KEROSENE,REFGROUT,KBBL,47984.0000,1 +US,2024-02,KEROSENE,REFGROUT,KBD,1654.6207,1 +US,2024-02,KEROSENE,REFGROUT,KL,7628.5623,1 +US,2024-02,KEROSENE,REFGROUT,KTONS,6053.0000,1 +US,2024-02,KEROSENE,STATDIFF,CONVBBL,-21692.0000,3 +US,2024-02,KEROSENE,STATDIFF,KBBL,-282.0000,3 +US,2024-02,KEROSENE,STATDIFF,KBD,-9.7241,3 +US,2024-02,KEROSENE,STATDIFF,KL,-44.8339,3 +US,2024-02,KEROSENE,STATDIFF,KTONS,13.0000,3 +US,2024-02,KEROSENE,STOCKCH,CONVBBL,7907.0000,3 +US,2024-02,KEROSENE,STOCKCH,KBBL,-1953.0000,1 +US,2024-02,KEROSENE,STOCKCH,KBD,x,3 +US,2024-02,KEROSENE,STOCKCH,KL,-310.5073,1 +US,2024-02,KEROSENE,STOCKCH,KTONS,-247.0000,1 +US,2024-02,KEROSENE,TOTDEMO,CONVBBL,7993.0000,3 +US,2024-02,KEROSENE,TOTDEMO,KBBL,46010.0000,1 +US,2024-02,KEROSENE,TOTDEMO,KBD,1586.5517,1 +US,2024-02,KEROSENE,TOTDEMO,KL,7314.6536,1 +US,2024-02,KEROSENE,TOTDEMO,KTONS,5756.0000,1 +US,2024-02,KEROSENE,TOTEXPSB,CONVBBL,7931.0000,3 +US,2024-02,KEROSENE,TOTEXPSB,KBBL,7154.0000,1 +US,2024-02,KEROSENE,TOTEXPSB,KBD,246.6897,1 +US,2024-02,KEROSENE,TOTEXPSB,KL,1137.3592,1 +US,2024-02,KEROSENE,TOTEXPSB,KTONS,902.0000,1 +US,2024-02,KEROSENE,TOTIMPSB,CONVBBL,7932.0000,3 +US,2024-02,KEROSENE,TOTIMPSB,KBBL,2919.0000,1 +US,2024-02,KEROSENE,TOTIMPSB,KBD,100.6552,1 +US,2024-02,KEROSENE,TOTIMPSB,KL,464.0809,1 +US,2024-02,KEROSENE,TOTIMPSB,KTONS,368.0000,1 +US,2024-03,KEROSENE,CLOSTLV,CONVBBL,7921.0000,3 +US,2024-03,KEROSENE,CLOSTLV,KBBL,34672.0000,1 +US,2024-03,KEROSENE,CLOSTLV,KBD,x,3 +US,2024-03,KEROSENE,CLOSTLV,KL,5512.1335,1 +US,2024-03,KEROSENE,CLOSTLV,KTONS,4377.0000,1 +US,2024-03,KEROSENE,IPTRANSF,CONVBBL,8250.0000,3 +US,2024-03,KEROSENE,IPTRANSF,KBBL,66.0000,1 +US,2024-03,KEROSENE,IPTRANSF,KBD,2.1290,1 +US,2024-03,KEROSENE,IPTRANSF,KL,10.4932,1 +US,2024-03,KEROSENE,IPTRANSF,KTONS,8.0000,1 +US,2024-03,KEROSENE,PTRANSF,CONVBBL,..,3 +US,2024-03,KEROSENE,PTRANSF,KBBL,0.0000,1 +US,2024-03,KEROSENE,PTRANSF,KBD,0.0000,1 +US,2024-03,KEROSENE,PTRANSF,KL,-,3 +US,2024-03,KEROSENE,PTRANSF,KTONS,0.0000,1 +US,2024-03,KEROSENE,RECEIPTS,CONVBBL,..,3 +US,2024-03,KEROSENE,RECEIPTS,KBBL,0.0000,1 +US,2024-03,KEROSENE,RECEIPTS,KBD,0.0000,1 +US,2024-03,KEROSENE,RECEIPTS,KL,-,3 +US,2024-03,KEROSENE,RECEIPTS,KTONS,0.0000,1 +US,2024-03,KEROSENE,REFGROUT,CONVBBL,7927.0000,3 +US,2024-03,KEROSENE,REFGROUT,KBBL,54604.0000,1 +US,2024-03,KEROSENE,REFGROUT,KBD,1761.4194,1 +US,2024-03,KEROSENE,REFGROUT,KL,8680.9081,1 +US,2024-03,KEROSENE,REFGROUT,KTONS,6888.0000,1 +US,2024-03,KEROSENE,STATDIFF,CONVBBL,7969.0000,3 +US,2024-03,KEROSENE,STATDIFF,KBBL,1028.0000,3 +US,2024-03,KEROSENE,STATDIFF,KBD,33.1613,3 +US,2024-03,KEROSENE,STATDIFF,KL,163.4394,3 +US,2024-03,KEROSENE,STATDIFF,KTONS,129.0000,3 +US,2024-03,KEROSENE,STOCKCH,CONVBBL,7953.0000,3 +US,2024-03,KEROSENE,STOCKCH,KBBL,1018.0000,1 +US,2024-03,KEROSENE,STOCKCH,KBD,x,3 +US,2024-03,KEROSENE,STOCKCH,KL,161.8468,1 +US,2024-03,KEROSENE,STOCKCH,KTONS,128.0000,1 +US,2024-03,KEROSENE,TOTDEMO,CONVBBL,7925.0000,3 +US,2024-03,KEROSENE,TOTDEMO,KBBL,51832.0000,1 +US,2024-03,KEROSENE,TOTDEMO,KBD,1672.0000,1 +US,2024-03,KEROSENE,TOTDEMO,KL,8240.2461,1 +US,2024-03,KEROSENE,TOTDEMO,KTONS,6540.0000,1 +US,2024-03,KEROSENE,TOTEXPSB,CONVBBL,7941.0000,3 +US,2024-03,KEROSENE,TOTEXPSB,KBBL,5741.0000,1 +US,2024-03,KEROSENE,TOTEXPSB,KBD,185.1935,1 +US,2024-03,KEROSENE,TOTEXPSB,KL,912.8022,1 +US,2024-03,KEROSENE,TOTEXPSB,KTONS,723.0000,1 +US,2024-03,KEROSENE,TOTIMPSB,CONVBBL,7931.0000,3 +US,2024-03,KEROSENE,TOTIMPSB,KBBL,4949.0000,1 +US,2024-03,KEROSENE,TOTIMPSB,KBD,159.6452,1 +US,2024-03,KEROSENE,TOTIMPSB,KL,786.8206,1 +US,2024-03,KEROSENE,TOTIMPSB,KTONS,624.0000,1 +US,2024-01,LPG,CLOSTLV,CONVBBL,11600.0000,3 +US,2024-01,LPG,CLOSTLV,KBBL,45228.0000,1 +US,2024-01,LPG,CLOSTLV,KBD,x,3 +US,2024-01,LPG,CLOSTLV,KL,7190.7533,1 +US,2024-01,LPG,CLOSTLV,KTONS,3899.0000,1 +US,2024-01,LPG,IPTRANSF,CONVBBL,12098.0000,3 +US,2024-01,LPG,IPTRANSF,KBBL,75624.0000,1 +US,2024-01,LPG,IPTRANSF,KBD,2439.4839,1 +US,2024-01,LPG,IPTRANSF,KL,12023.3709,1 +US,2024-01,LPG,IPTRANSF,KTONS,6251.0000,1 +US,2024-01,LPG,PTRANSF,CONVBBL,12652.0000,3 +US,2024-01,LPG,PTRANSF,KBBL,13727.0000,1 +US,2024-01,LPG,PTRANSF,KBD,442.8065,1 +US,2024-01,LPG,PTRANSF,KL,2182.4891,1 +US,2024-01,LPG,PTRANSF,KTONS,1085.0000,1 +US,2024-01,LPG,RECEIPTS,CONVBBL,12415.0000,3 +US,2024-01,LPG,RECEIPTS,KBBL,0.0000,1 +US,2024-01,LPG,RECEIPTS,KBD,0.0000,1 +US,2024-01,LPG,RECEIPTS,KL,0.0000,1 +US,2024-01,LPG,RECEIPTS,KTONS,0.0000,1 +US,2024-01,LPG,REFGROUT,CONVBBL,16382.0000,3 +US,2024-01,LPG,REFGROUT,KBBL,3129.0000,1 +US,2024-01,LPG,REFGROUT,KBD,100.9355,1 +US,2024-01,LPG,REFGROUT,KL,497.4661,1 +US,2024-01,LPG,REFGROUT,KTONS,191.0000,1 +US,2024-01,LPG,STATDIFF,CONVBBL,10816.0000,3 +US,2024-01,LPG,STATDIFF,KBBL,-29635.0000,3 +US,2024-01,LPG,STATDIFF,KBD,-955.9677,3 +US,2024-01,LPG,STATDIFF,KL,-4711.7301,3 +US,2024-01,LPG,STATDIFF,KTONS,-2740.0000,3 +US,2024-01,LPG,STOCKCH,CONVBBL,11601.0000,3 +US,2024-01,LPG,STOCKCH,KBBL,-11276.0000,1 +US,2024-01,LPG,STOCKCH,KBD,x,3 +US,2024-01,LPG,STOCKCH,KL,-1792.7712,1 +US,2024-01,LPG,STOCKCH,KTONS,-972.0000,1 +US,2024-01,LPG,TOTDEMO,CONVBBL,11195.0000,3 +US,2024-01,LPG,TOTDEMO,KBBL,48050.0000,1 +US,2024-01,LPG,TOTDEMO,KBD,1550.0000,1 +US,2024-01,LPG,TOTDEMO,KL,7639.1841,1 +US,2024-01,LPG,TOTDEMO,KTONS,4292.0000,1 +US,2024-01,LPG,TOTEXPSB,CONVBBL,12102.0000,3 +US,2024-01,LPG,TOTEXPSB,KBBL,63647.0000,1 +US,2024-01,LPG,TOTEXPSB,KBD,2053.1290,1 +US,2024-01,LPG,TOTEXPSB,KL,10118.6712,1 +US,2024-01,LPG,TOTEXPSB,KTONS,5259.0000,1 +US,2024-01,LPG,TOTIMPSB,CONVBBL,11950.0000,3 +US,2024-01,LPG,TOTIMPSB,KBBL,5760.0000,1 +US,2024-01,LPG,TOTIMPSB,KBD,185.8065,1 +US,2024-01,LPG,TOTIMPSB,KL,915.7525,1 +US,2024-01,LPG,TOTIMPSB,KTONS,482.0000,1 +US,2024-02,LPG,CLOSTLV,CONVBBL,11600.0000,3 +US,2024-02,LPG,CLOSTLV,KBBL,39776.0000,1 +US,2024-02,LPG,CLOSTLV,KBD,x,3 +US,2024-02,LPG,CLOSTLV,KL,6323.9531,1 +US,2024-02,LPG,CLOSTLV,KTONS,3429.0000,1 +US,2024-02,LPG,IPTRANSF,CONVBBL,12046.0000,3 +US,2024-02,LPG,IPTRANSF,KBBL,78658.0000,1 +US,2024-02,LPG,IPTRANSF,KBD,2712.3448,1 +US,2024-02,LPG,IPTRANSF,KL,12506.0224,1 +US,2024-02,LPG,IPTRANSF,KTONS,6530.0000,1 +US,2024-02,LPG,PTRANSF,CONVBBL,12473.0000,3 +US,2024-02,LPG,PTRANSF,KBBL,15467.0000,1 +US,2024-02,LPG,PTRANSF,KBD,533.3448,1 +US,2024-02,LPG,PTRANSF,KL,2458.9844,1 +US,2024-02,LPG,PTRANSF,KTONS,1240.0000,1 +US,2024-02,LPG,RECEIPTS,CONVBBL,12415.0000,3 +US,2024-02,LPG,RECEIPTS,KBBL,0.0000,1 +US,2024-02,LPG,RECEIPTS,KBD,0.0000,1 +US,2024-02,LPG,RECEIPTS,KL,0.0000,1 +US,2024-02,LPG,RECEIPTS,KTONS,0.0000,1 +US,2024-02,LPG,REFGROUT,CONVBBL,13542.0000,3 +US,2024-02,LPG,REFGROUT,KBBL,4645.0000,1 +US,2024-02,LPG,REFGROUT,KBD,160.1724,1 +US,2024-02,LPG,REFGROUT,KL,738.4823,1 +US,2024-02,LPG,REFGROUT,KTONS,343.0000,1 +US,2024-02,LPG,STATDIFF,CONVBBL,11306.0000,3 +US,2024-02,LPG,STATDIFF,KBBL,-25133.0000,3 +US,2024-02,LPG,STATDIFF,KBD,-866.6552,3 +US,2024-02,LPG,STATDIFF,KL,-3995.8724,3 +US,2024-02,LPG,STATDIFF,KTONS,-2223.0000,3 +US,2024-02,LPG,STOCKCH,CONVBBL,11600.0000,3 +US,2024-02,LPG,STOCKCH,KBBL,-5452.0000,1 +US,2024-02,LPG,STOCKCH,KBD,x,3 +US,2024-02,LPG,STOCKCH,KL,-866.8002,1 +US,2024-02,LPG,STOCKCH,KTONS,-470.0000,1 +US,2024-02,LPG,TOTDEMO,CONVBBL,11483.0000,3 +US,2024-02,LPG,TOTDEMO,KBBL,36746.0000,1 +US,2024-02,LPG,TOTDEMO,KBD,1267.1034,1 +US,2024-02,LPG,TOTDEMO,KL,5842.0935,1 +US,2024-02,LPG,TOTDEMO,KTONS,3200.0000,1 +US,2024-02,LPG,TOTEXPSB,CONVBBL,12037.0000,3 +US,2024-02,LPG,TOTEXPSB,KBBL,67588.0000,1 +US,2024-02,LPG,TOTEXPSB,KBD,2330.6207,1 +US,2024-02,LPG,TOTEXPSB,KL,10745.6127,1 +US,2024-02,LPG,TOTEXPSB,KTONS,5615.0000,1 +US,2024-02,LPG,TOTIMPSB,CONVBBL,12092.0000,3 +US,2024-02,LPG,TOTIMPSB,KBBL,5913.0000,1 +US,2024-02,LPG,TOTIMPSB,KBD,203.8966,1 +US,2024-02,LPG,TOTIMPSB,KL,940.0916,1 +US,2024-02,LPG,TOTIMPSB,KTONS,489.0000,1 +US,2024-03,LPG,CLOSTLV,CONVBBL,11600.0000,3 +US,2024-03,LPG,CLOSTLV,KBBL,39834.0000,1 +US,2024-03,LPG,CLOSTLV,KBD,x,3 +US,2024-03,LPG,CLOSTLV,KL,6333.1743,1 +US,2024-03,LPG,CLOSTLV,KTONS,3434.0000,1 +US,2024-03,LPG,IPTRANSF,CONVBBL,12010.0000,3 +US,2024-03,LPG,IPTRANSF,KBBL,86855.0000,1 +US,2024-03,LPG,IPTRANSF,KBD,2801.7742,1 +US,2024-03,LPG,IPTRANSF,KL,13809.0750,1 +US,2024-03,LPG,IPTRANSF,KTONS,7232.0000,1 +US,2024-03,LPG,PTRANSF,CONVBBL,9194.0000,3 +US,2024-03,LPG,PTRANSF,KBBL,13184.0000,1 +US,2024-03,LPG,PTRANSF,KBD,425.2903,1 +US,2024-03,LPG,PTRANSF,KL,2096.1232,1 +US,2024-03,LPG,PTRANSF,KTONS,1434.0000,1 +US,2024-03,LPG,RECEIPTS,CONVBBL,12415.0000,3 +US,2024-03,LPG,RECEIPTS,KBBL,0.0000,1 +US,2024-03,LPG,RECEIPTS,KBD,0.0000,1 +US,2024-03,LPG,RECEIPTS,KL,0.0000,1 +US,2024-03,LPG,RECEIPTS,KTONS,0.0000,1 +US,2024-03,LPG,REFGROUT,CONVBBL,11918.0000,3 +US,2024-03,LPG,REFGROUT,KBBL,11632.0000,1 +US,2024-03,LPG,REFGROUT,KBD,375.2258,1 +US,2024-03,LPG,REFGROUT,KL,1849.3383,1 +US,2024-03,LPG,REFGROUT,KTONS,976.0000,1 +US,2024-03,LPG,STATDIFF,CONVBBL,7468.0000,3 +US,2024-03,LPG,STATDIFF,KBBL,-11001.0000,3 +US,2024-03,LPG,STATDIFF,KBD,-354.8710,3 +US,2024-03,LPG,STATDIFF,KL,-1748.9211,3 +US,2024-03,LPG,STATDIFF,KTONS,-1473.0000,3 +US,2024-03,LPG,STOCKCH,CONVBBL,11600.0000,3 +US,2024-03,LPG,STOCKCH,KBBL,58.0000,1 +US,2024-03,LPG,STOCKCH,KBD,x,3 +US,2024-03,LPG,STOCKCH,KL,9.2213,1 +US,2024-03,LPG,STOCKCH,KTONS,5.0000,1 +US,2024-03,LPG,TOTDEMO,CONVBBL,11125.0000,3 +US,2024-03,LPG,TOTDEMO,KBBL,33541.0000,1 +US,2024-03,LPG,TOTDEMO,KBD,1081.9677,1 +US,2024-03,LPG,TOTDEMO,KL,5332.7411,1 +US,2024-03,LPG,TOTDEMO,KTONS,3015.0000,1 +US,2024-03,LPG,TOTEXPSB,CONVBBL,11995.0000,3 +US,2024-03,LPG,TOTEXPSB,KBBL,68014.0000,1 +US,2024-03,LPG,TOTEXPSB,KBD,2194.0000,1 +US,2024-03,LPG,TOTEXPSB,KL,10813.0068,1 +US,2024-03,LPG,TOTEXPSB,KTONS,5670.0000,1 +US,2024-03,LPG,TOTIMPSB,CONVBBL,11984.0000,3 +US,2024-03,LPG,TOTIMPSB,KBBL,5309.0000,1 +US,2024-03,LPG,TOTIMPSB,KBD,171.2581,1 +US,2024-03,LPG,TOTIMPSB,KL,844.0510,1 +US,2024-03,LPG,TOTIMPSB,KTONS,443.0000,1 +US,2024-01,NAPHTHA,CLOSTLV,CONVBBL,8502.0000,3 +US,2024-01,NAPHTHA,CLOSTLV,KBBL,1964.0000,1 +US,2024-01,NAPHTHA,CLOSTLV,KBD,x,3 +US,2024-01,NAPHTHA,CLOSTLV,KL,312.2455,1 +US,2024-01,NAPHTHA,CLOSTLV,KTONS,231.0000,1 +US,2024-01,NAPHTHA,IPTRANSF,CONVBBL,..,3 +US,2024-01,NAPHTHA,IPTRANSF,KBBL,0.0000,1 +US,2024-01,NAPHTHA,IPTRANSF,KBD,0.0000,1 +US,2024-01,NAPHTHA,IPTRANSF,KL,-,3 +US,2024-01,NAPHTHA,IPTRANSF,KTONS,0.0000,1 +US,2024-01,NAPHTHA,PTRANSF,CONVBBL,..,3 +US,2024-01,NAPHTHA,PTRANSF,KBBL,0.0000,1 +US,2024-01,NAPHTHA,PTRANSF,KBD,0.0000,1 +US,2024-01,NAPHTHA,PTRANSF,KL,-,3 +US,2024-01,NAPHTHA,PTRANSF,KTONS,0.0000,1 +US,2024-01,NAPHTHA,RECEIPTS,CONVBBL,..,3 +US,2024-01,NAPHTHA,RECEIPTS,KBBL,0.0000,1 +US,2024-01,NAPHTHA,RECEIPTS,KBD,0.0000,1 +US,2024-01,NAPHTHA,RECEIPTS,KL,-,3 +US,2024-01,NAPHTHA,RECEIPTS,KTONS,0.0000,1 +US,2024-01,NAPHTHA,REFGROUT,CONVBBL,8532.0000,3 +US,2024-01,NAPHTHA,REFGROUT,KBBL,4991.0000,1 +US,2024-01,NAPHTHA,REFGROUT,KBD,161.0000,1 +US,2024-01,NAPHTHA,REFGROUT,KL,793.5419,1 +US,2024-01,NAPHTHA,REFGROUT,KTONS,585.0000,1 +US,2024-01,NAPHTHA,STATDIFF,CONVBBL,1500.0000,3 +US,2024-01,NAPHTHA,STATDIFF,KBBL,-3.0000,3 +US,2024-01,NAPHTHA,STATDIFF,KBD,-0.0968,3 +US,2024-01,NAPHTHA,STATDIFF,KL,-0.4770,3 +US,2024-01,NAPHTHA,STATDIFF,KTONS,-2.0000,3 +US,2024-01,NAPHTHA,STOCKCH,CONVBBL,8533.0000,3 +US,2024-01,NAPHTHA,STOCKCH,KBBL,128.0000,1 +US,2024-01,NAPHTHA,STOCKCH,KBD,x,3 +US,2024-01,NAPHTHA,STOCKCH,KL,20.3496,1 +US,2024-01,NAPHTHA,STOCKCH,KTONS,15.0000,1 +US,2024-01,NAPHTHA,TOTDEMO,CONVBBL,8500.0000,3 +US,2024-01,NAPHTHA,TOTDEMO,KBBL,5066.0000,1 +US,2024-01,NAPHTHA,TOTDEMO,KBD,163.4194,1 +US,2024-01,NAPHTHA,TOTDEMO,KL,805.4310,1 +US,2024-01,NAPHTHA,TOTDEMO,KTONS,596.0000,1 +US,2024-01,NAPHTHA,TOTEXPSB,CONVBBL,..,3 +US,2024-01,NAPHTHA,TOTEXPSB,KBBL,0.0000,1 +US,2024-01,NAPHTHA,TOTEXPSB,KBD,0.0000,1 +US,2024-01,NAPHTHA,TOTEXPSB,KL,-,3 +US,2024-01,NAPHTHA,TOTEXPSB,KTONS,0.0000,1 +US,2024-01,NAPHTHA,TOTIMPSB,CONVBBL,8333.0000,3 +US,2024-01,NAPHTHA,TOTIMPSB,KBBL,200.0000,1 +US,2024-01,NAPHTHA,TOTIMPSB,KBD,6.4516,1 +US,2024-01,NAPHTHA,TOTIMPSB,KL,31.7962,1 +US,2024-01,NAPHTHA,TOTIMPSB,KTONS,24.0000,1 +US,2024-02,NAPHTHA,CLOSTLV,CONVBBL,8500.0000,3 +US,2024-02,NAPHTHA,CLOSTLV,KBBL,1853.0000,1 +US,2024-02,NAPHTHA,CLOSTLV,KBD,x,3 +US,2024-02,NAPHTHA,CLOSTLV,KL,294.6040,1 +US,2024-02,NAPHTHA,CLOSTLV,KTONS,218.0000,1 +US,2024-02,NAPHTHA,IPTRANSF,CONVBBL,..,3 +US,2024-02,NAPHTHA,IPTRANSF,KBBL,0.0000,1 +US,2024-02,NAPHTHA,IPTRANSF,KBD,0.0000,1 +US,2024-02,NAPHTHA,IPTRANSF,KL,-,3 +US,2024-02,NAPHTHA,IPTRANSF,KTONS,0.0000,1 +US,2024-02,NAPHTHA,PTRANSF,CONVBBL,..,3 +US,2024-02,NAPHTHA,PTRANSF,KBBL,0.0000,1 +US,2024-02,NAPHTHA,PTRANSF,KBD,0.0000,1 +US,2024-02,NAPHTHA,PTRANSF,KL,-,3 +US,2024-02,NAPHTHA,PTRANSF,KTONS,0.0000,1 +US,2024-02,NAPHTHA,RECEIPTS,CONVBBL,..,3 +US,2024-02,NAPHTHA,RECEIPTS,KBBL,0.0000,1 +US,2024-02,NAPHTHA,RECEIPTS,KBD,0.0000,1 +US,2024-02,NAPHTHA,RECEIPTS,KL,-,3 +US,2024-02,NAPHTHA,RECEIPTS,KTONS,0.0000,1 +US,2024-02,NAPHTHA,REFGROUT,CONVBBL,8536.0000,3 +US,2024-02,NAPHTHA,REFGROUT,KBBL,4797.0000,1 +US,2024-02,NAPHTHA,REFGROUT,KBD,165.4138,1 +US,2024-02,NAPHTHA,REFGROUT,KL,762.7002,1 +US,2024-02,NAPHTHA,REFGROUT,KTONS,562.0000,1 +US,2024-02,NAPHTHA,STATDIFF,CONVBBL,600.0000,3 +US,2024-02,NAPHTHA,STATDIFF,KBBL,3.0000,3 +US,2024-02,NAPHTHA,STATDIFF,KBD,0.1034,3 +US,2024-02,NAPHTHA,STATDIFF,KL,0.4770,3 +US,2024-02,NAPHTHA,STATDIFF,KTONS,5.0000,3 +US,2024-02,NAPHTHA,STOCKCH,CONVBBL,8538.0000,3 +US,2024-02,NAPHTHA,STOCKCH,KBBL,-111.0000,1 +US,2024-02,NAPHTHA,STOCKCH,KBD,x,3 +US,2024-02,NAPHTHA,STOCKCH,KL,-17.6467,1 +US,2024-02,NAPHTHA,STOCKCH,KTONS,-13.0000,1 +US,2024-02,NAPHTHA,TOTDEMO,CONVBBL,8603.0000,3 +US,2024-02,NAPHTHA,TOTDEMO,KBBL,5222.0000,1 +US,2024-02,NAPHTHA,TOTDEMO,KBD,180.0690,1 +US,2024-02,NAPHTHA,TOTDEMO,KL,830.2364,1 +US,2024-02,NAPHTHA,TOTDEMO,KTONS,607.0000,1 +US,2024-02,NAPHTHA,TOTEXPSB,CONVBBL,..,3 +US,2024-02,NAPHTHA,TOTEXPSB,KBBL,0.0000,1 +US,2024-02,NAPHTHA,TOTEXPSB,KBD,0.0000,1 +US,2024-02,NAPHTHA,TOTEXPSB,KL,-,3 +US,2024-02,NAPHTHA,TOTEXPSB,KTONS,0.0000,1 +US,2024-02,NAPHTHA,TOTIMPSB,CONVBBL,8568.0000,3 +US,2024-02,NAPHTHA,TOTIMPSB,KBBL,317.0000,1 +US,2024-02,NAPHTHA,TOTIMPSB,KBD,10.9310,1 +US,2024-02,NAPHTHA,TOTIMPSB,KL,50.4016,1 +US,2024-02,NAPHTHA,TOTIMPSB,KTONS,37.0000,1 +US,2024-03,NAPHTHA,CLOSTLV,CONVBBL,8502.0000,3 +US,2024-03,NAPHTHA,CLOSTLV,KBBL,1811.0000,1 +US,2024-03,NAPHTHA,CLOSTLV,KBD,x,3 +US,2024-03,NAPHTHA,CLOSTLV,KL,287.9147,1 +US,2024-03,NAPHTHA,CLOSTLV,KTONS,213.0000,1 +US,2024-03,NAPHTHA,IPTRANSF,CONVBBL,..,3 +US,2024-03,NAPHTHA,IPTRANSF,KBBL,0.0000,1 +US,2024-03,NAPHTHA,IPTRANSF,KBD,0.0000,1 +US,2024-03,NAPHTHA,IPTRANSF,KL,-,3 +US,2024-03,NAPHTHA,IPTRANSF,KTONS,0.0000,1 +US,2024-03,NAPHTHA,PTRANSF,CONVBBL,..,3 +US,2024-03,NAPHTHA,PTRANSF,KBBL,0.0000,1 +US,2024-03,NAPHTHA,PTRANSF,KBD,0.0000,1 +US,2024-03,NAPHTHA,PTRANSF,KL,-,3 +US,2024-03,NAPHTHA,PTRANSF,KTONS,0.0000,1 +US,2024-03,NAPHTHA,RECEIPTS,CONVBBL,..,3 +US,2024-03,NAPHTHA,RECEIPTS,KBBL,0.0000,1 +US,2024-03,NAPHTHA,RECEIPTS,KBD,0.0000,1 +US,2024-03,NAPHTHA,RECEIPTS,KL,-,3 +US,2024-03,NAPHTHA,RECEIPTS,KTONS,0.0000,1 +US,2024-03,NAPHTHA,REFGROUT,CONVBBL,8532.0000,3 +US,2024-03,NAPHTHA,REFGROUT,KBBL,3976.0000,1 +US,2024-03,NAPHTHA,REFGROUT,KBD,128.2581,1 +US,2024-03,NAPHTHA,REFGROUT,KL,632.1206,1 +US,2024-03,NAPHTHA,REFGROUT,KTONS,466.0000,1 +US,2024-03,NAPHTHA,STATDIFF,CONVBBL,-750.0000,3 +US,2024-03,NAPHTHA,STATDIFF,KBBL,3.0000,3 +US,2024-03,NAPHTHA,STATDIFF,KBD,0.0968,3 +US,2024-03,NAPHTHA,STATDIFF,KL,0.4770,3 +US,2024-03,NAPHTHA,STATDIFF,KTONS,-4.0000,3 +US,2024-03,NAPHTHA,STOCKCH,CONVBBL,8400.0000,3 +US,2024-03,NAPHTHA,STOCKCH,KBBL,-42.0000,1 +US,2024-03,NAPHTHA,STOCKCH,KBD,x,3 +US,2024-03,NAPHTHA,STOCKCH,KL,-6.6775,1 +US,2024-03,NAPHTHA,STOCKCH,KTONS,-5.0000,1 +US,2024-03,NAPHTHA,TOTDEMO,CONVBBL,8474.0000,3 +US,2024-03,NAPHTHA,TOTDEMO,KBBL,4525.0000,1 +US,2024-03,NAPHTHA,TOTDEMO,KBD,145.9677,1 +US,2024-03,NAPHTHA,TOTDEMO,KL,719.4372,1 +US,2024-03,NAPHTHA,TOTDEMO,KTONS,534.0000,1 +US,2024-03,NAPHTHA,TOTEXPSB,CONVBBL,..,3 +US,2024-03,NAPHTHA,TOTEXPSB,KBBL,0.0000,1 +US,2024-03,NAPHTHA,TOTEXPSB,KBD,0.0000,1 +US,2024-03,NAPHTHA,TOTEXPSB,KL,-,3 +US,2024-03,NAPHTHA,TOTEXPSB,KTONS,0.0000,1 +US,2024-03,NAPHTHA,TOTIMPSB,CONVBBL,8644.0000,3 +US,2024-03,NAPHTHA,TOTIMPSB,KBBL,510.0000,1 +US,2024-03,NAPHTHA,TOTIMPSB,KBD,16.4516,1 +US,2024-03,NAPHTHA,TOTIMPSB,KL,81.0830,1 +US,2024-03,NAPHTHA,TOTIMPSB,KTONS,59.0000,1 +US,2024-01,ONONSPEC,CLOSTLV,CONVBBL,9087.0000,3 +US,2024-01,ONONSPEC,CLOSTLV,KBBL,96311.0000,1 +US,2024-01,ONONSPEC,CLOSTLV,KBD,x,3 +US,2024-01,ONONSPEC,CLOSTLV,KL,15312.5875,1 +US,2024-01,ONONSPEC,CLOSTLV,KTONS,10599.0000,1 +US,2024-01,ONONSPEC,IPTRANSF,CONVBBL,11773.0000,3 +US,2024-01,ONONSPEC,IPTRANSF,KBBL,-83632.0000,1 +US,2024-01,ONONSPEC,IPTRANSF,KBD,-2697.8065,1 +US,2024-01,ONONSPEC,IPTRANSF,KL,-13296.9875,1 +US,2024-01,ONONSPEC,IPTRANSF,KTONS,-7104.0000,1 +US,2024-01,ONONSPEC,PTRANSF,CONVBBL,1435.0000,3 +US,2024-01,ONONSPEC,PTRANSF,KBBL,1326.0000,1 +US,2024-01,ONONSPEC,PTRANSF,KBD,42.7742,1 +US,2024-01,ONONSPEC,PTRANSF,KL,210.8080,1 +US,2024-01,ONONSPEC,PTRANSF,KTONS,924.0000,1 +US,2024-01,ONONSPEC,RECEIPTS,CONVBBL,13782.0000,3 +US,2024-01,ONONSPEC,RECEIPTS,KBBL,156026.0000,1 +US,2024-01,ONONSPEC,RECEIPTS,KBD,5033.0968,1 +US,2024-01,ONONSPEC,RECEIPTS,KL,24806.1977,1 +US,2024-01,ONONSPEC,RECEIPTS,KTONS,11321.0000,1 +US,2024-01,ONONSPEC,REFGROUT,CONVBBL,7794.0000,3 +US,2024-01,ONONSPEC,REFGROUT,KBBL,71115.0000,1 +US,2024-01,ONONSPEC,REFGROUT,KBD,2294.0323,1 +US,2024-01,ONONSPEC,REFGROUT,KL,11305.9964,1 +US,2024-01,ONONSPEC,REFGROUT,KTONS,9124.0000,1 +US,2024-01,ONONSPEC,STATDIFF,CONVBBL,1148.0000,3 +US,2024-01,ONONSPEC,STATDIFF,KBBL,-2245.0000,3 +US,2024-01,ONONSPEC,STATDIFF,KBD,-72.4194,3 +US,2024-01,ONONSPEC,STATDIFF,KL,-356.8222,3 +US,2024-01,ONONSPEC,STATDIFF,KTONS,-1955.0000,3 +US,2024-01,ONONSPEC,STOCKCH,CONVBBL,-944400.0000,3 +US,2024-01,ONONSPEC,STOCKCH,KBBL,-4722.0000,1 +US,2024-01,ONONSPEC,STOCKCH,KBD,x,3 +US,2024-01,ONONSPEC,STOCKCH,KL,-750.7393,1 +US,2024-01,ONONSPEC,STOCKCH,KTONS,5.0000,1 +US,2024-01,ONONSPEC,TOTDEMO,CONVBBL,11384.0000,3 +US,2024-01,ONONSPEC,TOTDEMO,KBBL,114485.0000,1 +US,2024-01,ONONSPEC,TOTDEMO,KBD,3693.0645,1 +US,2024-01,ONONSPEC,TOTDEMO,KL,18202.3098,1 +US,2024-01,ONONSPEC,TOTDEMO,KTONS,10057.0000,1 +US,2024-01,ONONSPEC,TOTEXPSB,CONVBBL,7928.0000,3 +US,2024-01,ONONSPEC,TOTEXPSB,KBBL,38964.0000,1 +US,2024-01,ONONSPEC,TOTEXPSB,KBD,1256.9032,1 +US,2024-01,ONONSPEC,TOTEXPSB,KL,6195.1286,1 +US,2024-01,ONONSPEC,TOTEXPSB,KTONS,4915.0000,1 +US,2024-01,ONONSPEC,TOTIMPSB,CONVBBL,7106.0000,3 +US,2024-01,ONONSPEC,TOTIMPSB,KBBL,4299.0000,1 +US,2024-01,ONONSPEC,TOTIMPSB,KBD,138.6774,1 +US,2024-01,ONONSPEC,TOTIMPSB,KL,683.5082,1 +US,2024-01,ONONSPEC,TOTIMPSB,KTONS,605.0000,1 +US,2024-02,ONONSPEC,CLOSTLV,CONVBBL,8844.0000,3 +US,2024-02,ONONSPEC,CLOSTLV,KBBL,94916.0000,1 +US,2024-02,ONONSPEC,CLOSTLV,KBD,x,3 +US,2024-02,ONONSPEC,CLOSTLV,KL,15090.1154,1 +US,2024-02,ONONSPEC,CLOSTLV,KTONS,10732.0000,1 +US,2024-02,ONONSPEC,IPTRANSF,CONVBBL,11735.0000,3 +US,2024-02,ONONSPEC,IPTRANSF,KBBL,-86674.0000,1 +US,2024-02,ONONSPEC,IPTRANSF,KBD,-2988.7586,1 +US,2024-02,ONONSPEC,IPTRANSF,KL,-13780.2013,1 +US,2024-02,ONONSPEC,IPTRANSF,KTONS,-7386.0000,1 +US,2024-02,ONONSPEC,PTRANSF,CONVBBL,805.0000,3 +US,2024-02,ONONSPEC,PTRANSF,KBBL,709.0000,1 +US,2024-02,ONONSPEC,PTRANSF,KBD,24.4483,1 +US,2024-02,ONONSPEC,PTRANSF,KL,112.7548,1 +US,2024-02,ONONSPEC,PTRANSF,KTONS,881.0000,1 +US,2024-02,ONONSPEC,RECEIPTS,CONVBBL,13777.0000,3 +US,2024-02,ONONSPEC,RECEIPTS,KBBL,163610.0000,1 +US,2024-02,ONONSPEC,RECEIPTS,KBD,5641.7241,1 +US,2024-02,ONONSPEC,RECEIPTS,KL,26012.8545,1 +US,2024-02,ONONSPEC,RECEIPTS,KTONS,11876.0000,1 +US,2024-02,ONONSPEC,REFGROUT,CONVBBL,7816.0000,3 +US,2024-02,ONONSPEC,REFGROUT,KBBL,61774.0000,1 +US,2024-02,ONONSPEC,REFGROUT,KBD,2130.1379,1 +US,2024-02,ONONSPEC,REFGROUT,KL,9821.8805,1 +US,2024-02,ONONSPEC,REFGROUT,KTONS,7904.0000,1 +US,2024-02,ONONSPEC,STATDIFF,CONVBBL,2165.0000,3 +US,2024-02,ONONSPEC,STATDIFF,KBBL,-3262.0000,3 +US,2024-02,ONONSPEC,STATDIFF,KBD,-112.4828,3 +US,2024-02,ONONSPEC,STATDIFF,KL,-518.7216,3 +US,2024-02,ONONSPEC,STATDIFF,KTONS,-1507.0000,3 +US,2024-02,ONONSPEC,STOCKCH,CONVBBL,-10489.0000,3 +US,2024-02,ONONSPEC,STOCKCH,KBBL,-1395.0000,1 +US,2024-02,ONONSPEC,STOCKCH,KBD,x,3 +US,2024-02,ONONSPEC,STOCKCH,KL,-221.7935,1 +US,2024-02,ONONSPEC,STOCKCH,KTONS,133.0000,1 +US,2024-02,ONONSPEC,TOTDEMO,CONVBBL,12492.0000,3 +US,2024-02,ONONSPEC,TOTDEMO,KBBL,110591.0000,1 +US,2024-02,ONONSPEC,TOTDEMO,KBD,3813.4828,1 +US,2024-02,ONONSPEC,TOTDEMO,KL,17582.7015,1 +US,2024-02,ONONSPEC,TOTDEMO,KTONS,8853.0000,1 +US,2024-02,ONONSPEC,TOTEXPSB,CONVBBL,7831.0000,3 +US,2024-02,ONONSPEC,TOTEXPSB,KBBL,36111.0000,1 +US,2024-02,ONONSPEC,TOTEXPSB,KBD,1245.2069,1 +US,2024-02,ONONSPEC,TOTEXPSB,KL,5740.8409,1 +US,2024-02,ONONSPEC,TOTEXPSB,KTONS,4611.0000,1 +US,2024-02,ONONSPEC,TOTIMPSB,CONVBBL,7009.0000,3 +US,2024-02,ONONSPEC,TOTIMPSB,KBBL,4044.0000,1 +US,2024-02,ONONSPEC,TOTIMPSB,KBD,139.4483,1 +US,2024-02,ONONSPEC,TOTIMPSB,KL,642.9764,1 +US,2024-02,ONONSPEC,TOTIMPSB,KTONS,577.0000,1 +US,2024-03,ONONSPEC,CLOSTLV,CONVBBL,8938.0000,3 +US,2024-03,ONONSPEC,CLOSTLV,KBBL,102213.0000,1 +US,2024-03,ONONSPEC,CLOSTLV,KBD,x,3 +US,2024-03,ONONSPEC,CLOSTLV,KL,16250.9091,1 +US,2024-03,ONONSPEC,CLOSTLV,KTONS,11436.0000,1 +US,2024-03,ONONSPEC,IPTRANSF,CONVBBL,11712.0000,3 +US,2024-03,ONONSPEC,IPTRANSF,KBBL,-95053.0000,1 +US,2024-03,ONONSPEC,IPTRANSF,KBD,-3066.2258,1 +US,2024-03,ONONSPEC,IPTRANSF,KL,-15112.4983,1 +US,2024-03,ONONSPEC,IPTRANSF,KTONS,-8116.0000,1 +US,2024-03,ONONSPEC,PTRANSF,CONVBBL,2395.0000,3 +US,2024-03,ONONSPEC,PTRANSF,KBBL,1351.0000,1 +US,2024-03,ONONSPEC,PTRANSF,KBD,43.5806,1 +US,2024-03,ONONSPEC,PTRANSF,KL,214.7572,1 +US,2024-03,ONONSPEC,PTRANSF,KTONS,564.0000,1 +US,2024-03,ONONSPEC,RECEIPTS,CONVBBL,13783.0000,3 +US,2024-03,ONONSPEC,RECEIPTS,KBBL,182223.0000,1 +US,2024-03,ONONSPEC,RECEIPTS,KBD,5878.1613,1 +US,2024-03,ONONSPEC,RECEIPTS,KL,28971.5163,1 +US,2024-03,ONONSPEC,RECEIPTS,KTONS,13221.0000,1 +US,2024-03,ONONSPEC,REFGROUT,CONVBBL,7756.0000,3 +US,2024-03,ONONSPEC,REFGROUT,KBBL,71421.0000,1 +US,2024-03,ONONSPEC,REFGROUT,KBD,2303.9032,1 +US,2024-03,ONONSPEC,REFGROUT,KL,11354.4545,1 +US,2024-03,ONONSPEC,REFGROUT,KTONS,9208.0000,1 +US,2024-03,ONONSPEC,STATDIFF,CONVBBL,1829.0000,3 +US,2024-03,ONONSPEC,STATDIFF,KBBL,-2623.0000,3 +US,2024-03,ONONSPEC,STATDIFF,KBD,-84.6129,3 +US,2024-03,ONONSPEC,STATDIFF,KL,-416.9904,3 +US,2024-03,ONONSPEC,STATDIFF,KTONS,-1434.0000,3 +US,2024-03,ONONSPEC,STOCKCH,CONVBBL,10365.0000,3 +US,2024-03,ONONSPEC,STOCKCH,KBBL,7297.0000,1 +US,2024-03,ONONSPEC,STOCKCH,KBD,x,3 +US,2024-03,ONONSPEC,STOCKCH,KL,1160.1259,1 +US,2024-03,ONONSPEC,STOCKCH,KTONS,704.0000,1 +US,2024-03,ONONSPEC,TOTDEMO,CONVBBL,11879.0000,3 +US,2024-03,ONONSPEC,TOTDEMO,KBBL,118312.0000,1 +US,2024-03,ONONSPEC,TOTDEMO,KBD,3816.5161,1 +US,2024-03,ONONSPEC,TOTDEMO,KL,18810.5886,1 +US,2024-03,ONONSPEC,TOTDEMO,KTONS,9960.0000,1 +US,2024-03,ONONSPEC,TOTEXPSB,CONVBBL,7492.0000,3 +US,2024-03,ONONSPEC,TOTEXPSB,KBBL,38814.0000,1 +US,2024-03,ONONSPEC,TOTEXPSB,KBD,1252.0645,1 +US,2024-03,ONONSPEC,TOTEXPSB,KL,6171.2697,1 +US,2024-03,ONONSPEC,TOTEXPSB,KTONS,5181.0000,1 +US,2024-03,ONONSPEC,TOTIMPSB,CONVBBL,6888.0000,3 +US,2024-03,ONONSPEC,TOTIMPSB,KBBL,4560.0000,1 +US,2024-03,ONONSPEC,TOTIMPSB,KBD,147.0968,1 +US,2024-03,ONONSPEC,TOTIMPSB,KL,724.9604,1 +US,2024-03,ONONSPEC,TOTIMPSB,KTONS,662.0000,1 +US,2024-01,RESFUEL,CLOSTLV,CONVBBL,6660.0000,3 +US,2024-01,RESFUEL,CLOSTLV,KBBL,34346.0000,1 +US,2024-01,RESFUEL,CLOSTLV,KBD,x,3 +US,2024-01,RESFUEL,CLOSTLV,KL,5460.5266,1 +US,2024-01,RESFUEL,CLOSTLV,KTONS,5157.0000,1 +US,2024-01,RESFUEL,IPTRANSF,CONVBBL,6500.0000,3 +US,2024-01,RESFUEL,IPTRANSF,KBBL,-13.0000,1 +US,2024-01,RESFUEL,IPTRANSF,KBD,-0.4194,1 +US,2024-01,RESFUEL,IPTRANSF,KL,-2.0668,1 +US,2024-01,RESFUEL,IPTRANSF,KTONS,-2.0000,1 +US,2024-01,RESFUEL,PTRANSF,CONVBBL,..,3 +US,2024-01,RESFUEL,PTRANSF,KBBL,0.0000,1 +US,2024-01,RESFUEL,PTRANSF,KBD,0.0000,1 +US,2024-01,RESFUEL,PTRANSF,KL,-,3 +US,2024-01,RESFUEL,PTRANSF,KTONS,0.0000,1 +US,2024-01,RESFUEL,RECEIPTS,CONVBBL,..,3 +US,2024-01,RESFUEL,RECEIPTS,KBBL,0.0000,1 +US,2024-01,RESFUEL,RECEIPTS,KBD,0.0000,1 +US,2024-01,RESFUEL,RECEIPTS,KL,-,3 +US,2024-01,RESFUEL,RECEIPTS,KTONS,0.0000,1 +US,2024-01,RESFUEL,REFGROUT,CONVBBL,6660.0000,3 +US,2024-01,RESFUEL,REFGROUT,KBBL,9943.0000,1 +US,2024-01,RESFUEL,REFGROUT,KBD,320.7419,1 +US,2024-01,RESFUEL,REFGROUT,KL,1580.8738,1 +US,2024-01,RESFUEL,REFGROUT,KTONS,1493.0000,1 +US,2024-01,RESFUEL,STATDIFF,CONVBBL,4185.0000,3 +US,2024-01,RESFUEL,STATDIFF,KBBL,-452.0000,3 +US,2024-01,RESFUEL,STATDIFF,KBD,-14.5806,3 +US,2024-01,RESFUEL,STATDIFF,KL,-71.8592,3 +US,2024-01,RESFUEL,STATDIFF,KTONS,-108.0000,3 +US,2024-01,RESFUEL,STOCKCH,CONVBBL,6662.0000,3 +US,2024-01,RESFUEL,STOCKCH,KBBL,2245.0000,1 +US,2024-01,RESFUEL,STOCKCH,KBD,x,3 +US,2024-01,RESFUEL,STOCKCH,KL,356.9420,1 +US,2024-01,RESFUEL,STOCKCH,KTONS,337.0000,1 +US,2024-01,RESFUEL,TOTDEMO,CONVBBL,6467.0000,3 +US,2024-01,RESFUEL,TOTDEMO,KBBL,9332.0000,1 +US,2024-01,RESFUEL,TOTDEMO,KBD,301.0323,1 +US,2024-01,RESFUEL,TOTDEMO,KL,1483.6531,1 +US,2024-01,RESFUEL,TOTDEMO,KTONS,1443.0000,1 +US,2024-01,RESFUEL,TOTEXPSB,CONVBBL,6667.0000,3 +US,2024-01,RESFUEL,TOTEXPSB,KBBL,2687.0000,1 +US,2024-01,RESFUEL,TOTEXPSB,KBD,86.6774,1 +US,2024-01,RESFUEL,TOTEXPSB,KL,427.1680,1 +US,2024-01,RESFUEL,TOTEXPSB,KTONS,403.0000,1 +US,2024-01,RESFUEL,TOTIMPSB,CONVBBL,6647.0000,3 +US,2024-01,RESFUEL,TOTIMPSB,KBBL,3882.0000,1 +US,2024-01,RESFUEL,TOTIMPSB,KBD,125.2258,1 +US,2024-01,RESFUEL,TOTIMPSB,KL,617.1656,1 +US,2024-01,RESFUEL,TOTIMPSB,KTONS,584.0000,1 +US,2024-02,RESFUEL,CLOSTLV,CONVBBL,6660.0000,3 +US,2024-02,RESFUEL,CLOSTLV,KBBL,36910.0000,1 +US,2024-02,RESFUEL,CLOSTLV,KBD,x,3 +US,2024-02,RESFUEL,CLOSTLV,KL,5868.1866,1 +US,2024-02,RESFUEL,CLOSTLV,KTONS,5542.0000,1 +US,2024-02,RESFUEL,IPTRANSF,CONVBBL,6500.0000,3 +US,2024-02,RESFUEL,IPTRANSF,KBBL,-26.0000,1 +US,2024-02,RESFUEL,IPTRANSF,KBD,-0.8966,1 +US,2024-02,RESFUEL,IPTRANSF,KL,-4.1337,1 +US,2024-02,RESFUEL,IPTRANSF,KTONS,-4.0000,1 +US,2024-02,RESFUEL,PTRANSF,CONVBBL,..,3 +US,2024-02,RESFUEL,PTRANSF,KBBL,0.0000,1 +US,2024-02,RESFUEL,PTRANSF,KBD,0.0000,1 +US,2024-02,RESFUEL,PTRANSF,KL,-,3 +US,2024-02,RESFUEL,PTRANSF,KTONS,0.0000,1 +US,2024-02,RESFUEL,RECEIPTS,CONVBBL,..,3 +US,2024-02,RESFUEL,RECEIPTS,KBBL,0.0000,1 +US,2024-02,RESFUEL,RECEIPTS,KBD,0.0000,1 +US,2024-02,RESFUEL,RECEIPTS,KL,-,3 +US,2024-02,RESFUEL,RECEIPTS,KTONS,0.0000,1 +US,2024-02,RESFUEL,REFGROUT,CONVBBL,6657.0000,3 +US,2024-02,RESFUEL,REFGROUT,KBBL,11583.0000,1 +US,2024-02,RESFUEL,REFGROUT,KBD,399.4138,1 +US,2024-02,RESFUEL,REFGROUT,KL,1841.5816,1 +US,2024-02,RESFUEL,REFGROUT,KTONS,1740.0000,1 +US,2024-02,RESFUEL,STATDIFF,CONVBBL,3395.0000,3 +US,2024-02,RESFUEL,STATDIFF,KBBL,-876.0000,3 +US,2024-02,RESFUEL,STATDIFF,KBD,-30.2069,3 +US,2024-02,RESFUEL,STATDIFF,KL,-139.2588,3 +US,2024-02,RESFUEL,STATDIFF,KTONS,-258.0000,3 +US,2024-02,RESFUEL,STOCKCH,CONVBBL,6660.0000,3 +US,2024-02,RESFUEL,STOCKCH,KBBL,2564.0000,1 +US,2024-02,RESFUEL,STOCKCH,KBD,x,3 +US,2024-02,RESFUEL,STOCKCH,KL,407.6600,1 +US,2024-02,RESFUEL,STOCKCH,KTONS,385.0000,1 +US,2024-02,RESFUEL,TOTDEMO,CONVBBL,6059.0000,3 +US,2024-02,RESFUEL,TOTDEMO,KBBL,8567.0000,1 +US,2024-02,RESFUEL,TOTDEMO,KBD,295.4138,1 +US,2024-02,RESFUEL,TOTDEMO,KL,1362.1142,1 +US,2024-02,RESFUEL,TOTDEMO,KTONS,1414.0000,1 +US,2024-02,RESFUEL,TOTEXPSB,CONVBBL,6666.0000,3 +US,2024-02,RESFUEL,TOTEXPSB,KBBL,5513.0000,1 +US,2024-02,RESFUEL,TOTEXPSB,KBD,190.1034,1 +US,2024-02,RESFUEL,TOTEXPSB,KL,876.4638,1 +US,2024-02,RESFUEL,TOTEXPSB,KTONS,827.0000,1 +US,2024-02,RESFUEL,TOTIMPSB,CONVBBL,6663.0000,3 +US,2024-02,RESFUEL,TOTIMPSB,KBBL,4211.0000,1 +US,2024-02,RESFUEL,TOTIMPSB,KBD,145.2069,1 +US,2024-02,RESFUEL,TOTIMPSB,KL,669.4992,1 +US,2024-02,RESFUEL,TOTIMPSB,KTONS,632.0000,1 +US,2024-03,RESFUEL,CLOSTLV,CONVBBL,6660.0000,3 +US,2024-03,RESFUEL,CLOSTLV,KBBL,37269.0000,1 +US,2024-03,RESFUEL,CLOSTLV,KBD,x,3 +US,2024-03,RESFUEL,CLOSTLV,KL,5925.3649,1 +US,2024-03,RESFUEL,CLOSTLV,KTONS,5596.0000,1 +US,2024-03,RESFUEL,IPTRANSF,CONVBBL,6857.0000,3 +US,2024-03,RESFUEL,IPTRANSF,KBBL,48.0000,1 +US,2024-03,RESFUEL,IPTRANSF,KBD,1.5484,1 +US,2024-03,RESFUEL,IPTRANSF,KL,7.6312,1 +US,2024-03,RESFUEL,IPTRANSF,KTONS,7.0000,1 +US,2024-03,RESFUEL,PTRANSF,CONVBBL,..,3 +US,2024-03,RESFUEL,PTRANSF,KBBL,0.0000,1 +US,2024-03,RESFUEL,PTRANSF,KBD,0.0000,1 +US,2024-03,RESFUEL,PTRANSF,KL,-,3 +US,2024-03,RESFUEL,PTRANSF,KTONS,0.0000,1 +US,2024-03,RESFUEL,RECEIPTS,CONVBBL,..,3 +US,2024-03,RESFUEL,RECEIPTS,KBBL,0.0000,1 +US,2024-03,RESFUEL,RECEIPTS,KBD,0.0000,1 +US,2024-03,RESFUEL,RECEIPTS,KL,-,3 +US,2024-03,RESFUEL,RECEIPTS,KTONS,0.0000,1 +US,2024-03,RESFUEL,REFGROUT,CONVBBL,6660.0000,3 +US,2024-03,RESFUEL,REFGROUT,KBBL,12548.0000,1 +US,2024-03,RESFUEL,REFGROUT,KBD,404.7742,1 +US,2024-03,RESFUEL,REFGROUT,KL,1994.8870,1 +US,2024-03,RESFUEL,REFGROUT,KTONS,1884.0000,1 +US,2024-03,RESFUEL,STATDIFF,CONVBBL,34200.0000,3 +US,2024-03,RESFUEL,STATDIFF,KBBL,-513.0000,3 +US,2024-03,RESFUEL,STATDIFF,KBD,-16.5484,3 +US,2024-03,RESFUEL,STATDIFF,KL,-81.5606,3 +US,2024-03,RESFUEL,STATDIFF,KTONS,-15.0000,3 +US,2024-03,RESFUEL,STOCKCH,CONVBBL,6648.0000,3 +US,2024-03,RESFUEL,STOCKCH,KBBL,359.0000,1 +US,2024-03,RESFUEL,STOCKCH,KBD,x,3 +US,2024-03,RESFUEL,STOCKCH,KL,57.0753,1 +US,2024-03,RESFUEL,STOCKCH,KTONS,54.0000,1 +US,2024-03,RESFUEL,TOTDEMO,CONVBBL,6935.0000,3 +US,2024-03,RESFUEL,TOTDEMO,KBBL,10687.0000,1 +US,2024-03,RESFUEL,TOTDEMO,KBD,344.7419,1 +US,2024-03,RESFUEL,TOTDEMO,KL,1699.0739,1 +US,2024-03,RESFUEL,TOTDEMO,KTONS,1541.0000,1 +US,2024-03,RESFUEL,TOTEXPSB,CONVBBL,6652.0000,3 +US,2024-03,RESFUEL,TOTEXPSB,KBBL,5714.0000,1 +US,2024-03,RESFUEL,TOTEXPSB,KBD,184.3226,1 +US,2024-03,RESFUEL,TOTEXPSB,KL,908.4658,1 +US,2024-03,RESFUEL,TOTEXPSB,KTONS,859.0000,1 +US,2024-03,RESFUEL,TOTIMPSB,CONVBBL,6662.0000,3 +US,2024-03,RESFUEL,TOTIMPSB,KBBL,3651.0000,1 +US,2024-03,RESFUEL,TOTIMPSB,KBD,117.7742,1 +US,2024-03,RESFUEL,TOTIMPSB,KL,580.4280,1 +US,2024-03,RESFUEL,TOTIMPSB,KTONS,548.0000,1 +US,2024-01,TOTPRODS,CLOSTLV,CONVBBL,8357.0000,3 +US,2024-01,TOTPRODS,CLOSTLV,KBBL,539289.0000,1 +US,2024-01,TOTPRODS,CLOSTLV,KBD,x,3 +US,2024-01,TOTPRODS,CLOSTLV,KL,85743.6863,1 +US,2024-01,TOTPRODS,CLOSTLV,KTONS,64534.0000,1 +US,2024-01,TOTPRODS,IPTRANSF,CONVBBL,..,3 +US,2024-01,TOTPRODS,IPTRANSF,KBBL,0.0000,1 +US,2024-01,TOTPRODS,IPTRANSF,KBD,0.0000,1 +US,2024-01,TOTPRODS,IPTRANSF,KL,-,3 +US,2024-01,TOTPRODS,IPTRANSF,KTONS,0.0000,1 +US,2024-01,TOTPRODS,PTRANSF,CONVBBL,7493.0000,3 +US,2024-01,TOTPRODS,PTRANSF,KBBL,15053.0000,1 +US,2024-01,TOTPRODS,PTRANSF,KBD,485.5806,1 +US,2024-01,TOTPRODS,PTRANSF,KL,2393.3093,1 +US,2024-01,TOTPRODS,PTRANSF,KTONS,2009.0000,1 +US,2024-01,TOTPRODS,RECEIPTS,CONVBBL,12411.0000,3 +US,2024-01,TOTPRODS,RECEIPTS,KBBL,182945.0000,1 +US,2024-01,TOTPRODS,RECEIPTS,KBD,5901.4516,1 +US,2024-01,TOTPRODS,RECEIPTS,KL,29084.8898,1 +US,2024-01,TOTPRODS,RECEIPTS,KTONS,14740.0000,1 +US,2024-01,TOTPRODS,REFGROUT,CONVBBL,8068.0000,3 +US,2024-01,TOTPRODS,REFGROUT,KBBL,535900.0000,1 +US,2024-01,TOTPRODS,REFGROUT,KBD,17287.0968,1 +US,2024-01,TOTPRODS,REFGROUT,KL,85198.9933,1 +US,2024-01,TOTPRODS,REFGROUT,KTONS,66421.0000,1 +US,2024-01,TOTPRODS,STATDIFF,CONVBBL,6610.0000,3 +US,2024-01,TOTPRODS,STATDIFF,KBBL,-38780.0000,3 +US,2024-01,TOTPRODS,STATDIFF,KBD,-1250.9677,3 +US,2024-01,TOTPRODS,STATDIFF,KL,-6165.6762,3 +US,2024-01,TOTPRODS,STATDIFF,KTONS,-5867.0000,3 +US,2024-01,TOTPRODS,STOCKCH,CONVBBL,-6714.0000,3 +US,2024-01,TOTPRODS,STOCKCH,KBBL,-3619.0000,1 +US,2024-01,TOTPRODS,STOCKCH,KBD,x,3 +US,2024-01,TOTPRODS,STOCKCH,KL,-575.3515,1 +US,2024-01,TOTPRODS,STOCKCH,KTONS,539.0000,1 +US,2024-01,TOTPRODS,TOTDEMO,CONVBBL,8732.0000,3 +US,2024-01,TOTPRODS,TOTDEMO,KBBL,610732.0000,1 +US,2024-01,TOTPRODS,TOTDEMO,KBD,19701.0323,1 +US,2024-01,TOTPRODS,TOTDEMO,KL,97096.2638,1 +US,2024-01,TOTPRODS,TOTDEMO,KTONS,69940.0000,1 +US,2024-01,TOTPRODS,TOTEXPSB,CONVBBL,9041.0000,3 +US,2024-01,TOTPRODS,TOTEXPSB,KBBL,176167.0000,1 +US,2024-01,TOTPRODS,TOTEXPSB,KBD,5682.8065,1 +US,2024-01,TOTPRODS,TOTEXPSB,KL,28009.3049,1 +US,2024-01,TOTPRODS,TOTEXPSB,KTONS,19486.0000,1 +US,2024-01,TOTPRODS,TOTIMPSB,CONVBBL,8230.0000,3 +US,2024-01,TOTPRODS,TOTIMPSB,KBBL,40708.0000,1 +US,2024-01,TOTPRODS,TOTIMPSB,KBD,1313.1613,1 +US,2024-01,TOTPRODS,TOTIMPSB,KL,6471.6811,1 +US,2024-01,TOTPRODS,TOTIMPSB,KTONS,4946.0000,1 +US,2024-02,TOTPRODS,CLOSTLV,CONVBBL,8295.0000,3 +US,2024-02,TOTPRODS,CLOSTLV,KBBL,514863.0000,1 +US,2024-02,TOTPRODS,CLOSTLV,KBD,x,3 +US,2024-02,TOTPRODS,CLOSTLV,KL,81859.3509,1 +US,2024-02,TOTPRODS,CLOSTLV,KTONS,62071.0000,1 +US,2024-02,TOTPRODS,IPTRANSF,CONVBBL,..,3 +US,2024-02,TOTPRODS,IPTRANSF,KBBL,0.0000,1 +US,2024-02,TOTPRODS,IPTRANSF,KBD,0.0000,1 +US,2024-02,TOTPRODS,IPTRANSF,KL,-,3 +US,2024-02,TOTPRODS,IPTRANSF,KTONS,0.0000,1 +US,2024-02,TOTPRODS,PTRANSF,CONVBBL,7627.0000,3 +US,2024-02,TOTPRODS,PTRANSF,KBBL,16176.0000,1 +US,2024-02,TOTPRODS,PTRANSF,KBD,557.7931,1 +US,2024-02,TOTPRODS,PTRANSF,KL,2571.9207,1 +US,2024-02,TOTPRODS,PTRANSF,KTONS,2121.0000,1 +US,2024-02,TOTPRODS,RECEIPTS,CONVBBL,12451.0000,3 +US,2024-02,TOTPRODS,RECEIPTS,KBBL,190754.0000,1 +US,2024-02,TOTPRODS,RECEIPTS,KBD,6577.7241,1 +US,2024-02,TOTPRODS,RECEIPTS,KL,30326.7703,1 +US,2024-02,TOTPRODS,RECEIPTS,KTONS,15320.0000,1 +US,2024-02,TOTPRODS,REFGROUT,CONVBBL,8068.0000,3 +US,2024-02,TOTPRODS,REFGROUT,KBBL,468723.0000,1 +US,2024-02,TOTPRODS,REFGROUT,KBD,16162.8621,1 +US,2024-02,TOTPRODS,REFGROUT,KL,74521.7012,1 +US,2024-02,TOTPRODS,REFGROUT,KTONS,58097.0000,1 +US,2024-02,TOTPRODS,STATDIFF,CONVBBL,7217.0000,3 +US,2024-02,TOTPRODS,STATDIFF,KBBL,-42604.0000,3 +US,2024-02,TOTPRODS,STATDIFF,KBD,-1469.1034,3 +US,2024-02,TOTPRODS,STATDIFF,KL,-6773.1805,3 +US,2024-02,TOTPRODS,STATDIFF,KTONS,-5903.0000,3 +US,2024-02,TOTPRODS,STOCKCH,CONVBBL,9917.0000,3 +US,2024-02,TOTPRODS,STOCKCH,KBBL,-24426.0000,1 +US,2024-02,TOTPRODS,STOCKCH,KBD,x,3 +US,2024-02,TOTPRODS,STOCKCH,KL,-3883.3621,1 +US,2024-02,TOTPRODS,STOCKCH,KTONS,-2463.0000,1 +US,2024-02,TOTPRODS,TOTDEMO,CONVBBL,8818.0000,3 +US,2024-02,TOTPRODS,TOTDEMO,KBBL,581815.0000,1 +US,2024-02,TOTPRODS,TOTDEMO,KBD,20062.5862,1 +US,2024-02,TOTPRODS,TOTDEMO,KL,92496.6113,1 +US,2024-02,TOTPRODS,TOTDEMO,KTONS,65977.0000,1 +US,2024-02,TOTPRODS,TOTEXPSB,CONVBBL,9092.0000,3 +US,2024-02,TOTPRODS,TOTEXPSB,KBBL,168822.0000,1 +US,2024-02,TOTPRODS,TOTEXPSB,KBD,5821.4483,1 +US,2024-02,TOTPRODS,TOTEXPSB,KL,26840.3218,1 +US,2024-02,TOTPRODS,TOTEXPSB,KTONS,18568.0000,1 +US,2024-02,TOTPRODS,TOTIMPSB,CONVBBL,8254.0000,3 +US,2024-02,TOTPRODS,TOTIMPSB,KBBL,40306.0000,1 +US,2024-02,TOTPRODS,TOTIMPSB,KBD,1389.8621,1 +US,2024-02,TOTPRODS,TOTIMPSB,KL,6407.8797,1 +US,2024-02,TOTPRODS,TOTIMPSB,KTONS,4883.0000,1 +US,2024-03,TOTPRODS,CLOSTLV,CONVBBL,8310.0000,3 +US,2024-03,TOTPRODS,CLOSTLV,KBBL,523389.0000,1 +US,2024-03,TOTPRODS,CLOSTLV,KBD,x,3 +US,2024-03,TOTPRODS,CLOSTLV,KL,83212.3009,1 +US,2024-03,TOTPRODS,CLOSTLV,KTONS,62983.0000,1 +US,2024-03,TOTPRODS,IPTRANSF,CONVBBL,..,3 +US,2024-03,TOTPRODS,IPTRANSF,KBBL,0.0000,1 +US,2024-03,TOTPRODS,IPTRANSF,KBD,0.0000,1 +US,2024-03,TOTPRODS,IPTRANSF,KL,-,3 +US,2024-03,TOTPRODS,IPTRANSF,KTONS,0.0000,1 +US,2024-03,TOTPRODS,PTRANSF,CONVBBL,7275.0000,3 +US,2024-03,TOTPRODS,PTRANSF,KBBL,14535.0000,1 +US,2024-03,TOTPRODS,PTRANSF,KBD,468.8710,1 +US,2024-03,TOTPRODS,PTRANSF,KL,2310.9558,1 +US,2024-03,TOTPRODS,PTRANSF,KTONS,1998.0000,1 +US,2024-03,TOTPRODS,RECEIPTS,CONVBBL,12490.0000,3 +US,2024-03,TOTPRODS,RECEIPTS,KBBL,211449.0000,1 +US,2024-03,TOTPRODS,RECEIPTS,KBD,6820.9355,1 +US,2024-03,TOTPRODS,RECEIPTS,KL,33616.8416,1 +US,2024-03,TOTPRODS,RECEIPTS,KTONS,16929.0000,1 +US,2024-03,TOTPRODS,REFGROUT,CONVBBL,8078.0000,3 +US,2024-03,TOTPRODS,REFGROUT,KBBL,543688.0000,1 +US,2024-03,TOTPRODS,REFGROUT,KBD,17538.3226,1 +US,2024-03,TOTPRODS,REFGROUT,KL,86436.0641,1 +US,2024-03,TOTPRODS,REFGROUT,KTONS,67302.0000,1 +US,2024-03,TOTPRODS,STATDIFF,CONVBBL,4912.0000,3 +US,2024-03,TOTPRODS,STATDIFF,KBBL,-18249.0000,3 +US,2024-03,TOTPRODS,STATDIFF,KBD,-588.6774,3 +US,2024-03,TOTPRODS,STATDIFF,KL,-2901.2178,3 +US,2024-03,TOTPRODS,STATDIFF,KTONS,-3715.0000,3 +US,2024-03,TOTPRODS,STOCKCH,CONVBBL,9349.0000,3 +US,2024-03,TOTPRODS,STOCKCH,KBBL,8526.0000,1 +US,2024-03,TOTPRODS,STOCKCH,KBD,x,3 +US,2024-03,TOTPRODS,STOCKCH,KL,1355.5738,1 +US,2024-03,TOTPRODS,STOCKCH,KTONS,912.0000,1 +US,2024-03,TOTPRODS,TOTDEMO,CONVBBL,8743.0000,3 +US,2024-03,TOTPRODS,TOTDEMO,KBBL,619728.0000,1 +US,2024-03,TOTPRODS,TOTDEMO,KBD,19991.2258,1 +US,2024-03,TOTPRODS,TOTDEMO,KL,98532.1560,1 +US,2024-03,TOTPRODS,TOTDEMO,KTONS,70885.0000,1 +US,2024-03,TOTPRODS,TOTEXPSB,CONVBBL,8885.0000,3 +US,2024-03,TOTPRODS,TOTEXPSB,KBBL,180393.0000,1 +US,2024-03,TOTPRODS,TOTEXPSB,KBD,5819.1290,1 +US,2024-03,TOTPRODS,TOTEXPSB,KL,28680.1099,1 +US,2024-03,TOTPRODS,TOTEXPSB,KTONS,20303.0000,1 +US,2024-03,TOTPRODS,TOTIMPSB,CONVBBL,8094.0000,3 +US,2024-03,TOTPRODS,TOTIMPSB,KBBL,49796.0000,1 +US,2024-03,TOTPRODS,TOTIMPSB,KBD,1606.3226,1 +US,2024-03,TOTPRODS,TOTIMPSB,KL,7916.6727,1 +US,2024-03,TOTPRODS,TOTIMPSB,KTONS,6152.0000,1 diff --git a/openbb_platform/providers/jodi/tests/record/http/test_helpers/test_download_error_urllib3_v2.yaml b/openbb_platform/providers/jodi/tests/record/http/test_helpers/test_download_error_urllib3_v2.yaml new file mode 100644 index 00000000000..c8b712526d8 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/record/http/test_helpers/test_download_error_urllib3_v2.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: null + headers: + Range: + - bytes=0-0 + User-Agent: + - Mozilla/5.0 + method: GET + uri: https://www.jodidata.org/_resources/files/downloads/oil-data/annual-csv/primary/1990.csv + response: + body: + string: "\r\n\r\n\r\n\r\n404 - File or directory + not found.\r\n\r\n\r\n\r\n

Server Error

\r\n
\r\n
\r\n

404 - File or directory not + found.

\r\n

The resource you are looking for might have been removed, + had its name changed, or is temporarily unavailable.

\r\n
\r\n
\r\n\r\n\r\n" + headers: + Content-Length: + - '1245' + Content-Type: + - text/html + Date: + - Wed, 15 Jul 2026 17:01:33 GMT + Server: + - Microsoft-IIS/10.0 + X-Powered-By: + - ASP.NET + status: + code: 404 + message: Not Found +version: 1 diff --git a/openbb_platform/providers/jodi/tests/record/http/test_helpers/test_download_urllib3_v2.yaml b/openbb_platform/providers/jodi/tests/record/http/test_helpers/test_download_urllib3_v2.yaml new file mode 100644 index 00000000000..5f6989978f7 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/record/http/test_helpers/test_download_urllib3_v2.yaml @@ -0,0 +1,29 @@ +interactions: +- request: + body: null + headers: + Range: + - bytes=0-0 + User-Agent: + - Mozilla/5.0 + method: GET + uri: https://api.publisher.jodidata.org/web/files/gas + response: + body: + string: '{"publicationId":23,"files":[{"filename":"GAS_world_NewFormat.zip","format":"CSV","ignore":false},{"filename":"ivt-merged.zip","format":"IVT + Merged","ignore":false},{"filename":"ivt.zip","format":"IVT","ignore":false},{"filename":"jodi-data-availability-by-country.csv","format":"Availability","ignore":false}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 15 Jul 2026 17:01:32 GMT + Server: + - Microsoft-IIS/10.0 + Transfer-Encoding: + - chunked + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/jodi/tests/test_helpers.py b/openbb_platform/providers/jodi/tests/test_helpers.py new file mode 100644 index 00000000000..f0a715e08ea --- /dev/null +++ b/openbb_platform/providers/jodi/tests/test_helpers.py @@ -0,0 +1,1075 @@ +"""Test the JODI provider helpers.""" + +import asyncio +import json +import threading +import time +import zipfile +from datetime import date +from io import BytesIO +from pathlib import Path + +import pytest +from openbb_core.app.model.abstract.error import OpenBBError +from pandas import read_csv + +from openbb_jodi.utils import constants, helpers + +from .conftest import zip_bytes + +FIXTURES = Path(__file__).parent / "fixtures" + + +def _fixture_frame(name: str = "oil_primary_sample.csv"): + df = read_csv(FIXTURES / name, dtype=helpers.CSV_DTYPES) + return helpers.clean_chunk(df) + + +def test_get_cache_directory(isolate_cache, monkeypatch, tmp_path): + import openbb_core.app.utils as core_utils + + monkeypatch.setattr( + core_utils, "get_user_cache_directory", lambda: str(tmp_path / "user") + ) + path = isolate_cache() + assert path == tmp_path / "user" / "jodi" + assert path.is_dir() + assert isolate_cache() == path + + +def test_write_cached_raw_atomic(tmp_path): + helpers.write_cached_raw("file.zip", b"content") + assert [p.name for p in tmp_path.iterdir()] == ["file.zip"] + assert (tmp_path / "file.zip").read_bytes() == b"content" + # Nested paths create their parent directory. + helpers.write_cached_raw("oil_primary/manifest.json", b"{}") + assert (tmp_path / "oil_primary" / "manifest.json").read_bytes() == b"{}" + + +def test_partition_filename(): + assert helpers.partition_filename("CRUDEOIL_INDPROD") == "CRUDEOIL_INDPROD.parquet" + + +def test_partition_filters(): + assert helpers.partition_filters(None, None, None, None) is None + filters = helpers.partition_filters( + {"US", "SA"}, {"KBD"}, date(2024, 1, 1), date(2024, 3, 31) + ) + assert filters == [ + ("REF_AREA", "in", ["SA", "US"]), + ("UNIT_MEASURE", "in", ["KBD"]), + ("TIME_PERIOD", ">=", "2024-01"), + ("TIME_PERIOD", "<=", "2024-03"), + ] + + +def test_table_lock_serializes(tmp_path): + handle = helpers.acquire_table_lock("oil_primary") + acquired_at: dict[str, float] = {} + + def waiter(): + other = helpers.acquire_table_lock("oil_primary") + acquired_at["at"] = time.perf_counter() + helpers.release_table_lock(other) + + thread = threading.Thread(target=waiter) + thread.start() + time.sleep(0.3) + released_at = time.perf_counter() + helpers.release_table_lock(handle) + thread.join(timeout=10) + # The second holder could only proceed after the first released. + assert acquired_at["at"] >= released_at + + +def test_acquire_table_lock_failure(tmp_path, monkeypatch): + def boom(handle): + raise RuntimeError("lock failed") + + monkeypatch.setattr(helpers, "_lock_handle_nt", boom) + monkeypatch.setattr(helpers, "_lock_handle_posix", boom) + with pytest.raises(RuntimeError, match="lock failed"): + helpers.acquire_table_lock("oil_primary") + + +def test_source_meta(): + meta = helpers.source_meta( + 206, + { + "Content-Range": "bytes 0-0/23320973", + "ETag": '"1a34eeb4554dd1:0"', + "Last-Modified": "Thu, 25 Jun 2026 03:50:04 GMT", + }, + ) + assert meta == { + "etag": '"1a34eeb4554dd1:0"', + "last_modified": "Thu, 25 Jun 2026 03:50:04 GMT", + "size": 23320973, + } + # A complete (200) response reports its size in Content-Length. + assert helpers.source_meta(200, {"Content-Length": "10"})["size"] == 10 + # An unknown total is reported as zero. + assert helpers.source_meta(206, {"Content-Range": "bytes 0-0/*"})["size"] == 0 + assert helpers.source_meta(200, {}) == { + "etag": None, + "last_modified": None, + "size": 0, + } + + +def test_source_unchanged(): + cached = {"etag": '"a"', "last_modified": "Mon", "size": 10} + # The strongest available validator decides. + assert helpers.source_unchanged(cached, {"etag": '"a"', "size": 99}) + assert not helpers.source_unchanged(cached, {"etag": '"b"', "size": 10}) + # Missing ETag falls back to Last-Modified, then size. + assert helpers.source_unchanged(cached, {"etag": None, "last_modified": "Mon"}) + assert not helpers.source_unchanged(cached, {"last_modified": "Tue"}) + assert helpers.source_unchanged({"size": 10}, {"size": 10}) + assert not helpers.source_unchanged({"size": 10}, {"size": 11}) + # Nothing comparable is treated as changed. + assert not helpers.source_unchanged({}, {"etag": '"a"'}) + + +class FakeResponse: + """Bare response object for request_range header tests.""" + + def __init__(self): + self.status = 206 + self.headers = {"Content-Range": "bytes 0-0/2"} + + async def read(self): + return b"x" + + +def test_request_range_headers(monkeypatch): + import openbb_core.provider.utils.helpers as core_helpers + + captured: list[dict] = [] + + async def fake_amake_request(url, timeout=60, response_callback=None, headers=None): + captured.append(dict(headers)) + return await response_callback(FakeResponse(), None) + + monkeypatch.setattr(core_helpers, "amake_request", fake_amake_request) + asyncio.run(helpers.request_range("http://x", 10, 0, 0, validator='"e"')) + assert captured[0]["Range"] == "bytes=0-0" + assert captured[0]["If-Range"] == '"e"' # a mid-transfer swap returns 200 + asyncio.run(helpers.request_range("http://x", 10, 0, 0)) + assert "If-Range" not in captured[1] + asyncio.run(helpers.request_range("http://x", 10)) + assert "Range" not in captured[2] + + +@pytest.mark.record_http +def test_download(): + body, meta = asyncio.run(helpers.download(constants.GAS_FILES_URL)) + assert b"publicationId" in body + assert isinstance(meta, dict) + + +@pytest.mark.record_http +def test_download_error(): + url = "https://www.jodidata.org/_resources/files/downloads/oil-data/annual-csv/primary/1990.csv" + with pytest.raises(OpenBBError, match="Status Code: 404"): + asyncio.run(helpers.download(url)) + + +class RangeServer: + """Fake request_range serving a body with configurable behavior.""" + + def __init__( + self, + body: bytes, + ranges: bool = True, + break_chunks: bool = False, + raise_chunks: bool = False, + etag: str | None = None, + ): + self.body = body + self.ranges = ranges + self.break_chunks = break_chunks + self.raise_chunks = raise_chunks + self.etag = etag + self.calls: list[tuple[int | None, int | None]] = [] + self.validators: list[str] = [] + + async def __call__(self, url, timeout, start=None, end=None, validator=None): + self.calls.append((start, end)) + if start is None or not self.ranges: + return 200, {"Content-Length": str(len(self.body))}, self.body + if (start, end) != (0, 0): + self.validators.append(validator) + if self.raise_chunks and start > 0: + raise ConnectionError("connection reset by the throttling server") + if self.break_chunks and start > 0: + return 200, {}, self.body # a proxy mishandling the range + chunk = self.body[start : end + 1] + headers = { + "Content-Range": f"bytes {start}-{start + len(chunk) - 1}/{len(self.body)}" + } + if self.etag: + headers["ETag"] = self.etag + return 206, headers, chunk + + +def test_download_without_range_support(monkeypatch): + server = RangeServer(b"small body", ranges=False) + monkeypatch.setattr(helpers, "request_range", server) + body, meta = asyncio.run(helpers.download("http://x")) + assert body == b"small body" + assert meta["size"] == len(b"small body") + assert server.calls == [(0, 0)] # the probe returned the whole file + + +def test_download_single_chunk(monkeypatch): + server = RangeServer(b"0123456789") + monkeypatch.setattr(helpers, "request_range", server) + body, meta = asyncio.run(helpers.download("http://x")) + assert body == b"0123456789" + assert meta["size"] == 10 + assert server.calls == [(0, 0), (0, 9)] + + +def test_download_segmented_sends_if_range(monkeypatch): + body = bytes(range(256)) * 100 + server = RangeServer(body, etag='"v1"') + monkeypatch.setattr(helpers, "request_range", server) + monkeypatch.setattr(helpers, "MIN_RANGE_CHUNK", 4096) + assert asyncio.run(helpers.download("http://x"))[0] == body + assert len(server.calls) == 1 + 7 # probe + ceil(25600 / 4096) chunks + # Every segment carries the probe's validator as If-Range. + assert server.validators == ['"v1"'] * 7 + + +def test_download_broken_chunks_falls_back(monkeypatch): + body = bytes(range(256)) * 100 + server = RangeServer(body, break_chunks=True) + monkeypatch.setattr(helpers, "request_range", server) + monkeypatch.setattr(helpers, "MIN_RANGE_CHUNK", 4096) + assert asyncio.run(helpers.download("http://x"))[0] == body + assert server.calls[-1] == (None, None) # the full-request fallback + + +def test_download_failed_chunk_falls_back(monkeypatch): + body = bytes(range(256)) * 100 + server = RangeServer(body, raise_chunks=True) + monkeypatch.setattr(helpers, "request_range", server) + monkeypatch.setattr(helpers, "MIN_RANGE_CHUNK", 4096) + # A dropped connection on one segment must not abort the download. + assert asyncio.run(helpers.download("http://x"))[0] == body + assert server.calls[-1] == (None, None) + + +def test_download_unknown_total_falls_back(monkeypatch): + async def fake_request(url, timeout, start=None, end=None, validator=None): + if start is not None: + return 206, {"Content-Range": "bytes 0-0/*"}, b"x" + return 200, {}, b"full body" + + monkeypatch.setattr(helpers, "request_range", fake_request) + assert asyncio.run(helpers.download("http://x"))[0] == b"full body" + + +def test_download_fallback_error(monkeypatch): + async def fake_request(url, timeout, start=None, end=None, validator=None): + if start is not None: + return 206, {"Content-Range": "bytes 0-0/*"}, b"x" + return 500, {}, b"" + + monkeypatch.setattr(helpers, "request_range", fake_request) + with pytest.raises(OpenBBError, match="Status Code: 500"): + asyncio.run(helpers.download("http://x")) + + +def test_download_probe_error(monkeypatch): + async def fake_request(url, timeout, start=None, end=None, validator=None): + return 404, {}, b"" + + monkeypatch.setattr(helpers, "request_range", fake_request) + with pytest.raises(OpenBBError, match="Status Code: 404"): + asyncio.run(helpers.download("http://x")) + + +def test_probe_source(monkeypatch): + async def ok(url, timeout, start=None, end=None, validator=None): + return 206, {"Content-Range": "bytes 0-0/10", "ETag": '"a"'}, b"x" + + monkeypatch.setattr(helpers, "request_range", ok) + assert asyncio.run(helpers.probe_source("http://x")) == { + "etag": '"a"', + "last_modified": None, + "size": 10, + } + + async def gone(url, timeout, start=None, end=None, validator=None): + return 404, {}, b"" + + monkeypatch.setattr(helpers, "request_range", gone) + assert asyncio.run(helpers.probe_source("http://x")) == {} + + async def unreachable(url, timeout, start=None, end=None, validator=None): + raise ConnectionError("network down") + + monkeypatch.setattr(helpers, "request_range", unreachable) + assert asyncio.run(helpers.probe_source("http://x")) is None + + +def test_read_manifest(tmp_path): + # Missing, corrupt, or incomplete manifests read as None. + assert helpers.read_manifest("oil_primary") is None + helpers.write_cached_raw("oil_primary/manifest.json", b"{corrupt") + assert helpers.read_manifest("oil_primary") is None + helpers.write_cached_raw("oil_primary/manifest.json", b"[]") + assert helpers.read_manifest("oil_primary") is None + helpers.write_cached_raw("oil_primary/manifest.json", b'{"source": {}}') + assert helpers.read_manifest("oil_primary") is None + manifest = {"source": {"url": "http://x"}, "checked_at": 1.0, "partitions": {}} + helpers.write_manifest("oil_primary", manifest) + assert helpers.read_manifest("oil_primary") == manifest + + +def test_bump_checked_at(tmp_path): + newer = { + "source": {"url": "http://new", "etag": '"n"'}, + "checked_at": 1.0, + "partitions": {}, + } + helpers.write_manifest("oil_primary", newer) + snapshot = { + "source": {"url": "http://old", "etag": '"o"'}, + "checked_at": 0.0, + "partitions": {}, + } + # A concurrent refresh's newer manifest is never clobbered. + assert helpers.bump_checked_at("oil_primary", snapshot) == newer + assert helpers.read_manifest("oil_primary")["checked_at"] == 1.0 + # A matching source bumps in place. + bumped = helpers.bump_checked_at("oil_primary", dict(newer)) + assert bumped["checked_at"] > 1.0 + # A missing manifest is restored from the snapshot. + (tmp_path / "oil_primary" / "manifest.json").unlink() + restored = helpers.bump_checked_at("oil_primary", snapshot) + assert restored["source"] == snapshot["source"] + assert restored["checked_at"] > 0.0 + + +def test_open_archive_csv(tmp_path): + csv = b"REF_AREA,TIME_PERIOD\nUS,2024-01\n" + plain = tmp_path / "plain.csv" + plain.write_bytes(csv) + with helpers.open_archive_csv(plain) as stream: + assert stream.read() == csv # a plain CSV passes through + archive = tmp_path / "archive.zip" + buffer = BytesIO() + with zipfile.ZipFile(buffer, "w") as zf: + zf.writestr("data.csv", csv) + archive.write_bytes(buffer.getvalue()) + with helpers.open_archive_csv(archive) as stream: + assert stream.read() == csv + + +def test_open_archive_csv_no_member(tmp_path): + buffer = BytesIO() + with zipfile.ZipFile(buffer, "w") as zf: + zf.writestr("readme.txt", "not a csv") + path = tmp_path / "bad.zip" + path.write_bytes(buffer.getvalue()) + with pytest.raises(OpenBBError, match="No CSV member"): + with helpers.open_archive_csv(path): + pass + + +def test_open_archive_csv_corrupt_zip(tmp_path): + path = tmp_path / "corrupt.zip" + path.write_bytes(b"PK\x03\x04 torn download bytes") + with pytest.raises(OpenBBError, match="unreadable"): + with helpers.open_archive_csv(path): + pass + + +def test_clean_chunk_drops_na_tokens(): + raw = ( + b"REF_AREA,TIME_PERIOD,ENERGY_PRODUCT,FLOW_BREAKDOWN,UNIT_MEASURE,OBS_VALUE,ASSESSMENT_CODE\n" + b"US,2024-01,CRUDEOIL,INDPROD,KBD,100.5,1\n" + b"US,2024-02,CRUDEOIL,INDPROD,KBD,N/A,1\n" + b"US,2024-03,CRUDEOIL,INDPROD,KBD,x,1\n" + b"US,2024-04,CRUDEOIL,INDPROD,KBD,-,1\n" + ) + df = helpers.clean_chunk(read_csv(BytesIO(raw), dtype=helpers.CSV_DTYPES)) + assert len(df) == 1 + assert df["OBS_VALUE"].iloc[0] == 100.5 + + +def test_clean_chunk_bad_format(): + with pytest.raises(OpenBBError, match="Unexpected JODI file format"): + helpers.clean_chunk(read_csv(BytesIO(b"a,b\n1,2\n"))) + + +def test_ingest_table(tmp_path): + source = tmp_path / "source.zip" + source.write_bytes(zip_bytes(FIXTURES / "oil_primary_sample.csv")) + partitions = helpers.ingest_table("oil_primary", source) + directory = tmp_path / "oil_primary" + # Only partition files remain: the staging files are converted and removed. + assert sorted(p.name for p in directory.iterdir()) == sorted( + helpers.partition_filename(name) for name in partitions + ) + assert not list(tmp_path.glob("*.tmp")) + assert all( + name == f"{product}_{flow}" for name, (product, flow) in partitions.items() + ) + # Every valid observation lands in exactly one partition. + expected = _fixture_frame() + total = sum( + len( + helpers.load_partitions( + "oil_primary", {p}, {f}, {"partitions": {n: [p, f]}} + ) + ) + for n, (p, f) in partitions.items() + ) + assert total == len(expected) + + +def test_ingest_table_multi_chunk(tmp_path, monkeypatch): + monkeypatch.setattr(helpers, "INGEST_CHUNK_ROWS", 5) + source = tmp_path / "source.zip" + source.write_bytes(zip_bytes(FIXTURES / "oil_primary_sample.csv")) + partitions = helpers.ingest_table("oil_primary", source) + manifest = {"partitions": partitions} + df = helpers.load_partitions("oil_primary", None, None, manifest) + assert len(df) == len(_fixture_frame()) # appended chunks, one header each + + +def test_ingest_table_bad_source(tmp_path): + source = tmp_path / "source.html" + source.write_bytes(b"surprise maintenance page") + with pytest.raises(OpenBBError, match="Unexpected JODI file format"): + helpers.ingest_table("oil_primary", source) + # The staging directory is cleaned up and nothing is committed. + assert not (tmp_path / "oil_primary").exists() + assert not list(tmp_path.glob("*.tmp")) + + +def test_ingest_table_empty_source(tmp_path): + source = tmp_path / "empty.csv" + source.write_bytes(b"") + with pytest.raises(OpenBBError, match="Unexpected JODI file format"): + helpers.ingest_table("oil_primary", source) + + +def test_ingest_table_no_observations(tmp_path): + header = ( + b"REF_AREA,TIME_PERIOD,ENERGY_PRODUCT,FLOW_BREAKDOWN,UNIT_MEASURE," + b"OBS_VALUE,ASSESSMENT_CODE\n" + ) + source = tmp_path / "empty_table.csv" + source.write_bytes(header) + # Committing an empty table would destroy the existing good cache. + with pytest.raises(OpenBBError, match="contains no observations"): + helpers.ingest_table("oil_primary", source) + assert not (tmp_path / "oil_primary").exists() + assert not list(tmp_path.glob("*.tmp")) + + +def test_ingest_table_commit_retries_swap(tmp_path, monkeypatch): + import shutil as shutil_module + + source = tmp_path / "source.zip" + source.write_bytes(zip_bytes(FIXTURES / "oil_primary_sample.csv")) + helpers.ingest_table("oil_primary", source) # the directory now exists + real_rmtree = shutil_module.rmtree + failures = {"count": 0} + + def flaky_rmtree(path, *args, **kwargs): + if failures["count"] == 0 and not kwargs.get("ignore_errors"): + failures["count"] += 1 + raise OSError("a reader holds a partition file open") + return real_rmtree(path, *args, **kwargs) + + monkeypatch.setattr(shutil_module, "rmtree", flaky_rmtree) + partitions = helpers.ingest_table("oil_primary", source) + assert partitions + assert failures["count"] == 1 # the swap succeeded on the retry + + +def test_ingest_table_commit_swap_failure(tmp_path, monkeypatch): + import shutil as shutil_module + + source = tmp_path / "source.zip" + source.write_bytes(zip_bytes(FIXTURES / "oil_primary_sample.csv")) + helpers.ingest_table("oil_primary", source) + real_rmtree = shutil_module.rmtree + + def stuck_rmtree(path, *args, **kwargs): + if kwargs.get("ignore_errors"): + return real_rmtree(path, *args, **kwargs) + raise OSError("the directory is locked open") + + monkeypatch.setattr(shutil_module, "rmtree", stuck_rmtree) + with pytest.raises(OSError, match="locked open"): + helpers.ingest_table("oil_primary", source) + assert not list(tmp_path.glob("*.tmp")) # staging cleaned on failure + + +def test_get_table_slice(tmp_path, mock_download): + df = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + assert not df.empty + assert mock_download == [constants.OIL_TABLE_URLS["primary"]] + # Only the manifest and partitions are kept: the spent archive is deleted. + assert not (tmp_path / "oil_primary.zip").exists() + assert not list(tmp_path.glob("*.tmp")) + manifest = helpers.read_manifest("oil_primary") + assert manifest is not None + assert manifest["source"]["url"] == constants.OIL_TABLE_URLS["primary"] + assert manifest["source"]["size"] > 0 + # A second call reads the partitions without touching the network. + again = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + assert again.equals(df) + assert len(mock_download) == 1 + # Slices read only the requested partitions. + sliced = asyncio.run( + helpers.get_table_slice("oil_primary", {"CRUDEOIL"}, {"INDPROD"}) + ) + assert set(sliced["ENERGY_PRODUCT"]) == {"CRUDEOIL"} + assert set(sliced["FLOW_BREAKDOWN"]) == {"INDPROD"} + # Codes with no matching partition read as an empty, well-formed frame. + empty = asyncio.run(helpers.get_table_slice("oil_primary", {"XXX"}, None)) + assert empty.empty + assert list(empty.columns) == helpers.EXPECTED_COLUMNS + # use_cache=False forces a fresh download. + asyncio.run(helpers.get_table_slice("oil_primary", None, None, use_cache=False)) + assert len(mock_download) == 2 + + +def test_get_table_slice_pushdown(mock_download): + df = asyncio.run( + helpers.get_table_slice( + "oil_primary", + {"CRUDEOIL"}, + {"INDPROD"}, + countries={"US"}, + units={"KBD"}, + start_date=date(2024, 1, 1), + end_date=date(2024, 2, 29), + ) + ) + # The country, unit, and period predicates filtered inside the reads. + assert set(df["REF_AREA"]) == {"US"} + assert set(df["UNIT_MEASURE"]) == {"KBD"} + assert set(df["TIME_PERIOD"]) == {"2024-01", "2024-02"} + # A pushdown filter matching nothing reads as an empty, well-formed frame. + empty = asyncio.run( + helpers.get_table_slice("oil_primary", None, None, countries={"FR"}) + ) + assert empty.empty + assert list(empty.columns) == helpers.EXPECTED_COLUMNS + + +def test_get_table_slice_bad_body_not_cached(tmp_path, monkeypatch): + async def fake_download(url: str, timeout: int = 600) -> tuple: + return b"surprise maintenance page", {} + + monkeypatch.setattr(helpers, "download", fake_download) + with pytest.raises(OpenBBError, match="Unexpected JODI file format"): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + assert not (tmp_path / "oil_primary.zip").exists() + assert helpers.read_manifest("oil_primary") is None + assert not list(tmp_path.glob("*.tmp")) + + +def test_refresh_table_skips_when_fresh(mock_download): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # A refresh finding a fresh manifest (a concurrent process won) skips. + manifest = asyncio.run(helpers.refresh_table("oil_primary")) + assert manifest is not None + assert len(mock_download) == 1 + + +def test_refresh_clears_orphaned_temp(tmp_path, mock_download): + orphan_dir = tmp_path / "oil_primary.999dead.tmp" + orphan_dir.mkdir() + (orphan_dir / "leftover.csv").write_bytes(b"from a crashed ingest") + orphan_zip = tmp_path / "oil_primary.zip.999dead.tmp" + orphan_zip.write_bytes(b"from a crashed download") + legacy_zip = tmp_path / "oil_primary.zip" + legacy_zip.write_bytes(b"kept by an older version") + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + assert not orphan_dir.exists() + assert not orphan_zip.exists() + assert not legacy_zip.exists() + + +def _age_manifest(table: str) -> dict: + """Rewrite a table manifest as past due for revalidation.""" + manifest = helpers.read_manifest(table) + manifest["checked_at"] = time.time() - 2 * helpers.REVALIDATE_INTERVAL + helpers.write_manifest(table, manifest) + return manifest + + +def test_ensure_table_revalidates_unchanged(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + stale = _age_manifest("oil_primary") + probes: list[str] = [] + + async def fake_probe(url: str): + probes.append(url) + return dict(stale["source"]) + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # The probe confirmed the source is unchanged: no new download. + assert probes == [stale["source"]["url"]] + assert len(mock_download) == 1 + assert helpers.read_manifest("oil_primary")["checked_at"] > stale["checked_at"] + + +def test_ensure_table_revalidates_changed(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + _age_manifest("oil_primary") + + async def fake_probe(url: str): + return {"etag": '"new-publication"', "last_modified": "", "size": 1} + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # The source changed: the table was downloaded again. + assert len(mock_download) == 2 + + +def test_ensure_table_serves_stale_when_unreachable(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + stale = _age_manifest("oil_primary") + + async def fake_probe(url: str): + return None + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + df = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # The source is unreachable: the cached table is served. + assert not df.empty + assert len(mock_download) == 1 + assert helpers.read_manifest("oil_primary")["checked_at"] > stale["checked_at"] + + +def test_ensure_table_serves_stale_on_probe_http_error(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + _age_manifest("oil_primary") + + async def fake_probe(url: str): + return {} # the probe got a 503/404, not a transport failure + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + df = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # An HTTP error must never turn a healthy cache into an outage. + assert not df.empty + assert len(mock_download) == 1 + + +def test_ensure_table_serves_stale_when_refresh_fails(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + _age_manifest("oil_primary") + + async def fake_probe(url: str): + return {"etag": '"new-publication"', "last_modified": "", "size": 1} + + async def broken_download(url: str, timeout: int = 600) -> tuple: + raise OpenBBError(f"Failed to download {url} -> Status Code: 503") + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + monkeypatch.setattr(helpers, "download", broken_download) + df = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # The refresh failed but a readable table is on disk: serve it. + assert not df.empty + assert helpers.manifest_is_fresh(helpers.read_manifest("oil_primary")) + + +def test_ensure_table_empty_source_preserves_cache(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + good = helpers.read_manifest("oil_primary") + _age_manifest("oil_primary") + + header = ( + b"REF_AREA,TIME_PERIOD,ENERGY_PRODUCT,FLOW_BREAKDOWN,UNIT_MEASURE," + b"OBS_VALUE,ASSESSMENT_CODE\n" + ) + buffer = BytesIO() + with zipfile.ZipFile(buffer, "w") as zf: + zf.writestr("empty.csv", header) + + async def fake_probe(url: str): + return {"etag": '"regenerating"', "last_modified": "", "size": 1} + + async def empty_download(url: str, timeout: int = 600) -> tuple: + return buffer.getvalue(), {"etag": '"regenerating"', "size": 1} + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + monkeypatch.setattr(helpers, "download", empty_download) + df = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # A transiently empty source must not destroy the good cache. + assert not df.empty + assert helpers.read_manifest("oil_primary")["partitions"] == good["partitions"] + + +def test_gas_revalidation_unchanged(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + stale = _age_manifest("gas_world") + + async def fake_probe(url: str): + return dict(stale["source"]) + + monkeypatch.setattr(helpers, "probe_source", fake_probe) + df = asyncio.run(helpers.get_table_slice("gas_world", None, None)) + assert not df.empty + # Revalidation refetched only the tiny listing, not the archive. + assert len(mock_download) == 3 + assert mock_download[-1] == constants.GAS_FILES_URL + + +def test_gas_revalidation_rotated_publication(monkeypatch): + publication = {"id": 1} + archive_downloads: list[str] = [] + + async def fake_download(url: str, timeout: int = 600) -> tuple: + if url.endswith("web/files/gas"): + listing = { + "publicationId": publication["id"], + "files": [{"filename": "GAS_world_NewFormat.zip", "format": "CSV"}], + } + return json.dumps(listing).encode(), {} + archive_downloads.append(url) + raw = (FIXTURES / "gas_sample.zip").read_bytes() + return raw, {"etag": f'"{publication["id"]}"', "size": len(raw)} + + monkeypatch.setattr(helpers, "download", fake_download) + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + assert len(archive_downloads) == 1 + _age_manifest("gas_world") + publication["id"] = 2 + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + # The listing rotated to a new publication: the archive was refreshed. + assert len(archive_downloads) == 2 + assert helpers.read_manifest("gas_world")["source"]["url"].endswith( + "/2/GAS_world_NewFormat.zip" + ) + + +def test_gas_revalidation_listing_error(mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + _age_manifest("gas_world") + + async def broken_download(url: str, timeout: int = 600) -> tuple: + raise OpenBBError(f"Failed to download {url} -> Status Code: 503") + + monkeypatch.setattr(helpers, "download", broken_download) + df = asyncio.run(helpers.get_table_slice("gas_world", None, None)) + # The publisher API is down: the cached table is served. + assert not df.empty + assert len(mock_download) == 2 + + +def test_get_table_slice_self_heal_redownloads(tmp_path, mock_download): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + # Break one partition file: the table is downloaded and ingested again. + name = next(iter(helpers.read_manifest("oil_primary")["partitions"])) + (tmp_path / "oil_primary" / helpers.partition_filename(name)).unlink() + df = asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + assert not df.empty + assert len(mock_download) == 2 + assert (tmp_path / "oil_primary" / helpers.partition_filename(name)).exists() + + +def test_get_table_slice_unreadable(mock_download, monkeypatch): + monkeypatch.setattr(helpers, "load_partitions", lambda *args, **kwargs: None) + with pytest.raises(OpenBBError, match="could not be read"): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + + +def test_concurrent_self_heal_single_rebuild(tmp_path, mock_download, monkeypatch): + asyncio.run(helpers.get_table_slice("oil_primary", None, None)) + name = next(iter(helpers.read_manifest("oil_primary")["partitions"])) + (tmp_path / "oil_primary" / helpers.partition_filename(name)).unlink() + real_ingest = helpers.ingest_table + ingests: list[str] = [] + + def counting_ingest(table, source_path): + ingests.append(table) + return real_ingest(table, source_path) + + monkeypatch.setattr(helpers, "ingest_table", counting_ingest) + + async def two_at_once(): + return await asyncio.gather( + helpers.get_table_slice("oil_primary", None, None), + helpers.get_table_slice("oil_primary", None, None), + ) + + first, second = asyncio.run(two_at_once()) + assert first.equals(second) + # The second query found the healed table instead of downloading again. + assert ingests == ["oil_primary"] + assert len(mock_download) == 2 # the initial build + one healing download + + +def test_get_gas_slice(mock_download): + df = asyncio.run(helpers.get_table_slice("gas_world", None, None)) + assert not df.empty + assert set(df["ENERGY_PRODUCT"].unique()) == {"NATGAS"} + assert len(mock_download) == 2 # file listing + archive + # A second call is served from the cache. + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + assert len(mock_download) == 2 + + +def test_get_gas_no_csv_listed(monkeypatch): + async def fake_download(url: str, timeout: int = 600) -> tuple: + listing = ( + b'{"publicationId": 1, "files": [{"filename": "ivt.zip", "format": "IVT"}]}' + ) + return listing, {} + + monkeypatch.setattr(helpers, "download", fake_download) + with pytest.raises(OpenBBError, match="No CSV file is listed"): + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + + +def test_get_gas_no_csv_member(monkeypatch): + buffer = BytesIO() + with zipfile.ZipFile(buffer, "w") as archive: + archive.writestr("readme.txt", "not a csv") + + async def fake_download(url: str, timeout: int = 600) -> tuple: + if url.endswith("web/files/gas"): + return (FIXTURES / "files_gas.json").read_bytes(), {} + return buffer.getvalue(), {} + + monkeypatch.setattr(helpers, "download", fake_download) + with pytest.raises(OpenBBError, match="No CSV member"): + asyncio.run(helpers.get_table_slice("gas_world", None, None)) + + +def test_get_gas_plain_csv(monkeypatch): + with zipfile.ZipFile(FIXTURES / "gas_sample.zip") as archive: + raw_csv = archive.read("STAGING_world_NewFormat.csv") + + async def fake_download(url: str, timeout: int = 600) -> tuple: + if url.endswith("web/files/gas"): + listing = b'{"publicationId": 1, "files": [{"filename": "world.csv", "format": "CSV"}]}' + return listing, {} + return raw_csv, {} + + monkeypatch.setattr(helpers, "download", fake_download) + df = asyncio.run(helpers.get_table_slice("gas_world", None, None)) + assert not df.empty + + +def test_concurrent_downloads_coalesce(mock_download): + async def two_at_once(): + return await asyncio.gather( + helpers.get_table_slice("oil_primary", None, None), + helpers.get_table_slice("oil_primary", None, None), + ) + + first, second = asyncio.run(two_at_once()) + assert first.equals(second) # the second request waited for the first download + assert len(mock_download) == 1 + + +def test_concurrent_gas_downloads_coalesce(mock_download): + async def two_at_once(): + return await asyncio.gather( + helpers.get_table_slice("gas_world", None, None), + helpers.get_table_slice("gas_world", None, None), + ) + + first, second = asyncio.run(two_at_once()) + assert first.equals(second) + assert len(mock_download) == 2 # one file listing + one archive + + +def test_prefetch_tables(mock_download): + async def main(): + helpers.start_prefetch() + loop = asyncio.get_running_loop() + task = helpers._PREFETCH_TASKS[loop] + helpers.start_prefetch() # a second call must not start another task + assert helpers._PREFETCH_TASKS[loop] is task + await task + + asyncio.run(main()) + # Both oil tables and the gas listing + archive were fetched. + assert len(mock_download) == 4 + # Every table is now cached and readable. + assert helpers.read_manifest("oil_primary") is not None + assert helpers.read_manifest("oil_secondary") is not None + assert helpers.read_manifest("gas_world") is not None + + +def test_start_prefetch_without_loop(): + helpers.start_prefetch() # outside an event loop: a quiet no-op + assert not helpers._PREFETCH_TASKS + + +def test_get_filtered_oil_both_tables(mock_download): + records = asyncio.run( + helpers.get_filtered_oil( + tables=["primary", "secondary"], + countries=None, + product_codes={"CRUDEOIL", "GASOLINE"}, + flow_codes={"INDPROD", "TOTDEMO"}, + unit_codes={"KBD"}, + start_date=date(2024, 1, 1), + end_date=date(2024, 3, 31), + ) + ) + products = {row["ENERGY_PRODUCT"] for row in records} + assert "CRUDEOIL" in products + assert "GASOLINE" in products + + +def test_get_filtered_oil_empty(mock_download): + from openbb_core.provider.utils.errors import EmptyDataError + + with pytest.raises(EmptyDataError, match="No results"): + asyncio.run( + helpers.get_filtered_oil( + tables=["primary"], + countries={"FR"}, # not in the fixture sample + product_codes={"CRUDEOIL"}, + flow_codes={"INDPROD"}, + unit_codes={"KBD"}, + start_date=date(2024, 1, 1), + end_date=date(2024, 3, 31), + ) + ) + + +def test_get_filtered_gas_empty(mock_download): + from openbb_core.provider.utils.errors import EmptyDataError + + with pytest.raises(EmptyDataError, match="No results"): + asyncio.run( + helpers.get_filtered_gas( + countries={"FR"}, # not in the fixture sample + flow_codes={"INDPROD"}, + unit_codes={"M3"}, + start_date=date(2024, 1, 1), + end_date=date(2024, 3, 31), + ) + ) + + +def _record(period, flow, value, area="US", assessment="1"): + return { + "REF_AREA": area, + "TIME_PERIOD": period, + "ENERGY_PRODUCT": "CRUDEOIL", + "FLOW_BREAKDOWN": flow, + "UNIT_MEASURE": "KBD", + "OBS_VALUE": value, + "ASSESSMENT_CODE": assessment, + } + + +def test_build_field_table(): + records = [ + _record("2024-01", "TOTIMPSB", 2.0), + _record("2024-01", "INDPROD", 1.0), + _record("2024-02", "TOTIMPSB", 3.0), + ] + rows = helpers.build_field_table( + records, "FLOW_BREAKDOWN", {"INDPROD": "production", "TOTIMPSB": "imports"} + ) + # Columns follow the field-map order, not the record order. + assert list(rows[0]) == ["date", "production", "imports"] + assert rows[0] == {"date": date(2024, 1, 1), "production": 1.0, "imports": 2.0} + # A missing observation is an explicit None, not a dropped column. + assert rows[1] == {"date": date(2024, 2, 1), "production": None, "imports": 3.0} + + +def test_build_country_table(): + records = [ + _record("2024-01", "INDPROD", 10.0, area="US"), + _record("2024-01", "INDPROD", 9.0, area="SA"), + ] + rows = helpers.build_country_table(records) + assert rows == [ + {"date": date(2024, 1, 1), "saudi_arabia": 9.0, "united_states": 10.0} + ] + + +def test_build_assessments(): + records = [ + _record("2024-01", "INDPROD", 1.0, assessment="3"), + _record("2024-02", "INDPROD", 1.0, assessment="1"), + _record("2024-01", "TOTIMPSB", 2.0, assessment="99"), + ] + result = helpers.build_assessments( + records, "FLOW_BREAKDOWN", {"INDPROD": "production", "TOTIMPSB": "imports"} + ) + # The most recent assessment wins; unknown codes are omitted. + assert result == {"production": "Reasonable levels of comparability"} + + +def test_validate_country_param(): + assert helpers.validate_country_param(None, multiple=True, default=None) is None + assert ( + helpers.validate_country_param("US, saudi arabia", multiple=True, default=None) + == "united_states,saudi_arabia" + ) + with pytest.raises(OpenBBError, match="Only one country"): + helpers.validate_country_param("us,sa", multiple=False, default=None) + with pytest.raises(OpenBBError, match="Invalid country"): + helpers.validate_country_param("narnia", multiple=True, default=None) + + +def test_normalize_token(): + assert helpers.normalize_token(None, "kbd") == "kbd" + assert helpers.normalize_token(" Crude Oil ", "kbd") == "crude_oil" + + +def test_resolve_date_range(): + start, end = helpers.resolve_date_range(None, None, 2002) + assert start == date(2002, 1, 1) # full-history default + assert end == date.today() + with pytest.raises(OpenBBError, match="start_date must be"): + helpers.resolve_date_range(date(2024, 2, 1), date(2024, 1, 1), 2002) + + +def test_check_oil_dates(): + helpers.check_oil_dates(date(2002, 1, 1), date(2003, 1, 1)) + with pytest.raises(OpenBBError, match="The data starts in 2002"): + helpers.check_oil_dates(date(2000, 1, 1), date(2001, 12, 31)) + + +def test_check_gas_dates(): + helpers.check_gas_dates(date(2009, 1, 1), date(2010, 1, 1)) + with pytest.raises(OpenBBError, match="The data starts in 2009"): + helpers.check_gas_dates(date(2007, 1, 1), date(2008, 12, 31)) + + +def test_apply_filters(): + df = _fixture_frame() + filtered = helpers.apply_filters( + df, + countries={"US"}, + products={"CRUDEOIL"}, + flows={"INDPROD"}, + units={"KBD"}, + start_date=date(2024, 1, 1), + end_date=date(2024, 2, 29), + ) + assert len(filtered) == 2 + assert set(filtered["REF_AREA"]) == {"US"} + unfiltered = helpers.apply_filters( + df, + countries=None, + products=None, + flows=None, + units=None, + start_date=date(2024, 1, 1), + end_date=date(2024, 12, 31), + ) + assert len(unfiltered) == len(df) diff --git a/openbb_platform/providers/jodi/tests/test_jodi_fetchers.py b/openbb_platform/providers/jodi/tests/test_jodi_fetchers.py new file mode 100644 index 00000000000..51e24ff63ac --- /dev/null +++ b/openbb_platform/providers/jodi/tests/test_jodi_fetchers.py @@ -0,0 +1,152 @@ +"""Test the JODI fetchers against cassettes synthesized from trimmed fixtures. + +Every test executes the full pipeline against a cold cache: the download +replays offline from an in-memory cassette, then ingests and queries. +""" + +from datetime import date + +import pytest +from openbb_core.app.service.user_service import UserService + +from openbb_jodi.models.gas_balance import JodiGasBalanceFetcher +from openbb_jodi.models.gas_demand import JodiGasDemandFetcher +from openbb_jodi.models.gas_exports import JodiGasExportsFetcher +from openbb_jodi.models.gas_imports import JodiGasImportsFetcher +from openbb_jodi.models.gas_production import JodiGasProductionFetcher +from openbb_jodi.models.gas_stocks import JodiGasStocksFetcher +from openbb_jodi.models.oil_balance import JodiOilBalanceFetcher +from openbb_jodi.models.oil_demand import JodiOilDemandFetcher +from openbb_jodi.models.oil_demand_by_product import JodiOilDemandByProductFetcher +from openbb_jodi.models.oil_exports import JodiOilExportsFetcher +from openbb_jodi.models.oil_imports import JodiOilImportsFetcher +from openbb_jodi.models.oil_production import JodiOilProductionFetcher +from openbb_jodi.models.oil_stocks import JodiOilStocksFetcher + +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) + +DATES = {"start_date": date(2024, 1, 1), "end_date": date(2024, 3, 31)} + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_balance_fetcher(credentials=test_credentials): + """Test the JODI oil balance fetcher.""" + params = { + "country": "united_states", + "product": "crude_oil", + "unit": "kbbl", + **DATES, + } + fetcher = JodiOilBalanceFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_production_fetcher(credentials=test_credentials): + """Test the JODI oil production fetcher.""" + params = {"country": "united_states,saudi_arabia", "unit": "kbd", **DATES} + fetcher = JodiOilProductionFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_demand_fetcher(credentials=test_credentials): + """Test the JODI oil demand fetcher.""" + params = {"country": "united_states", "product": "gasoline", **DATES} + fetcher = JodiOilDemandFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_demand_by_product_fetcher(credentials=test_credentials): + """Test the JODI oil demand by product fetcher.""" + params = {"country": "united_states", "unit": "kbd", **DATES} + fetcher = JodiOilDemandByProductFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_imports_fetcher(credentials=test_credentials): + """Test the JODI oil imports fetcher.""" + params = {"country": "united_states", "product": "crude_oil", **DATES} + fetcher = JodiOilImportsFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_exports_fetcher(credentials=test_credentials): + """Test the JODI oil exports fetcher.""" + params = {"country": "saudi_arabia,united_states", "product": "crude_oil", **DATES} + fetcher = JodiOilExportsFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_oil_stocks_fetcher(credentials=test_credentials): + """Test the JODI oil stocks fetcher.""" + params = {"country": "united_states", "unit": "kbbl", **DATES} + fetcher = JodiOilStocksFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_gas_balance_fetcher(credentials=test_credentials): + """Test the JODI gas balance fetcher.""" + params = {"country": "united_states", "unit": "m3", **DATES} + fetcher = JodiGasBalanceFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_gas_production_fetcher(credentials=test_credentials): + """Test the JODI gas production fetcher.""" + params = {"country": "united_states,norway", "unit": "m3", **DATES} + fetcher = JodiGasProductionFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_gas_demand_fetcher(credentials=test_credentials): + """Test the JODI gas demand fetcher.""" + params = {"country": "united_states", "measure": "observed", **DATES} + fetcher = JodiGasDemandFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_gas_imports_fetcher(credentials=test_credentials): + """Test the JODI gas imports fetcher.""" + params = {"country": "united_states", "flow": "pipeline", **DATES} + fetcher = JodiGasImportsFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_gas_exports_fetcher(credentials=test_credentials): + """Test the JODI gas exports fetcher.""" + params = {"country": "qatar", "flow": "lng", **DATES} + fetcher = JodiGasExportsFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.usefixtures("jodi_cassette") +def test_jodi_gas_stocks_fetcher(credentials=test_credentials): + """Test the JODI gas stocks fetcher.""" + params = {"country": "united_states", "unit": "m3", **DATES} + fetcher = JodiGasStocksFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/providers/jodi/tests/test_jodi_router.py b/openbb_platform/providers/jodi/tests/test_jodi_router.py new file mode 100644 index 00000000000..60f806eea44 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/test_jodi_router.py @@ -0,0 +1,159 @@ +"""Tests for the JODI router commands.""" + +import asyncio +from unittest.mock import AsyncMock, patch + +import pytest + +from openbb_jodi import gas_router, oil_router + +COMMANDS = [ + (oil_router, oil_router.balance), + (oil_router, oil_router.production), + (oil_router, oil_router.demand), + (oil_router, oil_router.demand_by_product), + (oil_router, oil_router.imports), + (oil_router, oil_router.exports), + (oil_router, oil_router.stocks), + (gas_router, gas_router.balance), + (gas_router, gas_router.production), + (gas_router, gas_router.demand), + (gas_router, gas_router.imports), + (gas_router, gas_router.exports), + (gas_router, gas_router.stocks), +] + + +@pytest.mark.parametrize("module, command", COMMANDS) +def test_model_backed_commands(module, command): + """Each command delegates to OBBject.from_query(OpenBBQuery(...)).""" + sentinel = object() + + with ( + patch.object(module, "OBBject") as mock_obbject, + patch.object(module, "OpenBBQuery") as mock_query, + ): + mock_obbject.from_query = AsyncMock(return_value=sentinel) + + result = asyncio.run( + command( + cc=None, + provider_choices=None, + standard_params=None, + extra_params=None, + ) + ) + + assert result is sentinel + assert mock_query.called + mock_obbject.from_query.assert_awaited_once() + + +WIDGET_IDS = { + "jodi_oil_balance_jodi_obb", + "jodi_oil_production_jodi_obb", + "jodi_oil_demand_jodi_obb", + "jodi_oil_demand_by_product_jodi_obb", + "jodi_oil_imports_jodi_obb", + "jodi_oil_exports_jodi_obb", + "jodi_oil_stocks_jodi_obb", + "jodi_gas_balance_jodi_obb", + "jodi_gas_production_jodi_obb", + "jodi_gas_demand_jodi_obb", + "jodi_gas_imports_jodi_obb", + "jodi_gas_exports_jodi_obb", + "jodi_gas_stocks_jodi_obb", +} + + +def test_apps_json(): + """The served app template is a valid Workspace apps.json fragment.""" + from openbb_jodi.jodi_router import jodi_apps + + apps = asyncio.run(jodi_apps()) + assert isinstance(apps, list) + for app in apps: + assert app["name"] + assert app["description"] + assert app["img"] + assert isinstance(app["allowCustomization"], bool) + assert isinstance(app["groups"], list) + assert isinstance(app["prompts"], list) + laid_out: set[str] = set() + for tab_id, tab in app["tabs"].items(): + assert tab["id"] == tab_id + assert "name" in tab + occupied: set[tuple[int, int]] = set() + for item in tab["layout"]: + assert item["i"] in WIDGET_IDS + laid_out.add(item["i"]) + assert item["x"] >= 0 and item["x"] + item["w"] <= 40 + assert item["y"] >= 0 and item["h"] >= 4 + cells = { + (col, row) + for col in range(item["x"], item["x"] + item["w"]) + for row in range(item["y"], item["y"] + item["h"]) + } + assert not cells & occupied, f"widgets overlap in tab {tab_id}" + occupied |= cells + assert laid_out == WIDGET_IDS # every view is on a dashboard + for group in app["groups"]: + assert group["name"].startswith("Group ") + assert group["type"] in {"param", "endpointParam", "ticker"} + for widget_id in group["widgetIds"]: + assert widget_id in laid_out + item = next( + item + for tab in app["tabs"].values() + for item in tab["layout"] + if item["i"] == widget_id + ) + assert group["name"] in item.get("groups", []) + + +def test_router_lifespan(monkeypatch): + """The router lifespan starts the cache prefetch at application startup.""" + from fastapi import FastAPI + + from openbb_jodi.jodi_router import router + from openbb_jodi.utils import helpers + + prefetches: list[bool] = [] + monkeypatch.setattr(helpers, "start_prefetch", lambda: prefetches.append(True)) + app = FastAPI() + # include_router merges the jodi lifespan into the application lifespan. + app.include_router(router.api_router) + + async def startup(): + async with app.router.lifespan_context(app): + assert prefetches == [True] + + asyncio.run(startup()) + + +def test_router_paths(): + """Each view is mounted under its oil or gas sub-router.""" + from openbb_jodi.jodi_router import router + + # The oil and gas sub-routers, plus the apps.json route. + assert len(router.api_router.routes) == 3 + paths = { + route.path + for sub_router in (oil_router.router, gas_router.router) + for route in sub_router.api_router.routes + } + assert paths == { + "/oil/balance", + "/oil/production", + "/oil/demand", + "/oil/demand_by_product", + "/oil/imports", + "/oil/exports", + "/oil/stocks", + "/gas/balance", + "/gas/production", + "/gas/demand", + "/gas/imports", + "/gas/exports", + "/gas/stocks", + } diff --git a/openbb_platform/providers/jodi/tests/test_models.py b/openbb_platform/providers/jodi/tests/test_models.py new file mode 100644 index 00000000000..bfd83a8c503 --- /dev/null +++ b/openbb_platform/providers/jodi/tests/test_models.py @@ -0,0 +1,218 @@ +"""Test the JODI model validators, views, and error branches.""" + +import asyncio +from datetime import date + +import pytest +from openbb_core.app.model.abstract.error import OpenBBError +from openbb_core.provider.utils.errors import EmptyDataError +from pydantic import ValidationError + +from openbb_jodi.models.gas_balance import JodiGasBalanceFetcher +from openbb_jodi.models.gas_demand import JodiGasDemandFetcher, JodiGasDemandQueryParams +from openbb_jodi.models.gas_imports import JodiGasImportsFetcher +from openbb_jodi.models.oil_balance import ( + JodiOilBalanceFetcher, + JodiOilBalanceQueryParams, +) +from openbb_jodi.models.oil_demand_by_product import JodiOilDemandByProductFetcher +from openbb_jodi.models.oil_production import ( + JodiOilProductionFetcher, + JodiOilProductionQueryParams, +) + +DATES = {"start_date": date(2024, 1, 1), "end_date": date(2024, 3, 31)} + + +@pytest.mark.parametrize( + "value, expected", + [ + (None, "united_states"), + ("", "united_states"), + ("SA", "saudi_arabia"), + ("Saudi Arabia", "saudi_arabia"), + ], +) +def test_single_country_validator(value, expected): + assert JodiOilBalanceQueryParams(country=value).country == expected + + +def test_single_country_validator_rejects_multiple(): + with pytest.raises(OpenBBError, match="Only one country"): + JodiOilBalanceQueryParams(country="united_states,saudi_arabia") + + +@pytest.mark.parametrize( + "value, expected", + [ + (None, None), + ("", None), + ("US", "united_states"), + (["US", "Saudi Arabia"], "united_states,saudi_arabia"), + ("united_states,us", "united_states"), + ], +) +def test_multi_country_validator(value, expected): + assert JodiOilProductionQueryParams(country=value).country == expected + + +def test_country_validator_invalid(): + with pytest.raises(OpenBBError, match="Invalid country: 'atlantis'"): + JodiOilProductionQueryParams(country="atlantis") + + +def test_token_normalization(): + params = JodiOilBalanceQueryParams(product="Crude Oil", unit="KBD") + assert params.product == "crude_oil" + assert params.unit == "kbd" + params = JodiGasDemandQueryParams(measure=None, unit=None) + assert params.measure == "observed" + assert params.unit == "m3" + + +def test_token_invalid(): + with pytest.raises(ValidationError): + JodiOilBalanceQueryParams(unit="furlongs") + with pytest.raises(ValidationError): + JodiOilProductionQueryParams(product="gasoline") # secondary-only product + + +def _fetch(fetcher, params: dict): + return asyncio.run(fetcher.fetch_data(params, {})) + + +def test_start_after_end(): + with pytest.raises(OpenBBError, match="start_date must be"): + _fetch( + JodiOilBalanceFetcher, + {"start_date": date(2024, 2, 1), "end_date": date(2024, 1, 1)}, + ) + + +def test_oil_dates_before_data(): + with pytest.raises(OpenBBError, match="The data starts in 2002"): + _fetch( + JodiOilProductionFetcher, + {"start_date": date(2000, 1, 1), "end_date": date(2001, 12, 31)}, + ) + + +def test_gas_dates_before_data(): + with pytest.raises(OpenBBError, match="The data starts in 2009"): + _fetch( + JodiGasBalanceFetcher, + {"start_date": date(2007, 1, 1), "end_date": date(2008, 12, 31)}, + ) + + +@pytest.mark.usefixtures("mock_download") +def test_empty_result(): + with pytest.raises(EmptyDataError): + _fetch( + JodiOilProductionFetcher, + {"start_date": date(2024, 4, 1), "end_date": date(2024, 12, 31)}, + ) + + +@pytest.mark.usefixtures("mock_download") +def test_oil_balance_view(): + result = _fetch( + JodiOilBalanceFetcher, + {"country": "united_states", "product": "crude_oil", "unit": "kbbl", **DATES}, + ) + assert len(result.result) == 3 + row = result.result[0] + assert row.production is not None + assert row.closing_stocks is not None + assert row.refinery_output is None # secondary-only flow + assert result.metadata["country"] == "United States" + assert result.metadata["product"] == "Crude oil" + assert result.metadata["unit"] == "Thousand barrels" + assert result.metadata["assessments"]["production"] is not None + + +@pytest.mark.usefixtures("mock_download") +def test_oil_balance_secondary_product(): + result = _fetch( + JodiOilBalanceFetcher, + {"country": "united_states", "product": "gasoline", "unit": "kbd", **DATES}, + ) + row = result.result[0] + assert row.refinery_output is not None + assert row.demand is not None + assert row.refinery_intake is None # primary-only flow + + +@pytest.mark.usefixtures("mock_download") +def test_oil_production_comparison_view(): + result = _fetch(JodiOilProductionFetcher, {**DATES}) + row = result.result[0].model_dump(exclude_none=True) + # Columns are countries, alphabetical, after the date. + # Russia is in the sample but reports no kb/d production values. + assert list(row) == ["date", "saudi_arabia", "united_states"] + assert result.metadata["flow"] == "Production" + assert result.metadata["assessments"]["saudi_arabia"] is not None + + +@pytest.mark.usefixtures("mock_download") +def test_gas_empty_result(): + with pytest.raises(EmptyDataError): + _fetch( + JodiGasBalanceFetcher, + { + "country": "norway", + "start_date": date(2024, 4, 1), + "end_date": date(2024, 12, 31), + }, + ) + + +@pytest.mark.usefixtures("mock_download") +def test_oil_demand_by_product_view(): + result = _fetch( + JodiOilDemandByProductFetcher, {"country": "united_states", **DATES} + ) + row = result.result[0] + assert row.gasoline is not None + assert row.total_products is not None + assert result.metadata["flow"] == "Demand" + + +@pytest.mark.usefixtures("mock_download") +def test_gas_balance_view(): + result = _fetch(JodiGasBalanceFetcher, {"country": "norway", **DATES}) + row = result.result[0] + assert row.production is not None + assert row.pipeline_exports is not None + assert result.metadata["product"] == "Natural gas" + + +@pytest.mark.usefixtures("mock_download") +def test_gas_demand_measures_differ(): + observed = _fetch( + JodiGasDemandFetcher, + {"country": "united_states", "measure": "observed", **DATES}, + ) + calculated = _fetch( + JodiGasDemandFetcher, + {"country": "united_states", "measure": "calculated", **DATES}, + ) + assert observed.metadata["flow"] == "Gross inland deliveries (observed)" + assert calculated.metadata["flow"] == "Gross inland deliveries (calculated)" + obs = observed.result[0].model_dump(exclude_none=True)["united_states"] + calc = calculated.result[0].model_dump(exclude_none=True)["united_states"] + assert obs != calc + + +@pytest.mark.usefixtures("mock_download") +def test_gas_imports_flow_selection(): + total = _fetch(JodiGasImportsFetcher, {"country": "united_states", **DATES}) + pipeline = _fetch( + JodiGasImportsFetcher, + {"country": "united_states", "flow": "pipeline", **DATES}, + ) + assert total.metadata["flow"] == "Imports" + assert pipeline.metadata["flow"] == "Pipeline imports" + total_value = total.result[0].model_dump(exclude_none=True)["united_states"] + pipeline_value = pipeline.result[0].model_dump(exclude_none=True)["united_states"] + assert pipeline_value <= total_value diff --git a/openbb_platform/providers/jodi/uv.lock b/openbb_platform/providers/jodi/uv.lock new file mode 100644 index 00000000000..d387de1fe24 --- /dev/null +++ b/openbb_platform/providers/jodi/uv.lock @@ -0,0 +1,3581 @@ +version = 1 +revision = 2 +requires-python = ">=3.10, <4" +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/eec0465c2f67b2664688d0240b3212d5196fd89e741df67ddb81f8d35658/aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d", size = 24757, upload-time = "2026-07-01T17:11:55.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472", size = 15038, upload-time = "2026-07-01T17:11:54.055Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/85/cebc47ee74d8b408749073a1a46c6fcba13d170dc8af7e61996c6c9394ac/aiohttp-3.13.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b", size = 750547, upload-time = "2026-03-31T21:56:30.024Z" }, + { url = "https://files.pythonhosted.org/packages/05/98/afd308e35b9d3d8c9ec54c0918f1d722c86dc17ddfec272fcdbcce5a3124/aiohttp-3.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5", size = 503535, upload-time = "2026-03-31T21:56:31.935Z" }, + { url = "https://files.pythonhosted.org/packages/6f/4d/926c183e06b09d5270a309eb50fbde7b09782bfd305dec1e800f329834fb/aiohttp-3.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670", size = 497830, upload-time = "2026-03-31T21:56:33.654Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d6/f47d1c690f115a5c2a5e8938cce4a232a5be9aac5c5fb2647efcbbbda333/aiohttp-3.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274", size = 1682474, upload-time = "2026-03-31T21:56:35.513Z" }, + { url = "https://files.pythonhosted.org/packages/01/44/056fd37b1bb52eac760303e5196acc74d9d546631b035704ae5927f7b4ac/aiohttp-3.13.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a", size = 1655259, upload-time = "2026-03-31T21:56:37.843Z" }, + { url = "https://files.pythonhosted.org/packages/91/9f/78eb1a20c1c28ae02f6a3c0f4d7b0dcc66abce5290cadd53d78ce3084175/aiohttp-3.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d", size = 1736204, upload-time = "2026-03-31T21:56:39.822Z" }, + { url = "https://files.pythonhosted.org/packages/de/6c/d20d7de23f0b52b8c1d9e2033b2db1ac4dacbb470bb74c56de0f5f86bb4f/aiohttp-3.13.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796", size = 1826198, upload-time = "2026-03-31T21:56:41.378Z" }, + { url = "https://files.pythonhosted.org/packages/2f/86/a6f3ff1fd795f49545a7c74b2c92f62729135d73e7e4055bf74da5a26c82/aiohttp-3.13.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95", size = 1681329, upload-time = "2026-03-31T21:56:43.374Z" }, + { url = "https://files.pythonhosted.org/packages/fb/68/84cd3dab6b7b4f3e6fe9459a961acb142aaab846417f6e8905110d7027e5/aiohttp-3.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5", size = 1560023, upload-time = "2026-03-31T21:56:45.031Z" }, + { url = "https://files.pythonhosted.org/packages/41/2c/db61b64b0249e30f954a65ab4cb4970ced57544b1de2e3c98ee5dc24165f/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a", size = 1652372, upload-time = "2026-03-31T21:56:47.075Z" }, + { url = "https://files.pythonhosted.org/packages/25/6f/e96988a6c982d047810c772e28c43c64c300c943b0ed5c1c0c4ce1e1027c/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73", size = 1662031, upload-time = "2026-03-31T21:56:48.835Z" }, + { url = "https://files.pythonhosted.org/packages/b7/26/a56feace81f3d347b4052403a9d03754a0ab23f7940780dada0849a38c92/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297", size = 1708118, upload-time = "2026-03-31T21:56:50.833Z" }, + { url = "https://files.pythonhosted.org/packages/78/6e/b6173a8ff03d01d5e1a694bc06764b5dad1df2d4ed8f0ceec12bb3277936/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074", size = 1548667, upload-time = "2026-03-31T21:56:52.81Z" }, + { url = "https://files.pythonhosted.org/packages/16/13/13296ffe2c132d888b3fe2c195c8b9c0c24c89c3fa5cc2c44464dc23b22e/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e", size = 1724490, upload-time = "2026-03-31T21:56:54.541Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1f1c287f4a79782ef36e5a6e62954c85343bc30470d862d30bd5f26c9fa2/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7", size = 1667109, upload-time = "2026-03-31T21:56:56.21Z" }, + { url = "https://files.pythonhosted.org/packages/ef/42/8461a2aaf60a8f4ea4549a4056be36b904b0eb03d97ca9a8a2604681a500/aiohttp-3.13.5-cp310-cp310-win32.whl", hash = "sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9", size = 439478, upload-time = "2026-03-31T21:56:58.292Z" }, + { url = "https://files.pythonhosted.org/packages/e5/71/06956304cb5ee439dfe8d86e1b2e70088bd88ed1ced1f42fb29e5d855f0e/aiohttp-3.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76", size = 462047, upload-time = "2026-03-31T21:57:00.257Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/a20c4ac64aeaef1679e25c9983573618ff765d7aa829fa2b84ae7573169e/aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6", size = 757513, upload-time = "2026-03-31T21:57:02.146Z" }, + { url = "https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d", size = 506748, upload-time = "2026-03-31T21:57:04.275Z" }, + { url = "https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c", size = 501673, upload-time = "2026-03-31T21:57:06.208Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ba/3bc7525d7e2beaa11b309a70d48b0d3cfc3c2089ec6a7d0820d59c657053/aiohttp-3.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb", size = 1763757, upload-time = "2026-03-31T21:57:07.882Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ab/e87744cf18f1bd78263aba24924d4953b41086bd3a31d22452378e9028a0/aiohttp-3.13.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6", size = 1720152, upload-time = "2026-03-31T21:57:09.946Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f3/ed17a6f2d742af17b50bae2d152315ed1b164b07a5fd5cc1754d99e4dfa5/aiohttp-3.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13", size = 1818010, upload-time = "2026-03-31T21:57:12.157Z" }, + { url = "https://files.pythonhosted.org/packages/53/06/ecbc63dc937192e2a5cb46df4d3edb21deb8225535818802f210a6ea5816/aiohttp-3.13.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174", size = 1907251, upload-time = "2026-03-31T21:57:14.023Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc", size = 1759969, upload-time = "2026-03-31T21:57:16.146Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/a38f8c9105199dd3b9706745865a8a59d0041b6be0ca0cc4b2ccf1bab374/aiohttp-3.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6", size = 1616871, upload-time = "2026-03-31T21:57:17.856Z" }, + { url = "https://files.pythonhosted.org/packages/6f/41/27392a61ead8ab38072105c71aa44ff891e71653fe53d576a7067da2b4e8/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49", size = 1739844, upload-time = "2026-03-31T21:57:19.679Z" }, + { url = "https://files.pythonhosted.org/packages/6e/55/5564e7ae26d94f3214250009a0b1c65a0c6af4bf88924ccb6fdab901de28/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8", size = 1731969, upload-time = "2026-03-31T21:57:22.006Z" }, + { url = "https://files.pythonhosted.org/packages/6d/c5/705a3929149865fc941bcbdd1047b238e4a72bcb215a9b16b9d7a2e8d992/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d", size = 1795193, upload-time = "2026-03-31T21:57:24.256Z" }, + { url = "https://files.pythonhosted.org/packages/a6/19/edabed62f718d02cff7231ca0db4ef1c72504235bc467f7b67adb1679f48/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c", size = 1606477, upload-time = "2026-03-31T21:57:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/de/fc/76f80ef008675637d88d0b21584596dc27410a990b0918cb1e5776545b5b/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac", size = 1813198, upload-time = "2026-03-31T21:57:28.316Z" }, + { url = "https://files.pythonhosted.org/packages/e5/67/5b3ac26b80adb20ea541c487f73730dc8fa107d632c998f25bbbab98fcda/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3", size = 1752321, upload-time = "2026-03-31T21:57:30.549Z" }, + { url = "https://files.pythonhosted.org/packages/88/06/e4a2e49255ea23fa4feeb5ab092d90240d927c15e47b5b5c48dff5a9ce29/aiohttp-3.13.5-cp311-cp311-win32.whl", hash = "sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06", size = 439069, upload-time = "2026-03-31T21:57:32.388Z" }, + { url = "https://files.pythonhosted.org/packages/c0/43/8c7163a596dab4f8be12c190cf467a1e07e4734cf90eebb39f7f5d53fc6a/aiohttp-3.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8", size = 462859, upload-time = "2026-03-31T21:57:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/be/6f/353954c29e7dcce7cf00280a02c75f30e133c00793c7a2ed3776d7b2f426/aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9", size = 748876, upload-time = "2026-03-31T21:57:36.319Z" }, + { url = "https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416", size = 499557, upload-time = "2026-03-31T21:57:38.236Z" }, + { url = "https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2", size = 500258, upload-time = "2026-03-31T21:57:39.923Z" }, + { url = "https://files.pythonhosted.org/packages/67/84/c9ecc5828cb0b3695856c07c0a6817a99d51e2473400f705275a2b3d9239/aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4", size = 1749199, upload-time = "2026-03-31T21:57:41.938Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d3/3c6d610e66b495657622edb6ae7c7fd31b2e9086b4ec50b47897ad6042a9/aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9", size = 1721013, upload-time = "2026-03-31T21:57:43.904Z" }, + { url = "https://files.pythonhosted.org/packages/49/a0/24409c12217456df0bae7babe3b014e460b0b38a8e60753d6cb339f6556d/aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5", size = 1781501, upload-time = "2026-03-31T21:57:46.285Z" }, + { url = "https://files.pythonhosted.org/packages/98/9d/b65ec649adc5bccc008b0957a9a9c691070aeac4e41cea18559fef49958b/aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e", size = 1878981, upload-time = "2026-03-31T21:57:48.734Z" }, + { url = "https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1", size = 1767934, upload-time = "2026-03-31T21:57:51.171Z" }, + { url = "https://files.pythonhosted.org/packages/31/04/d3f8211f273356f158e3464e9e45484d3fb8c4ce5eb2f6fe9405c3273983/aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286", size = 1566671, upload-time = "2026-03-31T21:57:53.326Z" }, + { url = "https://files.pythonhosted.org/packages/41/db/073e4ebe00b78e2dfcacff734291651729a62953b48933d765dc513bf798/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9", size = 1705219, upload-time = "2026-03-31T21:57:55.385Z" }, + { url = "https://files.pythonhosted.org/packages/48/45/7dfba71a2f9fd97b15c95c06819de7eb38113d2cdb6319669195a7d64270/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88", size = 1743049, upload-time = "2026-03-31T21:57:57.341Z" }, + { url = "https://files.pythonhosted.org/packages/18/71/901db0061e0f717d226386a7f471bb59b19566f2cae5f0d93874b017271f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3", size = 1749557, upload-time = "2026-03-31T21:57:59.626Z" }, + { url = "https://files.pythonhosted.org/packages/08/d5/41eebd16066e59cd43728fe74bce953d7402f2b4ddfdfef2c0e9f17ca274/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b", size = 1558931, upload-time = "2026-03-31T21:58:01.972Z" }, + { url = "https://files.pythonhosted.org/packages/30/e6/4a799798bf05740e66c3a1161079bda7a3dd8e22ca392481d7a7f9af82a6/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe", size = 1774125, upload-time = "2026-03-31T21:58:04.007Z" }, + { url = "https://files.pythonhosted.org/packages/84/63/7749337c90f92bc2cb18f9560d67aa6258c7060d1397d21529b8004fcf6f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14", size = 1732427, upload-time = "2026-03-31T21:58:06.337Z" }, + { url = "https://files.pythonhosted.org/packages/98/de/cf2f44ff98d307e72fb97d5f5bbae3bfcb442f0ea9790c0bf5c5c2331404/aiohttp-3.13.5-cp312-cp312-win32.whl", hash = "sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3", size = 433534, upload-time = "2026-03-31T21:58:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1", size = 460446, upload-time = "2026-03-31T21:58:10.945Z" }, + { url = "https://files.pythonhosted.org/packages/78/e9/d76bf503005709e390122d34e15256b88f7008e246c4bdbe915cd4f1adce/aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61", size = 742930, upload-time = "2026-03-31T21:58:13.155Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/4b7b70223deaebd9bb85984d01a764b0d7bd6526fcdc73cca83bcbe7243e/aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832", size = 496927, upload-time = "2026-03-31T21:58:15.073Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f5/0fb20fb49f8efdcdce6cd8127604ad2c503e754a8f139f5e02b01626523f/aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9", size = 497141, upload-time = "2026-03-31T21:58:17.009Z" }, + { url = "https://files.pythonhosted.org/packages/3b/86/b7c870053e36a94e8951b803cb5b909bfbc9b90ca941527f5fcafbf6b0fa/aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090", size = 1732476, upload-time = "2026-03-31T21:58:18.925Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e5/4e161f84f98d80c03a238671b4136e6530453d65262867d989bbe78244d0/aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b", size = 1706507, upload-time = "2026-03-31T21:58:21.094Z" }, + { url = "https://files.pythonhosted.org/packages/d4/56/ea11a9f01518bd5a2a2fcee869d248c4b8a0cfa0bb13401574fa31adf4d4/aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a", size = 1773465, upload-time = "2026-03-31T21:58:23.159Z" }, + { url = "https://files.pythonhosted.org/packages/eb/40/333ca27fb74b0383f17c90570c748f7582501507307350a79d9f9f3c6eb1/aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8", size = 1873523, upload-time = "2026-03-31T21:58:25.59Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d2/e2f77eef1acb7111405433c707dc735e63f67a56e176e72e9e7a2cd3f493/aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665", size = 1754113, upload-time = "2026-03-31T21:58:27.624Z" }, + { url = "https://files.pythonhosted.org/packages/fb/56/3f653d7f53c89669301ec9e42c95233e2a0c0a6dd051269e6e678db4fdb0/aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540", size = 1562351, upload-time = "2026-03-31T21:58:29.918Z" }, + { url = "https://files.pythonhosted.org/packages/ec/a6/9b3e91eb8ae791cce4ee736da02211c85c6f835f1bdfac0594a8a3b7018c/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb", size = 1693205, upload-time = "2026-03-31T21:58:32.214Z" }, + { url = "https://files.pythonhosted.org/packages/98/fc/bfb437a99a2fcebd6b6eaec609571954de2ed424f01c352f4b5504371dd3/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46", size = 1730618, upload-time = "2026-03-31T21:58:34.728Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b6/c8534862126191a034f68153194c389addc285a0f1347d85096d349bbc15/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8", size = 1745185, upload-time = "2026-03-31T21:58:36.909Z" }, + { url = "https://files.pythonhosted.org/packages/0b/93/4ca8ee2ef5236e2707e0fd5fecb10ce214aee1ff4ab307af9c558bda3b37/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d", size = 1557311, upload-time = "2026-03-31T21:58:39.38Z" }, + { url = "https://files.pythonhosted.org/packages/57/ae/76177b15f18c5f5d094f19901d284025db28eccc5ae374d1d254181d33f4/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6", size = 1773147, upload-time = "2026-03-31T21:58:41.476Z" }, + { url = "https://files.pythonhosted.org/packages/01/a4/62f05a0a98d88af59d93b7fcac564e5f18f513cb7471696ac286db970d6a/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c", size = 1730356, upload-time = "2026-03-31T21:58:44.049Z" }, + { url = "https://files.pythonhosted.org/packages/e4/85/fc8601f59dfa8c9523808281f2da571f8b4699685f9809a228adcc90838d/aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc", size = 432637, upload-time = "2026-03-31T21:58:46.167Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/ac685a8882896acf0f6b31d689e3792199cfe7aba37969fa91da63a7fa27/aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83", size = 458896, upload-time = "2026-03-31T21:58:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ce/46572759afc859e867a5bc8ec3487315869013f59281ce61764f76d879de/aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c", size = 745721, upload-time = "2026-03-31T21:58:50.229Z" }, + { url = "https://files.pythonhosted.org/packages/13/fe/8a2efd7626dbe6049b2ef8ace18ffda8a4dfcbe1bcff3ac30c0c7575c20b/aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be", size = 497663, upload-time = "2026-03-31T21:58:52.232Z" }, + { url = "https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25", size = 499094, upload-time = "2026-03-31T21:58:54.566Z" }, + { url = "https://files.pythonhosted.org/packages/0a/33/a8362cb15cf16a3af7e86ed11962d5cd7d59b449202dc576cdc731310bde/aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56", size = 1726701, upload-time = "2026-03-31T21:58:56.864Z" }, + { url = "https://files.pythonhosted.org/packages/45/0c/c091ac5c3a17114bd76cbf85d674650969ddf93387876cf67f754204bd77/aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2", size = 1683360, upload-time = "2026-03-31T21:58:59.072Z" }, + { url = "https://files.pythonhosted.org/packages/23/73/bcee1c2b79bc275e964d1446c55c54441a461938e70267c86afaae6fba27/aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a", size = 1773023, upload-time = "2026-03-31T21:59:01.776Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ef/720e639df03004fee2d869f771799d8c23046dec47d5b81e396c7cda583a/aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be", size = 1853795, upload-time = "2026-03-31T21:59:04.568Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b", size = 1730405, upload-time = "2026-03-31T21:59:07.221Z" }, + { url = "https://files.pythonhosted.org/packages/ce/75/ee1fd286ca7dc599d824b5651dad7b3be7ff8d9a7e7b3fe9820d9180f7db/aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94", size = 1558082, upload-time = "2026-03-31T21:59:09.484Z" }, + { url = "https://files.pythonhosted.org/packages/c3/20/1e9e6650dfc436340116b7aa89ff8cb2bbdf0abc11dfaceaad8f74273a10/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d", size = 1692346, upload-time = "2026-03-31T21:59:12.068Z" }, + { url = "https://files.pythonhosted.org/packages/d8/40/8ebc6658d48ea630ac7903912fe0dd4e262f0e16825aa4c833c56c9f1f56/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7", size = 1698891, upload-time = "2026-03-31T21:59:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/d8/78/ea0ae5ec8ba7a5c10bdd6e318f1ba5e76fcde17db8275188772afc7917a4/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772", size = 1742113, upload-time = "2026-03-31T21:59:17.068Z" }, + { url = "https://files.pythonhosted.org/packages/8a/66/9d308ed71e3f2491be1acb8769d96c6f0c47d92099f3bc9119cada27b357/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5", size = 1553088, upload-time = "2026-03-31T21:59:19.541Z" }, + { url = "https://files.pythonhosted.org/packages/da/a6/6cc25ed8dfc6e00c90f5c6d126a98e2cf28957ad06fa1036bd34b6f24a2c/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1", size = 1757976, upload-time = "2026-03-31T21:59:22.311Z" }, + { url = "https://files.pythonhosted.org/packages/c1/2b/cce5b0ffe0de99c83e5e36d8f828e4161e415660a9f3e58339d07cce3006/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b", size = 1712444, upload-time = "2026-03-31T21:59:24.635Z" }, + { url = "https://files.pythonhosted.org/packages/6c/cf/9e1795b4160c58d29421eafd1a69c6ce351e2f7c8d3c6b7e4ca44aea1a5b/aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3", size = 438128, upload-time = "2026-03-31T21:59:27.291Z" }, + { url = "https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162", size = 464029, upload-time = "2026-03-31T21:59:29.429Z" }, + { url = "https://files.pythonhosted.org/packages/79/11/c27d9332ee20d68dd164dc12a6ecdef2e2e35ecc97ed6cf0d2442844624b/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a", size = 778758, upload-time = "2026-03-31T21:59:31.547Z" }, + { url = "https://files.pythonhosted.org/packages/04/fb/377aead2e0a3ba5f09b7624f702a964bdf4f08b5b6728a9799830c80041e/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254", size = 512883, upload-time = "2026-03-31T21:59:34.098Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a6/aa109a33671f7a5d3bd78b46da9d852797c5e665bfda7d6b373f56bff2ec/aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36", size = 516668, upload-time = "2026-03-31T21:59:36.497Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/ca078f9f2fa9563c36fb8ef89053ea2bb146d6f792c5104574d49d8acb63/aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f", size = 1883461, upload-time = "2026-03-31T21:59:38.723Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e3/a7ad633ca1ca497b852233a3cce6906a56c3225fb6d9217b5e5e60b7419d/aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800", size = 1747661, upload-time = "2026-03-31T21:59:41.187Z" }, + { url = "https://files.pythonhosted.org/packages/33/b9/cd6fe579bed34a906d3d783fe60f2fa297ef55b27bb4538438ee49d4dc41/aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf", size = 1863800, upload-time = "2026-03-31T21:59:43.84Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3f/2c1e2f5144cefa889c8afd5cf431994c32f3b29da9961698ff4e3811b79a/aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b", size = 1958382, upload-time = "2026-03-31T21:59:46.187Z" }, + { url = "https://files.pythonhosted.org/packages/66/1d/f31ec3f1013723b3babe3609e7f119c2c2fb6ef33da90061a705ef3e1bc8/aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a", size = 1803724, upload-time = "2026-03-31T21:59:48.656Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b4/57712dfc6f1542f067daa81eb61da282fab3e6f1966fca25db06c4fc62d5/aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8", size = 1640027, upload-time = "2026-03-31T21:59:51.284Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/734c878fb43ec083d8e31bf029daae1beafeae582d1b35da234739e82ee7/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be", size = 1806644, upload-time = "2026-03-31T21:59:53.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/a5/f671e5cbec1c21d044ff3078223f949748f3a7f86b14e34a365d74a5d21f/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b", size = 1791630, upload-time = "2026-03-31T21:59:56.239Z" }, + { url = "https://files.pythonhosted.org/packages/0b/63/fb8d0ad63a0b8a99be97deac8c04dacf0785721c158bdf23d679a87aa99e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6", size = 1809403, upload-time = "2026-03-31T21:59:59.103Z" }, + { url = "https://files.pythonhosted.org/packages/59/0c/bfed7f30662fcf12206481c2aac57dedee43fe1c49275e85b3a1e1742294/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037", size = 1634924, upload-time = "2026-03-31T22:00:02.116Z" }, + { url = "https://files.pythonhosted.org/packages/17/d6/fd518d668a09fd5a3319ae5e984d4d80b9a4b3df4e21c52f02251ef5a32e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500", size = 1836119, upload-time = "2026-03-31T22:00:04.756Z" }, + { url = "https://files.pythonhosted.org/packages/78/b7/15fb7a9d52e112a25b621c67b69c167805cb1f2ab8f1708a5c490d1b52fe/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9", size = 1772072, upload-time = "2026-03-31T22:00:07.494Z" }, + { url = "https://files.pythonhosted.org/packages/7e/df/57ba7f0c4a553fc2bd8b6321df236870ec6fd64a2a473a8a13d4f733214e/aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8", size = 471819, upload-time = "2026-03-31T22:00:10.277Z" }, + { url = "https://files.pythonhosted.org/packages/62/29/2f8418269e46454a26171bfdd6a055d74febf32234e474930f2f60a17145/aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9", size = 505441, upload-time = "2026-03-31T22:00:12.791Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "astroid" +version = "3.3.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/74/dfb75f9ccd592bbedb175d4a32fc643cf569d7c218508bfbd6ea7ef9c091/astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce", size = 400439, upload-time = "2025-07-13T18:04:23.177Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/0f/3b8fdc946b4d9cc8cc1e8af42c4e409468c84441b933d037e101b3d72d86/astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec", size = 275612, upload-time = "2025-07-13T18:04:21.07Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, +] + +[[package]] +name = "black" +version = "26.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/37/5628dd55bf2b34257fc7603f0fe97c40e3aaf24265f416a9c85c95ca1436/black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73", size = 679439, upload-time = "2026-05-18T16:53:36.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/84/b3f55026206a9e8820a91503308075ca48eadc515e436731ca01dbe043b3/black-26.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9942db8888e06943c5dde66ca0037dcff82a2a4ec1ad0ada9e0d2ee9d9823893", size = 1987719, upload-time = "2026-05-18T17:05:02.757Z" }, + { url = "https://files.pythonhosted.org/packages/c6/34/7db312c5e5783d6e76cffd9d5ac8972a32badae4c6e3288dac0eed8d3bed/black-26.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:89c93167a74d3a75dfaa38a5c7cca015537d5820dd7f17d63267d674a61cae90", size = 1810083, upload-time = "2026-05-18T17:05:04.302Z" }, + { url = "https://files.pythonhosted.org/packages/33/e2/e0101e73c2c8727634e2efcb35e2b34bd23ad70dfa673789f5773a591b21/black-26.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f2cd76d069cc54c71f10360744ba8983fbb616903b4304a85b734915c8e1b4", size = 1860633, upload-time = "2026-05-18T17:05:06.391Z" }, + { url = "https://files.pythonhosted.org/packages/b0/4c/e15c0c5b23cf3651035fe5addcce90e283af3548a3f91bb03d81b83106ab/black-26.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:87ed5c6f450580a2f6790bc7cbfb016dfc73bc750249762268a3695361315eef", size = 1477886, upload-time = "2026-05-18T17:05:07.96Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3f/59d43ade98d2ce5c8dc34a4e46cbecd177e6d55d7d4092969c6003ccc655/black-26.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:58b4bd92cf88aacf83d88479c8f9caee044b1ec55f2451a337354a7ea2590a22", size = 1277111, upload-time = "2026-05-18T17:05:09.473Z" }, + { url = "https://files.pythonhosted.org/packages/4b/96/3c3e09f09f44a37aac36b178a279cd19aa7001bd796187a7b162a294c81f/black-26.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96ae2c733b2aabdd9986e2c5df628ff3473676cd1c5faded1ff496cf6d74083c", size = 1970639, upload-time = "2026-05-18T17:05:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/83/ea/5ad117b9ee3ecd933c712bcbae610006e5b7cc9f41c526cd7ed3b6c4124c/black-26.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e48b87e03bf109288e55cfceadcfa15ff5470aca2851a851950ed2926f450d7", size = 1792130, upload-time = "2026-05-18T17:05:12.983Z" }, + { url = "https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59", size = 1846134, upload-time = "2026-05-18T17:05:14.506Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5b/0b39b3a5917f0657ac014ad2edb58c139553a478adfe7f817abf1622ff6e/black-26.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:30d3c14661f2792e9142cce3eeeb1cbc175b3eb5f733be0c8eeb99651e52b0c3", size = 1478883, upload-time = "2026-05-18T17:05:16.542Z" }, + { url = "https://files.pythonhosted.org/packages/4c/48/dc222692e0f95030db1bbfb6c857e76858bad09058221ea7aae815255327/black-26.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:1ef92b76f7733f282fd096ea406200b5a286c42947412b0eaff3a74e3616cefe", size = 1277776, upload-time = "2026-05-18T17:05:18.029Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/7744b906703228264ef73bdd534df88ec1ef3de45c4e78f6d31b9e32d0c9/black-26.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ad6fa01f941920f54f2bbb35f3df7673428a0ef98a0b0840c2eaef3b110efa8", size = 2012518, upload-time = "2026-05-18T17:05:20.108Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c0/c5a3b1636dfd09c42534f2b3cf33506814f6d3e066fb0879ffa16c1ae860/black-26.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3915f256e75a2d7cf88d8953d37f780455dc586cc72dee059c528fe77f581217", size = 1816016, upload-time = "2026-05-18T17:05:21.84Z" }, + { url = "https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d", size = 1884150, upload-time = "2026-05-18T17:05:23.546Z" }, + { url = "https://files.pythonhosted.org/packages/b3/33/dafc5808c2af43672912111d7c3354af1615f7e2be3bed7a878461abbe4d/black-26.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:a1dca32d9f1784af512a13410ec204c6f7f0aa9797a111c42e1c03449821c264", size = 1486825, upload-time = "2026-05-18T17:05:25.004Z" }, + { url = "https://files.pythonhosted.org/packages/82/14/b965ee6ad2a311f28bdbf692def3ee9848d2ae289dab28b27657fcee3e78/black-26.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1037d5ac7b7b310b2632ad867ec8d0e4c4819dcdb0b820f63135da746a24e418", size = 1288646, upload-time = "2026-05-18T17:05:26.477Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5c/c384363980e11e25ca6b93205949bb331fbf35f4e0dbec376dfa6326cec8/black-26.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b36cf2ddf5566e205f6535f782a62194a184d33e175b64ae8c40b1737522be3", size = 2009020, upload-time = "2026-05-18T17:05:28.132Z" }, + { url = "https://files.pythonhosted.org/packages/0b/df/9f31c5e0babbfed77d505fc5d120beb98b21b33feaeded3924ea941fe360/black-26.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f7ea64ebfa01b50f693508fc39f875e264446d3b097088f84f203b9d09618a0", size = 1813335, upload-time = "2026-05-18T17:05:31.266Z" }, + { url = "https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294", size = 1881614, upload-time = "2026-05-18T17:05:32.718Z" }, + { url = "https://files.pythonhosted.org/packages/49/ad/b4e0d9365ba8ac34f6bbab62a4b1b2dd5d618fac3fa1b8db968c844201b5/black-26.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e1a26503279b6b310669fb0b219c39e4820b77e8189fe80f522bb511f247db0a", size = 1488925, upload-time = "2026-05-18T17:05:34.259Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4b/652b859bf5df88a751c30451b09338f7fd26a77d1271c666992f836b7711/black-26.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c34b25da232ead53a6f335b76dbea124f4d152ad568b9080d6f944bc2b34b52", size = 1289883, upload-time = "2026-05-18T17:05:36.019Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/a8da8eb208c51c7f4ce74609a45d0dcc6d8a2141e45e81ee5289d1bb0d59/black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168", size = 2004800, upload-time = "2026-05-18T17:05:38.182Z" }, + { url = "https://files.pythonhosted.org/packages/11/8a/a479296a19e383b70a725882a6cf3d786540601ff03cabbaaf1cce864c5a/black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3", size = 1815576, upload-time = "2026-05-18T17:05:40.309Z" }, + { url = "https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18", size = 1877927, upload-time = "2026-05-18T17:05:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/66/76/302e313964bcff7e28df329d39f84f5270095730d85ff0acc260610a0d82/black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50", size = 1511860, upload-time = "2026-05-18T17:05:43.943Z" }, + { url = "https://files.pythonhosted.org/packages/27/4e/a3827e35e0e567f9f9ee59e2a0ab979267dca98718f25547ca8c6733afd4/black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae", size = 1316632, upload-time = "2026-05-18T17:05:45.521Z" }, + { url = "https://files.pythonhosted.org/packages/94/51/f975cae76d44274cc2868dc9040ac5d58d464784610234455b4e7b19c6ef/black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2", size = 213693, upload-time = "2026-05-18T16:53:33.964Z" }, +] + +[[package]] +name = "cachetools" +version = "7.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/8b/0d3945a13955303b81272f759a0331e54c5c793da455e6f5706b89d2639c/cachetools-7.1.4.tar.gz", hash = "sha256:437f55a4e0c1b01a4f3077cc470e6991d47430970e36fbcb77e2be0df4fc1cd6", size = 40085, upload-time = "2026-05-21T22:40:43.376Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/7b/1fc1c09cc0756cf25861a3be10565915953876da48bb228fb9a672b20a42/cachetools-7.1.4-py3-none-any.whl", hash = "sha256:323dc4127934744db5b54eb4924482d7edafbf9554e820d1531c2e08c0e4ef54", size = 16761, upload-time = "2026-05-21T22:40:41.845Z" }, +] + +[[package]] +name = "certifi" +version = "2026.6.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/e9/6d7724983b3d5a0908dbf74f64038ade77c18646ff6636ec7894fd392ce1/cffi-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:b65f590ef2a44640f9a05dbb548a429b4ade77913ce683ac8b1480777658a6c0", size = 183837, upload-time = "2026-07-06T21:32:09.655Z" }, + { url = "https://files.pythonhosted.org/packages/69/aa/24580a278de21fd7322635556334d9b535f1cbc00b0a3919447cdf464c65/cffi-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164bff1657b2a74f0b6d54e11c9b375bc97b931f2ca9c43fcf875838da1570dd", size = 184226, upload-time = "2026-07-06T21:32:11.196Z" }, + { url = "https://files.pythonhosted.org/packages/88/a9/02cae418ec4beb282ace11958d9d4737793439d561fadc7e6d56f2e2b354/cffi-2.1.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c941bb58d5a6e1c3892d86e42927ed6c180302f07e6d395d08c416e594b98b46", size = 211107, upload-time = "2026-07-06T21:32:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/3b/30/c806937ed5e4c2c7ac30d9d6b76b5dc57ff8b75d83800d9bb11a8253cf2a/cffi-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a016194dbe13d14ee9556e734b772d8d67b947092b268d757fd4290e3ba2dfc2", size = 218733, upload-time = "2026-07-06T21:32:13.67Z" }, + { url = "https://files.pythonhosted.org/packages/f9/cf/398272b8bbfd58aa314fda5a7f1cdbb26d1d78ae324a11211521315dd1f0/cffi-2.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:03e9810d18c646077e501f661b682fbf5dee4676048527ca3cffe66faa9960dd", size = 205543, upload-time = "2026-07-06T21:32:15.148Z" }, + { url = "https://files.pythonhosted.org/packages/45/ca/f91641185cdd90c36d317a9dc7f85e88ef8682d8b300977baff5e23c35d8/cffi-2.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19c54ac121cad98450b4896fa9a43ee0180d57bc4bc911a33db6cab1efab6cd3", size = 205460, upload-time = "2026-07-06T21:32:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/38/66/04781a77b411f0bb5b234d62c1814754ab75ebe455ccff1b08e8d7aae98f/cffi-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d433a51f1870e43a13b6732f92aaf540ff77c2015097c78556f75a2d6c030e0", size = 218760, upload-time = "2026-07-06T21:32:17.98Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9a/bb1d5ed9c3fcae158e9f6391bf309c95d98c2ac37ed56573228471d0af5e/cffi-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3d7f118b5adbfdfead90c25822690b02bc8074fba949bb7858bec4ebd55adb43", size = 221230, upload-time = "2026-07-06T21:32:19.407Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/3c1409cdd26094efacd1c36c66e0a6eb9d4296e4fd4f9901b8b2042f4323/cffi-2.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5f5df567f6eb216de69be06ce55c8b714090fae02b18a3b40da8163b8c5fa9c", size = 213524, upload-time = "2026-07-06T21:32:20.828Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/74dfb7c3fc6ebbd408038476bd4c1d7e925c62614e7b9c534ecc34218288/cffi-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:11b3fb55f4f8ad92274ed26705f65d8f91457de71f5380061eb6d125a768fecd", size = 220341, upload-time = "2026-07-06T21:32:21.9Z" }, + { url = "https://files.pythonhosted.org/packages/70/b6/9003c33a3e7d2c1306f5962e646457dcfe5a8cd8fce6bbe02d7af25db783/cffi-2.1.0-cp310-cp310-win32.whl", hash = "sha256:9d72af0cf10a76a600a9690078fe31c63b9588c8e86bf9fd353f713c84b5db0f", size = 174578, upload-time = "2026-07-06T21:32:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/8a/26/710688310447531c7a22f857c7f79d9855ec18b03e04494ced723fb37e2f/cffi-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb62edb5bb52cca65fab91a63afa7561607120d26090a7e8fda6fb9f064726da", size = 185071, upload-time = "2026-07-06T21:32:24.671Z" }, + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b", size = 152439, upload-time = "2026-07-07T14:34:58.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd6280cf040f233bd7d3407b743b4b4c74f70e8e1c4199cb112a62c941c0772a", size = 322240, upload-time = "2026-07-07T14:32:36.236Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/b4319dc3229d8272fba305e206fc0a148e2de8d4087917ce62ae6382f359/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa99adc8f081b475a12843953db36831eaf83ec33eb46a90629ca6a5de45a616", size = 216475, upload-time = "2026-07-07T14:32:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/33/6c99c1b3e6b8bf730e1bc809b9a2608f224145069114c479a2e9e1494346/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c1225416b463483160e4af85d5fc3a9690ccb53fd4b1865a6437825f5ede3209", size = 238670, upload-time = "2026-07-07T14:32:39.658Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f4/ffbb83546e1f198ecc70ecd372b65cf2b50f9068b380abd67640f17a8e18/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:16d10d789dd9bcca1173c95af82c58433122564b7bc39385124be735a35cbe99", size = 233476, upload-time = "2026-07-07T14:32:41.155Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5f/b98b8da398637b551e427e7be922bdec19177dc54d6811dcdaa503f23aac/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bb41182d93ea91f60b4bc8fbf4c820c69ef8a12ab2d917f3f1834f1acad07e8", size = 223817, upload-time = "2026-07-07T14:32:42.592Z" }, + { url = "https://files.pythonhosted.org/packages/36/31/a276bb2e66243072a3fd06fdcab9cbb61a305b02143d70d2bda21d888fa8/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:bcf74c1df76758a395bf0af608c04c82257523f55c9868b334f06270d0f2112b", size = 207974, upload-time = "2026-07-07T14:32:44.258Z" }, + { url = "https://files.pythonhosted.org/packages/5e/be/7ee4453d7e88dfbc4104ccd34900b9f2c7c17dac22881865fe0e82424a25/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b5314963fce9b0b12743891de876e724997864ee22aa496f903f426c7e2fa5b2", size = 221655, upload-time = "2026-07-07T14:32:45.64Z" }, + { url = "https://files.pythonhosted.org/packages/1d/85/181c652953eb5276d198f375b1dd641047392050098100a3a02d6534f657/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9701d0049d92c16703a42771b98d560b95248949f23f8cf7b4eddd201814fb9", size = 219229, upload-time = "2026-07-07T14:32:47.376Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e7/aaf6da33fc9f4691cda8f7efbc9f69179d3d39ec8a4799baf273ee1d8db0/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:65a7ff3f705e57d392f7261b6d0550fe137c3019477431f1c355e0db0a7d3e15", size = 209704, upload-time = "2026-07-07T14:32:48.855Z" }, + { url = "https://files.pythonhosted.org/packages/63/01/f2fb3bd3a73be48b173ee0c6aa8d2497af97d5663a8c4c4b491de4c62f7a/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79580094b00d1789d1f93ea55bc43cb2f611910c72235b7657f3482ddcc1b22d", size = 226243, upload-time = "2026-07-07T14:32:50.239Z" }, + { url = "https://files.pythonhosted.org/packages/c4/02/c57a22739fe05246b0b5783b3bfb6afaac4eebb46f3ececdfb2f048f780e/charset_normalizer-3.4.9-cp310-cp310-win32.whl", hash = "sha256:432786d3561e69aeeae6c7e8648964ce0ad05736120135601f87ac26b9c83381", size = 150935, upload-time = "2026-07-07T14:32:51.676Z" }, + { url = "https://files.pythonhosted.org/packages/37/8d/ca39a7559a4797505530d084fd3a49a2c959efbbbff146302fb7be4e3b35/charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:8c041122946b7ba21bb32c45b1aa57b1be35527690aeb3c5c234521085632eee", size = 162314, upload-time = "2026-07-07T14:32:53.193Z" }, + { url = "https://files.pythonhosted.org/packages/01/da/a44bd7a13d426e69e4894557106cd58669097bfad4a8681123b618fbfc5d/charset_normalizer-3.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:375b83ed0aecfce76c16d198fbc21f3b11b337d68662bea0a995046682a11419", size = 153075, upload-time = "2026-07-07T14:32:54.554Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e3/85ec501f206fb049259288c1f3506e53876937fb00edb47009348e66756b/charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5", size = 317075, upload-time = "2026-07-07T14:32:56.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/69/2a5385192e67175f7d8bd5ce4f57c24bc956439adeae5c13a99aa28a53d1/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2", size = 213837, upload-time = "2026-07-07T14:32:57.78Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/03ddc7da576d814fe0a36dd1f0fd3258e95404b4b2e3c026b7923d7e133f/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a", size = 235503, upload-time = "2026-07-07T14:32:59.205Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6e/de0229a7ef40f6f9d28a837eebf4ec47bdca5dab4e900c84f22919af636a/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29", size = 229944, upload-time = "2026-07-07T14:33:00.803Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c", size = 221276, upload-time = "2026-07-07T14:33:02.199Z" }, + { url = "https://files.pythonhosted.org/packages/44/95/80282cce0fae9c3061203d723ee87da996aed79679e65d8935050ee7ca1f/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b", size = 205260, upload-time = "2026-07-07T14:33:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/0c/74/2f62c8821b969ea3bd67cc2e6976834f48ca5d12664d2559ebcd9bcfbed7/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db", size = 217786, upload-time = "2026-07-07T14:33:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8d/feabb82cb49fcad14515b1d7d1ca4787b0da7fc723a212bf89bc9e0fac52/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993", size = 216798, upload-time = "2026-07-07T14:33:06.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ff/c946d63bc3786d5b84d960b0f7ab7e25b828486a946b5aa997625bcaf6a6/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da", size = 206429, upload-time = "2026-07-07T14:33:08.006Z" }, + { url = "https://files.pythonhosted.org/packages/af/ba/5e5007c370702f85d2ef75791fac7943ed41e080364a673b20142e430e3e/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3", size = 223066, upload-time = "2026-07-07T14:33:09.783Z" }, + { url = "https://files.pythonhosted.org/packages/83/d5/9096aa3cf532dfad237861544eb47a0f20d5adbf1039760fed8eaae935d9/charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d", size = 150456, upload-time = "2026-07-07T14:33:11.217Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a1/e29995109e455dc8eff8d0fac6ae509be39561318a7cfeac5d33ad029213/charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1", size = 161410, upload-time = "2026-07-07T14:33:12.743Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8d/1569f4d0032d6ba2a4fe4591c35bf87868c600c41a71eb5c2e1ffa8464c2/charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec", size = 152649, upload-time = "2026-07-07T14:33:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0", size = 319300, upload-time = "2026-07-07T14:33:15.666Z" }, + { url = "https://files.pythonhosted.org/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9", size = 215802, upload-time = "2026-07-07T14:33:17.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44", size = 237171, upload-time = "2026-07-07T14:33:18.576Z" }, + { url = "https://files.pythonhosted.org/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9", size = 233075, upload-time = "2026-07-07T14:33:20.084Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd", size = 224256, upload-time = "2026-07-07T14:33:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84", size = 208784, upload-time = "2026-07-07T14:33:23.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b", size = 219928, upload-time = "2026-07-07T14:33:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde", size = 218489, upload-time = "2026-07-07T14:33:26.42Z" }, + { url = "https://files.pythonhosted.org/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39", size = 210267, upload-time = "2026-07-07T14:33:27.952Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62", size = 226030, upload-time = "2026-07-07T14:33:29.397Z" }, + { url = "https://files.pythonhosted.org/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642", size = 151185, upload-time = "2026-07-07T14:33:30.781Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0", size = 162557, upload-time = "2026-07-07T14:33:32.176Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2", size = 152665, upload-time = "2026-07-07T14:33:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614", size = 317688, upload-time = "2026-07-07T14:33:35.408Z" }, + { url = "https://files.pythonhosted.org/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698", size = 214982, upload-time = "2026-07-07T14:33:36.996Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b", size = 236460, upload-time = "2026-07-07T14:33:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9", size = 232003, upload-time = "2026-07-07T14:33:40.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33", size = 223149, upload-time = "2026-07-07T14:33:41.631Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63", size = 207901, upload-time = "2026-07-07T14:33:43.209Z" }, + { url = "https://files.pythonhosted.org/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0", size = 219176, upload-time = "2026-07-07T14:33:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe", size = 217356, upload-time = "2026-07-07T14:33:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35", size = 209614, upload-time = "2026-07-07T14:33:47.705Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8", size = 224991, upload-time = "2026-07-07T14:33:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9", size = 150622, upload-time = "2026-07-07T14:33:50.711Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115", size = 161947, upload-time = "2026-07-07T14:33:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012", size = 152594, upload-time = "2026-07-07T14:33:53.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380", size = 317253, upload-time = "2026-07-07T14:33:54.994Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9", size = 215898, upload-time = "2026-07-07T14:33:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4", size = 236718, upload-time = "2026-07-07T14:33:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a", size = 232519, upload-time = "2026-07-07T14:33:59.811Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046", size = 223143, upload-time = "2026-07-07T14:34:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81", size = 206742, upload-time = "2026-07-07T14:34:03.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917", size = 219191, upload-time = "2026-07-07T14:34:04.657Z" }, + { url = "https://files.pythonhosted.org/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41", size = 218328, upload-time = "2026-07-07T14:34:06.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1", size = 207406, upload-time = "2026-07-07T14:34:07.554Z" }, + { url = "https://files.pythonhosted.org/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf", size = 225157, upload-time = "2026-07-07T14:34:09.061Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48", size = 151095, upload-time = "2026-07-07T14:34:10.901Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b", size = 162796, upload-time = "2026-07-07T14:34:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519", size = 153334, upload-time = "2026-07-07T14:34:14.044Z" }, + { url = "https://files.pythonhosted.org/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198", size = 338848, upload-time = "2026-07-07T14:34:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32", size = 223022, upload-time = "2026-07-07T14:34:17.248Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632", size = 241590, upload-time = "2026-07-07T14:34:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf", size = 239584, upload-time = "2026-07-07T14:34:20.52Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990", size = 230224, upload-time = "2026-07-07T14:34:22.189Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d", size = 212667, upload-time = "2026-07-07T14:34:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e", size = 227179, upload-time = "2026-07-07T14:34:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c", size = 225372, upload-time = "2026-07-07T14:34:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2", size = 215222, upload-time = "2026-07-07T14:34:28.774Z" }, + { url = "https://files.pythonhosted.org/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534", size = 231958, upload-time = "2026-07-07T14:34:30.345Z" }, + { url = "https://files.pythonhosted.org/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226", size = 155580, upload-time = "2026-07-07T14:34:31.884Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177", size = 167620, upload-time = "2026-07-07T14:34:33.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501", size = 158037, upload-time = "2026-07-07T14:34:35.018Z" }, + { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "codespell" +version = "2.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/9d/1d0903dff693160f893ca6abcabad545088e7a2ee0a6deae7c24e958be69/codespell-2.4.2.tar.gz", hash = "sha256:3c33be9ae34543807f088aeb4832dfad8cb2dae38da61cac0a7045dd376cfdf3", size = 352058, upload-time = "2026-03-05T18:10:42.936Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/a1/52fa05533e95fe45bcc09bcf8a503874b1c08f221a4e35608017e0938f55/codespell-2.4.2-py3-none-any.whl", hash = "sha256:97e0c1060cf46bd1d5db89a936c98db8c2b804e1fdd4b5c645e82a1ec6b1f886", size = 353715, upload-time = "2026-03-05T18:10:41.398Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "coverage" +version = "7.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/83/6051c2a2feab48ae5bd27c84ef047191d2d4a3172f689e38eaa48ed17db1/coverage-7.15.1.tar.gz", hash = "sha256:165e9949eaf222ef1f018635d0d7f368a23bfe0212af558534c40d8c04686d67", size = 927640, upload-time = "2026-07-12T20:58:19.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/76/eef242d6bb95fb737fefd9bbf3a318897e4e82cf543b53a61c2a6e8588eb/coverage-7.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:05d87c2a43373ad6b976d0a99ad58c48633633bcdeb896dc645a006472cc4a71", size = 221195, upload-time = "2026-07-12T20:55:55.82Z" }, + { url = "https://files.pythonhosted.org/packages/89/73/41cd50da59d513a30fd3a34b5516b962ac17514defdb6705948446a5c0b1/coverage-7.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2afce82f2cf8f4c9002746a42755e1dc61baff33d9f7ab5569b4c9101f8f4d1d", size = 221714, upload-time = "2026-07-12T20:55:58.104Z" }, + { url = "https://files.pythonhosted.org/packages/22/9d/6df6ac6677719a087c839208186525b7b1f3653c50196c43246482ada65e/coverage-7.15.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0a545ef5384d787d0fcac6c349afc2c5f99dcc39e13ed3c191b2c06305f64c04", size = 248454, upload-time = "2026-07-12T20:55:59.336Z" }, + { url = "https://files.pythonhosted.org/packages/9f/f5/86f92c429fbf942986d01c3bb7b0b6c3ad06b09f7fa745023877413dde83/coverage-7.15.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:afaa144b8f5b3bc69fe0ce50d401c46b01ab264782553bfd05a3f98804524ecb", size = 250282, upload-time = "2026-07-12T20:56:00.589Z" }, + { url = "https://files.pythonhosted.org/packages/47/c6/99d0f1c1dd1583aaf8c1deca447e44426be54a76027a8c55e29970f22b15/coverage-7.15.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b6099490e5f88569c46b18605f556c3b30acc9a0a219cf7ef8fab8f7161ec4", size = 252149, upload-time = "2026-07-12T20:56:01.853Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c3/5d30740ec96f5fd8a659e46b6ee9224197f87aa66ce4a20e93dcf46221ac/coverage-7.15.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bb5f6c2cf1ffd0bf2bd925c7cdcae9b4f208e9696d453ed51eb1f5fa0cc5b45b", size = 254061, upload-time = "2026-07-12T20:56:03.277Z" }, + { url = "https://files.pythonhosted.org/packages/71/e5/3afb2950673ca6cd22bc9ad6a9d6058c853bef8fe27a6d1df3adc274fd88/coverage-7.15.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:81572011fc1fc271317da35da593944daef7bfd507085e35751abbe702b74f69", size = 249152, upload-time = "2026-07-12T20:56:04.618Z" }, + { url = "https://files.pythonhosted.org/packages/ca/53/25ab3c0a7cf517ed4d30cd4dd82331e005d4b57fec8c19c0ffd94fb50baa/coverage-7.15.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8f765d13c08497687d0780cca66115c6aa4ba6703ad43b61e94fab9db689e3a3", size = 250187, upload-time = "2026-07-12T20:56:06Z" }, + { url = "https://files.pythonhosted.org/packages/ad/2a/8afb5f994e26e919e5dca5164f1c7b6b7ce6090aab1aac32b1ae1782f047/coverage-7.15.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:771caba880fee96493d18dfc465c318e08ab74e3bc2a3e4089e52514be6a6e54", size = 248193, upload-time = "2026-07-12T20:56:07.376Z" }, + { url = "https://files.pythonhosted.org/packages/d4/62/b6616e15288c9a7b628f7745e832fd8af2c03ec1f7dc11da25947f5ab16f/coverage-7.15.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:433a73200848e80f27712fc113b6ff5311f29b479a7d3bd4b1106138a77f9674", size = 252004, upload-time = "2026-07-12T20:56:08.787Z" }, + { url = "https://files.pythonhosted.org/packages/9e/21/5d80d65e4df3018dedb23a44f276f20ce26e429ffd76df03de03bcf9a767/coverage-7.15.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:5d6fa45079db9fbeba0a69e3d91189f05301d6ac918162a53179d32fc9ed4910", size = 248463, upload-time = "2026-07-12T20:56:10.245Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/04a22708691561c44d77e1d5a60857b351310fdfbf253533780bb31c8b6f/coverage-7.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:00b6703c6640075cdce5124e9335dfdf9167272475301828acfdd09c0e5ee731", size = 249064, upload-time = "2026-07-12T20:56:11.614Z" }, + { url = "https://files.pythonhosted.org/packages/82/c9/a5c1e8954e657559de478acc1ef73e9393d3fc9b4a2ab4427501d765aca2/coverage-7.15.1-cp310-cp310-win32.whl", hash = "sha256:3ad9a0eac4728327fd870d52f74d2e631d176c5f178eaea2d9983ab5b9755a55", size = 223248, upload-time = "2026-07-12T20:56:13.068Z" }, + { url = "https://files.pythonhosted.org/packages/54/49/5f6566e14611a58e93a926f3a8a7b22e4e0702ebb4c467ac38f452c7f4cf/coverage-7.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:eb5fa75dc3d30e3a1b75da97973479b20ffa9b0641ff56d6e94b5f3e210daa54", size = 223874, upload-time = "2026-07-12T20:56:14.396Z" }, + { url = "https://files.pythonhosted.org/packages/67/ee/5095e07a0986930174fc153fd0bb115f7f2724f5344cc672e016d4f23a4e/coverage-7.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6506330b4a8dcf53b95bd84d8d0e817107cdb3fc1438e835029cdf0bc6612eb0", size = 221320, upload-time = "2026-07-12T20:56:16.036Z" }, + { url = "https://files.pythonhosted.org/packages/43/7a/7e2598ce98433a214020a61c0755d5961f9f26df0c630dc73e06b86d3416/coverage-7.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8a51a8ec382c39d939cba0ab07ae949077ae4e842343bd4eed22d432358cea9", size = 221823, upload-time = "2026-07-12T20:56:17.54Z" }, + { url = "https://files.pythonhosted.org/packages/8b/4f/67dac6a69139b490a239d91b6d5ef127982ffb89159769241656ab879ee5/coverage-7.15.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:18ea20e3922d7f8ca9e0ef1084408d08c4ad62d5e531cb9c1f6896a99297ebea", size = 252242, upload-time = "2026-07-12T20:56:18.868Z" }, + { url = "https://files.pythonhosted.org/packages/05/37/5e439725a96de592309725550c8df639c359c209dcb4b152ed46032d4c0d/coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aab9902a64b8390e3b56e539fddae1d79a267807fe5cb0c18d7d2f544ce867e2", size = 254153, upload-time = "2026-07-12T20:56:20.118Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1c/671ba9e15f9651a99962fb588a1fe4fb267cae4bb85f9bb4ac4413c6f7ef/coverage-7.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cc316264317b07a9e90d7f2b4188a15e36e9b54e651081b791b0515fa612a29", size = 256261, upload-time = "2026-07-12T20:56:21.682Z" }, + { url = "https://files.pythonhosted.org/packages/d6/3c/88305322b4d015b4536b7174b8f9b87f850f01af9d89008cdbf984b65ff2/coverage-7.15.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d4e47e7eea81a8ccf060a07627654151d929da62c7b715738387c200905cec89", size = 258222, upload-time = "2026-07-12T20:56:22.962Z" }, + { url = "https://files.pythonhosted.org/packages/8d/20/d02e42333a57f266ded61ed4fb3821da1f2dc143734aaa3dcc9c117204c5/coverage-7.15.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c6829d9a3b55ad2b73ef5fda8302e5be03683789e88b1a079dcf4a773229c21d", size = 252368, upload-time = "2026-07-12T20:56:24.475Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d0/94ebc010926a191d83e83b1f1236f8bd0d14d0eb98b5c324aa4be2589a8e/coverage-7.15.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:764e045811f9c8cda436641f3f088283351d331a519b5807f19041cd0a68da1c", size = 253953, upload-time = "2026-07-12T20:56:26.036Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a6/2c8553191da0c2da2c43ff294fb9bab57a5b0fae03560304a82a8b5addc3/coverage-7.15.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:09b3b088aa24489c4082bcc35fcc8224281ab94a653dfb6d3f0c8165b0d628ab", size = 252016, upload-time = "2026-07-12T20:56:27.374Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/20f47986d8360fa1a31d9858dd2ba0be009d44ecfa8d02120b1eb93c028b/coverage-7.15.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7911b02f57053adf8164ae63edb1c26574d24dfccabadc5268cf69310a69a358", size = 255783, upload-time = "2026-07-12T20:56:28.921Z" }, + { url = "https://files.pythonhosted.org/packages/17/36/fb61983b5259f78fa5e62ee74e91fe4de4c556fcbc9a3b9c9021c2f8b57b/coverage-7.15.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:664e279ed40599b8ed16f4db18d92a7e212c73129672bec8f5d96d4da48d2404", size = 251735, upload-time = "2026-07-12T20:56:30.465Z" }, + { url = "https://files.pythonhosted.org/packages/6c/2e/d109d8d2d6c726ba2e78125297073918a2a91464f0ea777e5398fa3cf75c/coverage-7.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34fe7cf79d5f1f87f2e8ce7dc1c32950841f50e10d0120f263856acfad66de34", size = 252645, upload-time = "2026-07-12T20:56:32.076Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/5b3219cbb46135e14673427f2bf5890c4da4e6f655243692f3448aa3f42c/coverage-7.15.1-cp311-cp311-win32.whl", hash = "sha256:5e2d2536d2f57a354aa382ed303ac0e2e5c9522a508c05b998d26181b94163a7", size = 223414, upload-time = "2026-07-12T20:56:33.432Z" }, + { url = "https://files.pythonhosted.org/packages/5b/80/24e13ade0b6df8090e2492f9c55044bf1423f7ef28c76fc1af8c827a61cb/coverage-7.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:c337da8fca7ea93ab43f3868cfcde6cf6dad32c3906b273cfbad5d7390bc423b", size = 223888, upload-time = "2026-07-12T20:56:34.784Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9e/34659930ae380491af48e2f5f5f9a2e99cd9fb7de3d30f27be5ac5425137/coverage-7.15.1-cp311-cp311-win_arm64.whl", hash = "sha256:db3403fdb7a94d5eb73e099befad8104d2a7d110a0f0d99df0de61c5d1fa756c", size = 223435, upload-time = "2026-07-12T20:56:36.302Z" }, + { url = "https://files.pythonhosted.org/packages/d9/76/32c1826309beaf4604c54accef108fdd611e5e5e93f2f5192f050cd5f6bd/coverage-7.15.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d9476292594309db922cc841dd13b303b3c388f4c25d279884f7e2341c681f80", size = 221497, upload-time = "2026-07-12T20:56:37.628Z" }, + { url = "https://files.pythonhosted.org/packages/db/5c/b88ce0d68fa550c7f3b58617fbf363bce64df5bf8295a01b627e4696e022/coverage-7.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0c579056b0de461b3a62318b63d0b6ce90aed7f8158d3f00da094df82f29d189", size = 221854, upload-time = "2026-07-12T20:56:39.033Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fe/8509fd2a66fc4e0a829f76a0f0b1dc3cc163368352435b5f243168658077/coverage-7.15.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:23214bdbe226f2b0e9c66a7d6a1d59d4a88045dcf86e702cf0fe0d0935e3d615", size = 253359, upload-time = "2026-07-12T20:56:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/e5/81/c7009ed7ea9765adb2b9d095054d748266fae5f07ac6c5f925f33715fcde/coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:df164be93b46b4825cc39339440a05edc54c4d1d865ba4a60fd43d151a2a1cd3", size = 256096, upload-time = "2026-07-12T20:56:42.115Z" }, + { url = "https://files.pythonhosted.org/packages/21/52/dc8ee03968a5ba86e2da5aa48ddc9e3747bd65d63825fdce2d96acb9c5ff/coverage-7.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a524fca1a6f08927d9dc2d4c873cfb7bd7202c247f08b14bdc02424071b8b304", size = 257211, upload-time = "2026-07-12T20:56:43.513Z" }, + { url = "https://files.pythonhosted.org/packages/b8/27/95d7623908da8937deb53d48efcdbf423907a47540e63c62fa21372c652b/coverage-7.15.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d70f3542cd38de85a9e257dcb1ac4c1ab4b6d7d2c2a645809207556628755d1c", size = 259473, upload-time = "2026-07-12T20:56:44.974Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3b/730d761928de97d585465680b568ae69622fb40716babadeabffe75cb51b/coverage-7.15.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d78aa537237212c4313aabe5e964b66acc86350ed19ebc56a3e202df33b6077b", size = 253759, upload-time = "2026-07-12T20:56:46.615Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fc/6b9277acff1f9484b6c12857af5774689d1a6a95e13265f7405329d2f5da/coverage-7.15.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a318112bb4f79d9d04766196d5a3388caa825908a6a9b052aa87de3d9aea7c61", size = 255131, upload-time = "2026-07-12T20:56:48.073Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f2/c704f86129594ba34e25a64695d2068c71d51c2b98907184d716c94f4aec/coverage-7.15.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e55d24cada901963eed5bc89fa562aa033f0d84b9d3de4ecf363737c13aed11e", size = 253275, upload-time = "2026-07-12T20:56:49.538Z" }, + { url = "https://files.pythonhosted.org/packages/f6/29/80fee8af47de4a6dce71ccf2938491f444687a756af258a56d8469b8f1b0/coverage-7.15.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3c78f0cea7275342cf2adc2ad5fdd0aafa106ad91e66d573568f2fcf62c41df5", size = 257345, upload-time = "2026-07-12T20:56:51.038Z" }, + { url = "https://files.pythonhosted.org/packages/20/21/a1e7d7ed1b48a8adf8fd5154d9e83fcc5ad8e6ff20ae00e44865057dce8d/coverage-7.15.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:86bd37eabe39977216f630a7fc1b698e7f5e81a191c7186013245c6c3d313f9d", size = 252844, upload-time = "2026-07-12T20:56:52.535Z" }, + { url = "https://files.pythonhosted.org/packages/a7/8c/a4bc26e6ee207d412f3678f04d74be1550e83140563ca0e4997510579712/coverage-7.15.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c6db15c217693bdc3ca0b84de1ba9afafe1c14c26a8a29d77f4ed0de2b6132e2", size = 254716, upload-time = "2026-07-12T20:56:53.968Z" }, + { url = "https://files.pythonhosted.org/packages/11/9d/8ad0266ecfada6353cf6627a1a02294cf55a907521b6ee0bd7b770cfd659/coverage-7.15.1-cp312-cp312-win32.whl", hash = "sha256:359f3fbe09a51500c51966596ee4ee4070b356552c70b3b2420eb200d68e0f76", size = 223554, upload-time = "2026-07-12T20:56:55.583Z" }, + { url = "https://files.pythonhosted.org/packages/81/6d/24224929e06c6e05a93f738bc5f9e8e6ab658f8f1d9b823e7b85430e28b8/coverage-7.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:fa75dc099c126e941a9c0baa8ebd2cbc78bd778687534fe410baf754f6d9e374", size = 224087, upload-time = "2026-07-12T20:56:57.041Z" }, + { url = "https://files.pythonhosted.org/packages/35/23/f81441dd01de88e53c97842e706907b307d9078918c3f4998b11e9ac7250/coverage-7.15.1-cp312-cp312-win_arm64.whl", hash = "sha256:26f89cf6d0634375f454fa71057945ad18edb0f1607a90fecf22c57dc3dc289a", size = 223472, upload-time = "2026-07-12T20:56:58.594Z" }, + { url = "https://files.pythonhosted.org/packages/ca/1e/6fa289d7993a2a39f1b283ddb58c4bfec80f7800be654b8ba8a9f6a07c63/coverage-7.15.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:71ac4ca1658ca99160fd58cc6967110e989c34b04627f24ed6ec9f70fb24571a", size = 221519, upload-time = "2026-07-12T20:57:00.081Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e1/0db4902a0588234a70ab0218073c0b20fbc5c740aa35f91d360160a2ebc9/coverage-7.15.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26a40cbf2b13bd94af53ee02a424cb3bb96a9edfac0d00834bd068512a62714b", size = 221895, upload-time = "2026-07-12T20:57:01.867Z" }, + { url = "https://files.pythonhosted.org/packages/b4/cb/3719783865092dac5e08df842730305ee9ab1973ae7ddb6fbdf27d401f30/coverage-7.15.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f4c5a5eff4ad4f9f7088fd3fc7a66d98d06566ee294b3b053309fb0a3b45be1e", size = 252882, upload-time = "2026-07-12T20:57:03.459Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5e/caf3abbdbb22629626160ffc9c017eb995b7cb11c0be46b974834cef1792/coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:962aa56c1c9b016d681265880eb6acc9966029d2c4c559319cc43a1abbb9b59a", size = 255479, upload-time = "2026-07-12T20:57:04.984Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f1/d60f375bfe095fef944f0f19427aefdbf9bdd5a9571c41a4bf6e2f5fdb81/coverage-7.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1678eb2dc57a8ce67601b029582ef6d41e9e6ca22692aaeccd4107e40f27386c", size = 256715, upload-time = "2026-07-12T20:57:06.446Z" }, + { url = "https://files.pythonhosted.org/packages/d7/17/8b0cbc90d02dc5adad4d9034c1824ec3fa567771b4c39d9c1e3f9b1431b8/coverage-7.15.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1174900a43f6f8c425fee10d7dbddc308adefcdc78aaced32357f5ab750a0e90", size = 258845, upload-time = "2026-07-12T20:57:08.092Z" }, + { url = "https://files.pythonhosted.org/packages/92/29/c5e69f5fb75c322e9a3e4ef64d02eebfc3d66efceccc8514ff80a3c13a56/coverage-7.15.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:98847557a6859cadf693792ce89f440cb89692993f60dc6d3a7e35f3d340216f", size = 253098, upload-time = "2026-07-12T20:57:09.636Z" }, + { url = "https://files.pythonhosted.org/packages/64/57/21144252fdd0c01d707d48fbcea13a80b0b7c42ced3f299f885ab8978c3a/coverage-7.15.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8697b2edb57143546a24389efc11e1b000cd5800fc20d84f04edb601e4a7cfb8", size = 254844, upload-time = "2026-07-12T20:57:11.141Z" }, + { url = "https://files.pythonhosted.org/packages/59/2a/499a28a322b0ce6768328e6c5bb2e2ad00ac068a7c7adb2ecd8533c8c5d9/coverage-7.15.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6827ac0519be3fe91bf96b4060eb00d1d24f82649b29862cd75a3cfca248b02a", size = 252807, upload-time = "2026-07-12T20:57:12.678Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/928a95da5da8b60f2b00e1482c7787b3316188e6d2d227fb8e124ada43a1/coverage-7.15.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2de8ecbbc77c7e4d22572779920ed8979c69168675e96be3a548c996568c6c31", size = 256965, upload-time = "2026-07-12T20:57:14.326Z" }, + { url = "https://files.pythonhosted.org/packages/16/10/889adbc1b8c9f866ed51e18a98bcafc0259fb9d29b81f50a719407c64ea8/coverage-7.15.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2b25f0f0fa5260df9d7bb55d47c8bdc23fa3382c1a18f7c9cae122e6c320b1ad", size = 252628, upload-time = "2026-07-12T20:57:15.892Z" }, + { url = "https://files.pythonhosted.org/packages/1a/30/a5e1871e5d93416511f8e359d1ccebfe0cbb050a1bbf7dd20228533ec0cf/coverage-7.15.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a2effcbd93ae340a58db718fe4181d967f84d352c4cefeaab4ff82ce813901a", size = 254399, upload-time = "2026-07-12T20:57:17.703Z" }, + { url = "https://files.pythonhosted.org/packages/2d/26/c36fbffd549dadbdd1a75827528fb00a4c46aa3187b007b750b1e2cebbf2/coverage-7.15.1-cp313-cp313-win32.whl", hash = "sha256:895e65c96aef0cecea250f6e35e9a32f11375514e1a0cb5210e0fda128c04e8e", size = 223564, upload-time = "2026-07-12T20:57:19.253Z" }, + { url = "https://files.pythonhosted.org/packages/16/fc/becbb9d2c4206d242b9b1e1e8e24a42f7926c0200dd3c788b9fab4bb96d5/coverage-7.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6d0a28b63a0d75f9ed5118105d1154fc3aa40a8605a30d5d87e3d043ad90fe7", size = 224106, upload-time = "2026-07-12T20:57:21.108Z" }, + { url = "https://files.pythonhosted.org/packages/d3/30/1cfc641461369b6858799fca61c0a8b5edc490c519bf7c636ffa6bbf556f/coverage-7.15.1-cp313-cp313-win_arm64.whl", hash = "sha256:b4ee9818e8bae3544379ad2c09b851c4fb886aaa8860d57a1c1316ddcb16db49", size = 223497, upload-time = "2026-07-12T20:57:22.734Z" }, + { url = "https://files.pythonhosted.org/packages/f0/46/81961952e7aebfb38ad0ae4264e8954cc607a7af9e7ac111f9fa986595cc/coverage-7.15.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a886af95f59edf67d5770fd3564d53f4a8af93f25f8c1d60d27e00d7f5674ee8", size = 221560, upload-time = "2026-07-12T20:57:24.282Z" }, + { url = "https://files.pythonhosted.org/packages/13/d2/ee14d715889f216baf47301d9f469e08fff6995552aaf67e897b282865f6/coverage-7.15.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:985657ebd707941de90d488d1cbb5efac20bdf81f7b91eba771624ccda4d36f4", size = 221894, upload-time = "2026-07-12T20:57:25.87Z" }, + { url = "https://files.pythonhosted.org/packages/f3/38/f830bc6e6c2c5f23f43847125e6c650d378872f7eeba8d49f1d42193e8a9/coverage-7.15.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5bbe2a06e0a5e1404d9ffbdb49b819bbd6a3bb198ebea4c8dfe7ad9f1e1c2e81", size = 252938, upload-time = "2026-07-12T20:57:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bde0fe24083d0b7b3dbafa7a09f0796410af1afa2523f28f5f208d8340a4aaca", size = 255445, upload-time = "2026-07-12T20:57:29.234Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fd/aabed228557565c958259251b89bab8c5669b31291fa63b3e2154ebb017a/coverage-7.15.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f89f7453d6d46db14cf233e2cd8edcd78de2b9c49d4f1dc109590b4e5dbfbb74", size = 256790, upload-time = "2026-07-12T20:57:30.826Z" }, + { url = "https://files.pythonhosted.org/packages/bc/aa/1cc888e5d3623e603c4e5399653cb25728bb2b40d7519188a3e293d24620/coverage-7.15.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc3656c9ecc27b36bd0907455b77f83c0069ca9ad4a66dec892b76c696eb6047", size = 259104, upload-time = "2026-07-12T20:57:32.63Z" }, + { url = "https://files.pythonhosted.org/packages/5f/61/fc16d5f5e53098dae41efa21e8ccc611a9b4fe922750dd03dc56db552182/coverage-7.15.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:24d8e85a2a45e44883b488c2659f51fa761dad5353fdb319b672a93facbd2ca9", size = 252956, upload-time = "2026-07-12T20:57:34.316Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f3/52384668c3de4519ca770bf1975a89e4d6eb5aa2faf0da0577a14008cba4/coverage-7.15.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68931b5fe746ed4fdaa8892989cab9e6c35781eeb3b0ab2ded893d561e1b3652", size = 254797, upload-time = "2026-07-12T20:57:35.947Z" }, + { url = "https://files.pythonhosted.org/packages/ce/68/54b807e7c1868178e902fd8360b5d4e559394462f97285c50edf1c4608db/coverage-7.15.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1ce6947e2a95534ecaa5a15e73c21e550514c980d80eda204d064d789a95f6a4", size = 252762, upload-time = "2026-07-12T20:57:37.856Z" }, + { url = "https://files.pythonhosted.org/packages/7b/48/dde8adf0338e3ace738757dccf1ce817e5fdcadfae77e1b48a77e5a3b265/coverage-7.15.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:841befdbc89b9c82435fc25b0f4f41858b6238693e45af758bec4cfc1968171c", size = 257037, upload-time = "2026-07-12T20:57:39.488Z" }, + { url = "https://files.pythonhosted.org/packages/07/f2/179dd88cf60a0aeeee16a970ffe250dccea8b80ed4beab4c5d3f6c41ad4b/coverage-7.15.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5d3de58b837375e7f4c0e1a088ccab5f655efb2fd7427b729df02c862a559633", size = 252577, upload-time = "2026-07-12T20:57:41.363Z" }, + { url = "https://files.pythonhosted.org/packages/2c/37/8a593d69ab521beb6a105a2017cac4ba94425ee0a8349e29c3c0b522d24f/coverage-7.15.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b1801963f9f44ae0c0f6d737bc7aeb2bbcde7d1fe7e3b43cddc1961af42d3b41", size = 254235, upload-time = "2026-07-12T20:57:43.025Z" }, + { url = "https://files.pythonhosted.org/packages/6d/34/bc9b3bced66f2cdad4bf5e57ae51c54ea226e8aaaebfc9370a9a11877bf3/coverage-7.15.1-cp314-cp314-win32.whl", hash = "sha256:8c7953c4128ef53b6ffb5f90d87c87d4ce26731df294760bb2314eb0e069e44b", size = 223771, upload-time = "2026-07-12T20:57:44.662Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f3/4d20337bed61915d14349e62b88d5e4144d5a9872b64adbe90e9906db6db/coverage-7.15.1-cp314-cp314-win_amd64.whl", hash = "sha256:6f0bab60a582d415f0fb535ccff13ba334a47a1538f98913330a525d23bd535a", size = 224257, upload-time = "2026-07-12T20:57:46.412Z" }, + { url = "https://files.pythonhosted.org/packages/7b/df/bbfeae4948f3ded516f92b32f2d57952427fc5ecfc0924487bb6ee6a5f38/coverage-7.15.1-cp314-cp314-win_arm64.whl", hash = "sha256:0f410ee8f0ac4ec7db71bc0b7632a8b9994e1cad2755bd1566c17e6a162caa74", size = 223683, upload-time = "2026-07-12T20:57:48.106Z" }, + { url = "https://files.pythonhosted.org/packages/35/65/0b431856064e387d1f5cf474625e4a0465e907024d42f35de6af19ced0be/coverage-7.15.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:fc868bab88e049d41fcd41766810d790a8b960053be2a45e060f5ce0d31d258b", size = 222298, upload-time = "2026-07-12T20:57:49.882Z" }, + { url = "https://files.pythonhosted.org/packages/a6/96/50eac9bd49df8a3df5f3d38746d1bf332299dffb554486c94ebd55c9dc49/coverage-7.15.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:206d4ec6028f2773b40932d09f074539d6bcdd8f6b318d40cb04bdbd68ed0b49", size = 222561, upload-time = "2026-07-12T20:57:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/e0/5b/6ba1c4a27e10b8816fd2622b98162c83d3bdf1185097360373611bf96364/coverage-7.15.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:620482ef1c9f4e61f962e159325fe77dea59d16e39d9c9470d069053b244d864", size = 263923, upload-time = "2026-07-12T20:57:53.392Z" }, + { url = "https://files.pythonhosted.org/packages/e4/59/fe03ade97a3ca2d890e98c572cf48a99fda9adba85757c34b823f41efe1e/coverage-7.15.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d385fc9b054e309ad3cecdc77b586d2af0c98aeec2fdb3773544586f366e817c", size = 266043, upload-time = "2026-07-12T20:57:55.095Z" }, + { url = "https://files.pythonhosted.org/packages/16/e0/55c4b1217a572a43e13b39e1eb78d0da29fb23679003bd0cdf22c50b1978/coverage-7.15.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1198bca9c0dd7c188aae1f185b0c0b5fc4f0a2b6909000858c29550320bdb07", size = 268465, upload-time = "2026-07-12T20:57:57.017Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/ee47944f76afc03909119b036fe9e0da8cbd274a5141287de79791a0fb6d/coverage-7.15.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d0297e6a070eadb49df7cddd0ab6f420b8b689dd8904c7dd815a323168fa57e", size = 269584, upload-time = "2026-07-12T20:57:58.958Z" }, + { url = "https://files.pythonhosted.org/packages/cb/8a/6b4d9779c7b2e21c3d12c3425e3261aa7411399319e27aa402dfec4db5d0/coverage-7.15.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:916fcf2214f56960e409561b37fc32a160a42b6e85483d0652d7b70fa55d707e", size = 263019, upload-time = "2026-07-12T20:58:00.979Z" }, + { url = "https://files.pythonhosted.org/packages/c4/1e/db5c7fa0c8ba5ece390a1e1a3f30db71d440240a80589df28e66a7503c40/coverage-7.15.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f837bae572c7869ffaa502e604c87e182543012831cf87aae4586ad090ac6dcf", size = 265916, upload-time = "2026-07-12T20:58:03.005Z" }, + { url = "https://files.pythonhosted.org/packages/83/53/fe5176682b00709b13fab36addd26883139d0dea430816fea412e69255e2/coverage-7.15.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3ea65e3ee6c7c32349fd00559927a9e577bdd72386087eeed1c42b62dfce9b82", size = 263520, upload-time = "2026-07-12T20:58:04.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e7/16f15127be93fbc70c667df5ec5dce934fc76c9b0888d84969a5d5341e2c/coverage-7.15.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:345034976f46a1c54bd17f4e43eb30bb92cb7082fcddff03250cff136cc4eb82", size = 267254, upload-time = "2026-07-12T20:58:06.824Z" }, + { url = "https://files.pythonhosted.org/packages/cd/73/e5119111f6f065376395a525f7ce6e9174d83f3db6d217ea0211a61cca4d/coverage-7.15.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4f051a64eb8f8addb4661c2b41d6eea5b7ebc68ad4b2baea8d9bc54e1956e5f7", size = 262366, upload-time = "2026-07-12T20:58:08.555Z" }, + { url = "https://files.pythonhosted.org/packages/d7/9c/6d0a81182df18a73b081e7a8630f0e2a52b12dfd7898c6ab839551a454d2/coverage-7.15.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a7625770f7720b49bb30d194ad2f8d50fab3c5177874af3d2399676f95f9c594", size = 264680, upload-time = "2026-07-12T20:58:10.359Z" }, + { url = "https://files.pythonhosted.org/packages/d9/a2/bac0cbd4450638f1be2041a464b1766c8cc94abf705a2df6f1c8d4be870d/coverage-7.15.1-cp314-cp314t-win32.whl", hash = "sha256:81e503d130a472ad1bd38199ecd35116b40d92bcd31e27a2cacde035381f2070", size = 224077, upload-time = "2026-07-12T20:58:12.065Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b2/d83c5403155172a43ba47c08641bad3f89822d8405102423a41339d2c857/coverage-7.15.1-cp314-cp314t-win_amd64.whl", hash = "sha256:724e878b213b302ad46e9f2fc872d386613f20ebfc492a211482d917ea76c14f", size = 224908, upload-time = "2026-07-12T20:58:13.956Z" }, + { url = "https://files.pythonhosted.org/packages/cc/41/442b74cad832cc77712080585455482e7cc4f4a9a13192f65731dcd18231/coverage-7.15.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ce2f05c14d077f406fefc4fa5e4f093ad0e0787549f6582535d6e28766f0361b", size = 224219, upload-time = "2026-07-12T20:58:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/34/98/07a67cf1a26e795d617ed5c540c042b0ac87b72f810c30c07f076cf334f3/coverage-7.15.1-py3-none-any.whl", hash = "sha256:717d01e6e00bed56ad13306f19e0dd2f4f645ee8159d2c72c72301d6cfc7090c", size = 213284, upload-time = "2026-07-12T20:58:18.079Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, + { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, + { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size = 3810026, upload-time = "2026-06-12T20:02:39.262Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, + { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size = 5289961, upload-time = "2026-06-12T20:01:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size = 4321719, upload-time = "2026-06-12T20:02:52.611Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, + { url = "https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size = 5246285, upload-time = "2026-06-12T20:01:32.439Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size = 3799153, upload-time = "2026-06-12T20:01:39.059Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/63/d3/4a83af35d65e3fad632c926fad684c193ea4398569ccb0bbbc7fe8f5dc9a/cryptography-49.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b", size = 3993685, upload-time = "2026-06-12T20:02:14.883Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a7/f9dac0ab7f80368c56993a7bf638ef9935f825c91902798481fac0898138/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83782480a4a9da4d0feb51950131ba32e12e70813848b3343f6e18c28a66838", size = 4676239, upload-time = "2026-06-12T20:02:28.793Z" }, + { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, + { url = "https://files.pythonhosted.org/packages/94/64/2923570ac1c0bd3a737aa366ac3abbbbde273042308b8cde95e2364a6e6a/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b47db11c2c3525083296069b98ac5221907455e989ae0c2e3008bde851921615", size = 4675885, upload-time = "2026-06-12T20:01:55.49Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size = 4715449, upload-time = "2026-06-12T20:02:05.469Z" }, + { url = "https://files.pythonhosted.org/packages/aa/50/a9caea39ad19c431c1a3f8a31114df65b260cdfe67786b6c7e7c040c4c44/cryptography-49.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be9fcb48a55f023493482827d4f459bd263cc20efde64f204b97c123201850c6", size = 3783731, upload-time = "2026-06-12T20:02:43.319Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/aa/12037145b7a56eaa5b29b41872f7a21b538e807e13f32c4d3c46e59be084/debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6", size = 1697577, upload-time = "2026-06-01T19:30:35.156Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/f3/6b1d4c71f4cbb5360009f928934a03b42906f28fc7b3f7f35f04e58acead/debugpy-1.8.21-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:8eeab7b5462f683452c57c0126aaa5ec4e974ddb705f39ba87dff8818c8e08f9", size = 2113873, upload-time = "2026-06-01T19:30:37.148Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f2/17c3bf91cebc173bfbf5734cd2669723d0a35c0cf9d2fd2124546efeae83/debugpy-1.8.21-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:0fddfdc130ac6d8bfc0415b0409822fa901c8f310e5c945ac5653a0352532344", size = 3004715, upload-time = "2026-06-01T19:30:38.888Z" }, + { url = "https://files.pythonhosted.org/packages/5a/22/1f8efd80c7b5909e760f9cfd0c9e8681d2d35d532f7c0a40760cd4da4a19/debugpy-1.8.21-cp310-cp310-win32.whl", hash = "sha256:72b5d676c4cbfac3bac5bb01c138a4656e843f93f03ce2a5f4e394ad49fbee73", size = 5303455, upload-time = "2026-06-01T19:30:40.52Z" }, + { url = "https://files.pythonhosted.org/packages/da/ce/54c79abd6cccef92fa7b43d97e3acafedf4d645557267ece05e948b5e4b8/debugpy-1.8.21-cp310-cp310-win_amd64.whl", hash = "sha256:a7fe47fd23da57b9e0bec3f4a8ee65a2dc55782455ed7f2141d75ab5d2eaeef5", size = 5331751, upload-time = "2026-06-01T19:30:42.146Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/cbf306d6e07a313a91e7171a98669054502840931432c227cfd505ee367f/debugpy-1.8.21-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:da456226c7b4c69e35dbe35dcee6623d912000a77816db7856a41af1c72a0264", size = 2203120, upload-time = "2026-06-01T19:30:43.964Z" }, + { url = "https://files.pythonhosted.org/packages/aa/57/aa739bd4ad2cbf96aeb1b20b56918ddd5ae4c28b68709bfcd327f02123ee/debugpy-1.8.21-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:f68b891688e61bdc08b8d364d919ff0051e0b94657b39dcd027bc3173edb7cdc", size = 3059958, upload-time = "2026-06-01T19:30:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/a8/31/453d2c9a23d133fe2c8ec7ca1d816ded52a913487fe3ffef7c01b4b706af/debugpy-1.8.21-cp311-cp311-win32.whl", hash = "sha256:f843a8b08c2edeaf9b1582eed4f25441af21a297c22ff16bf76a662557aa9c9e", size = 5236515, upload-time = "2026-06-01T19:30:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/60/94/6660de2f2d7bf388f229335ba4637646eebabdbf38564cb439a95a9193c9/debugpy-1.8.21-cp311-cp311-win_amd64.whl", hash = "sha256:84c564d8cc701d41843b29a92814c1f1bef6798724ca9d675c284ad9f6a547d7", size = 5256138, upload-time = "2026-06-01T19:30:49.113Z" }, + { url = "https://files.pythonhosted.org/packages/a2/df/bf625547431a9cadc9f4cbfeda38866e2b17f6aed147b625377e87834449/debugpy-1.8.21-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:9f96713896f39c3dff0ee841f47320c3f2983d33c341e009361bb0ebc79adc4e", size = 2483609, upload-time = "2026-06-01T19:30:50.794Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/59324b903599031ff9faaec1758292409f6561a0ec2492fe4b703327705a/debugpy-1.8.21-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:c193d474f0a211191f2b4449d2d06157c689013035bd952f3b617e0ef422b176", size = 3968900, upload-time = "2026-06-01T19:30:52.341Z" }, + { url = "https://files.pythonhosted.org/packages/14/cd/27f65b805d7fe005c44e1a36b9183ecdfbcdbf9d3e721a5115d461ecc7ee/debugpy-1.8.21-cp312-cp312-win32.whl", hash = "sha256:4743373c1cac7f9e74a1b9915bf1dbe0e900eca657ffb170ae07ac8363205ae9", size = 5336340, upload-time = "2026-06-01T19:30:54.047Z" }, + { url = "https://files.pythonhosted.org/packages/77/1d/c84e30c0c674184948b66f076ab271c01d940618a2824c23cd035a27bc20/debugpy-1.8.21-cp312-cp312-win_amd64.whl", hash = "sha256:bd7ba9dd3daa7c2f942c6ca8d4695a16bf9ac16b63615261c7982bc74f7ed20c", size = 5374751, upload-time = "2026-06-01T19:30:55.891Z" }, + { url = "https://files.pythonhosted.org/packages/77/6b/d817e1f8cc77aa055d37fba092e0febfdff40fe652d8d53d4cd7a86ad98d/debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88", size = 2477398, upload-time = "2026-06-01T19:30:57.644Z" }, + { url = "https://files.pythonhosted.org/packages/48/57/412421516afc3055fa577516f00beec3d663f9b0ab330639547ae6c57720/debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2", size = 3962096, upload-time = "2026-06-01T19:30:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2c616337cf6ba7b07ebbc97f02c6c945a8e2f76b365e33ee809c32ee36d1/debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1", size = 5336288, upload-time = "2026-06-01T19:31:00.79Z" }, + { url = "https://files.pythonhosted.org/packages/f8/99/9175103392f84c4b1bf7622888cdc68da07f0ff7d9e581266428f6776033/debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0", size = 5376567, upload-time = "2026-06-01T19:31:02.56Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3d/f4bbb323a548bfab2af3d6b4ffd9bf22636e55956a1285d317a1de643aad/debugpy-1.8.21-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9bb2a685287a2ac9b181cde89edcec64845cb51de7faaa75badb9a698bc24782", size = 2477209, upload-time = "2026-06-01T19:31:04.157Z" }, + { url = "https://files.pythonhosted.org/packages/8c/2d/6e7ec524984a1702777868de49a4c53202bddac2a432a76a093469587750/debugpy-1.8.21-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:3d6922439bf33fd38a3e2c447869ebc7b97da5cd3d329ff1ef9bc06c4903437e", size = 3927115, upload-time = "2026-06-01T19:31:05.863Z" }, + { url = "https://files.pythonhosted.org/packages/97/47/d1aa6d64005a98a9144647d99306b419396f9ad7bf1d73c119e17a81fb4d/debugpy-1.8.21-cp314-cp314-win32.whl", hash = "sha256:15d4963bd5ffa48f0da0947fd06757fa7621945048a14ad7705431566d3c0e7c", size = 5336724, upload-time = "2026-06-01T19:31:07.711Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/b905b90d163af11878c1af8abafa4a25206335e112e284e413454543a6da/debugpy-1.8.21-cp314-cp314-win_amd64.whl", hash = "sha256:fe0744a12353406de0ae8ccff0d0a4a666f00801a3db8fd04e7a5f761cd520e8", size = 5373803, upload-time = "2026-06-01T19:31:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92", size = 5352888, upload-time = "2026-06-01T19:31:25.186Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "fastapi" +version = "0.139.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/af/a5f50ccfa659ec1802cb4ca842c23f06d906a8cc9aef6016a2caeea3d4ed/fastapi-0.139.0.tar.gz", hash = "sha256:99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145", size = 423016, upload-time = "2026-07-01T16:35:33.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/7c/8e3c6ad324ea5cb36604fc3f968554887891c316d9dfde57761611d907ad/fastapi-0.139.0-py3-none-any.whl", hash = "sha256:cf15e1e9e667ddb0ad63811e60bd11390d1aac838ca4a7a23f421807b2308189", size = 130339, upload-time = "2026-07-01T16:35:32.19Z" }, +] + +[[package]] +name = "filelock" +version = "3.29.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/94/00f2059e4835eace3ae8fde680b932c496f8ec7bdc99168dfa53fb2e6b79/filelock-3.29.7.tar.gz", hash = "sha256:5b481979797ae69e72f0b389d89a80bdd585c260c5b3f1fb9c0a5ba9bb3f195d", size = 71521, upload-time = "2026-07-08T05:46:58.716Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl", hash = "sha256:987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51", size = 46036, upload-time = "2026-07-08T05:46:57.53Z" }, +] + +[[package]] +name = "freezegun" +version = "1.5.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/dd/23e2f4e357f8fd3bdff613c1fe4466d21bfb00a6177f238079b17f7b1c84/freezegun-1.5.5.tar.gz", hash = "sha256:ac7742a6cc6c25a2c35e9292dfd554b897b517d2dec26891a2e8debf205cb94a", size = 35914, upload-time = "2025-08-09T10:39:08.338Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/2e/b41d8a1a917d6581fc27a35d05561037b048e47df50f27f8ac9c7e27a710/freezegun-1.5.5-py3-none-any.whl", hash = "sha256:cd557f4a75cf074e84bc374249b9dd491eaeacd61376b9eb3c423282211619d2", size = 19266, upload-time = "2025-08-09T10:39:06.636Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, + { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, + { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, + { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, + { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, + { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "ipykernel" +version = "7.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio2" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/c4/e4a38f579de4225a561305666f7541cdabb30075def2aa1ac17bd73c1fb5/ipykernel-7.3.0.tar.gz", hash = "sha256:9acaaaf97d16355166e4085afe9d225bfbdf2b7ef520f9df3be8f2b248275e09", size = 184899, upload-time = "2026-06-10T08:41:25.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl", hash = "sha256:897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057", size = 120583, upload-time = "2026-06-10T08:41:23.648Z" }, +] + +[[package]] +name = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849, upload-time = "2026-03-27T10:02:07.846Z" }, +] + +[[package]] +name = "ipython" +version = "9.15.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz", hash = "sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size = 4442580, upload-time = "2026-06-26T11:03:35.913Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl", hash = "sha256:515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e", size = 630895, upload-time = "2026-06-26T11:03:33.809Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "isort" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/82/fa43935523efdfcce6abbae9da7f372b627b27142c3419fcf13bf5b0c397/isort-6.1.0.tar.gz", hash = "sha256:9b8f96a14cfee0677e78e941ff62f03769a06d412aabb9e2a90487b3b7e8d481", size = 824325, upload-time = "2025-10-01T16:26:45.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/cc/9b681a170efab4868a032631dea1e8446d8ec718a7f657b94d49d1a12643/isort-6.1.0-py3-none-any.whl", hash = "sha256:58d8927ecce74e5087aef019f778d4081a3b6c98f15a80ba35782ca8a2097784", size = 94329, upload-time = "2025-10-01T16:26:43.291Z" }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/dc/5512503b088997c2250b8bf18258fba9d9ce5ead641183700960d3c9d342/jupyter_client-8.9.1.tar.gz", hash = "sha256:a58f730dd9e728ba16ba1d62ebccf7ffe1ebbdbce4e95cfae941b7321ae1f4fa", size = 359256, upload-time = "2026-06-09T13:15:01.033Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl", hash = "sha256:0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81", size = 109828, upload-time = "2026-06-09T13:14:58.835Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + +[[package]] +name = "librt" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/2f/3908645ddddab7120b46295e541ead308109fa48dbec7d67d7a778870d60/librt-0.13.0.tar.gz", hash = "sha256:1d2a610c14ac0d0750ee0a3ab8548e83155258387891caaca04def4bf7289781", size = 211402, upload-time = "2026-07-08T12:26:29.834Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/2f/ec5241c38e7fa0fe6c26bfc450e78b9489a6c3c08b394b85d2c10e506975/librt-0.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:34e47058fcc69a313293d6dee94216a4f30c929ae6f2476e58c5ba635aa639d5", size = 148654, upload-time = "2026-07-08T12:24:30.622Z" }, + { url = "https://files.pythonhosted.org/packages/a5/1a/d651e18d3ee7aa2879322368c4f278bb7ecaa6b90caadfdec4ebfa8389f3/librt-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dbdd5b6509d0c2a8fe72cf494c299a61dbd58142a90a4190664ae159e4a7b547", size = 153537, upload-time = "2026-07-08T12:24:31.773Z" }, + { url = "https://files.pythonhosted.org/packages/45/18/10bff2122577246009d9619b6569596daf69b7648812f997ca9ca0426f60/librt-0.13.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e56ea4ee4df77585a6b5c138f6538680886024fa559f5b55bd14b12e98e67b2", size = 494336, upload-time = "2026-07-08T12:24:33.079Z" }, + { url = "https://files.pythonhosted.org/packages/67/69/87dfee871b852970f137fdeae8e2ca356c5ab38e6f21d2a3299535fc3159/librt-0.13.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:f1f9cc4d09a46d9cb3c2063ae100629d3f52a6517c3c08c2f4c9828261883929", size = 485393, upload-time = "2026-07-08T12:24:34.324Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d5/625447a8c0441ff5f15f4ac5e1d323fb9d4d256ebfde7a3c8e003f646057/librt-0.13.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f125f5d46b20f89dc5587a55cc416b4ba2a5b2ffda36d048ee120e17598a653a", size = 515382, upload-time = "2026-07-08T12:24:35.575Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d8/1c8c49ea04235960426444deece9092a6b3a9587a850a81bae2335317411/librt-0.13.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2608d3b39f9e0b4a66a130d9150c615cba40a5090d25eeeaa225e0e46de8c0ac", size = 509483, upload-time = "2026-07-08T12:24:36.923Z" }, + { url = "https://files.pythonhosted.org/packages/6f/65/f1760fc48050e215201a03506c32b7270159088d01f64557b53e39e74a45/librt-0.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9fd35e95ab5e45c3901d37110263c7db85a961110f5460588fe37f8c131f88a7", size = 532503, upload-time = "2026-07-08T12:24:38.203Z" }, + { url = "https://files.pythonhosted.org/packages/18/1b/793e281dcf494879eff99f642b63ebc9c7c58694a1c2d1e93362a22c7041/librt-0.13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5f31b0aa13c9b04370d4da6be1ab7779776b3a075cceb6747a39a4be85fe1e40", size = 537027, upload-time = "2026-07-08T12:24:39.34Z" }, + { url = "https://files.pythonhosted.org/packages/69/45/0801bbb40c9eea795d3dd3ce91c4c5f3fe7d42d23ec4be3e8cb283bcc754/librt-0.13.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0b795f5fc70fbbb787ceaf79bb3a0d627bcc33c53de51741755263ec406b775a", size = 517100, upload-time = "2026-07-08T12:24:40.907Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6c/eb5f514f8e29d4924bc0ff4601dd7b4175557e182e7c0721e84cffa39b8a/librt-0.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36b306a623aaad96fe4b378692b54f9c0789fccd833b9851753d5fbf6138cfde", size = 558653, upload-time = "2026-07-08T12:24:42.359Z" }, + { url = "https://files.pythonhosted.org/packages/b4/bf/f140100d1b59fe87ff40b5ecbb4e27924335b189a784e230ee465452f6c2/librt-0.13.0-cp310-cp310-win32.whl", hash = "sha256:a3762e75fcac8c9e4dacaaf438bffd9003e2ca2c531b756f3c0035deefa674c8", size = 104402, upload-time = "2026-07-08T12:24:43.668Z" }, + { url = "https://files.pythonhosted.org/packages/22/7c/57e40fef7cfb61869341cb28bdcefe8a950bebcbecca74a397bae14dce4a/librt-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:d63bae12a8aeb51380be3438e4dc4bd27354d0f8e19166b2f44e3e94d6f552dc", size = 125002, upload-time = "2026-07-08T12:24:44.793Z" }, + { url = "https://files.pythonhosted.org/packages/89/25/a6498964cfeec270c468cffdc118f69c29b412593610d55fa1327ca51ff4/librt-0.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b5a7bbff495baedbd9b916c367d66854008f8f3b575908ded477c499dc60082", size = 148029, upload-time = "2026-07-08T12:24:45.961Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/dc86d1bffd8e0c2818bace29d9f7783cfbb8e0673bf3673b5bbd5bbe0420/librt-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34bc7938b9fdf14fe32a406c19c71faf894c5cee7e7474bd0be2f17200b82d14", size = 153036, upload-time = "2026-07-08T12:24:47.257Z" }, + { url = "https://files.pythonhosted.org/packages/29/3f/b923826660f02f286186cd9303d52bb05ced0a13708edc104dc8480920e3/librt-0.13.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f40e56b61b41be5f7dec938cfeffd660668cf4b5e72c78e7bd671d66b7bc2c79", size = 493062, upload-time = "2026-07-08T12:24:48.483Z" }, + { url = "https://files.pythonhosted.org/packages/88/87/6c0980a9c9b1302cb68d108906697b89eceb55889bb1dcf77c109aa56ca5/librt-0.13.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:9c5d02b89de5acd0379a51ec44a89476fb03df6145442e1c8ecd6bee2f91b176", size = 485510, upload-time = "2026-07-08T12:24:49.727Z" }, + { url = "https://files.pythonhosted.org/packages/32/81/795ae3b9df5dd94079fb807e38191855e023e8c6249014ae6bc3f0d9a490/librt-0.13.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7db9a3ff32ef5f7d1703d93831a3316cdf0b537de6a1cc03cc8fdd09b9194e89", size = 515909, upload-time = "2026-07-08T12:24:51.135Z" }, + { url = "https://files.pythonhosted.org/packages/20/e5/182de15abce8907108a6fdb41487de65beb5099b74dc5841b19b099168db/librt-0.13.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3dbb2a31882456cadc7053378e81ad7ed7693db4ac9f98ab5f81ef034aa8ec9f", size = 508620, upload-time = "2026-07-08T12:24:52.358Z" }, + { url = "https://files.pythonhosted.org/packages/32/03/33978d32db76e1f66377e8f78e42a2ca3c162143331677d1f50bbad36cfb/librt-0.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c6014e3c80f9c1fe268ef8b0e0ef113bac672cc032f2f93866e7ddad4f3e663d", size = 530363, upload-time = "2026-07-08T12:24:53.503Z" }, + { url = "https://files.pythonhosted.org/packages/e6/f5/b291fbd2d00f7d8287bcbf67b5aa0c6afed4bc26cef23e079629c47a2c04/librt-0.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:091b60a4d2174fc1ec5c34cdc0b72efb6224753d76b7da61ebeab7a191aec8bd", size = 534209, upload-time = "2026-07-08T12:24:55.138Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/6f41f17939d191bc21609f220da8509316bc62797f078545fe83be522e78/librt-0.13.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:66cb1138f384a191a6d75f986064841fcfdc0cea98f7bd9c9ab9b38049917588", size = 514254, upload-time = "2026-07-08T12:24:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/af/c2/2e4befa5410a7443019c14abccc94ff619797171f6b72013635fb87f31d7/librt-0.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:17221a7569f8f292aa0014226e48aa25b8c2b08da18088cd230953d0ea0f9cd1", size = 557611, upload-time = "2026-07-08T12:24:57.561Z" }, + { url = "https://files.pythonhosted.org/packages/ab/54/8b69f81448417adbc040a2185f4e2eece1e1994b7dcfaeed4662b30f98a5/librt-0.13.0-cp311-cp311-win32.whl", hash = "sha256:fc67741da44c6eaa90e01eafb586bbba9b51eb5b6ed381ee6f5ae72eb3316d21", size = 104906, upload-time = "2026-07-08T12:24:58.806Z" }, + { url = "https://files.pythonhosted.org/packages/76/5a/f4aaf37b50f2fde12c8c663b83fdd499cdc24f957f19543d7414bfcc9e25/librt-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:cc99dfb62b23c9207c33d0be8a2e2af7a42e21e6ea388b380a0c948c7b88953b", size = 125852, upload-time = "2026-07-08T12:25:00.065Z" }, + { url = "https://files.pythonhosted.org/packages/f2/99/bf1820e6feeabc2f218c24450ec0c995d6a91e8ba0fd3caf042c9e8adb2a/librt-0.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:40ccd13c252d3fe473ffc8a57be7565abc8b64cf1b108344c859d5164f7f3e0c", size = 111832, upload-time = "2026-07-08T12:25:01.148Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/b2933ddae222dac338476abb872641169a5cfed2c2bb5444a5b07b32b0c3/librt-0.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30536798f4504c0fad0885b1d371b0539abb081e4570c9d7c641cb51141b49f0", size = 150990, upload-time = "2026-07-08T12:25:02.42Z" }, + { url = "https://files.pythonhosted.org/packages/90/ef/db98f744ca50e6efc9c95c70ee49b77aefac31f6a3fc7c83754a42d6a74f/librt-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93d24ebb82aa4420b1409c389e7857bc35bd0b668007ac8172427d5c73cc8cc5", size = 155238, upload-time = "2026-07-08T12:25:03.681Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/a197e7bc72baf2c61ce7fdc6906a5054dc05bd8da0819aa894e4857bf87e/librt-0.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cb8a1adce42d8b75485a5d56a9623a50bcab995b6079f1dac59fc44034dd93d9", size = 503073, upload-time = "2026-07-08T12:25:05.049Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e7/7887712e27da7c1ab80fcabb1de6eb24243964f6557cae530d4b70706dbd/librt-0.13.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:0763ca2ab66058174f9dee426dc64f5e0a89c24a7df8d3fe3f1836c04e25de4b", size = 496528, upload-time = "2026-07-08T12:25:06.26Z" }, + { url = "https://files.pythonhosted.org/packages/94/f0/f2283385bb6b950b26a1410f4ce51ec27231e0b3a4b925c46366d218b198/librt-0.13.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b222493da6e7b6199db9bd79502436cf5a27da3c1f7fa83c7e285444fc93fd03", size = 531786, upload-time = "2026-07-08T12:25:07.658Z" }, + { url = "https://files.pythonhosted.org/packages/36/11/69ac3b54766ffba5fd7e5acebfb048d66dbe1f9f2d14516c2b3edc59cf87/librt-0.13.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fadc63331f4388c3dc90090448f682a7e9feafc11481391c1e94f2f907a3976e", size = 524393, upload-time = "2026-07-08T12:25:09.121Z" }, + { url = "https://files.pythonhosted.org/packages/61/5f/d72f95fd444a926a3c14b4e24979474116988dd57a45be242077c45d3c22/librt-0.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:70d9c62a4cffd9f23396cd5ef93fc5d11b31596b9b7d6306074abe3d5fcf09bd", size = 543026, upload-time = "2026-07-08T12:25:10.459Z" }, + { url = "https://files.pythonhosted.org/packages/c4/08/dcd9993ad192737a004ba263d549f8ea605b326b952e7d6205c7d4170b76/librt-0.13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66c0e7e6b02a155576df2c77ec933a70b72da726e248c494abf690923e624348", size = 546829, upload-time = "2026-07-08T12:25:11.716Z" }, + { url = "https://files.pythonhosted.org/packages/96/d5/6d9bb2f54e4109a956b7128836529653eb9d740f784bc47ed10a02c1000e/librt-0.13.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ac04bcd3328eb91d99dfedf6a60d9c1f15d3434e6f6daf922f0420f7d90b85c7", size = 535700, upload-time = "2026-07-08T12:25:13.144Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f2/10946922503858a359492fa27f13e86228bde702116a740ac7b3cd185f24/librt-0.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db327e7271e653c32040b85ae6188059c924b57d7e1e29f935523fa017cd4e82", size = 573566, upload-time = "2026-07-08T12:25:14.336Z" }, + { url = "https://files.pythonhosted.org/packages/48/a8/94f00e3c99479a18088af3685ea016c42f3c7d5d1964d8dbb40c08d7f1aa/librt-0.13.0-cp312-cp312-win32.whl", hash = "sha256:860bd1d8ba48456ce08feaf8d343a8aaeb2fa086f2bcaa2a923fa3f7a3ff9aa3", size = 106099, upload-time = "2026-07-08T12:25:16.159Z" }, + { url = "https://files.pythonhosted.org/packages/c9/7b/2da9c74c1ed25a89cc4e1c8e007ea2eb4a0f1fafa3e70d757fe3242c5c5c/librt-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:e54a315caf843c8d77e388cadc56ea9ded569935ee2d2347d7ea94992e5aa6fa", size = 126934, upload-time = "2026-07-08T12:25:17.275Z" }, + { url = "https://files.pythonhosted.org/packages/d0/65/aead61bbf3b5358593f9d4779d2a0e88eaf6ec191a6342dde36dd1df6371/librt-0.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:c718e99a0992127af84385378460db624103b559ab260435abcfe77a4e4ed1c1", size = 112236, upload-time = "2026-07-08T12:25:18.425Z" }, + { url = "https://files.pythonhosted.org/packages/67/3b/18e7b63255297a2bdc9c25c8d6d4ca8eca9f63aceb1252c0f7427ac7099e/librt-0.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a468951af16155824e88bdd8326ebe5bdb371f3ec0ac04642994b98201d914f3", size = 151027, upload-time = "2026-07-08T12:25:19.638Z" }, + { url = "https://files.pythonhosted.org/packages/4d/68/e2248452c00d1a03b45fee1752cdc8f790a476efd2402b75181da88a9e61/librt-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ae01d8512cc17079e53425635327dbf3f7ff57a42c00dec348bf79791c56444c", size = 155152, upload-time = "2026-07-08T12:25:20.851Z" }, + { url = "https://files.pythonhosted.org/packages/0e/16/52b1c99bf19057a062aac39c900cbb81499f6f75d6c537c14463d247ba78/librt-0.13.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32c26893cd085c1efe83219e78d866da23fb20a066101b8f68210004361d224c", size = 502499, upload-time = "2026-07-08T12:25:22.055Z" }, + { url = "https://files.pythonhosted.org/packages/9f/54/b811151805c795f55e0dedee6ec687b75f9982a8105d240ea3910737a77b/librt-0.13.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5929da1981a46bcf4b28b1b9499905f0ff58e2419da402a048234e9783acbc4b", size = 496108, upload-time = "2026-07-08T12:25:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/8f/f8/094d6b2bd93f3fdaa54db54cc788c4a365333bddad65ab02e04da0b1d004/librt-0.13.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b85d664d777bab6c0d709416cb42938251fda9e221b79e3a2215d85df5f4f9", size = 531576, upload-time = "2026-07-08T12:25:24.648Z" }, + { url = "https://files.pythonhosted.org/packages/2e/40/541733d5755824f968f7ec39d78ffbd75d145964157ae5e69a09ec6d7326/librt-0.13.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:531b2df3e9fe96b1fcf73a6d165921e4656be5f58d631d384ebce344298368db", size = 524390, upload-time = "2026-07-08T12:25:25.898Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b5/255673cfdbf5ba663339d36cd863c897289ab4337577e19f9405ce059f36/librt-0.13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:109b84a9edf69ad89dc1f66358659e14a031baca95e3e5b0060bd903ede8efd6", size = 543053, upload-time = "2026-07-08T12:25:27.436Z" }, + { url = "https://files.pythonhosted.org/packages/9e/11/ab5005e9c9850710f21e354201bf090646349d3fabf5f951eaf70235729e/librt-0.13.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1304368a3e7ffc3e9db986796cc5326fdb5943a3567ecc137cff318e4240c0e7", size = 546387, upload-time = "2026-07-08T12:25:28.65Z" }, + { url = "https://files.pythonhosted.org/packages/a2/04/a5d7ce1d1df1afd15ca283dcdf7530ac073e12d69ae8c40879dda96f7868/librt-0.13.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e4f9b472e7d308d94b62c801982065661158c6ed02790d6c7ddb4337cea0f9c1", size = 535970, upload-time = "2026-07-08T12:25:30.171Z" }, + { url = "https://files.pythonhosted.org/packages/5a/76/927e267a6daa290174ac281b23c9804c8829b042ade9c6f24a065f540958/librt-0.13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f836c37478f167a81200d8c8b2c920a22224564bed2c23d7aeec760965c367a", size = 573582, upload-time = "2026-07-08T12:25:31.507Z" }, + { url = "https://files.pythonhosted.org/packages/10/24/b6c5213efe39c19f9e13605644d0cf063b4ddaa33ac2e45b088e23a70e2e/librt-0.13.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:4000d961ff9598ac6ea603c6c836a5ed49bc205ade5fc378b998dfe1e2c36628", size = 82189, upload-time = "2026-07-08T12:25:32.675Z" }, + { url = "https://files.pythonhosted.org/packages/4c/00/d29736be177a906ac0b84a5b04b4fbfa22c776dc2f366de4172b0f968c08/librt-0.13.0-cp313-cp313-win32.whl", hash = "sha256:79e44cff71750d299d61a678e49995b0d5935a9cda238c2574daeca3ba536927", size = 106193, upload-time = "2026-07-08T12:25:33.692Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ac/aff6fb45393cb8912f39dfb156ef6b2d1cadb207ff465fc8f66141054be8/librt-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:54dab44a847d5ad1acd05c8a83fe518ae685516ecf4d3f7cc6e3df2a66767650", size = 126962, upload-time = "2026-07-08T12:25:34.769Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3a/d68cb2b334d53fd30fac81d3a489ce4ba0d9506f4df43fcf676b68352b19/librt-0.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:d4cb6fbfdf874340ab5e51450753c0f817b6958a3621125ee695bbc3de866566", size = 112127, upload-time = "2026-07-08T12:25:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/7b/66/f49ae0d592bd45b6941e9a8bafcb6a87cddcd501ee7874707e767f01b585/librt-0.13.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:25218d94b1d2cbc0ba1d8a3f9dc9af578d9646e5ed16443a70cde1dfdcce6d71", size = 149818, upload-time = "2026-07-08T12:25:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/3d/50/51c76d74014d04fb95b6506d286808984b78a2f7a41039094e6b2194ac48/librt-0.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f26629539d4893c2957a16c41bb058e1e135c1f150f6a2e25ed047f64cf3f5c6", size = 154071, upload-time = "2026-07-08T12:25:39.399Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fe/f19b0f5f82d5a1f2da736586bc840abd00ce07d6388136ae80b7333883fc/librt-0.13.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4517d47b2b8af26975a406fba7d314de9696d864252e0257c6ea90238cfe27f", size = 494168, upload-time = "2026-07-08T12:25:40.641Z" }, + { url = "https://files.pythonhosted.org/packages/94/bc/b8550c75775127fd31a5f20e8775997f7b527ad661fc8ddccd7497c064f7/librt-0.13.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:f19e181de5b3a1148bb3420b8c4b0b0ea0fce6950099724ad151d6cea5acc180", size = 491054, upload-time = "2026-07-08T12:25:41.905Z" }, + { url = "https://files.pythonhosted.org/packages/30/14/4d0204867623df3f33f86efd3d3692ba5e01321443f4d6eab35a22697618/librt-0.13.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22034924f5b42d5a56371cf271771bfeaabf235a7a8b6264bef2d20013f786c6", size = 523006, upload-time = "2026-07-08T12:25:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/19/0a/c45fc9a260934696bace1ac5df1e148ac92bd71767aee3bf7cd7a4534f4c/librt-0.13.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7897db4e95e22468bdda33d8e012ceacd0182abf001e6389d763f0def6286b9", size = 515058, upload-time = "2026-07-08T12:25:44.541Z" }, + { url = "https://files.pythonhosted.org/packages/13/0a/50c5ce45b326854ef8fa6ae4c36cf5142e5c55315eaf9e51d0ae73ac4da3/librt-0.13.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1ce61b3746545029d4f5c17d6bd74b676254ad98433086c846ffb5e8fa73f007", size = 534025, upload-time = "2026-07-08T12:25:45.825Z" }, + { url = "https://files.pythonhosted.org/packages/89/2d/08c413c8f93fc13b8103624fce38e5caa86cd08cbbc8465870ab287af54b/librt-0.13.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:46c330e82565962c761dbce7941be2cff7db674ee807455a8d0cadc5f9b759b0", size = 540557, upload-time = "2026-07-08T12:25:47.059Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/93af71fb4a364952210051811dd4e40174e79656b050c89cacac18af3330/librt-0.13.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:375f5af8f99cbaa99dd293af986e3d57caabc9ba81a5d3f021603764854197a1", size = 523201, upload-time = "2026-07-08T12:25:48.392Z" }, + { url = "https://files.pythonhosted.org/packages/c1/6e/9766f07b676a4889d9f8bc2864e9ba5fff165653143ef4dda7df6aa34d16/librt-0.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9320d34c3376ae204b2cd176e8d4883a013934e0aef822f1aed9c536490c275d", size = 565740, upload-time = "2026-07-08T12:25:49.678Z" }, + { url = "https://files.pythonhosted.org/packages/a2/1e/664e3472ce2b6e10e9b83f29d4a36eb982ff6b5a169ae7567bba3a4c4ff5/librt-0.13.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:9af313c66157a69dc69ea0059a66961692250e0dc95af9c385a48ffb770a0d16", size = 81611, upload-time = "2026-07-08T12:25:50.857Z" }, + { url = "https://files.pythonhosted.org/packages/2f/d4/8582a4d65e2234673685e07309d02c230b28a85724eb0acbf13f019b7f6e/librt-0.13.0-cp314-cp314-win32.whl", hash = "sha256:f2a7253458e34f33543551394ae4fe104b497ec2a65ac266074de64c1df82e37", size = 100106, upload-time = "2026-07-08T12:25:52.03Z" }, + { url = "https://files.pythonhosted.org/packages/63/ce/0cb99efe6086b46cd985dc26672166fae312a239690e75871f7fafbd3fc5/librt-0.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:a3dfe4edf10e8ed7e55b026a8bfc2c2a8704218b659cd4bffdf604fab966dc39", size = 121209, upload-time = "2026-07-08T12:25:53.166Z" }, + { url = "https://files.pythonhosted.org/packages/26/85/4f3ccb083a3c9b0d42e223acdb3c3f507953324a59cdcab4826e8e2e3b89/librt-0.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:68a5faee4bba381cb93b5961f684a514cf0053cb92308ff9c792c2fea0b174c6", size = 106404, upload-time = "2026-07-08T12:25:54.253Z" }, + { url = "https://files.pythonhosted.org/packages/b2/77/333191499538c8e8189de7a4cba8e6f49ee949fd6d6e6324b21fd1522466/librt-0.13.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a38fb81d8376dfa2f8963b265fec07637802b0d01e2a127c19c66cb070fb24f5", size = 159231, upload-time = "2026-07-08T12:25:55.432Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9e/2aa83758f22c278b837a1d8025898434ce2b8bff36678d5330ecaef56dff/librt-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d4c8d9bd5abce34b2e75edb3bf37ab0f34e49b1f915a40ae8468eb7c85bc5b46", size = 161300, upload-time = "2026-07-08T12:25:56.585Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c0/86791e936553ca763d6b3c2fb4d31d596cd00e14fa631c283a40ba01559a/librt-0.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:387e2f1d27e89bffe0d3f520f0da0662c973fd607ca16c1808f8a5085419485e", size = 582056, upload-time = "2026-07-08T12:25:58.144Z" }, + { url = "https://files.pythonhosted.org/packages/a8/d3/a9ec15984a185e000c4d2a16ba28bd623124ad4c38a10974c7ff78e3a893/librt-0.13.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:4f6db193d2e5e0ed60359b9a5a682cd67205d0d3b1e459a867dd4b5c4e7eaa7a", size = 562758, upload-time = "2026-07-08T12:25:59.544Z" }, + { url = "https://files.pythonhosted.org/packages/3c/af/dbe36b78b19c06a55097f99305e4ea9458e2273e6ae16a3cbecaad7ee978/librt-0.13.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d38604854e8d22faadf683ec6c02bb0f886e2ba56ef981a1c36ee275f21ea22", size = 602095, upload-time = "2026-07-08T12:26:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/2a/a8/2966891b4dd2830f5203fbee92ac2c4947653a2390ba73dfa44244fad025/librt-0.13.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:371f7ce73026815dafd51c50ce38416e91428b28c4b2ec97cd39271164b0045c", size = 593452, upload-time = "2026-07-08T12:26:02.352Z" }, + { url = "https://files.pythonhosted.org/packages/61/f5/4df8bfc8405ecf8c0d525b4d69636f694bdd8620b313ec8b76e54a5926cc/librt-0.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3aaedf52171bee90860704c560bc798fe83b76247df47568e0197e9b13c735a0", size = 623729, upload-time = "2026-07-08T12:26:04.294Z" }, + { url = "https://files.pythonhosted.org/packages/d6/13/9ac202dffc8db06f75d06c08c2f9f6ff054be67d21272dcc078fa1cc0c57/librt-0.13.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:96bad8725a4f196a798366c25ce075d1f7543a4ec045ffc13e6a7ec095cdab04", size = 617077, upload-time = "2026-07-08T12:26:05.845Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f0/ebe38610716aee5cb28efd95089bb90192096179802779381e1c5dcf239c/librt-0.13.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:6bf6a559ffe4a93bbea6cf31ddf01a7fd9ba342ef51f27beb178e318b74acd61", size = 599561, upload-time = "2026-07-08T12:26:07.21Z" }, + { url = "https://files.pythonhosted.org/packages/4f/5c/c2e72e236fff7abc716d5b1753b8b8cd3ea85ac46fe17d2e7c51d4e1c723/librt-0.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:301067672387902c55f94b51d5022304b36c966ea9fe1f21caab99a9bef487c9", size = 645511, upload-time = "2026-07-08T12:26:08.562Z" }, + { url = "https://files.pythonhosted.org/packages/0c/99/6203ce619dee940d6bfbe099ec3fe4be00a68e9d60f70abf906cf124fe66/librt-0.13.0-cp314-cp314t-win32.whl", hash = "sha256:5fdcf34f86de8fb66d7dc7589f96ba91c4aa46671200d400e6fd6f109a483f18", size = 104357, upload-time = "2026-07-08T12:26:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/52/dd/843b6314087c41657c7036d7914d8f294bdf9b580aa8513ea0588c8e9a3d/librt-0.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:260c33e92263fa629b4f6d3c51967a1c2158fe6c33237aaa3ebeac586b085259", size = 126998, upload-time = "2026-07-08T12:26:10.975Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5d/3dcec2884ba1b0806d1408612555c38dd5d68e90156b59f75f6e36435c3a/librt-0.13.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2f281549a4c52ac7bb97997f14353f8bd0e53a34ca0dad1c905cfd0b4a58ae99", size = 110771, upload-time = "2026-07-08T12:26:12.303Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", size = 9658, upload-time = "2022-01-24T01:14:51.113Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350, upload-time = "2022-01-24T01:14:49.62Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, + { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7f/0e3b1390ae772f27501199996b94b52ceeb64fe6f9120a32c6c3f6b781be/multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991", size = 242561, upload-time = "2026-01-26T02:43:04.733Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f4/8719f4f167586af317b69dd3e90f913416c91ca610cac79a45c53f590312/multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03", size = 242223, upload-time = "2026-01-26T02:43:06.695Z" }, + { url = "https://files.pythonhosted.org/packages/47/ab/7c36164cce64a6ad19c6d9a85377b7178ecf3b89f8fd589c73381a5eedfd/multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981", size = 222322, upload-time = "2026-01-26T02:43:08.472Z" }, + { url = "https://files.pythonhosted.org/packages/f5/79/a25add6fb38035b5337bc5734f296d9afc99163403bbcf56d4170f97eb62/multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6", size = 254005, upload-time = "2026-01-26T02:43:10.127Z" }, + { url = "https://files.pythonhosted.org/packages/4a/7b/64a87cf98e12f756fc8bd444b001232ffff2be37288f018ad0d3f0aae931/multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190", size = 251173, upload-time = "2026-01-26T02:43:11.731Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ac/b605473de2bb404e742f2cc3583d12aedb2352a70e49ae8fce455b50c5aa/multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92", size = 243273, upload-time = "2026-01-26T02:43:13.063Z" }, + { url = "https://files.pythonhosted.org/packages/03/65/11492d6a0e259783720f3bc1d9ea55579a76f1407e31ed44045c99542004/multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee", size = 238956, upload-time = "2026-01-26T02:43:14.843Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a7/7ee591302af64e7c196fb63fe856c788993c1372df765102bd0448e7e165/multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2", size = 233477, upload-time = "2026-01-26T02:43:16.025Z" }, + { url = "https://files.pythonhosted.org/packages/9c/99/c109962d58756c35fd9992fed7f2355303846ea2ff054bb5f5e9d6b888de/multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568", size = 243615, upload-time = "2026-01-26T02:43:17.84Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5f/1973e7c771c86e93dcfe1c9cc55a5481b610f6614acfc28c0d326fe6bfad/multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40", size = 249930, upload-time = "2026-01-26T02:43:19.06Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a5/f170fc2268c3243853580203378cd522446b2df632061e0a5409817854c7/multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962", size = 243807, upload-time = "2026-01-26T02:43:20.286Z" }, + { url = "https://files.pythonhosted.org/packages/de/01/73856fab6d125e5bc652c3986b90e8699a95e84b48d72f39ade6c0e74a8c/multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505", size = 239103, upload-time = "2026-01-26T02:43:21.508Z" }, + { url = "https://files.pythonhosted.org/packages/e7/46/f1220bd9944d8aa40d8ccff100eeeee19b505b857b6f603d6078cb5315b0/multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122", size = 41416, upload-time = "2026-01-26T02:43:22.703Z" }, + { url = "https://files.pythonhosted.org/packages/68/00/9b38e272a770303692fc406c36e1a4c740f401522d5787691eb38a8925a8/multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df", size = 46022, upload-time = "2026-01-26T02:43:23.77Z" }, + { url = "https://files.pythonhosted.org/packages/64/65/d8d42490c02ee07b6bbe00f7190d70bb4738b3cce7629aaf9f213ef730dd/multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db", size = 43238, upload-time = "2026-01-26T02:43:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, + { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, + { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "mypy" +version = "1.20.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/af/e3d4b3e9ec91a0ff9aabfdb38692952acf49bbb899c2e4c29acb3a6da3ae/mypy-1.20.2.tar.gz", hash = "sha256:e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665", size = 3817349, upload-time = "2026-04-21T17:12:28.473Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/97/ce2502df2cecf2ef997b6c6527c4a223b92feb9e7b790cdc8dcd683f3a8a/mypy-1.20.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cf5a4db6dca263010e2c7bff081c89383c72d187ba2cf4c44759aac970e2f0c4", size = 14457059, upload-time = "2026-04-21T17:06:14.935Z" }, + { url = "https://files.pythonhosted.org/packages/c9/34/417ee60b822cc80c0f3dc9f495ad7fd8dbb8d8b2cf4baf22d4046d25d01d/mypy-1.20.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b0e817b518bff7facd7f85ea05b643ad8bdcce684cf29784987b0a7c8e1f997", size = 13346816, upload-time = "2026-04-21T17:10:41.433Z" }, + { url = "https://files.pythonhosted.org/packages/4a/85/e20951978702df58379d0bcc2e8f7ccdca4e78cd7dc66dd3ddbf9b29d517/mypy-1.20.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97d7b9a485b40f8ca425460e89bf1da2814625b2da627c0dcc6aa46c92631d14", size = 13772593, upload-time = "2026-04-21T17:08:11.24Z" }, + { url = "https://files.pythonhosted.org/packages/63/a5/5441a13259ec516c56fd5de0fd96a69a9590ae6c5e5d3e5174aa84b97973/mypy-1.20.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e1c12f6d2db3d78b909b5f77513c11eb7f2dd2782b96a3ab6dffc7d44575c99", size = 14656635, upload-time = "2026-04-21T17:09:54.042Z" }, + { url = "https://files.pythonhosted.org/packages/3b/51/b89c69157c5e1f19fd125a65d991166a26906e7902f026f00feebbcfa2b9/mypy-1.20.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:89dce27e142d25ffbc154c1819383b69f2e9234dc4ed4766f42e0e8cb264ab5c", size = 14943278, upload-time = "2026-04-21T17:09:15.599Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/6b0eeecfe96d7cce1d71c66b8e03cb304aa70ec11f1955dc1d6b46aca3c3/mypy-1.20.2-cp310-cp310-win_amd64.whl", hash = "sha256:f376e37f9bf2a946872fc5fd1199c99310748e3c26c7a26683f13f8bdb756cbd", size = 10851915, upload-time = "2026-04-21T17:06:03.5Z" }, + { url = "https://files.pythonhosted.org/packages/3c/36/6593dc88545d75fb96416184be5392da5e2a8e8c2802a8597913e16ae25c/mypy-1.20.2-cp310-cp310-win_arm64.whl", hash = "sha256:6e2b469efd811707bc530fd1effef0f5d6eebcb7fe376affae69025da4b979a2", size = 9786676, upload-time = "2026-04-21T17:07:02.035Z" }, + { url = "https://files.pythonhosted.org/packages/1f/4d/9ebeae211caccbdaddde7ed5e31dfcf57faac66be9b11deb1dc6526c8078/mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c", size = 14371307, upload-time = "2026-04-21T17:08:56.442Z" }, + { url = "https://files.pythonhosted.org/packages/95/d7/93473d34b61f04fac1aecc01368485c89c5c4af7a4b9a0cab5d77d04b63f/mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3", size = 13258917, upload-time = "2026-04-21T17:05:50.978Z" }, + { url = "https://files.pythonhosted.org/packages/e2/30/3dd903e8bafb7b5f7bf87fcd58f8382086dea2aa19f0a7b357f21f63071b/mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254", size = 13700516, upload-time = "2026-04-21T17:11:33.161Z" }, + { url = "https://files.pythonhosted.org/packages/07/05/c61a140aba4c729ac7bc99ae26fc627c78a6e08f5b9dd319244ea71a3d7e/mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98", size = 14562889, upload-time = "2026-04-21T17:05:27.674Z" }, + { url = "https://files.pythonhosted.org/packages/fd/87/da78243742ffa8a36d98c3010f0d829f93d5da4e6786f1a1a6f2ad616502/mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac", size = 14803844, upload-time = "2026-04-21T17:10:06.2Z" }, + { url = "https://files.pythonhosted.org/packages/37/52/10a1ddf91b40f843943a3c6db51e2df59c9e237f29d355e95eaab427461f/mypy-1.20.2-cp311-cp311-win_amd64.whl", hash = "sha256:baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67", size = 10846300, upload-time = "2026-04-21T17:12:23.886Z" }, + { url = "https://files.pythonhosted.org/packages/20/02/f9a4415b664c53bd34d6709be59da303abcae986dc4ac847b402edb6fa1e/mypy-1.20.2-cp311-cp311-win_arm64.whl", hash = "sha256:20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100", size = 9779498, upload-time = "2026-04-21T17:09:23.695Z" }, + { url = "https://files.pythonhosted.org/packages/71/4e/7560e4528db9e9b147e4c0f22660466bf30a0a1fe3d63d1b9d3b0fd354ee/mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b", size = 14539393, upload-time = "2026-04-21T17:07:12.52Z" }, + { url = "https://files.pythonhosted.org/packages/32/d9/34a5efed8124f5a9234f55ac6a4ced4201e2c5b81e1109c49ad23190ec8c/mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4", size = 13361642, upload-time = "2026-04-21T17:06:53.742Z" }, + { url = "https://files.pythonhosted.org/packages/d1/14/eb377acf78c03c92d566a1510cda8137348215b5335085ef662ab82ecd3a/mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6", size = 13740347, upload-time = "2026-04-21T17:12:04.73Z" }, + { url = "https://files.pythonhosted.org/packages/b9/94/7e4634a32b641aa1c112422eed1bbece61ee16205f674190e8b536f884de/mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066", size = 14734042, upload-time = "2026-04-21T17:07:43.16Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f3/f7e62395cb7f434541b4491a01149a4439e28ace4c0c632bbf5431e92d1f/mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102", size = 14964958, upload-time = "2026-04-21T17:11:00.665Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0d/47e3c3a0ec2a876e35aeac365df3cac7776c36bbd4ed18cc521e1b9d255b/mypy-1.20.2-cp312-cp312-win_amd64.whl", hash = "sha256:d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9", size = 10911340, upload-time = "2026-04-21T17:10:49.179Z" }, + { url = "https://files.pythonhosted.org/packages/d6/b2/6c852d72e0ea8b01f49da817fb52539993cde327e7d010e0103dc12d0dac/mypy-1.20.2-cp312-cp312-win_arm64.whl", hash = "sha256:785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58", size = 9833947, upload-time = "2026-04-21T17:09:05.267Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c4/b93812d3a192c9bcf5df405bd2f30277cd0e48106a14d1023c7f6ed6e39b/mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026", size = 14524670, upload-time = "2026-04-21T17:10:30.737Z" }, + { url = "https://files.pythonhosted.org/packages/f3/47/42c122501bff18eaf1e8f457f5c017933452d8acdc52918a9f59f6812955/mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943", size = 13336218, upload-time = "2026-04-21T17:08:44.069Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/75bbc92f41725fbd585fb17b440b1119b576105df1013622983e18640a93/mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517", size = 13724906, upload-time = "2026-04-21T17:08:01.02Z" }, + { url = "https://files.pythonhosted.org/packages/a1/32/4c49da27a606167391ff0c39aa955707a00edc500572e562f7c36c08a71f/mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15", size = 14726046, upload-time = "2026-04-21T17:11:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/7f/fc/4e354a1bd70216359deb0c9c54847ee6b32ef78dfb09f5131ff99b494078/mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee", size = 14955587, upload-time = "2026-04-21T17:12:16.033Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/c0f2056e9eb8f08c62cafd9715e4584b89132bdc832fcf85d27d07b5f3e5/mypy-1.20.2-cp313-cp313-win_amd64.whl", hash = "sha256:2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f", size = 10922681, upload-time = "2026-04-21T17:06:35.842Z" }, + { url = "https://files.pythonhosted.org/packages/e5/14/065e333721f05de8ef683d0aa804c23026bcc287446b61cac657b902ccac/mypy-1.20.2-cp313-cp313-win_arm64.whl", hash = "sha256:a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330", size = 9830560, upload-time = "2026-04-21T17:07:51.023Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d1/b4ec96b0ecc620a4443570c6e95c867903428cfcde4206518eafdd5880c3/mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30", size = 14524561, upload-time = "2026-04-21T17:06:27.325Z" }, + { url = "https://files.pythonhosted.org/packages/3a/63/d2c2ff4fa66bc49477d32dfa26e8a167ba803ea6a69c5efb416036909d30/mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924", size = 13363883, upload-time = "2026-04-21T17:11:11.239Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/983916806bf4eddeaaa2c9230903c3669c6718552a921154e1c5182c701f/mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb", size = 13742945, upload-time = "2026-04-21T17:08:34.181Z" }, + { url = "https://files.pythonhosted.org/packages/19/65/0cd9285ab010ee8214c83d67c6b49417c40d86ce46f1aa109457b5a9b8d7/mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc", size = 14706163, upload-time = "2026-04-21T17:05:15.51Z" }, + { url = "https://files.pythonhosted.org/packages/94/97/48ff3b297cafcc94d185243a9190836fb1b01c1b0918fff64e941e973cc9/mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558", size = 14938677, upload-time = "2026-04-21T17:05:39.562Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a1/1b4233d255bdd0b38a1f284feeb1c143ca508c19184964e22f8d837ec851/mypy-1.20.2-cp314-cp314-win_amd64.whl", hash = "sha256:913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8", size = 11089322, upload-time = "2026-04-21T17:06:44.29Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/ce7ee2ba36aeb954ba50f18fa25d9c1188578654b97d02a66a15b6f09531/mypy-1.20.2-cp314-cp314-win_arm64.whl", hash = "sha256:c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3", size = 10017775, upload-time = "2026-04-21T17:07:20.732Z" }, + { url = "https://files.pythonhosted.org/packages/4e/a1/9d93a7d0b5859af0ead82b4888b46df6c8797e1bc5e1e262a08518c6d48e/mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609", size = 15549002, upload-time = "2026-04-21T17:08:23.107Z" }, + { url = "https://files.pythonhosted.org/packages/00/d2/09a6a10ee1bf0008f6c144d9676f2ca6a12512151b4e0ad0ff6c4fac5337/mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2", size = 14401942, upload-time = "2026-04-21T17:07:31.837Z" }, + { url = "https://files.pythonhosted.org/packages/57/da/9594b75c3c019e805250bed3583bdf4443ff9e6ef08f97e39ae308cb06f2/mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c", size = 15041649, upload-time = "2026-04-21T17:09:34.653Z" }, + { url = "https://files.pythonhosted.org/packages/97/77/f75a65c278e6e8eba2071f7f5a90481891053ecc39878cc444634d892abe/mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744", size = 15864588, upload-time = "2026-04-21T17:11:44.936Z" }, + { url = "https://files.pythonhosted.org/packages/d7/46/1a4e1c66e96c1a3246ddf5403d122ac9b0a8d2b7e65730b9d6533ba7a6d3/mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6", size = 16093956, upload-time = "2026-04-21T17:10:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/5a/2c/78a8851264dec38cd736ca5b8bc9380674df0dd0be7792f538916157716c/mypy-1.20.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec", size = 12568661, upload-time = "2026-04-21T17:11:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/83/01/cd7318aa03493322ce275a0e14f4f52b8896335e4e79d4fb8153a7ad2b77/mypy-1.20.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382", size = 10389240, upload-time = "2026-04-21T17:09:42.719Z" }, + { url = "https://files.pythonhosted.org/packages/28/9a/f23c163e25b11074188251b0b5a0342625fc1cdb6af604757174fa9acc9b/mypy-1.20.2-py3-none-any.whl", hash = "sha256:a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563", size = 2637314, upload-time = "2026-04-21T17:05:54.5Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nest-asyncio2" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/73/731debf26e27e0a0323d7bda270dc2f634b398e38f040a09da1f4351d0aa/nest_asyncio2-1.7.2.tar.gz", hash = "sha256:1921d70b92cc4612c374928d081552efb59b83d91b2b789d935c665fa01729a8", size = 14743, upload-time = "2026-02-13T00:34:04.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl", hash = "sha256:f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01", size = 7843, upload-time = "2026-02-13T00:34:02.691Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, +] + +[[package]] +name = "openbb-core" +version = "2.0.0" +source = { editable = "../../core" } +dependencies = [ + { name = "aiohttp" }, + { name = "fastapi" }, + { name = "importlib-metadata" }, + { name = "pydantic" }, + { name = "pyjwt" }, + { name = "python-dotenv" }, + { name = "python-multipart" }, + { name = "requests" }, + { name = "ruff" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "uuid7" }, + { name = "uvicorn" }, + { name = "websockets" }, +] + +[package.optional-dependencies] +pandas = [ + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiohttp", specifier = ">=3.13.3" }, + { name = "fastapi", specifier = ">=0.136.3" }, + { name = "importlib-metadata", specifier = ">=6.8.0" }, + { name = "pandas", marker = "extra == 'pandas'", specifier = ">=1.5.3" }, + { name = "pydantic", specifier = ">=2.12.3,<3.0.0" }, + { name = "pyjwt", specifier = ">=2.13.0" }, + { name = "python-dotenv", specifier = ">=1.0.0" }, + { name = "python-multipart", specifier = ">=0.0.29" }, + { name = "requests", specifier = ">=2.34.2" }, + { name = "ruff", specifier = ">=0.15,<0.16" }, + { name = "tomli", marker = "python_full_version < '3.11'", specifier = ">=2.0.0" }, + { name = "uuid7", specifier = ">=0.1.0" }, + { name = "uvicorn", specifier = ">=0.48.0" }, + { name = "websockets", specifier = ">=15.0" }, +] +provides-extras = ["pandas"] + +[package.metadata.requires-dev] +dev = [{ name = "openbb-devtools", editable = "../../extensions/devtools" }] + +[[package]] +name = "openbb-devtools" +version = "2.0.0" +source = { editable = "../../extensions/devtools" } +dependencies = [ + { name = "aiohttp" }, + { name = "codespell" }, + { name = "ipykernel" }, + { name = "pre-commit" }, + { name = "pydocstyle" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "pytest-freezer" }, + { name = "pytest-order" }, + { name = "pytest-recorder" }, + { name = "pytest-subtests" }, + { name = "ruff" }, + { name = "tox" }, + { name = "ty" }, + { name = "types-python-dateutil" }, + { name = "types-requests" }, + { name = "types-toml" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiohttp", specifier = "<3.14" }, + { name = "codespell", specifier = ">=2.2.5,<3.0.0" }, + { name = "ipykernel", specifier = ">=6.30.1" }, + { name = "pre-commit", specifier = ">=3.5.0,<4.0.0" }, + { name = "pydocstyle", specifier = ">=6.3.0,<7.0.0" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "pytest-asyncio", specifier = ">=1.3.0,<2.0.0" }, + { name = "pytest-cov", specifier = ">=4.1.0,<5.0.0" }, + { name = "pytest-freezer", specifier = ">=0.4.9,<1.0.0" }, + { name = "pytest-order", specifier = ">=1.3.0,<2.0.0" }, + { name = "pytest-recorder", specifier = ">=0.6.5" }, + { name = "pytest-subtests", specifier = ">=0.11.0,<1.0.0" }, + { name = "ruff", specifier = ">=0.15,<0.16" }, + { name = "tox", specifier = ">=4.11.3,<5.0.0" }, + { name = "ty", specifier = ">=0.0.40" }, + { name = "types-python-dateutil", specifier = ">=2.8.19.14,<3.0.0" }, + { name = "types-requests", specifier = ">=2.32,<3.0.0" }, + { name = "types-toml", specifier = ">=0.10.8.7,<1.0.0" }, +] + +[[package]] +name = "openbb-jodi" +version = "2.0.0" +source = { editable = "." } +dependencies = [ + { name = "openbb-core", extra = ["pandas"] }, + { name = "pyarrow" }, +] + +[package.dev-dependencies] +dev = [ + { name = "openbb-devtools" }, +] + +[package.metadata] +requires-dist = [ + { name = "openbb-core", extras = ["pandas"], editable = "../../core" }, + { name = "pyarrow", specifier = ">=17.0.0" }, +] + +[package.metadata.requires-dev] +dev = [{ name = "openbb-devtools", editable = "../../extensions/devtools" }] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "pytz", marker = "python_full_version < '3.11'" }, + { name = "tzdata", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, +] + +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pre-commit" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/10/97ee2fa54dff1e9da9badbc5e35d0bbaef0776271ea5907eccf64140f72f/pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af", size = 177815, upload-time = "2024-07-28T19:59:01.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/92/caae8c86e94681b42c246f0bca35c059a2f0529e5b92619f6aba4cf7e7b6/pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f", size = 204643, upload-time = "2024-07-28T19:58:59.335Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/56/030b7b4719d53085722893e0009dffb9236aa10bca1b12121bdc5626ef16/propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b", size = 93417, upload-time = "2026-05-08T20:59:15.597Z" }, + { url = "https://files.pythonhosted.org/packages/1a/55/1140a8e067b8ec093a18a4ae7bb0045d9db65da38a08618ddc5e2f1994aa/propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c", size = 53847, upload-time = "2026-05-08T20:59:17.096Z" }, + { url = "https://files.pythonhosted.org/packages/20/42/0e7443c90310498561addf346e7d57fe3c6ba1914e1ba938b5464c7bbfd2/propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb", size = 53512, upload-time = "2026-05-08T20:59:18.64Z" }, + { url = "https://files.pythonhosted.org/packages/b7/db/cf51a71bab2009517d1a7f0ee07657e3bd446c4d69f67e6966cf17bcf956/propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e", size = 58068, upload-time = "2026-05-08T20:59:20.683Z" }, + { url = "https://files.pythonhosted.org/packages/b7/43/39b6bdee9699fa1e1641c519feeb64a67e2a9f93bb465c70776b37a7333f/propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e", size = 61020, upload-time = "2026-05-08T20:59:22.112Z" }, + { url = "https://files.pythonhosted.org/packages/26/0b/843726fbb0a29a8c5684fdb25971823638399f31e52e9d1f06a02dc9aa6b/propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b", size = 62732, upload-time = "2026-05-08T20:59:23.805Z" }, + { url = "https://files.pythonhosted.org/packages/39/6e/899fed76dc1942b8a64193a4f059d7f1a2c7ef65085e8a9366ed8ec0d199/propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d", size = 60140, upload-time = "2026-05-08T20:59:25.389Z" }, + { url = "https://files.pythonhosted.org/packages/ab/09/3da4be9b5b879219ad234aa535b3dd4a080ed1ad48d3a73ca07a9e798f22/propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d", size = 60400, upload-time = "2026-05-08T20:59:27.238Z" }, + { url = "https://files.pythonhosted.org/packages/60/2f/09b72b874a9aa0044faf52a69807a6ed618e267ceaa9ec4a63195fa5b504/propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0", size = 58155, upload-time = "2026-05-08T20:59:28.48Z" }, + { url = "https://files.pythonhosted.org/packages/8a/37/97489848c54c95578045473954f10956d619ce6a09e7ac137b71cdcb698b/propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b", size = 57037, upload-time = "2026-05-08T20:59:30.146Z" }, + { url = "https://files.pythonhosted.org/packages/22/db/6c695285ccfc49012743ee9c98212b8c5dd0aed7b63cfd816d4a0f7a1601/propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf", size = 61103, upload-time = "2026-05-08T20:59:31.626Z" }, + { url = "https://files.pythonhosted.org/packages/98/a9/1e500401ca593b0bdb6bf75a70bc2d723835fd53360edff6af70692c7546/propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf", size = 60394, upload-time = "2026-05-08T20:59:32.829Z" }, + { url = "https://files.pythonhosted.org/packages/1f/87/f638b6e375eae0f30a1a2325d8b34fd85fdc785bb9960cf805f3bf1ec69a/propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e", size = 63084, upload-time = "2026-05-08T20:59:35.964Z" }, + { url = "https://files.pythonhosted.org/packages/f6/18/884573f5d97b6d9eba68de759a82c901b7e39d7904d30f7b8d58d42d2a12/propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274", size = 60999, upload-time = "2026-05-08T20:59:38.481Z" }, + { url = "https://files.pythonhosted.org/packages/8f/1a/c3915eb059ceec9e758a56e4cfd955292bc0f201be2176a46b76d94b303a/propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe", size = 39036, upload-time = "2026-05-08T20:59:40.323Z" }, + { url = "https://files.pythonhosted.org/packages/5b/02/1dfd5607501a602d19c1c449d2d193b7d1c611f9246b4059026a1189a80e/propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d", size = 42190, upload-time = "2026-05-08T20:59:42.232Z" }, + { url = "https://files.pythonhosted.org/packages/57/93/f71588ad08b3e6f4b555b5ef215808a3c02b042d0151ad82fa6f15be677a/propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5", size = 38545, upload-time = "2026-05-08T20:59:44.087Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, + { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, + { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, + { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, + { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, + { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, + { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, + { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, + { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" }, + { url = "https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a", size = 54654, upload-time = "2026-05-08T21:00:12.604Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/085d0cd63062e84044e3f05797749c3f8e3938ff3aeb0eb2f69d43fafc91/propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144", size = 59995, upload-time = "2026-05-08T21:00:15.526Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/32cf8e3009e92b2645cf1e944f701e8ea4e924dffde1ee26db860bcbf7e4/propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9", size = 63422, upload-time = "2026-05-08T21:00:16.824Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/f112433f99fc979431b87a39ef169e3f8df070d99a72792c56d6937ac48b/propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42", size = 64342, upload-time = "2026-05-08T21:00:18.362Z" }, + { url = "https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476", size = 61639, upload-time = "2026-05-08T21:00:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/cc/da/4d775080b1490c0ae604acda868bd71aabe3a89ed16f2aa4339eb8a283e7/propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba", size = 61588, upload-time = "2026-05-08T21:00:21.155Z" }, + { url = "https://files.pythonhosted.org/packages/04/ac/f076982cbe2195ee9cf32de5a1e46951d9fb399fc207f390562dd0fd8fb2/propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a", size = 60029, upload-time = "2026-05-08T21:00:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/70/60/189be62e0dd898dce3b331e1b8c7a543cd3a405ac0c81fe8ee8a9d5d77e1/propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64", size = 56774, upload-time = "2026-05-08T21:00:24.001Z" }, + { url = "https://files.pythonhosted.org/packages/ea/9e/93377b9c7939c1ffae98f878dee955efadfd638078bc86dbc21f9d52f651/propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913", size = 63532, upload-time = "2026-05-08T21:00:25.545Z" }, + { url = "https://files.pythonhosted.org/packages/14/f9/590ef6cfb9b8028d516d287812ece32bb0bc5f11fbb9c8bf6b2e6313fec8/propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1", size = 61592, upload-time = "2026-05-08T21:00:27.186Z" }, + { url = "https://files.pythonhosted.org/packages/b4/5e/70958b3034c297a630bba2f17ca7abc2d5f39a803ad7e370ab79d1ecd022/propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33", size = 64788, upload-time = "2026-05-08T21:00:28.8Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/77fe5936d8c3086ca9048f7f415f122ed82e53884a9ec193646b42deef06/propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a", size = 62514, upload-time = "2026-05-08T21:00:30.098Z" }, + { url = "https://files.pythonhosted.org/packages/cf/74/66bd798b5b3be70aa1b391f5cc9d6a0a5532d7fd3b19ec0b213e72e6ad9d/propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031", size = 39018, upload-time = "2026-05-08T21:00:31.622Z" }, + { url = "https://files.pythonhosted.org/packages/61/7c/5c0d34aa3024694d6dcb9271cdbdd08c4e47c1c0ad95ec7e7bc74cdea145/propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42", size = 42322, upload-time = "2026-05-08T21:00:32.918Z" }, + { url = "https://files.pythonhosted.org/packages/4d/91/875812f1a3feb20ceba818ef39fbe4d92f1081e04ac815c822496d0d038b/propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84", size = 38172, upload-time = "2026-05-08T21:00:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/c5/09/f049e45385503fe67db75a6b6186a7b9f0c3930366dc960522c312a825b1/propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a", size = 94457, upload-time = "2026-05-08T21:00:36.355Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/83d1d05655baf63113731bd5a1008435e14f8d1e5a06cbe4ec5b23ad7a31/propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117", size = 53835, upload-time = "2026-05-08T21:00:38.072Z" }, + { url = "https://files.pythonhosted.org/packages/a9/12/a6ba6482bb5ea3260c000c9b20881c95fa11c6b30173715668259f844ed7/propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098", size = 54545, upload-time = "2026-05-08T21:00:39.319Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/7fa086f5764c59ec8a8e157cd93aa8497acc00aba9dcdec56bfffb32602d/propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4", size = 59886, upload-time = "2026-05-08T21:00:40.621Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e4/5d7663dc8235956c8f5281698a3af1d351d8820341ddd890f59d9a9127f2/propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e", size = 63261, upload-time = "2026-05-08T21:00:41.775Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/15a03adee24d6350da4292caeac44c34c033d2afe5e87eb370f38854560f/propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7", size = 64184, upload-time = "2026-05-08T21:00:43.018Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c6/979176efdaa3d239e36d503d5af63a0a773b36662ed8f52e5b6a6d9fd40e/propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d", size = 61534, upload-time = "2026-05-08T21:00:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/63e8cd1bae4c2d2be6493b6b7d10566ddafad88137cfbc99964a1119853c/propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a", size = 61500, upload-time = "2026-05-08T21:00:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/60/5a/28e5d9acbac1cc9ccb67045e8c1b943aa8d79fdf39c93bd73cacd68008ea/propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2", size = 59994, upload-time = "2026-05-08T21:00:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/db650677f554a95b9c01a7c9d93d629e93a15562f5deb4573c9ee136fed2/propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa", size = 56884, upload-time = "2026-05-08T21:00:48.376Z" }, + { url = "https://files.pythonhosted.org/packages/80/45/70b39b89516ff8b96bf732fa6fded8cef20f293cb1508690101c3c07ec51/propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853", size = 63464, upload-time = "2026-05-08T21:00:49.954Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/fa59d3a89eac5534293124af4f1d0d0ada091ce4a0ab4610ce03fd2bdd8d/propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a", size = 61588, upload-time = "2026-05-08T21:00:51.281Z" }, + { url = "https://files.pythonhosted.org/packages/0b/97/efb547a55c4bc7381cfb202d6a2239ac621045277bc1ea5dfd3a7f0516c0/propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704", size = 64667, upload-time = "2026-05-08T21:00:52.602Z" }, + { url = "https://files.pythonhosted.org/packages/92/56/f5c7d9b4b7595d5127da38974d791b2153f3d1eae6c674af3583ace92ad3/propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4", size = 62463, upload-time = "2026-05-08T21:00:54.303Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3b/484a3a65fc9f9f60c41dcd17b428bace5389544e2c680994534a20755066/propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d", size = 38621, upload-time = "2026-05-08T21:00:55.808Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fd/3f0f10dba4dabad3bf53102be007abf55481067952bde0fdddff439e7c61/propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757", size = 41649, upload-time = "2026-05-08T21:00:57.061Z" }, + { url = "https://files.pythonhosted.org/packages/90/ec/6ce619cc32bb500a482f811f9cd509368b4e58e638d13f2c68f370d6b475/propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f", size = 37636, upload-time = "2026-05-08T21:00:58.646Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/c1d268bbbf2ef981c5bf0fbbe746db617c66e3bcefe431a1aa8943fbe23a/propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d", size = 98872, upload-time = "2026-05-08T21:00:59.889Z" }, + { url = "https://files.pythonhosted.org/packages/f4/d4/52c871e73e864e6b34c0e2d58ac1ec5ccd149497ddc7ad2137ae98323a35/propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa", size = 56257, upload-time = "2026-05-08T21:01:01.195Z" }, + { url = "https://files.pythonhosted.org/packages/67/f0/9b90ca2a210b3d09bcfcd96ecd0f55545c091535abce2a45de2775cfd357/propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94", size = 56696, upload-time = "2026-05-08T21:01:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0e/6e9d4ba07c8e56e21ddec1e75f12148142b21ca83a51871babce095334f4/propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164", size = 62378, upload-time = "2026-05-08T21:01:04.475Z" }, + { url = "https://files.pythonhosted.org/packages/65/19/c10badaa463dde8a27ce884f8ee2ec37e6035b7c9f5ff0c8f74f06f08dac/propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f", size = 65283, upload-time = "2026-05-08T21:01:05.959Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b6/93bea99ca80e19cef6512a8580e5b7857bbe09422d9daa7fd4ef5723306c/propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c", size = 66616, upload-time = "2026-05-08T21:01:07.228Z" }, + { url = "https://files.pythonhosted.org/packages/83/e4/5c7462e50625f051f37fb38b8224f7639f667184bbd34424ec83819bb1b7/propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc", size = 63773, upload-time = "2026-05-08T21:01:08.514Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/99238894047b13c823be25027e736626cd414a52a5e30d2c3347c2733529/propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f", size = 63664, upload-time = "2026-05-08T21:01:09.874Z" }, + { url = "https://files.pythonhosted.org/packages/85/1e/a3a1a63116a2b8edb415a8bb9a6f0c34bd03830b1e18e8ce2904e1dc1cf4/propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb", size = 62643, upload-time = "2026-05-08T21:01:11.132Z" }, + { url = "https://files.pythonhosted.org/packages/e4/03/893cf147de2fc6543c5eaa07ad833170e7e2a2385725bbebe8c0503723bb/propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751", size = 59595, upload-time = "2026-05-08T21:01:12.387Z" }, + { url = "https://files.pythonhosted.org/packages/86/3b/04c1a2e12c57766568ba75ba72b3bf2042818d4c1425fab6fc07155c7cff/propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836", size = 65711, upload-time = "2026-05-08T21:01:13.676Z" }, + { url = "https://files.pythonhosted.org/packages/1c/34/80f8d0099f8d6bacc4de1624c85672681c8cd1149ca2da0e38fd120b817f/propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f", size = 64247, upload-time = "2026-05-08T21:01:14.936Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1a/8b08f3a5f1037e9e370c55883ceeeee0f6dd0416fb2d2d67b8bfc91f2a79/propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55", size = 67102, upload-time = "2026-05-08T21:01:16.281Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/8bdb7bb7756d76e005490649d10e4a8369e610c74d619f71e1aedf889e9c/propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568", size = 64964, upload-time = "2026-05-08T21:01:17.57Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/50fb0b5d3968b61a510926ff8b8465f1d6e976b3ab74496d7a4b9fc42515/propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191", size = 42546, upload-time = "2026-05-08T21:01:18.946Z" }, + { url = "https://files.pythonhosted.org/packages/ae/4c/0ddbae64321bd4a95bcbfc19307238016b5b1fee645c84626c8d539e5b74/propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7", size = 46330, upload-time = "2026-05-08T21:01:20.162Z" }, + { url = "https://files.pythonhosted.org/packages/00/d9/9cddc8efb78d8af264c5ec9f6d10b62f57c515feda8d321595f56010fb23/propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96", size = 40521, upload-time = "2026-05-08T21:01:21.399Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ea/23ee535d90ce8bcc465a3028eb3cc0ce3bd1005f4bb27710b30587de798d/propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999", size = 94662, upload-time = "2026-05-08T21:01:22.683Z" }, + { url = "https://files.pythonhosted.org/packages/b5/06/c5a52f419b5d8972f8d46a7577476090d8e3263ff589ce40b5ca4968d5be/propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e", size = 53928, upload-time = "2026-05-08T21:01:23.986Z" }, + { url = "https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539", size = 54650, upload-time = "2026-05-08T21:01:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/70/06/2f46c318e3307cd7a6a7481def374ce838c0fe20084b39dd54b0879d0e99/propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e", size = 59912, upload-time = "2026-05-08T21:01:26.545Z" }, + { url = "https://files.pythonhosted.org/packages/4c/29/fe1aebec2ce57ab985a9c382bded1124431f85078113aa222c5d278430d4/propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979", size = 63300, upload-time = "2026-05-08T21:01:27.937Z" }, + { url = "https://files.pythonhosted.org/packages/b4/18/2334b26768b6c82be8c69e83671b767d5ef426aa09b0cba6c2ea47816774/propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80", size = 64208, upload-time = "2026-05-08T21:01:29.484Z" }, + { url = "https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825", size = 61633, upload-time = "2026-05-08T21:01:31.068Z" }, + { url = "https://files.pythonhosted.org/packages/c4/46/b3ff8aba2b4953a3e50de2cf72f1b5748b8eca93b15f3dc2c84339084c09/propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39", size = 61724, upload-time = "2026-05-08T21:01:32.374Z" }, + { url = "https://files.pythonhosted.org/packages/c5/01/814cfcafbcff954f94c01cf30e097ddc88a076b5440fbcf4570753437d40/propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4", size = 60069, upload-time = "2026-05-08T21:01:33.67Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/5c6f7622d510cc666a300687e06fd060c1a43361c0c9b20d284f06d8096a/propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5", size = 57099, upload-time = "2026-05-08T21:01:34.915Z" }, + { url = "https://files.pythonhosted.org/packages/55/27/9cb0b4c679124085327957d42521c99dba04c88c90c3e55a6f0b633ebccc/propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702", size = 63391, upload-time = "2026-05-08T21:01:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9d/7258aaa5bdf60fc6f27591eef6fe52768cb0beda7140be477c8b12c9794a/propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3", size = 61626, upload-time = "2026-05-08T21:01:37.545Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0d/41c602003e8a9b16fe1e7eadf62c7bfba9d5474370b24200bf48b315f45f/propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5", size = 64781, upload-time = "2026-05-08T21:01:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f3/38e66b1856e9bd079deea015bc4a55f7767c0e4db2f7dcf69e7e680ba4ce/propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4", size = 62570, upload-time = "2026-05-08T21:01:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/95/ca/bbfe9b910ce57dde8bb4876b4520fc02a4e89497c10de26be936758a3aaa/propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0", size = 39436, upload-time = "2026-05-08T21:01:41.654Z" }, + { url = "https://files.pythonhosted.org/packages/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c", size = 42373, upload-time = "2026-05-08T21:01:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/44/68/9ea5103f41d5217d7d6ec24db90018e23aebec070c3f9a6e54d12b841fd8/propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0", size = 38554, upload-time = "2026-05-08T21:01:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/8a/81/fadf555f42d3b762eea8a53950b0489fdc0aa9da5f8ed9e10ce0a4e01b48/propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb", size = 99395, upload-time = "2026-05-08T21:01:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c9/c61e134a686949cf7971af3a390148b1156f7be81c73bc0cd12c873e2d48/propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078", size = 56653, upload-time = "2026-05-08T21:01:47.307Z" }, + { url = "https://files.pythonhosted.org/packages/cb/73/daf935ea7048ddd7ec8eec5345b4a40b619d2d178b3c0a0900796bc3c794/propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa", size = 56914, upload-time = "2026-05-08T21:01:48.573Z" }, + { url = "https://files.pythonhosted.org/packages/79/9f/aba959b435ea18617edd7cf0a7ad0b9c574b8fc7e3d2cd55fb59cb255d33/propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917", size = 62567, upload-time = "2026-05-08T21:01:49.903Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a1/859942de9a791ff42f6141736f5b37749b8f53e65edfa49638c67dd67e6a/propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe", size = 65542, upload-time = "2026-05-08T21:01:51.204Z" }, + { url = "https://files.pythonhosted.org/packages/b5/61/315bc0fd6c0fc7f80a528b8afd209e5fc4a875ea79571b91b8f50f442907/propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03", size = 66845, upload-time = "2026-05-08T21:01:52.539Z" }, + { url = "https://files.pythonhosted.org/packages/47/f7/9f8122e3132e8e354ac41975ef8f1099be7d5a16bc7ae562734e993665c0/propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335", size = 63985, upload-time = "2026-05-08T21:01:53.847Z" }, + { url = "https://files.pythonhosted.org/packages/c8/54/c317819ec157cbf6f35df9df9657a6f82daf34d5faf15948b2f639c2192e/propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285", size = 63999, upload-time = "2026-05-08T21:01:55.179Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/387e3f7dfce0a9233df41fb888aa1c30222cb4bbbf09537c02dd9bd85fe2/propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837", size = 62779, upload-time = "2026-05-08T21:01:57.489Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9c/596784cb5824ed61ee960d3f8655a3f0993e107c6e98ab6c818b7fb92ccb/propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8", size = 59796, upload-time = "2026-05-08T21:01:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/c2/3d/1a6cfa1726a48542c1e8784a0761421476a5b68e09b7f36bf95eb954aaba/propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366", size = 66023, upload-time = "2026-05-08T21:02:00.228Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0e/05fd6990369477076e4e280bcb970de760fddf0161a46e988bc95f7940ec/propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56", size = 64448, upload-time = "2026-05-08T21:02:01.888Z" }, + { url = "https://files.pythonhosted.org/packages/cd/86/5f8da315a4309c62c10c0b2516b17492d5d3bbe1bb862b96604db67e2a37/propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d", size = 67329, upload-time = "2026-05-08T21:02:03.484Z" }, + { url = "https://files.pythonhosted.org/packages/da/d3/3368efe79ab21f0cdf86ef49895811c9cc933131d4cde1f28a624e22e712/propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2", size = 65172, upload-time = "2026-05-08T21:02:04.745Z" }, + { url = "https://files.pythonhosted.org/packages/d5/07/127e8b0bacfb325396196f9d976a22453049b89b9b2b08477cc3145faa44/propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821", size = 43813, upload-time = "2026-05-08T21:02:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/46dad6c0ae49ed230ab1b16c890c2b6314e2403e6c412976f4a72d64a527/propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370", size = 47764, upload-time = "2026-05-08T21:02:07.353Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/a47d0a63aa309d10d59ede6e9d4cff03a344a79d1f0f4cd0cd74997b53e0/propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6", size = 41140, upload-time = "2026-05-08T21:02:09.065Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/f3/95428098d1fa7d04432fb750eed06b41304c2f6a5d3319985e64db2d9d41/pyarrow-25.0.0.tar.gz", hash = "sha256:d2d697008b5ec06d75952ef260c2e9a8a0f6ccfce24266c04c9c8ade927cb3b4", size = 1199181, upload-time = "2026-07-10T08:29:50.116Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/2a/eaa70e6d6ed430c2e90c0599e2831a41a50251879e44788ccdbc73115af1/pyarrow-25.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ce0ca222802087b9a8cb031a6468442cb6b67c290a45a601cac64753d34954d3", size = 35945551, upload-time = "2026-07-10T08:25:23.153Z" }, + { url = "https://files.pythonhosted.org/packages/df/e0/917086af6b246143012cdc8a7c886b018b53204f3d69fc5f9be5857a8b80/pyarrow-25.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7d6da02ffc7a3a9bda3b7ded4cc2a27ff73969ab37153f3afd46bbbc1ba4f0f7", size = 37636698, upload-time = "2026-07-10T08:25:28.031Z" }, + { url = "https://files.pythonhosted.org/packages/68/6a/c87829f92503f84993721791c942f3d9aa81044de51a8cfb1da5810e5345/pyarrow-25.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:dbf9fa5d4bde73b1cc16377dcaaa010f971e6fa7f5083f5d44f34b50bc1d74af", size = 46858364, upload-time = "2026-07-10T08:25:34.527Z" }, + { url = "https://files.pythonhosted.org/packages/cc/ba/2030d454c2747e26cce23e4a0338067ee0830a155b7894da04caa96783a5/pyarrow-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b72d943ff4e10fec8d48aedb23322d8f6ea8bc2d698b81db37e73730f69e4862", size = 50056398, upload-time = "2026-07-10T08:25:40.785Z" }, + { url = "https://files.pythonhosted.org/packages/78/ce/ba7a5ce7bf0cfc372ec48203a34ece42f73aa2f3231706f61c55e105ecd0/pyarrow-25.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5fb2d837960f1df7f679ff9f1a55065e306347d379e0768cebf14781254d6194", size = 49958146, upload-time = "2026-07-10T08:25:46.98Z" }, + { url = "https://files.pythonhosted.org/packages/75/eb/c34a29fb7a70dca2f903c7d85a928928ef55af20cd56e99de6b4c0d897bc/pyarrow-25.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:add690feafa0953c443cdba9e9e87f5eaa198f1ea2e43a3b146ea83f202262d0", size = 53096264, upload-time = "2026-07-10T08:25:53.925Z" }, + { url = "https://files.pythonhosted.org/packages/36/f9/35b1f83a0727d84951588e4034aca2feb76dfb45b0725918c0037b0a48f7/pyarrow-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:d293e9959b29a24c82d936d04ab2b7fd8b8d334030de2e56a99aba94f008ad7a", size = 27840572, upload-time = "2026-07-10T08:25:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/a7/98/ae2b5acf9876dbeffa6f320776242c52caab062df55c8ac5501ed2679e74/pyarrow-25.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:2e3b6544e26e393fe2cd530f523e36c1c8d3c345bbbb60cca3fd866be8322517", size = 35939080, upload-time = "2026-07-10T08:26:04.53Z" }, + { url = "https://files.pythonhosted.org/packages/80/09/3de2a968edbd496c86cb8b932cdbee2d4b08c4a28e9884a15e5c705a646b/pyarrow-25.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:b724d127783b4c19f088fcdfc844cbc318809246a30307bcabd5ed02045e890e", size = 37633420, upload-time = "2026-07-10T08:26:10.354Z" }, + { url = "https://files.pythonhosted.org/packages/19/86/8399243a4ce080426ec37db18d5e29148b7ec960a8a8c7f9059a7bf6ef0a/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:244f98a595f70fa4fd35faa7508c4ae67e14a173397a4b3b49d2b3c360fb0062", size = 46861050, upload-time = "2026-07-10T08:26:16.397Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/72d704b02bc5fc6d06954d76a0208c1e79cad3ab370f6d6a91ffe5078870/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0222f0071d13313962a88d21bf28b80d355ac39d81bfa6ff3fe00eeaf748e4be", size = 50056458, upload-time = "2026-07-10T08:26:23.271Z" }, + { url = "https://files.pythonhosted.org/packages/06/5d/3c31a60b6403d63cad2e0f829096f5fc5763a129ead4207a5d4690b96448/pyarrow-25.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b58726f118c079f9d4ed7e904975d4f15fd69d0741ba511a4e2dcaa4ef16354f", size = 49957793, upload-time = "2026-07-10T08:26:30.232Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/8f8a019061f9863a831915329264372a87ed25eaf9109ce56eb0e84012c5/pyarrow-25.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:38a2c887cb3883e241b70201688db34133b6dfadd04f03c8f9213df53770c18e", size = 53100544, upload-time = "2026-07-10T08:26:36.414Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e2/738071e95c5ddad7b3dfc12f569ffa992db89d7d7b4a95258fd184191249/pyarrow-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:161649d60a7a46c613a19fd795763ea8a88c36ba997dd99d9bc66e6794ee36e8", size = 27848311, upload-time = "2026-07-10T08:26:41.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/44/fdd3a4377807b7dcabe2d4b5aa99dbbc98e2e5df3f1ca4e7f0aec492d987/pyarrow-25.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:149730a3d1f0fb59d663a0b8aa210adfd9c17c27cd94a0d143e60daea8320d4e", size = 35850884, upload-time = "2026-07-10T08:26:47.357Z" }, + { url = "https://files.pythonhosted.org/packages/bf/71/9f053177a7709b8c90abb00a2375b916286f9f0d6cfb21a5cadd4ef811e8/pyarrow-25.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:0721332c30fdd453fdd1fc203b2ac1f4c9db5aea28fa38d41f2574c4b068b9ec", size = 37616197, upload-time = "2026-07-10T08:26:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/95/1a/22bfb6597dcdc861fa83c39c06e1457cb56f698940eff42fbb25de30e8e5/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fa1482b3da10cac2d4db6e26b81da543e237616af2ef6d466018b31ca586496f", size = 46841966, upload-time = "2026-07-10T08:27:07.685Z" }, + { url = "https://files.pythonhosted.org/packages/55/0e/cd705c042bc4fe7022478db577fcab4abdcfabb9bc37ab7a75556b3fcb2b/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5d1dbf24e151042f2fa3c129563f65d66674128868496fb008c4272b16bdf778", size = 50088993, upload-time = "2026-07-10T08:27:14.268Z" }, + { url = "https://files.pythonhosted.org/packages/98/ee/d822e1ee31fe31ec5d057210e0605c950b975dcd8d9a332976cc859a9df8/pyarrow-25.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:20887a762dd61dcc530f93a140840ab1f6aa7836b33270e42d627ab3cf11e537", size = 49941005, upload-time = "2026-07-10T08:27:21.274Z" }, + { url = "https://files.pythonhosted.org/packages/33/1b/207a90cc64619a095eb75a263ae069735f2810056d43c667befd573ec083/pyarrow-25.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:58d1ab556b0cea1c93fdb799b24ad58adb2f2a2788dbce782a94f64ae1a5cc9b", size = 53112355, upload-time = "2026-07-10T08:27:27.911Z" }, + { url = "https://files.pythonhosted.org/packages/7e/fe/81d1e5f8beed15c01e98649d5c6e2167b67fd395884a2488f18bf1cf0dba/pyarrow-25.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:3f356afe61186395c861d5cd63dc21ff7d5fa335012a4668d979257df7fea0f5", size = 27945954, upload-time = "2026-07-10T08:27:32.903Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c8/098ce17d778fd9d29e40bb8c5f19a40cc90c3f0b46c9057b0d7993f42f54/pyarrow-25.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:8831a3ba52fa7cdb78d368d968b1dcd06171e6dff5461e16d90de91d371e47bc", size = 35844549, upload-time = "2026-07-10T08:27:37.956Z" }, + { url = "https://files.pythonhosted.org/packages/bc/66/24c28877219abf6263d909b1592c97ff82c59f13a59acbed11fc87c0654f/pyarrow-25.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:5f4bacb60f91dd2fca6c52f1b9a0012cd090e0294f1f781dc1881a247a352f8e", size = 37610397, upload-time = "2026-07-10T08:27:43.803Z" }, + { url = "https://files.pythonhosted.org/packages/53/55/6d1d5f5aff317ec5de9421594679ed51ed828fe7e2ce209327f819d801e4/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:59516c822d5fd8e544aaa0dfe72f36fed5d4c24ea8390aab1bcd31d7e959c6be", size = 46841701, upload-time = "2026-07-10T08:27:49.741Z" }, + { url = "https://files.pythonhosted.org/packages/b5/5d/f790fb6965ab54c9da0dda7856abc75fd0d7648d865f8d603c111d203a64/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6f9dbd83e91c239a1f5ee7ce13f108b5f6c0efbe40a4375260d8f08b43ad05e9", size = 50090118, upload-time = "2026-07-10T08:27:56.051Z" }, + { url = "https://files.pythonhosted.org/packages/0c/8c/faf025357ebf31bc96777f234277aa31e2aeca6dd4ecaa391f29085473c2/pyarrow-25.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18dcc8cc50b5e72eae6fcbfc6c8776c21a007176b27a3cdec5c2f5bcf126708d", size = 49945559, upload-time = "2026-07-10T08:28:01.927Z" }, + { url = "https://files.pythonhosted.org/packages/07/a1/bd051871708ea99a5e0fc711926c26c6f2c6d0130c7aaac8093e34998af6/pyarrow-25.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4ec1895a87aa834c3b99b7a1e758747eb8bb57f922b32c0e0fa04afb8d6998b1", size = 53114238, upload-time = "2026-07-10T08:28:08.594Z" }, + { url = "https://files.pythonhosted.org/packages/7c/31/737f0c3cffcd6af647849477d1dd68045deac2e3963c3f9f211bedc48540/pyarrow-25.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:77c8d1ae46a44b4006e8db1cc977bbcc6ce4873c92f74137d68e45503b97fb18", size = 27861162, upload-time = "2026-07-10T08:28:12.975Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/581ccbcdb3d897eb2893328d68db3d52eca373bf2a7e964d0a6276b8e85b/pyarrow-25.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:72132b9a8a0a1840197794d4dea26080069b6b0981c116bc078762dc9691b21b", size = 35878945, upload-time = "2026-07-10T08:28:18.222Z" }, + { url = "https://files.pythonhosted.org/packages/64/d1/ccb01db7329ea0411ef4fbd9b62a04d3268b36777d4e758d5e39b91ddeab/pyarrow-25.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e009ef945e498dca2f050ea10d2e9764cb44017254826fc4574fdb8d2530173b", size = 37630854, upload-time = "2026-07-10T08:28:23.452Z" }, + { url = "https://files.pythonhosted.org/packages/af/9f/2d81ba89d1e4198d0cb25fe7529de936830fdaec0db926bb52a1ef7080d4/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f57a39dbcb416345401c2e77a4373669b45fd111a1768e6cf267a7a0607ff0ec", size = 46905617, upload-time = "2026-07-10T08:28:29.376Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:447df764beb07c544f0178a5f6b70ef44b9ecf382b3cdfad4c2d7867353c3887", size = 50119765, upload-time = "2026-07-10T08:28:35.826Z" }, + { url = "https://files.pythonhosted.org/packages/ca/88/cab5063ba0c4d46a9f6b4b7eb1c9029dc0302d65cd5ab3510c949a386568/pyarrow-25.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac5dfeee59f9ceb4d45ba76e83b026c38c24334135bb329d8274baa49cec3c62", size = 50027563, upload-time = "2026-07-10T08:28:43.848Z" }, + { url = "https://files.pythonhosted.org/packages/7b/fb/4d24f1b7fe2e042dc4ef315ef75e4e702d8e46fe10c37e63caff00502b03/pyarrow-25.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f0f100dacf2c0f400601664a79d1a907ced4740514bb2b00917341038e2ce76f", size = 53162437, upload-time = "2026-07-10T08:28:52.819Z" }, + { url = "https://files.pythonhosted.org/packages/fa/65/da20806de93ca6ee91e72cb6a9b08b3ac890b46efc8d94a7326c651c4c81/pyarrow-25.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:2e093efbecb5317372f819228fa4b4e6157eee48d3f0a7b0303705ebf81a7104", size = 28613262, upload-time = "2026-07-10T08:29:47.544Z" }, + { url = "https://files.pythonhosted.org/packages/86/9f/c632afb1d3ef4a7814cee236718235f3a47eac46e97eb87df40f550b6b48/pyarrow-25.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:26be35b80780d2d21f4bae3d568b1666337c3a89722cc1794c956a77017cb24e", size = 36120702, upload-time = "2026-07-10T08:28:59.577Z" }, + { url = "https://files.pythonhosted.org/packages/36/0a/093d53a0e72ad06e45d6443e00651bbc2d21af4211295086cbf4d873d3b9/pyarrow-25.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:6f4812bfbf11ca7d8faf59eb8fff8bf4dd25ce3a38b62baa010cc17a0926d1b2", size = 37750674, upload-time = "2026-07-10T08:29:06.916Z" }, + { url = "https://files.pythonhosted.org/packages/8a/18/b37fc31a69cff4bdfb8842683def5612f551b93fff6f44375e4a4a6a5535/pyarrow-25.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:b8af8ceedf0c9c160fd2b63440f2d205b9404db85866c1217bfea601de7cfb50", size = 46912304, upload-time = "2026-07-10T08:29:14.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/35/5cae19ba72493e5598022468b56f6a5571f399f485bf412f157356476caa/pyarrow-25.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c70a5fd9a82bd1a702fd482bdc62d38dcb672fb2b449b1d7c0d7d1f4be7b7bfe", size = 50073652, upload-time = "2026-07-10T08:29:22.467Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a5/ddd508424bdfd5e6945765e9e2ffc687e2f6115972badc8ecf423076c407/pyarrow-25.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0490a7f8b38ffe11cc26526b50c65d111cb54ddac3717cec781806793f1244dc", size = 50058654, upload-time = "2026-07-10T08:29:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a4/324d0db203ff5eebe8694ec2d6ec5a23f9aaa5d02e5b8c692914c518c33c/pyarrow-25.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e83916bbcf380866b4e14255850b33323ff678dc9758411d0409cdd2523880b0", size = 53140153, upload-time = "2026-07-10T08:29:36.041Z" }, + { url = "https://files.pythonhosted.org/packages/bd/8d/d236e9c82fe315f9128885c8be3ec719f41965a1eb6b6f4b42470904cd41/pyarrow-25.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:13240f0d3dc5932ccd0bfa90cd76d835680b9d94a7661c635df4b703d40ce849", size = 28743657, upload-time = "2026-07-10T08:29:42.742Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146, upload-time = "2026-05-06T13:37:36.537Z" }, + { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769, upload-time = "2026-05-06T13:37:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958, upload-time = "2026-05-06T13:37:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118, upload-time = "2026-05-06T13:36:55.216Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876, upload-time = "2026-05-06T13:38:25.455Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703, upload-time = "2026-05-06T13:37:53.304Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042, upload-time = "2026-05-06T13:38:46.981Z" }, + { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231, upload-time = "2026-05-06T13:39:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388, upload-time = "2026-05-06T13:40:08.06Z" }, + { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769, upload-time = "2026-05-06T13:38:13.901Z" }, + { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312, upload-time = "2026-05-06T13:39:08.24Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817, upload-time = "2026-05-06T13:38:43.2Z" }, + { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085, upload-time = "2026-05-06T13:39:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311, upload-time = "2026-05-06T13:39:59.922Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, +] + +[[package]] +name = "pydocstyle" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "snowballstemmer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/d5385ca59fd065e3c6a5fe19f9bc9d5ea7f2509fa8c9c22fb6b2031dd953/pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1", size = 36796, upload-time = "2023-01-17T20:29:19.838Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/ea/99ddefac41971acad68f14114f38261c1f27dac0b3ec529824ebc739bdaa/pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019", size = 38038, upload-time = "2023-01-17T20:29:18.094Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[[package]] +name = "pylint" +version = "3.3.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "astroid" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "dill" }, + { name = "isort" }, + { name = "mccabe" }, + { name = "platformdirs" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomlkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/9d/81c84a312d1fa8133b0db0c76148542a98349298a01747ab122f9314b04e/pylint-3.3.9.tar.gz", hash = "sha256:d312737d7b25ccf6b01cc4ac629b5dcd14a0fcf3ec392735ac70f137a9d5f83a", size = 1525946, upload-time = "2025-10-05T18:41:43.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/a7/69460c4a6af7575449e615144aa2205b89408dc2969b87bc3df2f262ad0b/pylint-3.3.9-py3-none-any.whl", hash = "sha256:01f9b0462c7730f94786c283f3e52a1fbdf0494bbe0971a78d7277ef46a751e7", size = 523465, upload-time = "2025-10-05T18:41:41.766Z" }, +] + +[[package]] +name = "pyproject-api" +version = "1.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/62/0fe346fe380b1aafaf819c8cb195d3241bb4f355f908e6339814131a830b/pyproject_api-1.10.1.tar.gz", hash = "sha256:c2b2726bd7aa9217b6c50b621fef5b2ae5def4d55b779c9e0694c15e0a8517ba", size = 23477, upload-time = "2026-05-28T14:22:14.049Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/d7/29e1e5e882f79133631f7bcace42d23db493f616463c157a1ab614bf69dd/pyproject_api-1.10.1-py3-none-any.whl", hash = "sha256:fa9e6f66c35b5017e909825d8f2b5d5482ea699d7be809d21c03bd1f7317f36a", size = 12992, upload-time = "2026-05-28T14:22:12.711Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, + { name = "pytest" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, +] + +[[package]] +name = "pytest-cov" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/15/da3df99fd551507694a9b01f512a2f6cf1254f33601605843c3775f39460/pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6", size = 63245, upload-time = "2023-05-24T18:44:56.845Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/4b/8b78d126e275efa2379b1c2e09dc52cf70df16fc3b90613ef82531499d73/pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a", size = 21949, upload-time = "2023-05-24T18:44:54.079Z" }, +] + +[[package]] +name = "pytest-freezer" +version = "0.4.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "freezegun" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/f0/98dcbc5324064360b19850b14c84cea9ca50785d921741dbfc442346e925/pytest_freezer-0.4.9.tar.gz", hash = "sha256:21bf16bc9cc46bf98f94382c4b5c3c389be7056ff0be33029111ae11b3f1c82a", size = 3177, upload-time = "2024-12-12T08:53:08.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/e9/30252bc05bcf67200a17f4f0b4cc7598f0a68df4fa9fa356193aa899f145/pytest_freezer-0.4.9-py3-none-any.whl", hash = "sha256:8b6c50523b7d4aec4590b52bfa5ff766d772ce506e2bf4846c88041ea9ccae59", size = 3192, upload-time = "2024-12-12T08:53:07.641Z" }, +] + +[[package]] +name = "pytest-mock" +version = "3.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/14/eb014d26be205d38ad5ad20d9a80f7d201472e08167f0bb4361e251084a9/pytest_mock-3.15.1.tar.gz", hash = "sha256:1849a238f6f396da19762269de72cb1814ab44416fa73a8686deac10b0d87a0f", size = 34036, upload-time = "2025-09-16T16:37:27.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl", hash = "sha256:0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d", size = 10095, upload-time = "2025-09-16T16:37:25.734Z" }, +] + +[[package]] +name = "pytest-order" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/97/d8/82a5dc2aad3392f66c9741960fcbeeb45dd4d62eedb218aed6c52eea36eb/pytest_order-1.5.0.tar.gz", hash = "sha256:96acd7587b5a2855dcaa4a898288103d202894a61afd813adbc9b77aab04d90d", size = 54136, upload-time = "2026-06-13T05:39:41.636Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5c/bd6a85b44beb8bd74c0e86ab699ef0e096e260dc90458b84fc54c28e4335/pytest_order-1.5.0-py3-none-any.whl", hash = "sha256:667ba2b7303fe2c529848663e0a41dfb0cc4d64f09f87272e4a9a1751efb52b2", size = 16634, upload-time = "2026-06-13T05:39:40.431Z" }, +] + +[[package]] +name = "pytest-recorder" +version = "0.6.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "black" }, + { name = "cryptography" }, + { name = "idna" }, + { name = "mypy" }, + { name = "pylint" }, + { name = "pytest" }, + { name = "pytest-mock" }, + { name = "time-machine" }, + { name = "vcrpy", marker = "platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/50/af42c0dd030259de336a4b93495e0021e66a107afd9c5ed87fc57f594971/pytest_recorder-0.6.6.tar.gz", hash = "sha256:1005b7a9d993a9d6c6fdc7cf18b48d687fb5324ab81da82fab65034362ffddb2", size = 16990, upload-time = "2026-06-24T17:02:45.574Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/06/07ca6377a619bb97c0debc7b97a5fc16b74ca632746eb1f0b6f3e8cb9194/pytest_recorder-0.6.6-py3-none-any.whl", hash = "sha256:66516eaeca0200a687f884e426bcdb6733ea0495c5e2d8bb4e3e2b0e8c595571", size = 22021, upload-time = "2026-06-24T17:02:46.445Z" }, +] + +[[package]] +name = "pytest-subtests" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/d9/20097971a8d315e011e055d512fa120fd6be3bdb8f4b3aa3e3c6bf77bebc/pytest_subtests-0.15.0.tar.gz", hash = "sha256:cb495bde05551b784b8f0b8adfaa27edb4131469a27c339b80fd8d6ba33f887c", size = 18525, upload-time = "2025-10-20T16:26:18.358Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/64/bba465299b37448b4c1b84c7a04178399ac22d47b3dc5db1874fe55a2bd3/pytest_subtests-0.15.0-py3-none-any.whl", hash = "sha256:da2d0ce348e1f8d831d5a40d81e3aeac439fec50bd5251cbb7791402696a9493", size = 9185, upload-time = "2025-10-20T16:26:17.239Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/81/58c70036dffeccb7fe7d79d6260c69f7a28272bbd3909c29a01ea9422744/python_discovery-1.4.4.tar.gz", hash = "sha256:5cad33982d412c1f3ffb8f9ca4ea292c9680bca3942451d30b69c37fce53a4a3", size = 72212, upload-time = "2026-07-08T23:06:50.691Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl", hash = "sha256:abebe9120b43453b68c908acfb1e72a19d1a959ed2cb620ad38fc57d08056dbe", size = 34181, upload-time = "2026-07-08T23:06:49.402Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pytokens" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/24/f206113e05cb8ef51b3850e7ef88f20da6f4bf932190ceb48bd3da103e10/pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", size = 161522, upload-time = "2026-01-30T01:02:50.393Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e9/06a6bf1b90c2ed81a9c7d2544232fe5d2891d1cd480e8a1809ca354a8eb2/pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", size = 246945, upload-time = "2026-01-30T01:02:52.399Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/f6fb1007a4c3d8b682d5d65b7c1fb33257587a5f782647091e3408abe0b8/pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", size = 259525, upload-time = "2026-01-30T01:02:53.737Z" }, + { url = "https://files.pythonhosted.org/packages/04/92/086f89b4d622a18418bac74ab5db7f68cf0c21cf7cc92de6c7b919d76c88/pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", size = 262693, upload-time = "2026-01-30T01:02:54.871Z" }, + { url = "https://files.pythonhosted.org/packages/b4/7b/8b31c347cf94a3f900bdde750b2e9131575a61fdb620d3d3c75832262137/pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", size = 103567, upload-time = "2026-01-30T01:02:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/3d/92/790ebe03f07b57e53b10884c329b9a1a308648fc083a6d4a39a10a28c8fc/pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", size = 160864, upload-time = "2026-01-30T01:02:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/13/25/a4f555281d975bfdd1eba731450e2fe3a95870274da73fb12c40aeae7625/pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", size = 248565, upload-time = "2026-01-30T01:02:59.912Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", size = 260824, upload-time = "2026-01-30T01:03:01.471Z" }, + { url = "https://files.pythonhosted.org/packages/4e/54/3e04f9d92a4be4fc6c80016bc396b923d2a6933ae94b5f557c939c460ee0/pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", size = 264075, upload-time = "2026-01-30T01:03:04.143Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1b/44b0326cb5470a4375f37988aea5d61b5cc52407143303015ebee94abfd6/pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", size = 103323, upload-time = "2026-01-30T01:03:05.412Z" }, + { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, + { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, + { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, + { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, + { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, + { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, + { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, + { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, + { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, + { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, + { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, + { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "ruff" +version = "0.15.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" }, + { url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" }, + { url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" }, + { url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" }, + { url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" }, + { url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" }, + { url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" }, + { url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" }, + { url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "snowballstemmer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/f8/0a71edf031f03c40db17503cb8ca78a69a171254e568e7db241b0ab57ea1/snowballstemmer-3.1.1.tar.gz", hash = "sha256:e07bbc54a0d798fe6010a12398422e62a8bfbba95c394fd0956ef58cb4d3e260", size = 123314, upload-time = "2026-06-03T00:56:40.194Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl", hash = "sha256:7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752", size = 104164, upload-time = "2026-06-03T00:56:38.614Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "starlette" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, +] + +[[package]] +name = "time-machine" +version = "2.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/a4/1b5fdd165f61b67f445fac2a7feb0c655118edef429cd09ff5a8067f7f1d/time_machine-2.19.0.tar.gz", hash = "sha256:7c5065a8b3f2bbb449422c66ef71d114d3f909c276a6469642ecfffb6a0fcd29", size = 14576, upload-time = "2025-08-19T17:22:08.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/8f/19125611ebbcb3a14da14cd982b9eb4573e2733db60c9f1fbf6a39534f40/time_machine-2.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b5169018ef47206997b46086ce01881cd3a4666fd2998c9d76a87858ca3e49e9", size = 19659, upload-time = "2025-08-19T17:20:30.062Z" }, + { url = "https://files.pythonhosted.org/packages/74/da/9b0a928321e7822a3ff96dbd1eae089883848e30e9e1b149b85fb96ba56b/time_machine-2.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85bb7ed440fccf6f6d0c8f7d68d849e7c3d1f771d5e0b2cdf871fa6561da569f", size = 15157, upload-time = "2025-08-19T17:20:31.931Z" }, + { url = "https://files.pythonhosted.org/packages/36/ff/d7e943422038f5f2161fe2c2d791e64a45be691ef946020b20f3a6efc4d4/time_machine-2.19.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a3b12028af1cdc09ccd595be2168b7b26f206c1e190090b048598fbe278beb8e", size = 32860, upload-time = "2025-08-19T17:20:33.241Z" }, + { url = "https://files.pythonhosted.org/packages/fc/80/2b0f1070ed9808ee7da7a6da62a4a0b776957cb4d861578348f86446e778/time_machine-2.19.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c261f073086cf081d1443cbf7684148c662659d3d139d06b772bfe3fe7cc71a6", size = 34510, upload-time = "2025-08-19T17:20:34.221Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b4/48038691c8d89924b36c83335a73adeeb68c884f5a1da08a5b17b8a956f3/time_machine-2.19.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:011954d951230a9f1079f22b39ed1a3a9abb50ee297dfb8c557c46351659d94d", size = 36204, upload-time = "2025-08-19T17:20:35.163Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/60e8adb541df195e83cb74b720b2cfb1f22ed99c5a7f8abf2a9ab3442cb5/time_machine-2.19.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b0f83308b29c7872006803f2e77318874eb84d0654f2afe0e48e3822e7a2e39b", size = 34936, upload-time = "2025-08-19T17:20:36.61Z" }, + { url = "https://files.pythonhosted.org/packages/5e/72/e8cee59c6cd99dd3b25b8001a0253e779a286aa8f44d5b40777cbd66210b/time_machine-2.19.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:39733ef844e2984620ec9382a42d00cccc4757d75a5dd572be8c2572e86e50b9", size = 32932, upload-time = "2025-08-19T17:20:37.901Z" }, + { url = "https://files.pythonhosted.org/packages/2c/eb/83f300d93c1504965d944e03679f1c943a923bce2d0fdfadef0e2e22cc13/time_machine-2.19.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f8db99f6334432e9ffbf00c215caf2ae9773f17cec08304d77e9e90febc3507b", size = 34010, upload-time = "2025-08-19T17:20:39.202Z" }, + { url = "https://files.pythonhosted.org/packages/e1/77/f35f2500e04daac5033a22fbfd17e68467822b8406ee77966bf222ccaa26/time_machine-2.19.0-cp310-cp310-win32.whl", hash = "sha256:72bf66cd19e27ffd26516b9cbe676d50c2e0b026153289765dfe0cf406708128", size = 17121, upload-time = "2025-08-19T17:20:40.108Z" }, + { url = "https://files.pythonhosted.org/packages/db/df/32d3e0404be1760a64a44caab2af34b07e952bfe00a23134fea9ddba3e8a/time_machine-2.19.0-cp310-cp310-win_amd64.whl", hash = "sha256:46f1c945934ce3d6b4f388b8e581fce7f87ec891ea90d7128e19520e434f96f0", size = 17957, upload-time = "2025-08-19T17:20:41.079Z" }, + { url = "https://files.pythonhosted.org/packages/66/df/598a71a1afb4b509a4587273b76590b16d9110a3e9106f01eedc68d02bb2/time_machine-2.19.0-cp310-cp310-win_arm64.whl", hash = "sha256:fb4897c7a5120a4fd03f0670f332d83b7e55645886cd8864a71944c4c2e5b35b", size = 16821, upload-time = "2025-08-19T17:20:41.967Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ed/4815ebcc9b6c14273f692b9be38a9b09eae52a7e532407cc61a51912b121/time_machine-2.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5ee91664880434d98e41585c3446dac7180ec408c786347451ddfca110d19296", size = 19342, upload-time = "2025-08-19T17:20:43.207Z" }, + { url = "https://files.pythonhosted.org/packages/ee/08/154cce8b11b60d8238b0b751b8901d369999f4e8f7c3a5f917caa5d95b0b/time_machine-2.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed3732b83a893d1c7b8cabde762968b4dc5680ee0d305b3ecca9bb516f4e3862", size = 14978, upload-time = "2025-08-19T17:20:44.134Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b7/b689d8c8eeca7af375cfcd64973e49e83aa817cc00f80f98548d42c0eb50/time_machine-2.19.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6ba0303e9cc9f7f947e344f501e26bedfb68fab521e3c2729d370f4f332d2d55", size = 30964, upload-time = "2025-08-19T17:20:45.366Z" }, + { url = "https://files.pythonhosted.org/packages/80/91/38bf9c79674e95ce32e23c267055f281dff651eec77ed32a677db3dc011a/time_machine-2.19.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2851825b524a988ee459c37c1c26bdfaa7eff78194efb2b562ea497a6f375b0a", size = 32606, upload-time = "2025-08-19T17:20:46.693Z" }, + { url = "https://files.pythonhosted.org/packages/19/4a/e9222d85d4de68975a5e799f539a9d32f3a134a9101fca0a61fa6aa33d68/time_machine-2.19.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68d32b09ecfd7fef59255c091e8e7c24dd117f882c4880b5c7ab8c5c32a98f89", size = 34405, upload-time = "2025-08-19T17:20:48.032Z" }, + { url = "https://files.pythonhosted.org/packages/14/e2/09480d608d42d6876f9ff74593cfc9197a7eb2c31381a74fb2b145575b65/time_machine-2.19.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60c46ab527bf2fa144b530f639cc9e12803524c9e1f111dc8c8f493bb6586eeb", size = 33181, upload-time = "2025-08-19T17:20:48.937Z" }, + { url = "https://files.pythonhosted.org/packages/84/64/f9359e000fad32d9066305c48abc527241d608bcdf77c19d67d66e268455/time_machine-2.19.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:56f26ab9f0201c453d18fe76bb7d1cf05fe58c1b9d9cb0c7d243d05132e01292", size = 31036, upload-time = "2025-08-19T17:20:50.276Z" }, + { url = "https://files.pythonhosted.org/packages/71/0d/fab2aacec71e3e482bd7fce0589381f9414a4a97f8766bddad04ad047b7b/time_machine-2.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6c806cf3c1185baa1d807b7f51bed0db7a6506832c961d5d1b4c94c775749bc0", size = 32145, upload-time = "2025-08-19T17:20:51.449Z" }, + { url = "https://files.pythonhosted.org/packages/44/fb/faeba2405fb27553f7b28db441a500e2064ffdb2dcba001ee315fdd2c121/time_machine-2.19.0-cp311-cp311-win32.whl", hash = "sha256:b30039dfd89855c12138095bee39c540b4633cbc3684580d684ef67a99a91587", size = 17004, upload-time = "2025-08-19T17:20:52.38Z" }, + { url = "https://files.pythonhosted.org/packages/2f/84/87e483d660ca669426192969280366635c845c3154a9fe750be546ed3afc/time_machine-2.19.0-cp311-cp311-win_amd64.whl", hash = "sha256:13ed8b34430f1de79905877f5600adffa626793ab4546a70a99fb72c6a3350d8", size = 17822, upload-time = "2025-08-19T17:20:53.348Z" }, + { url = "https://files.pythonhosted.org/packages/41/f4/ebf7bbf5047854a528adaf54a5e8780bc5f7f0104c298ab44566a3053bf8/time_machine-2.19.0-cp311-cp311-win_arm64.whl", hash = "sha256:cc29a50a0257d8750b08056b66d7225daab47606832dea1a69e8b017323bf511", size = 16680, upload-time = "2025-08-19T17:20:54.26Z" }, + { url = "https://files.pythonhosted.org/packages/9b/aa/7e00614d339e4d687f6e96e312a1566022528427d237ec639df66c4547bc/time_machine-2.19.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c85cf437dc3c07429456d8d6670ac90ecbd8241dcd0fbf03e8db2800576f91ff", size = 19308, upload-time = "2025-08-19T17:20:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/ab/3c/bde3c757394f5bca2fbc1528d4117960a26c38f9b160bf471b38d2378d8f/time_machine-2.19.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d9238897e8ef54acdf59f5dff16f59ca0720e7c02d820c56b4397c11db5d3eb9", size = 15019, upload-time = "2025-08-19T17:20:56.204Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e0/8ca916dd918018352d377f1f5226ee071cfbeb7dbbde2b03d14a411ac2b1/time_machine-2.19.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e312c7d5d6bfffb96c6a7b39ff29e3046de100d7efaa3c01552654cfbd08f14c", size = 33079, upload-time = "2025-08-19T17:20:57.166Z" }, + { url = "https://files.pythonhosted.org/packages/48/69/184a0209f02dd0cb5e01e8d13cd4c97a5f389c4e3d09b95160dd676ad1e7/time_machine-2.19.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:714c40b2c90d1c57cc403382d5a9cf16e504cb525bfe9650095317da3c3d62b5", size = 34925, upload-time = "2025-08-19T17:20:58.117Z" }, + { url = "https://files.pythonhosted.org/packages/43/42/4bbf4309e8e57cea1086eb99052d97ff6ddecc1ab6a3b07aa4512f8bf963/time_machine-2.19.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eaa1c675d500dc3ccae19e9fb1feff84458a68c132bbea47a80cc3dd2df7072", size = 36384, upload-time = "2025-08-19T17:20:59.108Z" }, + { url = "https://files.pythonhosted.org/packages/b1/af/9f510dc1719157348c1a2e87423aed406589070b54b503cb237d9bf3a4fe/time_machine-2.19.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e77a414e9597988af53b2b2e67242c9d2f409769df0d264b6d06fda8ca3360d4", size = 34881, upload-time = "2025-08-19T17:21:00.116Z" }, + { url = "https://files.pythonhosted.org/packages/ca/28/61764a635c70cc76c76ba582dfdc1a84834cddaeb96789023af5214426b2/time_machine-2.19.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cd93996970e11c382b04d4937c3cd0b0167adeef14725ece35aae88d8a01733c", size = 32931, upload-time = "2025-08-19T17:21:01.095Z" }, + { url = "https://files.pythonhosted.org/packages/b6/e0/f028d93b266e6ade8aca5851f76ebbc605b2905cdc29981a2943b43e1a6c/time_machine-2.19.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8e20a6d8d6e23174bd7e931e134d9610b136db460b249d07e84ecdad029ec352", size = 34241, upload-time = "2025-08-19T17:21:02.052Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a6/36d1950ed1d3f613158024cf1dcc73db1d9ef0b9117cf51ef2e37dc06499/time_machine-2.19.0-cp312-cp312-win32.whl", hash = "sha256:95afc9bc65228b27be80c2756799c20b8eb97c4ef382a9b762b6d7888bc84099", size = 17021, upload-time = "2025-08-19T17:21:03.374Z" }, + { url = "https://files.pythonhosted.org/packages/b1/0d/e2dce93355abda3cac69e77fe96566757e98b8fe7fdcbddce89c9ced3f5f/time_machine-2.19.0-cp312-cp312-win_amd64.whl", hash = "sha256:e84909af950e2448f4e2562ea5759c946248c99ab380d2b47d79b62bd76fa236", size = 17857, upload-time = "2025-08-19T17:21:04.331Z" }, + { url = "https://files.pythonhosted.org/packages/eb/28/50ae6fb83b7feeeca7a461c0dc156cf7ef5e6ef594a600d06634fde6a2cb/time_machine-2.19.0-cp312-cp312-win_arm64.whl", hash = "sha256:0390a1ea9fa7e9d772a39b7c61b34fdcca80eb9ffac339cc0441c6c714c81470", size = 16677, upload-time = "2025-08-19T17:21:05.39Z" }, + { url = "https://files.pythonhosted.org/packages/a9/b8/24ebce67aa531bae2cbe164bb3f4abc6467dc31f3aead35e77f5a075ea3e/time_machine-2.19.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5e172866753e6041d3b29f3037dc47c20525176a494a71bbd0998dfdc4f11f2f", size = 19373, upload-time = "2025-08-19T17:21:06.701Z" }, + { url = "https://files.pythonhosted.org/packages/53/a5/c9a5240fd2f845d3ff9fa26f8c8eaa29f7239af9d65007e61d212250f15b/time_machine-2.19.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f70f68379bd6f542ae6775cce9a4fa3dcc20bf7959c42eaef871c14469e18097", size = 15056, upload-time = "2025-08-19T17:21:07.667Z" }, + { url = "https://files.pythonhosted.org/packages/b9/92/66cce5d2fb2a5e68459aca85fd18a7e2d216f725988940cd83f96630f2f1/time_machine-2.19.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e69e0b0f694728a00e72891ef8dd00c7542952cb1c87237db594b6b27d504a96", size = 33172, upload-time = "2025-08-19T17:21:08.619Z" }, + { url = "https://files.pythonhosted.org/packages/ae/20/b499e9ab4364cd466016c33dcdf4f56629ca4c20b865bd4196d229f31d92/time_machine-2.19.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3ae0a8b869574301ec5637e32c270c7384cca5cd6e230f07af9d29271a7fa293", size = 35042, upload-time = "2025-08-19T17:21:09.622Z" }, + { url = "https://files.pythonhosted.org/packages/41/32/b252d3d32791eb16c07d553c820dbc33d9c7fa771de3d1c602190bded2b7/time_machine-2.19.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:554e4317de90e2f7605ff80d153c8bb56b38c0d0c0279feb17e799521e987b8c", size = 36535, upload-time = "2025-08-19T17:21:10.571Z" }, + { url = "https://files.pythonhosted.org/packages/98/cf/4d0470062b9742e1b040ab81bad04d1a5d1de09806507bb6188989cfa1a7/time_machine-2.19.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6567a5ec5538ed550539ac29be11b3cb36af1f9894e2a72940cba0292cc7c3c9", size = 34945, upload-time = "2025-08-19T17:21:11.538Z" }, + { url = "https://files.pythonhosted.org/packages/24/71/2f741b29d98b1c18f6777a32236497c3d3264b6077e431cea4695684c8a1/time_machine-2.19.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82e9ffe8dfff07b0d810a2ad015a82cd78c6a237f6c7cf185fa7f747a3256f8a", size = 33014, upload-time = "2025-08-19T17:21:12.858Z" }, + { url = "https://files.pythonhosted.org/packages/e8/83/ca8dba6106562843fd99f672e5aaf95badbc10f4f13f7cfe8d8640a7019d/time_machine-2.19.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7e1c4e578cdd69b3531d8dd3fbcb92a0cd879dadb912ee37af99c3a9e3c0d285", size = 34350, upload-time = "2025-08-19T17:21:13.923Z" }, + { url = "https://files.pythonhosted.org/packages/21/7f/34fe540450e18d0a993240100e4b86e8d03d831b92af8bb6ddb2662dc6fc/time_machine-2.19.0-cp313-cp313-win32.whl", hash = "sha256:72dbd4cbc3d96dec9dd281ddfbb513982102776b63e4e039f83afb244802a9e5", size = 17047, upload-time = "2025-08-19T17:21:14.874Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5d/c8be73df82c7ebe7cd133279670e89b8b110af3ce1412c551caa9d08e625/time_machine-2.19.0-cp313-cp313-win_amd64.whl", hash = "sha256:e17e3e089ac95f9a145ce07ff615e3c85674f7de36f2d92aaf588493a23ffb4b", size = 17868, upload-time = "2025-08-19T17:21:15.819Z" }, + { url = "https://files.pythonhosted.org/packages/92/13/2dfd3b8fb285308f61cd7aa9bfa96f46ddf916e3549a0f0afd094c556599/time_machine-2.19.0-cp313-cp313-win_arm64.whl", hash = "sha256:149072aff8e3690e14f4916103d898ea0d5d9c95531b6aa0995251c299533f7b", size = 16710, upload-time = "2025-08-19T17:21:16.748Z" }, + { url = "https://files.pythonhosted.org/packages/05/c1/deebb361727d2c5790f9d4d874be1b19afd41f4375581df465e6718b46a2/time_machine-2.19.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f3589fee1ed0ab6ee424a55b0ea1ec694c4ba64cc26895bcd7d99f3d1bc6a28a", size = 20053, upload-time = "2025-08-19T17:21:17.704Z" }, + { url = "https://files.pythonhosted.org/packages/45/e8/fe3376951e6118d8ec1d1f94066a169b791424fe4a26c7dfc069b153ee08/time_machine-2.19.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7887e85275c4975fe54df03dcdd5f38bd36be973adc68a8c77e17441c3b443d6", size = 15423, upload-time = "2025-08-19T17:21:18.668Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c7/f88d95cd1a87c650cf3749b4d64afdaf580297aa18ad7f4b44ec9d252dfc/time_machine-2.19.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ce0be294c209928563fcce1c587963e60ec803436cf1e181acd5bc1e425d554b", size = 39630, upload-time = "2025-08-19T17:21:19.645Z" }, + { url = "https://files.pythonhosted.org/packages/cc/5d/65a5c48a65357e56ec6f032972e4abd1c02d4fca4b0717a3aaefd19014d4/time_machine-2.19.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a62fd1ab380012c86f4c042010418ed45eb31604f4bf4453e17c9fa60bc56a29", size = 41242, upload-time = "2025-08-19T17:21:20.979Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f9/fe5209e1615fde0a8cad6c4e857157b150333ed1fe31a7632b08cfe0ebdd/time_machine-2.19.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b25ec853a4530a5800731257f93206b12cbdee85ede964ebf8011b66086a7914", size = 44278, upload-time = "2025-08-19T17:21:21.984Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3a/a5e5fe9c5d614cde0a9387ff35e8dfd12c5ef6384e4c1a21b04e6e0b905d/time_machine-2.19.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a430e4d0e0556f021a9c78e9b9f68e5e8910bdace4aa34ed4d1a73e239ed9384", size = 42321, upload-time = "2025-08-19T17:21:23.755Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c5/56eca774e9162bc1ce59111d2bd69140dc8908c9478c92ec7bd15d547600/time_machine-2.19.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2415b7495ec4364c8067071e964fbadfe746dd4cdb43983f2f0bd6ebed13315c", size = 39270, upload-time = "2025-08-19T17:21:26.009Z" }, + { url = "https://files.pythonhosted.org/packages/9b/69/5dd0c420667578169a12acc8c8fd7452e8cfb181e41c9b4ac7e88fa36686/time_machine-2.19.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbfc6b90c10f288594e1bf89a728a98cc0030791fd73541bbdc6b090aff83143", size = 40193, upload-time = "2025-08-19T17:21:27.054Z" }, + { url = "https://files.pythonhosted.org/packages/75/a7/de974d421bd55c9355583427c2a38fb0237bb5fd6614af492ba89dacb2f9/time_machine-2.19.0-cp313-cp313t-win32.whl", hash = "sha256:16f5d81f650c0a4d117ab08036dc30b5f8b262e11a4a0becc458e7f1c011b228", size = 17542, upload-time = "2025-08-19T17:21:28.674Z" }, + { url = "https://files.pythonhosted.org/packages/76/0a/aa0d05becd5d06ae8d3f16d657dc8cc9400c8d79aef80299de196467ff12/time_machine-2.19.0-cp313-cp313t-win_amd64.whl", hash = "sha256:645699616ec14e147094f601e6ab9553ff6cea37fad9c42720a6d7ed04bcd5dc", size = 18703, upload-time = "2025-08-19T17:21:29.663Z" }, + { url = "https://files.pythonhosted.org/packages/1f/c0/f785a4c7c73aa176510f7c48b84b49c26be84af0d534deb222e0327f750e/time_machine-2.19.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b32daa965d13237536ea3afaa5ad61ade2b2d9314bc3a20196a0d2e1d7b57c6a", size = 17020, upload-time = "2025-08-19T17:21:30.653Z" }, + { url = "https://files.pythonhosted.org/packages/ed/97/c5fb51def06c0b2b6735332ad118ab35b4d9b85368792e5b638e99b1b686/time_machine-2.19.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:31cb43c8fd2d961f31bed0ff4e0026964d2b35e5de9e0fabbfecf756906d3612", size = 19360, upload-time = "2025-08-19T17:21:31.94Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4e/2d795f7d6b7f5205ffe737a05bb1cf19d8038233b797062b2ef412b8512b/time_machine-2.19.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:bdf481a75afc6bff3e520db594501975b652f7def21cd1de6aa971d35ba644e6", size = 15033, upload-time = "2025-08-19T17:21:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/dd/32/9bad501e360b4e758c58fae616ca5f8c7ad974b343f2463a15b2bf77a366/time_machine-2.19.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:00bee4bb950ac6a08d62af78e4da0cf2b4fc2abf0de2320d0431bf610db06e7c", size = 33379, upload-time = "2025-08-19T17:21:33.925Z" }, + { url = "https://files.pythonhosted.org/packages/a3/45/eda0ca4d793dfd162478d6163759b1c6ce7f6e61daa7fd7d62b31f21f87f/time_machine-2.19.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9f02199490906582302ce09edd32394fb393271674c75d7aa76c7a3245f16003", size = 35123, upload-time = "2025-08-19T17:21:34.945Z" }, + { url = "https://files.pythonhosted.org/packages/f0/5a/97e16325442ae5731fcaac794f0a1ef9980eff8a5491e58201d7eb814a34/time_machine-2.19.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e35726c7ba625f844c13b1fc0d4f81f394eefaee1d3a094a9093251521f2ef15", size = 36588, upload-time = "2025-08-19T17:21:35.975Z" }, + { url = "https://files.pythonhosted.org/packages/e8/9d/bf0b2ccc930cc4a316f26f1c78d3f313cd0fa13bb7480369b730a8f129db/time_machine-2.19.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:304315023999cd401ff02698870932b893369e1cfeb2248d09f6490507a92e97", size = 35013, upload-time = "2025-08-19T17:21:37.017Z" }, + { url = "https://files.pythonhosted.org/packages/f0/5a/39ac6a3078174f9715d88364871348b249631f12e76de1b862433b3f8862/time_machine-2.19.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9765d4f003f263ea8bfd90d2d15447ca4b3dfa181922cf6cf808923b02ac180a", size = 33303, upload-time = "2025-08-19T17:21:38.352Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ac/d8646baf9f95f2e792a6d7a7b35e92fca253c4a992afff801beafae0e5c2/time_machine-2.19.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7837ef3fd5911eb9b480909bb93d922737b6bdecea99dfcedb0a03807de9b2d3", size = 34440, upload-time = "2025-08-19T17:21:39.382Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8b/8b6568c5ae966d80ead03ab537be3c6acf2af06fb501c2d466a3162c6295/time_machine-2.19.0-cp314-cp314-win32.whl", hash = "sha256:4bb5bd43b1bdfac3007b920b51d8e761f024ed465cfeec63ac4296922a4ec428", size = 17162, upload-time = "2025-08-19T17:21:40.381Z" }, + { url = "https://files.pythonhosted.org/packages/46/a5/211c1ab4566eba5308b2dc001b6349e3a032e3f6afa67ca2f27ea6b27af5/time_machine-2.19.0-cp314-cp314-win_amd64.whl", hash = "sha256:f583bbd0aa8ab4a7c45a684bf636d9e042d466e30bcbae1d13e7541e2cbe7207", size = 18040, upload-time = "2025-08-19T17:21:41.363Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fc/4c2fb705f6371cb83824da45a8b967514a922fc092a0ef53979334d97a70/time_machine-2.19.0-cp314-cp314-win_arm64.whl", hash = "sha256:f379c6f8a6575a8284592179cf528ce89373f060301323edcc44f1fa1d37be12", size = 16752, upload-time = "2025-08-19T17:21:42.336Z" }, + { url = "https://files.pythonhosted.org/packages/79/ab/6437d18f31c666b5116c97572a282ac2590a82a0a9867746a6647eaf4613/time_machine-2.19.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a3b8981f9c663b0906b05ab4d0ca211fae4b63b47c6ec26de5374fe56c836162", size = 20057, upload-time = "2025-08-19T17:21:43.35Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a2/e03639ec2ba7200328bbcad8a2b2b1d5fccca9cceb9481b164a1cabdcb33/time_machine-2.19.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8e9c6363893e7f52c226afbebb23e825259222d100e67dfd24c8a6d35f1a1907", size = 15430, upload-time = "2025-08-19T17:21:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ff/39e63a48e840f3e36ce24846ee51dd99c6dba635659b1750a2993771e88e/time_machine-2.19.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:206fcd6c9a6f00cac83db446ad1effc530a8cec244d2780af62db3a2d0a9871b", size = 39622, upload-time = "2025-08-19T17:21:45.821Z" }, + { url = "https://files.pythonhosted.org/packages/9a/2e/ee5ac79c4954768705801e54817c7d58e07e25a0bb227e775f501f3e2122/time_machine-2.19.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bf33016a1403c123373ffaeff25e26e69d63bf2c63b6163932efed94160db7ef", size = 41235, upload-time = "2025-08-19T17:21:46.783Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3e/9af5f39525e779185c77285b8bbae15340eeeaa0afb33d458bc8b47d459b/time_machine-2.19.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9247c4bb9bbd3ff584ef4efbdec8efd9f37aa08bcfc4728bde1e489c2cb445bd", size = 44276, upload-time = "2025-08-19T17:21:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/59/fe/572c7443cc27140bbeae3947279bbd4a120f9e8622253a20637f260b7813/time_machine-2.19.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:77f9bb0b86758d1f2d9352642c874946ad5815df53ef4ca22eb9d532179fe50d", size = 42330, upload-time = "2025-08-19T17:21:48.881Z" }, + { url = "https://files.pythonhosted.org/packages/cf/24/1a81c2e08ee7dae13ec8ceed27a29afa980c3d63852e42f1e023bf0faa03/time_machine-2.19.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0b529e262df3b9c449f427385f4d98250828c879168c2e00eec844439f40b370", size = 39281, upload-time = "2025-08-19T17:21:49.907Z" }, + { url = "https://files.pythonhosted.org/packages/d2/60/6f0d6e5108978ca1a2a4ffb4d1c7e176d9199bb109fd44efe2680c60b52a/time_machine-2.19.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9199246e31cdc810e5d89cb71d09144c4d745960fdb0824da4994d152aca3303", size = 40201, upload-time = "2025-08-19T17:21:50.953Z" }, + { url = "https://files.pythonhosted.org/packages/73/b9/3ea4951e8293b0643feb98c0b9a176fa822154f1810835db3f282968ab10/time_machine-2.19.0-cp314-cp314t-win32.whl", hash = "sha256:0fe81bae55b7aefc2c2a34eb552aa82e6c61a86b3353a3c70df79b9698cb02ca", size = 17743, upload-time = "2025-08-19T17:21:51.948Z" }, + { url = "https://files.pythonhosted.org/packages/e4/8b/cd802884ca8a98e2b6cdc2397d57dd12ff8a7d1481e06fc3fad3d4e7e5ff/time_machine-2.19.0-cp314-cp314t-win_amd64.whl", hash = "sha256:7253791b8d7e7399fbeed7a8193cb01bc004242864306288797056badbdaf80b", size = 18956, upload-time = "2025-08-19T17:21:52.997Z" }, + { url = "https://files.pythonhosted.org/packages/c6/49/cabb1593896082fd55e34768029b8b0ca23c9be8b2dc127e0fc14796d33e/time_machine-2.19.0-cp314-cp314t-win_arm64.whl", hash = "sha256:536bd1ac31ab06a1522e7bf287602188f502dc19d122b1502c4f60b1e8efac79", size = 17068, upload-time = "2025-08-19T17:21:54.064Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/db/03eaf4331631ef6b27d6e3c9b68c54dc6f0d63d87201fed600cc409307fd/tomlkit-0.15.0.tar.gz", hash = "sha256:7d1a9ecba3086638211b13814ea79c90dd54dd11993564376f3aa92271f5c7a3", size = 161875, upload-time = "2026-05-10T07:38:22.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/43/8bd850ee71a191bf072e31302c73a66be413fecdd98fdcd111ecbcce13ca/tomlkit-0.15.0-py3-none-any.whl", hash = "sha256:4dbc8f0fc024412b57ced8757ac7461305126a648ff8c2c807fcb8e133a78738", size = 41328, upload-time = "2026-05-10T07:38:23.517Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/24/95ec527ad67b76d59299e5465b3935d05e4294b7e0290a3924b7487df30b/tornado-6.5.7.tar.gz", hash = "sha256:66c513a76cda70d53907bc27cf1447557699c2e95aa48ba27a442ff61c3ddfc2", size = 519252, upload-time = "2026-06-08T17:34:51.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/dc/c7043cab6fed8ae159fc1923ce829ada35c4dbd797d408a43858ffaf9639/tornado-6.5.7-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:148b2eb15c2c765a50796172c1e499649b35f30d2e3c3d3e15913cfa56bfb163", size = 448543, upload-time = "2026-06-08T17:34:38.052Z" }, + { url = "https://files.pythonhosted.org/packages/92/4f/090b1431e5a43df696feceffc268c5383cc079ecb5f08ce58f917109aafe/tornado-6.5.7-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9da38de27f1da3b78a966f0dae12b5a1ea9afe72ca805d84ff06508272ddf100", size = 446707, upload-time = "2026-06-08T17:34:39.594Z" }, + { url = "https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8d759e71906ee783f8867b93bf26a265743da4c1e2f4a018464c1ba019862972", size = 449774, upload-time = "2026-06-08T17:34:41.204Z" }, + { url = "https://files.pythonhosted.org/packages/35/37/d434c73f4c6e014b745b9b37085f34f40c022f007efff3d7fe65991899f3/tornado-6.5.7-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a46347a18f23fb92b396beebe0fb78f61dda0cc302445202c16203d8a18848b", size = 450745, upload-time = "2026-06-08T17:34:42.531Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2b/56b9aff361d7f1ab728a805ec7d7ea835f8807afa9f5cc690ea0e630efb9/tornado-6.5.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7778b30bef919231265e91c69963ce0f49a1e9c07ac900bbe75b19ce2575ba92", size = 450578, upload-time = "2026-06-08T17:34:43.787Z" }, + { url = "https://files.pythonhosted.org/packages/02/30/a7444fb23aa76860a14198fab96ac79f1866b0a6e19e26c4381b0938e50f/tornado-6.5.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e726f0c75da7726eec023aa62751ff8878bd2737e34fbdd33b1ae5897d2200f5", size = 449985, upload-time = "2026-06-08T17:34:45.326Z" }, + { url = "https://files.pythonhosted.org/packages/5c/42/5f0e56c01e8d9d36f4e23f367b85ae6cae0c1ecddd5e6977d8388ad27488/tornado-6.5.7-cp39-abi3-win32.whl", hash = "sha256:f8de3bf12d3efdd0cbe7c8887868198f8a91415e3f29fcf258d9b8eb7b1d9ae4", size = 451047, upload-time = "2026-06-08T17:34:46.784Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/b393076ffb21b469eec5b328a0534cf03a3b90bfc6b1f09507cdd075d938/tornado-6.5.7-cp39-abi3-win_amd64.whl", hash = "sha256:de942f843533a039ef9fa3d9c88c7cd8a7c94553fb5ad0154270989b3d99a2c4", size = 451485, upload-time = "2026-06-08T17:34:48.248Z" }, + { url = "https://files.pythonhosted.org/packages/71/2e/7b1c769803121b809112cf9a00681c472eae1d80e32d7ec0e0bd61d0d0e1/tornado-6.5.7-cp39-abi3-win_arm64.whl", hash = "sha256:ff934fce95643af5f11efdae618eaa73d469dc588641e5c8d19295a0c65c4796", size = 450506, upload-time = "2026-06-08T17:34:49.702Z" }, +] + +[[package]] +name = "tox" +version = "4.56.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachetools" }, + { name = "colorama" }, + { name = "filelock" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "pluggy" }, + { name = "pyproject-api" }, + { name = "python-discovery" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli-w" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/fc/903385f783a1d7b7670eb742654e8f6f109c7a5a65913f92dfee8d033ea7/tox-4.56.4.tar.gz", hash = "sha256:d49e371119ebfafb15054ad7ccff3d03027ccb65195fae3ac656b431b5524055", size = 286611, upload-time = "2026-07-08T23:59:07.033Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/f2/d2e2b6969203c319165860ba93272cf12c71d42acff5acd2c84d7543b460/tox-4.56.4-py3-none-any.whl", hash = "sha256:53bac88382b9638a5ce40fbaddd6076e1c8f638751af7bf8e759392c953df2f0", size = 217458, upload-time = "2026-07-08T23:59:05.21Z" }, +] + +[[package]] +name = "traitlets" +version = "5.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" }, +] + +[[package]] +name = "ty" +version = "0.0.59" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/b0/84ae7b3bf6e3e9f57eb9635eeff5a80b36e57aa089f40be0fb5c384fa176/ty-0.0.59.tar.gz", hash = "sha256:53e53ffeed78ad59cd237fa8ea1316d2b94e13efdea9a945698acab549e005aa", size = 6145435, upload-time = "2026-07-12T20:22:02.781Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/e8/650b42fbef4d48e6ca682b0b6e9b68fa8fcf55cbb0a6892ab89990018b6f/ty-0.0.59-py3-none-linux_armv6l.whl", hash = "sha256:f8fb08a767ef8f11ea3c537b9d77860726cc2bc39e6f77ad13c02d5b289f20a7", size = 11700328, upload-time = "2026-07-12T20:21:26.046Z" }, + { url = "https://files.pythonhosted.org/packages/22/ac/0ca3a89d5f59ae5f308e5e83428cac5f9143200767743e052fba90b4b81e/ty-0.0.59-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c7f4d5630836c8a0ba13dd4ac7bdae080a7d6ebe965b817ff642dc961bcf2a53", size = 11494310, upload-time = "2026-07-12T20:21:28.491Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f8/5076de6001cefbccd8e6dc8472262697e43308ff66b0e87c72abba136357/ty-0.0.59-py3-none-macosx_11_0_arm64.whl", hash = "sha256:872f6fb02c6db5553c4d5fb283b3d50f0985fb9a29a910e4fda4793a775c1926", size = 11026797, upload-time = "2026-07-12T20:21:30.879Z" }, + { url = "https://files.pythonhosted.org/packages/2e/0f/fca28481b6a138e2b798ad9fdc98a095475f9104948ba242fce4b477782b/ty-0.0.59-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2af8eefbfe806337770eec12c0c819c5f1b8f5b85f8369cb1cc9fa25234a2208", size = 11475304, upload-time = "2026-07-12T20:21:33.041Z" }, + { url = "https://files.pythonhosted.org/packages/08/4b/1fed8b81b389ef4bbc0400f19e05fc16496b162577779dc0e5fc65ac216c/ty-0.0.59-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0acf8b76a1c9a7ddef460b42475f6c76193164426ab080783af1c3175b4b999b", size = 11533131, upload-time = "2026-07-12T20:21:35.189Z" }, + { url = "https://files.pythonhosted.org/packages/5f/fc/04eec35e05a10e0fea1c6503a290ccc3935efda9c845aff64e83282c1af7/ty-0.0.59-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:043c2e00eb1d7475f928af7dedd71f69b64e69bfca55e36f4c968479e1373fc4", size = 12205932, upload-time = "2026-07-12T20:21:37.324Z" }, + { url = "https://files.pythonhosted.org/packages/a9/dd/a61de859659fa11b55917ad38340a8f2c61f5ae17d1874929f29084c6990/ty-0.0.59-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0d688d857441df57f48fca66c029d85cf737c510e7be1d01144cdad1e58d968", size = 12758406, upload-time = "2026-07-12T20:21:39.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e8/fa66f05997eab8ca75fc4f17320140e25467849e0cc75597f898cc22099c/ty-0.0.59-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a96c9f88394a3b42c737e2125b2330543f0d90a43b49761f377d96f8c3ee0d62", size = 12288176, upload-time = "2026-07-12T20:21:41.784Z" }, + { url = "https://files.pythonhosted.org/packages/15/68/0fca59963bd5123f42d5f7da50667e7a52e8e9615e3a16d8c2c0d3b2d143/ty-0.0.59-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08dbcb268edcafcb152e59475b5b495ce28d0b340a395c09943557678f4d5a6", size = 12028471, upload-time = "2026-07-12T20:21:43.82Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5b/cd7dabbbab392578f11179919da5c25d8c3322e5388a688f539ea0539603/ty-0.0.59-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8812764b9a40fdc98df1272826e73a298ef56b06681135e643bcf90aad1896f7", size = 12297646, upload-time = "2026-07-12T20:21:45.76Z" }, + { url = "https://files.pythonhosted.org/packages/1d/37/2e9c94f0b383d8cbe1a35517ab470b7810bc9d7501603ab532bcd5be5e90/ty-0.0.59-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:fd53b8581641d8dad7bfac6d5ea589e91a883d6837e0b9a286fdae30722b7c69", size = 11432519, upload-time = "2026-07-12T20:21:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0a/af93e9785200f11ac416cc20235fc2464c9bd978e791190684ea0e458795/ty-0.0.59-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:86da5872124a41877d95058bc17d33ddcff034b587eb5f1e2917ab88ba227dac", size = 11554993, upload-time = "2026-07-12T20:21:49.671Z" }, + { url = "https://files.pythonhosted.org/packages/4b/dd/651bf87e20d00376c81b19124756491cffaf20eb8bec05a8794e5a8cf641/ty-0.0.59-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6a233eef5f2fd4d894881e4a0aec83c9f172bfae1d787d6596ee1939fcc7723e", size = 11818230, upload-time = "2026-07-12T20:21:51.659Z" }, + { url = "https://files.pythonhosted.org/packages/16/50/c947c4155fea751d135b19affdf734bbce72a94e446b866cf0c62f8bed69/ty-0.0.59-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7ff678c18b5f1e3128b75a35e50dee7908dea55155baa31cd790619d5014cbf5", size = 12135194, upload-time = "2026-07-12T20:21:53.796Z" }, + { url = "https://files.pythonhosted.org/packages/b1/13/e5feb138888de1e95037c843571bbbd4ac21bf0a190507468098599a321f/ty-0.0.59-py3-none-win32.whl", hash = "sha256:cf8abb4b8095c5fe39102b8127f5886db308c8d4600909ddbc905512ce9c8163", size = 11179249, upload-time = "2026-07-12T20:21:55.752Z" }, + { url = "https://files.pythonhosted.org/packages/76/dd/52914dcbeeba92c207de40ef7109a58dcb5527aeb21c8f8feb7402aa9e29/ty-0.0.59-py3-none-win_amd64.whl", hash = "sha256:1dde20a82243d24407869e5a608c2f15efddd5cefc662aef461a5af84bfb3f8b", size = 12251079, upload-time = "2026-07-12T20:21:58.1Z" }, + { url = "https://files.pythonhosted.org/packages/d4/8f/ac36fde77e223297454c1e0aeb8888c169eaacf3163bb609e3af942c88cb/ty-0.0.59-py3-none-win_arm64.whl", hash = "sha256:987043ee9e021f49493d9135891ac69c1affeee0d4ad4480c5fa4d9c975fc91b", size = 11650921, upload-time = "2026-07-12T20:22:00.348Z" }, +] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20260518" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/e8/c01bdf0d7c3659428c091fbd693177093639565bcbc86bc20098e6d37cc6/types_python_dateutil-2.9.0.20260518.tar.gz", hash = "sha256:51f02dc03b61c7f6a07df45797d4dfe8a1aa47f0b7db9ad89f6fd3a1a70e1b51", size = 17082, upload-time = "2026-05-18T06:05:24.508Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/22/169273273ca34e9ab0ae2f387ba72ed7e09faaaf834da01d6b89c2bea71a/types_python_dateutil-2.9.0.20260518-py3-none-any.whl", hash = "sha256:d6a9c5bd0de61460c8fdef8ab2b400f956a1a1075cce08d4e2b4434e478c50b8", size = 18431, upload-time = "2026-05-18T06:05:23.641Z" }, +] + +[[package]] +name = "types-requests" +version = "2.33.0.20260712" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/51/703318f7b7be8bee126ec13bf615050f932d0179b8784420f3a0199cc769/types_requests-2.33.0.20260712.tar.gz", hash = "sha256:2141b67ab534a5c5cd2dac5034f2a35f42e699c5bf185eee608c5246a069d7fb", size = 25084, upload-time = "2026-07-12T05:14:20.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/e7/010c87f559e216d83f9dc51e939633fd0d0ead3377340181ab0e223cd3b5/types_requests-2.33.0.20260712-py3-none-any.whl", hash = "sha256:de027e28c171d3da529689cbfa023b0b4eab188c8dfa22fd834eebd2cee6e7bb", size = 21392, upload-time = "2026-07-12T05:14:19.616Z" }, +] + +[[package]] +name = "types-toml" +version = "0.10.8.20260518" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/11/6ece999e91f2ccb848ab4420f3f4816e78ac0541f739e6864affdaaa5737/types_toml-0.10.8.20260518.tar.gz", hash = "sha256:80e10facd24fdeda9d5c672187d72be3ac284843788d67f5aae59e3e016db6fe", size = 9419, upload-time = "2026-05-18T06:02:16.719Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/25/489751806bf5c95e4007f8e17409199c54d31e49ffbea07c5729b1286c8e/types_toml-0.10.8.20260518-py3-none-any.whl", hash = "sha256:0e564ab05f6fde62a315b3b5a9b6624fda569399795d30a37e64705a70459303", size = 9669, upload-time = "2026-05-18T06:02:15.86Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "uuid7" +version = "0.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/19/7472bd526591e2192926247109dbf78692e709d3e56775792fec877a7720/uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c", size = 14052, upload-time = "2021-12-29T01:38:21.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/77/8852f89a91453956582a85024d80ad96f30a41fed4c2b3dce0c9f12ecc7e/uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61", size = 7477, upload-time = "2021-12-29T01:38:20.418Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.51.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, +] + +[[package]] +name = "vcrpy" +version = "8.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/d5/8a1f8eb603e2d35fbb0ecd1e309d0c5c18a0ecfc8c0a8f04088bbc8f833b/vcrpy-8.3.0.tar.gz", hash = "sha256:46d64e77e8d95e5c76c7d9a94ff05d8b38b2ae4e1d4869eb0235024b6fcb5212", size = 96117, upload-time = "2026-07-04T14:27:01.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/77/cb4219be91508399cbcb6143bad89462cfb16f6c638458f454a5d46ac95a/vcrpy-8.3.0-py3-none-any.whl", hash = "sha256:bd66e6143746778157f00e2a922527a8d96b2fdc350be8988a45a29c843815b9", size = 46530, upload-time = "2026-07-04T14:27:00.546Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/d9/b477fddb68840b570af8b22afe9b035cbc277b5fb7b33dea390617a8b10f/virtualenv-21.6.1.tar.gz", hash = "sha256:15f978b7cd329f24855ff4a0c4b4899cc7678589f49adbdcbbb4d3232e641128", size = 5526620, upload-time = "2026-07-10T19:33:53.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl", hash = "sha256:afe991df855715a2b2f60edfcc0107ef95a79fdfd8cb4cdaa71603d1c12e463b", size = 5506392, upload-time = "2026-07-10T19:33:51.629Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253, upload-time = "2026-06-29T18:11:11.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166, upload-time = "2026-06-29T18:11:09.888Z" }, +] + +[[package]] +name = "websockets" +version = "16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/02/b9a097e1e16fee4e2fd1ec8c39f6a9c5d6257bae8fa12640caf869f54436/websockets-16.1.tar.gz", hash = "sha256:299468cbe42e2b9981134c7c51d99387d8a7bf562b00183b3eec53f882846dad", size = 182530, upload-time = "2026-07-10T06:32:57.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/31/cd11d2796b95c93645bac8e396b0f4bac0896a07a7b87d473bfc359f02c3/websockets-16.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de72a9c611178b15557d98eabd3101c9663c4d68938510478a6d162f99afd213", size = 179772, upload-time = "2026-07-10T06:30:22.983Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9b/34306d802f9b599eab041688a2086318037560cfae616a860234cca575b6/websockets-16.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:37b0e4d726ffea3776670092d3d13e1cb605076f036a695fd1259de0d9b9fe02", size = 177457, upload-time = "2026-07-10T06:30:24.636Z" }, + { url = "https://files.pythonhosted.org/packages/06/3a/36ebbb978a7af70ff952afe5b22561264967164e9ad68b6734cae94efeb4/websockets-16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:00d50c0a27098fcb7ab47b3d99a1b1159b534dbcd959fbf05113ebc37e5f927b", size = 177737, upload-time = "2026-07-10T06:30:25.954Z" }, + { url = "https://files.pythonhosted.org/packages/17/d7/944f341d0d3c0450ffd3d171479531df1818cb1df1623af4065113999c44/websockets-16.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1acb698bff1da1782b31aebd8d7a24d7d05453964abcd7d03dbf6e25893908e8", size = 186244, upload-time = "2026-07-10T06:30:27.235Z" }, + { url = "https://files.pythonhosted.org/packages/32/e5/a9b98fc49ef0214718a9c839c6c63856a921877256ec46f371be32decfa8/websockets-16.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc2c453f3b5f99c56b16e233aad5299860558487d26adb2ed27a00c14ca24b8c", size = 187484, upload-time = "2026-07-10T06:30:28.615Z" }, + { url = "https://files.pythonhosted.org/packages/ad/7a/a575b52ca090b1976ffbe4b5f0762d03f399dfcb48eab883101331be71a9/websockets-16.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1a9f08a0728b0835f1c6abe1d9b746ab3de49b7336a0e1919cf96be1e76273eb", size = 190143, upload-time = "2026-07-10T06:30:29.91Z" }, + { url = "https://files.pythonhosted.org/packages/7c/40/705fbbd5677242fd36f724e9a94103e6bbdcb7d71e8f4498bfc1a8a7d413/websockets-16.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a089979d6173b27af18026c8d8b0077f83669a9169174482c4651e9f5739a5b6", size = 188004, upload-time = "2026-07-10T06:30:31.357Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0c/58227c8d66b1c4060c53bac8e066fb4fe2603060408e934f48660a448d72/websockets-16.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a3c18dba232ec2b92a68579c9fed8ff5a18f853d1e09fc0b6ca3159e94f689fe", size = 186689, upload-time = "2026-07-10T06:30:32.712Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d0/5c1314782594aa347e0f18808ee277a61986a2a2f9f470df9893183995bd/websockets-16.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c1eb7df4170d5068892a8834fb5c07b9552353deb0dbeb0bff3820481ae4792", size = 184559, upload-time = "2026-07-10T06:30:34.127Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e6/109c6f16850fd674b7e3d0e58b8987f05d3881abaa25f42a9faf5e85f097/websockets-16.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c522bd48e625b6d557aa228967258d6d3da031c4cc21d3352fb302479aa9ba0a", size = 186997, upload-time = "2026-07-10T06:30:35.397Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ec/6afa1aebc59426438b85cf7a3868c53a89005e2250a648c99e99943b90a4/websockets-16.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d106396927a7f00b0f3a69215c3357f87bf0bca6844247121f7e8291e826a3b1", size = 185621, upload-time = "2026-07-10T06:30:36.88Z" }, + { url = "https://files.pythonhosted.org/packages/27/24/c038fe8682e9345bfa422d2cc5cc68b0491ab942c92e176bf8dfa6e8331f/websockets-16.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d71bed12909b8039955536e192867d02d76cd3797cedfd0facf822e7668636c3", size = 187384, upload-time = "2026-07-10T06:30:38.096Z" }, + { url = "https://files.pythonhosted.org/packages/30/ca/dc0ef2be39c67394e24bc982a0af59cd6249bf2f4e4272813c5c505d0da9/websockets-16.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:9c1cf6f9a936b030b5bed0e800c5ee32069338129084546baf5ff5014dc62fa9", size = 185258, upload-time = "2026-07-10T06:30:39.579Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/3ffecd83ca3404b41fbdf8e9b178e55b529cd59bf64ea08b5a37b616b568/websockets-16.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3fd3e6a7af2c8fcdcf4ffbeaf7f54a567b91a83267204187797f31faaa2a4efa", size = 186050, upload-time = "2026-07-10T06:30:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/75/26/2e068497c78f31591a610ab7ef6d8d383ecadbe98f9121e1ebda77ef6d2b/websockets-16.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dddd27175bf640acae5561fa79b77e8ec71fc445816200523e5c19b6a556fb72", size = 186273, upload-time = "2026-07-10T06:30:42.309Z" }, + { url = "https://files.pythonhosted.org/packages/44/ab/4dc049cb2c9e1be3a2c6fef77118f9c5049979e99cd56a97759d2f40f980/websockets-16.1-cp310-cp310-win32.whl", hash = "sha256:cce36c80b3f2fede7942f1756d3d885fa6fa086766c8c1bcf00695ab80f0d51a", size = 180157, upload-time = "2026-07-10T06:30:43.565Z" }, + { url = "https://files.pythonhosted.org/packages/6d/4f/5e010ce5f66a8e5df380843f704ada508195a021c0c8a0f933639c9ee1c0/websockets-16.1-cp310-cp310-win_amd64.whl", hash = "sha256:115fc4695b94bb855995b23fb1abcb66099a5995575d3d5bc5605a616c58d0eb", size = 180458, upload-time = "2026-07-10T06:30:45.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/13/d47429afcc2c28616c32640009c84ea3f95660dab805766345b9682468e0/websockets-16.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a9b1d7a63cba8e6b9b77e499a81eab29d31100298d090ad4507d1048c0b9cae0", size = 179770, upload-time = "2026-07-10T06:30:46.308Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c7/2f0a722039a1e0107be73ed672ba604449b4956e48733e8e6b8a005aea42/websockets-16.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bedbc5efeb96621aa2921d2d92608246691399418cac22acba427eb11877ea1f", size = 177455, upload-time = "2026-07-10T06:30:47.601Z" }, + { url = "https://files.pythonhosted.org/packages/43/6a/c26b0ae449e93d256ce5cdd50d5fe97b575a63e8dcd311a1faa972fd6bc6/websockets-16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd847ab82133015afe65d778e7966ab42dba16bd7ad2e5b8a7918db6539f3f94", size = 177731, upload-time = "2026-07-10T06:30:49.102Z" }, + { url = "https://files.pythonhosted.org/packages/cc/3f/381550b344a02f0d2f84cda25e79b54575291bc7022128a41163fe8ba5b0/websockets-16.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e2fb33ccb16ee40a95cc676d7b0ff451a9a2632f11a0dbc2e666326892b2e1de", size = 187066, upload-time = "2026-07-10T06:30:50.505Z" }, + { url = "https://files.pythonhosted.org/packages/4a/87/5ab1ec2086910f23cfb9ec0c1c29fbcc24a9d190b5198b1557c00ce4a47e/websockets-16.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f15b6d9ea9c2eaf6ccab964a082b09bfa6634a495bb0c2e9e7ee6943f58976", size = 188301, upload-time = "2026-07-10T06:30:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/75/4b/bbbb8e6fac4cfc53d7aaa69a3d531bf10799354b0021f4b58914aced8c1a/websockets-16.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:638cf57c48b4ad8ac1ff1e453f4f97db2426b690ddc111e6da96b27b4a340bc3", size = 191594, upload-time = "2026-07-10T06:30:53.229Z" }, + { url = "https://files.pythonhosted.org/packages/5c/da/6c0c349443d6e999f481e3d9a0e57e7ac2956d75d6391bec24b92af3fe13/websockets-16.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2c1c85f61bc9d5eac57ce705d848dc2d2ce3680638300bf4e1da7d749e2cf4ce", size = 188862, upload-time = "2026-07-10T06:30:54.744Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ea/a368d37c010425a5451f42052fe804e754e23333e8448aef5d55c8a8d64f/websockets-16.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:eeab6d27f51c7e579023c971f5e6dff200deadf01faf6831beaecd32052dfaef", size = 187633, upload-time = "2026-07-10T06:30:56.055Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4e/2ecd59add10d0855ec03dbdedfcdacdbd1aaabcd44b7dcbeda27538662e9/websockets-16.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2ed64e5a97b0b97a0b66e18bfe281317a75fbbd5afe692f939ea8d14a4292f2c", size = 185089, upload-time = "2026-07-10T06:30:57.444Z" }, + { url = "https://files.pythonhosted.org/packages/6f/eb/c6c3dcd7a01097bb0d42f4e9ef21a2c2a491d36b77cd0870ab59f9e8e77f/websockets-16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3b021d0ed4bc16eea9775f62c9fa71acdacba0fc790b38581754dedf29ca60", size = 187790, upload-time = "2026-07-10T06:30:58.731Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3e/775d36885d5e48ab8020aaf377de0ff5fbeb8bc2682a7e46419e4a14521c/websockets-16.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6eb604a4167f0a0d53c2243dfc667a29f0b43c3436057184e070bb82a1000fa2", size = 186381, upload-time = "2026-07-10T06:31:00.355Z" }, + { url = "https://files.pythonhosted.org/packages/ad/90/6305c00812a92e47d0582604c02bd759db0118bbafc13f707d712dbcf898/websockets-16.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9a3f125e44c3e34d61d111652e608e0f5b85ce08c225c8d56ad0eb822fa40030", size = 188193, upload-time = "2026-07-10T06:31:01.677Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/96bf8302c81d961585b4d34a2ddd3f229782f9b8c57bc78bbf98f1b1a4ac/websockets-16.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8fdf0b00d0d1f30d1f06a92cab46fe542eec3eb302a7aee7163f142d0780f216", size = 185771, upload-time = "2026-07-10T06:31:03.062Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1f/e8fe44b1d2dc417d740d9959d28fd2a846f268e7df38a686c04ac7dfe947/websockets-16.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:67b56828712f5fa7852de4c0265c28827311a657a4d275b7312ed0d1a918bee4", size = 186803, upload-time = "2026-07-10T06:31:04.34Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/b07d3a4e1eb2ab03e94e7f53f0c7a628e85fde6ad86011f7afd08f27b985/websockets-16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39c7e7730be33b8f0cd6f0aa8e8c82f9cdd1813f159765e073b2ece65f4824b5", size = 187041, upload-time = "2026-07-10T06:31:05.567Z" }, + { url = "https://files.pythonhosted.org/packages/a6/fd/e0abb8acc435642ac4a671490f6cf781c882f3fe682cdced9080ea455ab5/websockets-16.1-cp311-cp311-win32.whl", hash = "sha256:c54fe94fb2f11e11b48920c5f971e298cec73ac35db56efe57a49db63dfc95d4", size = 180158, upload-time = "2026-07-10T06:31:06.929Z" }, + { url = "https://files.pythonhosted.org/packages/81/06/85574d9458d3b913090087b817df0cc47b68e9a01dd0ab6ac04b77f49b0a/websockets-16.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9f4fb9ae8b802e55609685db98382d48fd3feb1397804e1e774968dea0f28c7", size = 180456, upload-time = "2026-07-10T06:31:08.247Z" }, + { url = "https://files.pythonhosted.org/packages/a1/52/748c014f07f4e0e170c8932de7e647a1511d5ab3049cd978797136aee577/websockets-16.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b6aa3f7ad345cf3862c21f4fbf2ef5e14d911348476c2845e137c091fe3a3f0b", size = 179798, upload-time = "2026-07-10T06:31:09.664Z" }, + { url = "https://files.pythonhosted.org/packages/8b/5e/2a2e64d977d084e49d37c187c26c056daaff41965be7300cd5dbde6f8b07/websockets-16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b43fcfb521ac2f34ba80b7b8ea16303e4ad82dd8af667bf40839ad3a5d37b164", size = 177478, upload-time = "2026-07-10T06:31:11.072Z" }, + { url = "https://files.pythonhosted.org/packages/aa/12/5b85b4e75d697e548a94962ce5c036b05dd21cb9545759d555c5586422fc/websockets-16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2bd3e12cd9afbe2baedae0b1eeade8ba64329b60fe2f9abdc966bd10fd2c2ef5", size = 177746, upload-time = "2026-07-10T06:31:12.386Z" }, + { url = "https://files.pythonhosted.org/packages/9d/62/79b1c8f0cee0da648b4899e1c5b0dbd3aa59846985136a54854db6827ab4/websockets-16.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f41979c8623df9bd30d949d82010a8fda5c56ff12cd8508a5b7272b6d4b53a", size = 187345, upload-time = "2026-07-10T06:31:13.754Z" }, + { url = "https://files.pythonhosted.org/packages/25/34/b7c5c52c2f24280e1c017acb7ad491a566750a5cceca7f3cf999373bba21/websockets-16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a24d1f35aef07d794a16c853c688e74956c50239bec37b4f2de080056046419b", size = 188581, upload-time = "2026-07-10T06:31:15.075Z" }, + { url = "https://files.pythonhosted.org/packages/bc/37/604193bebcbeffe96fdf795960b83a15d600880c64dc17ec9c31c5b3427d/websockets-16.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0c64c024ddf7a35331b21fcddb562a039c275d2c82e8c2d12939e7da23997270", size = 191362, upload-time = "2026-07-10T06:31:16.395Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b4/5ee27575b367d7110d4d13945e2a9de067ec84dc71e54b87f01e38550d9a/websockets-16.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c3e99757f5baafe20fc598e202ea6f5b0b265186ad38d0a17bd8beca16296955", size = 189216, upload-time = "2026-07-10T06:31:17.776Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/3e2dcc78d85fc5d9d814895ce6d07d0dfacc0f6aaa1d151f2b8c8d772299/websockets-16.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:353f3bc6e058ac1ccab4b3588e8598837a8c04cfc8351233e6d523be675d844c", size = 187971, upload-time = "2026-07-10T06:31:19.152Z" }, + { url = "https://files.pythonhosted.org/packages/9e/2f/cd271717b93d5ee19626cb5e38a85baab745c86e33db7c31a3ac729b31b8/websockets-16.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0352f5b38b40e857b6428d468fa21dbb4dd4a567d933c26d9831b4efe1b92f43", size = 185381, upload-time = "2026-07-10T06:31:20.665Z" }, + { url = "https://files.pythonhosted.org/packages/78/91/6ad6f2f1426317b5001bd490534208c7360636b35bac1dec2e0c22bfc40e/websockets-16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:70bd789afab579602968c39f21cb925466505f3edff22f0ae852bca54978a4f9", size = 188015, upload-time = "2026-07-10T06:31:22.024Z" }, + { url = "https://files.pythonhosted.org/packages/c7/6d/533733132ab4c07540efd4a8f0b9a435d3a5059b2f26cc476ace1abf7f45/websockets-16.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d0fb4b46f121eccd539353baebd1083a8767a9a351109453d1d1caecd1ba40c2", size = 186619, upload-time = "2026-07-10T06:31:23.376Z" }, + { url = "https://files.pythonhosted.org/packages/08/73/16c059f3d73b3331eba10793704afa4faa9939234fb08ef7dca35794e8f0/websockets-16.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c14b6634af01541e4efe2954fd8f263386f7aa6d37c01e55dd8109fd17661452", size = 188497, upload-time = "2026-07-10T06:31:25.024Z" }, + { url = "https://files.pythonhosted.org/packages/4d/89/9a8fae7dd2acdcfb1a8844c29fe42b518a04b64fce38a0923b6290e452f1/websockets-16.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:a58532c49a851bcb481e58c1be23b315c17fe2fbbed509d75aeea12f543d2c15", size = 186051, upload-time = "2026-07-10T06:31:26.291Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/b240c7dd6a0e0c59c1f68377cc3015263521080c327c15f5e753c1f6d378/websockets-16.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4e969170c3b08e1d8dabd990fef1fa702c4233aeaabec33f871806e444f6a0e4", size = 187029, upload-time = "2026-07-10T06:31:27.605Z" }, + { url = "https://files.pythonhosted.org/packages/50/35/524e3fac40e47d6fdcf6c4b2c95ef1bc8a97e01593c90eff86621df7b716/websockets-16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff9b000064b88787ba9f7a3cb2af2b68a658ca5aad76458a46469e7124b678a0", size = 187308, upload-time = "2026-07-10T06:31:28.927Z" }, + { url = "https://files.pythonhosted.org/packages/00/13/56840cf62c8859af6ba22b9529da937332468c80f32b598753e8a66d3990/websockets-16.1-cp312-cp312-win32.whl", hash = "sha256:b9f5d83f80f4d7c4bba6d97f3755ac05850c784dce0fd2ab371c4e41172f53ff", size = 180161, upload-time = "2026-07-10T06:31:30.316Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ff/87eb9eb44cb62424a8d729834f2b0515a47e2669fabec29820268f4d50a1/websockets-16.1-cp312-cp312-win_amd64.whl", hash = "sha256:6852c9f653966c16109d3b6f31181fd734f7914927e3f0fa1117af7a18c9aa21", size = 180462, upload-time = "2026-07-10T06:31:31.708Z" }, + { url = "https://files.pythonhosted.org/packages/d9/63/df158b155420b566f025e75613424ad9649a24bcb0e9f259321ab3d58bea/websockets-16.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b0232ed141cec3df2af5a3959a071c51f40036336b0d37e17faf9ef52fc73e47", size = 179791, upload-time = "2026-07-10T06:31:33.108Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/00fe9414dfeafa6fe54eae9f5716c8c8e9ac59d192be3b893c096d395846/websockets-16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a71b73d143991714144e159f767b698f03c4a70b8a65ae1733b650cff488045b", size = 177472, upload-time = "2026-07-10T06:31:34.522Z" }, + { url = "https://files.pythonhosted.org/packages/8b/76/b10633424d40681b4e892ffd08ca5226322b2426e62d4ab71eae484c3a32/websockets-16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:187323204c3b2fc465e8fc2609e60437c521790cb9c1acb49c4c452a33e57f37", size = 177737, upload-time = "2026-07-10T06:31:35.964Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/d3bb03b2229bb1afd72008742d586cf1ea240dce64dd48c71c8c7fd3294c/websockets-16.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9dba74233c8c3ce368850818c98354dad2570f57231b3fd3bd00d7aa57628881", size = 187403, upload-time = "2026-07-10T06:31:37.496Z" }, + { url = "https://files.pythonhosted.org/packages/26/16/cc2e80478f688fc3c39c67dc1fac6a0783858058914ebc2489917462cb42/websockets-16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:63339bc8c63c86a463177775cb7c677691f5bcfac7b3b2f01b286d42acd41600", size = 188639, upload-time = "2026-07-10T06:31:38.86Z" }, + { url = "https://files.pythonhosted.org/packages/15/d6/ad87b2507e57de1cbf897a56c963f2925962ed5e85fbe06aaa83ced27acd/websockets-16.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23e545ea8ae4263e37cdfd4e22a217f519e48e432728bc461185bbf585f38a83", size = 190078, upload-time = "2026-07-10T06:31:40.218Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1a/5b37b3fd335d5811f29fc829f2646a3e6d1463a4bf09c3100708684c766e/websockets-16.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2237081454846fb40403a80ba86d82e2038b9c45865ab96af0abe7d002a91045", size = 189267, upload-time = "2026-07-10T06:31:41.523Z" }, + { url = "https://files.pythonhosted.org/packages/42/98/06afc33e9450d4230f94c664db78875d90f5f6a5fb77f0bc6ec15ae74e1c/websockets-16.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5f5218de1ed047385ca53744caba9435d65f75d008364970a3fae95a05812cf9", size = 188022, upload-time = "2026-07-10T06:31:42.838Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/42fef5d5887c18cf2d148b02debf56cecb9cfbffc68027cde9b12c8f432c/websockets-16.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75c98e3920039d0edff03b74478ada504b7ce3a1bc406db2cabfca84320f7baf", size = 185435, upload-time = "2026-07-10T06:31:44.219Z" }, + { url = "https://files.pythonhosted.org/packages/a0/9b/8021c133add5fe40ed40312553a6cd1408c069d7efe3444ad483d4973ed3/websockets-16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1facd189d8190af30487a55b4c3688484dd50801628a3b5b2ccd26db08e67057", size = 188080, upload-time = "2026-07-10T06:31:45.986Z" }, + { url = "https://files.pythonhosted.org/packages/69/54/1e37384f395eaa127383aab15c1c45e200890a7d7b99db5c312233d193e0/websockets-16.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cc0c6a6eef613c7da32d4fb068f82ef834b58134f6a16b54e6c1e5bf9529ab3d", size = 186678, upload-time = "2026-07-10T06:31:47.449Z" }, + { url = "https://files.pythonhosted.org/packages/68/79/1caeacab5bc2081e4519288d248bc8bd2de30652e6eaa94be6be09a1fe5b/websockets-16.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ad9411eded8988b879be6038206698bf7106c85a78f642c004485bcb95be17eb", size = 188554, upload-time = "2026-07-10T06:31:48.886Z" }, + { url = "https://files.pythonhosted.org/packages/ee/83/b3dca5fad71487b726e31cb0acf56f226792c1cc34e6ab18cbf146bd2d74/websockets-16.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cd68f0914f3b64694895bc5e9b14e8b447e41d7bf5ffaf989bb8dcb5e2dfdce7", size = 186109, upload-time = "2026-07-10T06:31:50.508Z" }, + { url = "https://files.pythonhosted.org/packages/5b/0b/8f246c3712f07f207b52ea5fb47f3b2b66fafec7303162644c74aed51c6a/websockets-16.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fef2debfe7f7ebdda12176f26166f95b7af17af05ba06150fcf889032e0213e9", size = 187061, upload-time = "2026-07-10T06:31:51.861Z" }, + { url = "https://files.pythonhosted.org/packages/47/eb/27d6c92a01696b6495386af4fc941d7d0a13f2eab2bf9c336111d7321491/websockets-16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3cd6c9b798218798f4bb7b2e71c38f0e744bb94ca537b13376f88019d46384d", size = 187347, upload-time = "2026-07-10T06:31:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d5/eeee439921f55d5eaeabcea18d0f7ce32cdc39cb8fc1e185431a094c5c7b/websockets-16.1-cp313-cp313-win32.whl", hash = "sha256:84c170c6869633536921e4474b1cce7254c0c9b0053ef5725f966cee47e718e4", size = 180149, upload-time = "2026-07-10T06:31:55.058Z" }, + { url = "https://files.pythonhosted.org/packages/a3/03/971e98d4a4864cf263f9e94c5b2b7c9a9b7682d77bfbba4e732c55ee85a9/websockets-16.1-cp313-cp313-win_amd64.whl", hash = "sha256:bef52d327d70fa75dad93ee61ea2cb1d1489aca9f35c188833563f5a3b4df0a5", size = 180458, upload-time = "2026-07-10T06:31:56.767Z" }, + { url = "https://files.pythonhosted.org/packages/8d/e6/da1dc11507f8118145a81c751fe0c77e5e1c11b8554496addb39389e2dc2/websockets-16.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f881fca0a45dd6789939bd6637cd98169b92f1c3fdc78262f2cb9ec2cb1f324e", size = 179833, upload-time = "2026-07-10T06:31:58.19Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ac/c0d46f62e31e232487b2c123bc3cfd9a4e45684ca7dc0c37f0987f29baae/websockets-16.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c379d5b207d3a7f0ba4c2e4602a895b0bcc63fb5f5371a4ae7fbddb03b672b", size = 177524, upload-time = "2026-07-10T06:31:59.563Z" }, + { url = "https://files.pythonhosted.org/packages/4a/33/abd966074b34a51e4f134e0aaed80f5a4a0a35163ea5ac58a1bc5a076d23/websockets-16.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98ab58a4faa72b46da0127ccc1931dcbfc0985b0778892300a092185910c4cbe", size = 177743, upload-time = "2026-07-10T06:32:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/ea/30/646e47b8a8dff04e227bdab512e6dde60663a647eeac7bbd6edddd92bbc5/websockets-16.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e9c4e369fc181b2d41a99e01477215cecdc8546a39f7d41a59cc0a7065a0b09", size = 187474, upload-time = "2026-07-10T06:32:02.54Z" }, + { url = "https://files.pythonhosted.org/packages/d2/72/890ab9d77494af93ea65268230bfbc0a90ba789401ed7a44356a44785644/websockets-16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0704df094b2d5fa7f6f410925a594c2a5c9a09167731a76292e5410934208209", size = 188717, upload-time = "2026-07-10T06:32:04.156Z" }, + { url = "https://files.pythonhosted.org/packages/d5/aa/baedbbaa6bf9ed6029617ed5e8976535bd805f483ca9b3484e7ad9ee08bf/websockets-16.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b22b1f4950f6ab7126623329c3b47b3b90a14c05db517f2db2a026ad6c928352", size = 190090, upload-time = "2026-07-10T06:32:05.822Z" }, + { url = "https://files.pythonhosted.org/packages/52/4f/d813ec94e18002571ef4959d87a630eff6e01b72a51bcb0832b75ae8c51a/websockets-16.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1ae4a686a662964a6671069f84f7f908cc3475e782227726b0c622c715962105", size = 189320, upload-time = "2026-07-10T06:32:07.223Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3c/8ec52a6662f3df64090fba28cd521d405d54759268d8e820477037e8c80d/websockets-16.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:856bdd638f8277f86465057bfdd4da097c73058fb0f9d2bd5baea29e2bf2d367", size = 188068, upload-time = "2026-07-10T06:32:08.586Z" }, + { url = "https://files.pythonhosted.org/packages/96/7f/f0ae6042b14f86fa5f996c6563ea4cf107adc036ccbedc9d4f418d0095f9/websockets-16.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9003a1fde1c21a322a3ca3fa0c4bda8c639da81dbc925162766086643b05ba87", size = 185493, upload-time = "2026-07-10T06:32:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/89/ad/5ffc53af9939c49fd653d147fa5b8f78ced1f6bce6c49a7446860945b0ce/websockets-16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39e947b1f5fdab045174306e3916785bf3ed537648acc1549827c08c33b10953", size = 188141, upload-time = "2026-07-10T06:32:11.434Z" }, + { url = "https://files.pythonhosted.org/packages/67/62/729206c0ee577a4db8eae6dd06e0eef725a1287c6df11b2ef831d003df31/websockets-16.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5dd0e666b5931c0509cf65714686a1c5126771e663a79ac5d40da4f58b1f9502", size = 186653, upload-time = "2026-07-10T06:32:12.845Z" }, + { url = "https://files.pythonhosted.org/packages/1b/86/e8806a99ec4589914f255e6b658853fe537bf359c05e6ba5762ad9c27917/websockets-16.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a0285df7925657ad65a65fb8dc330808bce082827538fd50ef45fa12d1fc5bca", size = 188614, upload-time = "2026-07-10T06:32:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/89/38/ac554e2fc6ff0b8deeff9798b92e7abd8f99e2bd9731532e7033de208220/websockets-16.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:82d1c2cab3c133e9d059b3a5420bed9376bd30e21c185c63dda4ddadf6ddda47", size = 186165, upload-time = "2026-07-10T06:32:15.626Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c5/4ef4d8e53342f94f3c49e1ae089b32c1e8b3878e15e0022c7708c647f351/websockets-16.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c39907f1eaf11f6277def65aa02d68f30576b693d0c1ca332aafa3caa723ac6d", size = 187119, upload-time = "2026-07-10T06:32:17.114Z" }, + { url = "https://files.pythonhosted.org/packages/3a/33/4788b1dd417bd97eeb2698af3b9df6775ac656f96e9987da0419a067602f/websockets-16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:45c5ea55446171949eb99fd34b771ceddd511ca21958d40d0197ced33159e5ee", size = 187411, upload-time = "2026-07-10T06:32:18.629Z" }, + { url = "https://files.pythonhosted.org/packages/30/38/00d37aad6dc3244ce349e2864815362e50b3cfc00cac28d216db20efe40f/websockets-16.1-cp314-cp314-win32.whl", hash = "sha256:b8ef8b1c8d6bd029a475ac432e730fba2dfd456715d26c473e2a82291024b99c", size = 179822, upload-time = "2026-07-10T06:32:20.233Z" }, + { url = "https://files.pythonhosted.org/packages/9d/37/2a8cb0eaddee5eaebda47a90a3ba0898d1ce3d866b02a4857fea17d82e5b/websockets-16.1-cp314-cp314-win_amd64.whl", hash = "sha256:7358ff21632b5d062707f73e859c824f1c3807e73d8ca25e71caca7c4cdcf145", size = 180167, upload-time = "2026-07-10T06:32:21.749Z" }, + { url = "https://files.pythonhosted.org/packages/07/5a/262ad5fcaef4198997b165060f09a63f861e76939b1786ab546ccc3f8120/websockets-16.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d0f38f4c3e9b359e257c339c2cc1967ccaeedb102e57c1c986bdce4bf4f32268", size = 180166, upload-time = "2026-07-10T06:32:23.278Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c7/36377db690f4292826e4501a6dec2801dc55fd1cf0405923b04937e478df/websockets-16.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3c3d2cbd1602593bad49bd86fa3fbb25407d87a3b4bf8857c0ac5ac4914e1901", size = 177697, upload-time = "2026-07-10T06:32:25.164Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c7/07171abce1e39799a76f473608580fe98bd43a1230f5146159622c02bccf/websockets-16.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:36069b74671e7e667f48a7484249f84c45a825a134c8b1bdc01875d0daa10d79", size = 177902, upload-time = "2026-07-10T06:32:26.564Z" }, + { url = "https://files.pythonhosted.org/packages/14/17/c831f48e250bc4749f57c00dcce73337c41cd32f6d59a64567b84e782601/websockets-16.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:587f83c2ce8a5d628e166384d77fa7f0ac69b9007d515ab442123e6615aa8da3", size = 187766, upload-time = "2026-07-10T06:32:27.981Z" }, + { url = "https://files.pythonhosted.org/packages/2c/2e/4dfe63e245b0ecfaf470cf082d25c6ce35808159135fd88c82653a6b11ab/websockets-16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6db7972d52bc1b66cefe2246902e256cbaebc9ba8a45eac09343d7eb6671b2", size = 188939, upload-time = "2026-07-10T06:32:29.365Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e5/5faf65aebd9562f6b4bc473d24ce38cc56f84eb5f5bee66ed9b86733f93c/websockets-16.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e7d6014888a0632e1ed7a4095248bb3095232999447f2d83bfb1900987dd9ed9", size = 191081, upload-time = "2026-07-10T06:32:30.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/cd/2634f2f2c0556c1aae6501ed6840019cc569dd6fdbcac6494378daea4dc0/websockets-16.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cb074d150e4ad2a77aa8a332c2be85f3f64f2681519d2570c1225c12c9821ff", size = 189513, upload-time = "2026-07-10T06:32:32.399Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/2c700b51196104f09715b326b1f092ed25326bdf79a03e00a4842e503743/websockets-16.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d19c9067e1fe9490f974bffbc0e443b80a7674c5efb4980c429cc00771f07c5a", size = 188240, upload-time = "2026-07-10T06:32:33.897Z" }, + { url = "https://files.pythonhosted.org/packages/f1/20/86283636e499a1a357fa9441f690ba34f255e731f2fea174132b3b762b57/websockets-16.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d440ff0c6c7469ad59c0a412c383c235935b43635e89425e3f6a0c36de90c31b", size = 185955, upload-time = "2026-07-10T06:32:35.279Z" }, + { url = "https://files.pythonhosted.org/packages/91/23/d7fb734b0095d43bc7f1c9f68afd50adb4176e7e513403e8c70ad7daa4fa/websockets-16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8613129a2533f08de24505e69a3e403cedaadae49abdb043c4d170ca71b7e4bd", size = 188491, upload-time = "2026-07-10T06:32:36.673Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5e/168a192689db468405ecf3b8e4a2c18811936b0724d017ad7e6d252734f0/websockets-16.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:a5bf9c23f197b4ec88290fd5463f33db67362a1bb10f85fc2e8e7627f0ddab97", size = 186983, upload-time = "2026-07-10T06:32:38.207Z" }, + { url = "https://files.pythonhosted.org/packages/7e/9b/66795fa91ebe49019ebe4fa910282172252e37046b80e08fc52e0c365150/websockets-16.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:520b0fd0395f075febb283c76755af724ab9fd19dffa4f3bfd18cb4e622790a3", size = 188890, upload-time = "2026-07-10T06:32:39.545Z" }, + { url = "https://files.pythonhosted.org/packages/5a/32/126bbc844be5afb3613fd43211dac10a9645f4cf39741d04acaa2ec7030c/websockets-16.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7143aa09a67e1c013be44e81a88dfe90fc6244198ab86c7edd064152cf619805", size = 186583, upload-time = "2026-07-10T06:32:41.038Z" }, + { url = "https://files.pythonhosted.org/packages/22/b9/0b5db9cbcf6e4970db4496893244a8d92e07f71a8ef27cf34b08aa02fef1/websockets-16.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:7acb811fad08e611755800d1560e395c67e11a6bd563598ea6abb319afb86938", size = 187353, upload-time = "2026-07-10T06:32:42.501Z" }, + { url = "https://files.pythonhosted.org/packages/99/2e/254b2131a10d831b76e2c18dfe7add9729c6292c674a8085bf8de01ad151/websockets-16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c5cf88e3faa2f7931bc6baeee7599c97656a3f6ac7f831f4fccba233e141783a", size = 187784, upload-time = "2026-07-10T06:32:43.929Z" }, + { url = "https://files.pythonhosted.org/packages/21/dc/e7288aa8e3ac5a88a0924619984d663c1abf2a87d0ea98290c66fdaee0ec/websockets-16.1-cp314-cp314t-win32.whl", hash = "sha256:589f8842521c8307684ce0b40ce4ad70c5e0aa46484c6f1225a94ef4b8970341", size = 179947, upload-time = "2026-07-10T06:32:45.495Z" }, + { url = "https://files.pythonhosted.org/packages/d3/de/37edf1260ff0fbbd2f82433489c4cfbe799ac2ff21355331609879329fe6/websockets-16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c0e0857c30bbbc2bb5c30687508f0b7ec19aa026cd9f2ff8424d0fee42dcc07", size = 180291, upload-time = "2026-07-10T06:32:47.119Z" }, + { url = "https://files.pythonhosted.org/packages/4d/f4/84ef884775bbe77c46cce79bc7d705ea3bc6574cc00acf81af89754c077d/websockets-16.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7289d899c79e763e6221c8dcb8959361cb43274418538d7c7ad16a43b01d12f9", size = 177387, upload-time = "2026-07-10T06:32:48.574Z" }, + { url = "https://files.pythonhosted.org/packages/d3/d9/6831ec6f65e1eeac770375f4f4b604f23df9bafaa1b47004bc5f9488d513/websockets-16.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e22e9e3719f5131bd62da4db63c8da63eb8c91cc99e16c1cbd122f130e1ae07a", size = 177663, upload-time = "2026-07-10T06:32:50.043Z" }, + { url = "https://files.pythonhosted.org/packages/9d/d4/21d4922fa7fe855813a8b38f181a0ecf02a586e16c1f095fd05471f78cc2/websockets-16.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:83bdabafef431247e6b11a9aab8a0893fd8e82e1ed95b32e0373625b03ffce4a", size = 178501, upload-time = "2026-07-10T06:32:51.439Z" }, + { url = "https://files.pythonhosted.org/packages/91/87/7a0320df854dacd09507ca972cb04a4dc5aae279583cc5b80ad5f5819533/websockets-16.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b8d13ceabc5c60995f201b5211d76876e17e68706ebf5d3bc666b32eefff1a6", size = 179397, upload-time = "2026-07-10T06:32:52.892Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/0da1eb8c8da2ace7b578c8523d32618af85e62a9ebad56051d4a14a38a1c/websockets-16.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81495f9c0085361c582efbc3207fb877174cfe03370f17d9cd70624404aa526f", size = 180546, upload-time = "2026-07-10T06:32:54.619Z" }, + { url = "https://files.pythonhosted.org/packages/66/58/bd83247f39ddc26ffc2c24eb05087a3b749e00cb4509fc6d19daa23c8495/websockets-16.1-py3-none-any.whl", hash = "sha256:c5149dfe490ec7e5ee5dbf624c642fb725f93a5575c7f00ab594ca9eddb8dd81", size = 174031, upload-time = "2026-07-10T06:32:56.079Z" }, +] + +[[package]] +name = "wrapt" +version = "2.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/a4/282c8e64300a59fc834518a54bf0afabb4ff9218b5fa76958b450459a844/wrapt-2.2.2.tar.gz", hash = "sha256:0788e321027c999bf221b667bd4a54aaefd1a36283749a860ac3eb77daed0302", size = 129068, upload-time = "2026-06-20T23:49:44.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/8b/59781d0fe7b0adfbea37f600857de4be68921e454aeecf1a11bda35cdccc/wrapt-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:055e6fcfaa28e58c6a8c247d48b92be9d56f818b7068aa4f22b15b3343a09931", size = 80556, upload-time = "2026-06-20T23:47:28.473Z" }, + { url = "https://files.pythonhosted.org/packages/94/dc/66c61aca927230c9cf97a3cb005c803971a1076ff9f7d61085d035c20085/wrapt-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8374eb6b1a58809211e84ff835a182bb17ab2807a5bfef23204c8cff38178a00", size = 81648, upload-time = "2026-06-20T23:47:30.504Z" }, + { url = "https://files.pythonhosted.org/packages/23/1b/545eee1c18f3af4cf140bb5822b6ef81ebe569df0a63ac109973103a30a5/wrapt-2.2.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:656593bb3f5529f03d27af4136c4d7b11990e470bcbc6fefa5ef218695bece55", size = 152956, upload-time = "2026-06-20T23:47:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/44/a7/6f42a3d03e44dc612a5dcff324e7366075a7857f0be2d49a8cb8a68279b8/wrapt-2.2.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfb00cb7bb22099e2f64b7340fb96113639aa7260c0972af3797ace2297b936c", size = 154771, upload-time = "2026-06-20T23:47:33.352Z" }, + { url = "https://files.pythonhosted.org/packages/bf/55/4d76175aaa97523c38f1d28f79d18ab41a1b116814158a818bc0eba00571/wrapt-2.2.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e7f10ee0bd53673bfd52b67cbce83336fe6cad90d2377b03baf66491d2bbfb91", size = 149460, upload-time = "2026-06-20T23:47:34.712Z" }, + { url = "https://files.pythonhosted.org/packages/84/9b/12e23264d8f4735e8483262f95c5a6b03c3665fd2a84bdf99a45b6a2f4ec/wrapt-2.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4402f57c5f0d0579599858ffbdd9bf4e3f0972f51096f2bd6cc7dab6b76ee49e", size = 153648, upload-time = "2026-06-20T23:47:36.092Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a3/bcd5ec37289dcd85ecd4d15395a6a6063d60bc45ff94a9d77814e1e54d64/wrapt-2.2.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:3a4eb7964ff4643d333c84f880bcf554652b2a1050aebc54ae696327f61acfaf", size = 148502, upload-time = "2026-06-20T23:47:37.623Z" }, + { url = "https://files.pythonhosted.org/packages/f2/be/716d708f607fa70f8a6eb47dff8ee945d5278dfc89ffeeff33039d052e63/wrapt-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e542b7c5af91e2123a8aabf19894319d5ec4268d2a9ffd2f239386133fc47746", size = 152238, upload-time = "2026-06-20T23:47:39.118Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c0/1a48e7e54501274f5d906f18372221b13183b0afbb5b8bb4c7ca0392c0b4/wrapt-2.2.2-cp310-cp310-win32.whl", hash = "sha256:6e7e45b43d3c774d244fe7264378f5a3f0f383bc55a54a9866434e524540110f", size = 77278, upload-time = "2026-06-20T23:47:40.476Z" }, + { url = "https://files.pythonhosted.org/packages/b0/82/9cd69a1af288fbdedf01a10e3c8a0b6890b08c7f3f96d36a213699dbcd94/wrapt-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:955f1d6e72a352e478de8d8b503abe301c5e139a141b62eb0923bd694995025f", size = 80131, upload-time = "2026-06-20T23:47:41.785Z" }, + { url = "https://files.pythonhosted.org/packages/7f/73/8db7e27daef37ae70a53ea62bef7fe80cc51a8b5e9e9181a8be6eb9a999c/wrapt-2.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:b89d8d73c82db2bb7e6090b3afd7973f980d24e905cc34394eab60b884b3bf67", size = 79615, upload-time = "2026-06-20T23:47:43.109Z" }, + { url = "https://files.pythonhosted.org/packages/27/15/0c2d55168707465abfc41f33c0b23d792a5fa9b65c26983606940900a120/wrapt-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f1a2ff355ece6a111ca7a20dc86df6659c9205d3fcee674ca34f2a2854fd4e73", size = 80782, upload-time = "2026-06-20T23:47:44.367Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b5/5c0b093eb48f8a062ef6267d3cb36e9bb1b88440181f6545a383c60efdf8/wrapt-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55b9a899e6fff5444f229d30aa6e9ac92d2216d9d60f33c771b5d76a760d5f8e", size = 81678, upload-time = "2026-06-20T23:47:45.857Z" }, + { url = "https://files.pythonhosted.org/packages/34/f3/de70937472dd3e8a4e6811192f9c6075efdffd4a2cd9b4596bf160f89668/wrapt-2.2.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a2d78c363f97d8bd718ee40432c66395685e9e98528ccaa423c3355d1715a26d", size = 159671, upload-time = "2026-06-20T23:47:47.345Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ec/40aed2330e7f02ecf74386ffcfef9ccb7108c6a430f15b6a252b663b1bed/wrapt-2.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d619e1eed9bd4f6ed9f24cd61971aa086fa86505289628d464bcf8a2c2e3f328", size = 160785, upload-time = "2026-06-20T23:47:48.759Z" }, + { url = "https://files.pythonhosted.org/packages/45/04/aa5309beed5344b00220ae6b3b24055852192656194c27947bee1736306a/wrapt-2.2.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:518b0c5e323511ec56a38894802ddd5e1222626484e68efe63f201854ad788e5", size = 153699, upload-time = "2026-06-20T23:47:50.177Z" }, + { url = "https://files.pythonhosted.org/packages/01/df/2def7e99d1fe87eea413f95f671924cdddcb08823b1ffd212748dfa6d062/wrapt-2.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4bccea5cdecffa9dd70e343741f0e41e0a16619313d04b72f78bb525162ebcd0", size = 159695, upload-time = "2026-06-20T23:47:51.602Z" }, + { url = "https://files.pythonhosted.org/packages/c7/f6/a906d01a2ce12157bad2404957b3e2140da354b8a70b2fa48bbf282871c0/wrapt-2.2.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:209112cafd963710a05d199aae431d79a28bc76eb8e6d1bbbb8ad24340722cae", size = 152813, upload-time = "2026-06-20T23:47:53.03Z" }, + { url = "https://files.pythonhosted.org/packages/02/49/bc0086292d239575b4c08f4cf8a4079fa58abbad58ec23abf84833a283ed/wrapt-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e5a5290e4bf2f332fc29ce72ffb9a2fff678aaac047e2e9f5f7165cd7792e099", size = 158809, upload-time = "2026-06-20T23:47:54.391Z" }, + { url = "https://files.pythonhosted.org/packages/55/83/8fbd034de1f3e907edaa18786d5dd8f6932874edee0826c7cecb5cab03a1/wrapt-2.2.2-cp311-cp311-win32.whl", hash = "sha256:5499236ad1dc116012e2a5dd943f3f31af12fce452128e2bbcbd55a7d3d4d14c", size = 77414, upload-time = "2026-06-20T23:47:55.882Z" }, + { url = "https://files.pythonhosted.org/packages/7e/9c/23695baa331c6de4e874c3d78b8e0bed92e1d2a274e665b29858f6841672/wrapt-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8636809939152be6ae20a6cef0fed9fe60f411b47847d0426a826884b469e971", size = 80368, upload-time = "2026-06-20T23:47:57.237Z" }, + { url = "https://files.pythonhosted.org/packages/08/49/40cefc342bf89b234a4490d741290fce781774b831aefb39c25471da96c9/wrapt-2.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:5d0a142f7af07caeb5e5da87493162a7b8efa19ba919e550a746f7446e13fb30", size = 79489, upload-time = "2026-06-20T23:47:58.56Z" }, + { url = "https://files.pythonhosted.org/packages/2a/85/180b40628b23772692a0c76e8030114e1c0ae068470ed531919f0a5f2a4a/wrapt-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8417fd3c674d3c8023d080292d29301531a12daf8bd938dd419710dd2f464f2b", size = 81484, upload-time = "2026-06-20T23:47:59.924Z" }, + { url = "https://files.pythonhosted.org/packages/94/f2/21c90f2a16689702e2aaff45795b11018dff2c9b1242bac10d225483f676/wrapt-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e7070c7472582e31af3dfc2622b2381a0df7435110a9388ed8db5ffbce67efb", size = 82151, upload-time = "2026-06-20T23:48:01.303Z" }, + { url = "https://files.pythonhosted.org/packages/5f/b3/7e6e9fcf4fe7e1b69a49fe6cc5a44e8224bab6283c5233c97e132f14908e/wrapt-2.2.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2e096c9d39a59b35b63c9aacfbbbec2088ff51ff1fc31051acc60a07f42f273a", size = 169828, upload-time = "2026-06-20T23:48:02.719Z" }, + { url = "https://files.pythonhosted.org/packages/0b/43/894f132d857ed5a9904d937baf368badcbe5ea9e436e2f1930fe21c9f1f0/wrapt-2.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d1a6050405bf334be33bf66296f113563622972a34900ae6fa60fd283a1a900", size = 171544, upload-time = "2026-06-20T23:48:04.266Z" }, + { url = "https://files.pythonhosted.org/packages/29/de/3c833e03725b477e9ea34028224dd21a48781830101e4e036f77e8b6b102/wrapt-2.2.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:10adb01371408c6de504a6658b9886480f1a4919a83752748a387a504a21df79", size = 160663, upload-time = "2026-06-20T23:48:05.708Z" }, + { url = "https://files.pythonhosted.org/packages/33/be/27edce350b24e3054d9d047f65f16d4c4d4c1f3f31c4278a1f8a95c723c8/wrapt-2.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3442eee2a5798f9b451f1b2cd7518ce8b7e28a2a364696c414460a0e295c012a", size = 169387, upload-time = "2026-06-20T23:48:07.243Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c4/9fd9679af8bf38e146652c7f47b6b352c3e5795b4ad1c0b7f94e15ac2aa7/wrapt-2.2.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:6c99012a22f735a85eed7c4b86a3e99c30fdd57d9e115b2b45f796264b58d0bf", size = 158849, upload-time = "2026-06-20T23:48:08.91Z" }, + { url = "https://files.pythonhosted.org/packages/bc/c2/aa6c0c2206803068c6859dabe01f8c84c43744da93d4c67b8946d21655ee/wrapt-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b686cfc008776a3952d6213cb296ed7f45d782a8453936406faa89eac0835ab", size = 168147, upload-time = "2026-06-20T23:48:10.374Z" }, + { url = "https://files.pythonhosted.org/packages/42/63/3eb25da41049d20ae18fcab2dd8b056e02387c4bfa626cbdfb7c3b872e4f/wrapt-2.2.2-cp312-cp312-win32.whl", hash = "sha256:ef2cce266b5b0b07e19fa82e59673b81142b7a3607c8ed1254113d048ed668da", size = 77734, upload-time = "2026-06-20T23:48:11.769Z" }, + { url = "https://files.pythonhosted.org/packages/da/09/0390e008a305360948fa9ce69507d041ac12cb2ee5d28e34467e2ee79391/wrapt-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:abf8c20a2d72ee69e16328b3c91342c446e723bfe48bfcc4dded3b9722ac027f", size = 80585, upload-time = "2026-06-20T23:48:13.117Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b3/84c445c66969f2d3457276b183a48c91097d59bbef9af6c075366b0f8c36/wrapt-2.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:c6c64c5d02578bc4c4bca4f0aef1504de933c1d5b4ac2710b9131111459506c8", size = 79553, upload-time = "2026-06-20T23:48:14.5Z" }, + { url = "https://files.pythonhosted.org/packages/43/fc/f32f4b22c6511173c11d9e541ab4e7d8467a0f1b3455acaf784115d31ff8/wrapt-2.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9e8b648270c613720a202d9a45ebabc33261b22c3a839b115ac5bce8c0bb0d69", size = 81296, upload-time = "2026-06-20T23:48:15.881Z" }, + { url = "https://files.pythonhosted.org/packages/72/06/4d117d5d77a9344776c0248b24dae3d3dd2f58e5f765fa08cf887072e719/wrapt-2.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6fb7e94e8fe3e4c3067bb1653a91cce7c5e83acc119fdd41501b1bf74654617", size = 81841, upload-time = "2026-06-20T23:48:17.262Z" }, + { url = "https://files.pythonhosted.org/packages/15/ff/63ad96f98eb58a742b1a20d80f21da88924405910149950b912368150468/wrapt-2.2.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb18fc51e813df0d9c98049e3bf2298a5495a648602040e21fa3c7329371159e", size = 167882, upload-time = "2026-06-20T23:48:18.764Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/8bb62d8933df7acf3247194e6e9fc68edf9d2fa203252c89c94b319dd472/wrapt-2.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94b00b00f806eb3ef2abe9049ed45994a81ee9284884d96e6b8314927c6cea3d", size = 167411, upload-time = "2026-06-20T23:48:20.315Z" }, + { url = "https://files.pythonhosted.org/packages/17/09/8789dcb09ee1de715727db7521aabbb68ffa68dfade3a49468440cfced49/wrapt-2.2.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:62415fd095bc590b842b6d092f2b5d9ccbaeb7e0b28535c03dcea2718b48636b", size = 158607, upload-time = "2026-06-20T23:48:21.728Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/66e02562d53ee67d841f175e38e3c993c2d78a3e104c576cad61c028b43c/wrapt-2.2.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a41e758d80dc0ab8c210f641ac892009d356cf1f955d97db544c8dd317b4d14c", size = 166367, upload-time = "2026-06-20T23:48:23.177Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a3/832ac4e41222fb263b3042d42c2f08d305db7d0f0c9b1d3a271a9eede8f6/wrapt-2.2.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b84cd4058001c9727b0e9980b7a9e66325b5ca748b1b578e822cade1bc6b304f", size = 157176, upload-time = "2026-06-20T23:48:24.711Z" }, + { url = "https://files.pythonhosted.org/packages/b7/01/1bd5e4d2df9c0178989ac8da9186543465388588ee2ef153e2591accebef/wrapt-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:26fc73a1b15e0946d2942b9a4426d162b51676338327dc067ccd8d2d76385f94", size = 167025, upload-time = "2026-06-20T23:48:26.118Z" }, + { url = "https://files.pythonhosted.org/packages/1c/69/583ed25291ab53e1ec117135fb1c33425e2f46d2bc8f29c17f7a94cf4274/wrapt-2.2.2-cp313-cp313-win32.whl", hash = "sha256:3c4095803491f6ef72128914c28ec05bbad9758433bb35f6715a3e9c8e46fb2d", size = 77605, upload-time = "2026-06-20T23:48:27.643Z" }, + { url = "https://files.pythonhosted.org/packages/29/68/e69fc6d06e1523c68e0d00f95c9aed1158ce9908ee41603f7f2eae3d5db6/wrapt-2.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:2cb07f414fab25dbe6b5c7398e1491423a5c81a6209533639969a6c928d474a4", size = 80508, upload-time = "2026-06-20T23:48:29.013Z" }, + { url = "https://files.pythonhosted.org/packages/55/21/fe7a393d9e5dc0923bed8f5d857e9dcff210f1fa0888c02cc8f3ffaa55aa/wrapt-2.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:1fc7691f070220215cccb2a20836b9adbaecb8ff22ad47abe63de5f110994fac", size = 79565, upload-time = "2026-06-20T23:48:30.429Z" }, + { url = "https://files.pythonhosted.org/packages/b6/e5/c120d13bf5091164f68c3c1657e84f16f57e71d978421b626393ac5bd7eb/wrapt-2.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ec8f83949028366531383603139403cac7a826e4011955813cdd640017845ce5", size = 83264, upload-time = "2026-06-20T23:48:31.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b0/d4a1eb97e0e286625bdf21bc7f702637f9607787ffbbdb5ec14d50c79dbf/wrapt-2.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b481fb0c40d9fd90a5809911208da700987d373a20a4709dc9e3944af7a6bec", size = 83791, upload-time = "2026-06-20T23:48:33.482Z" }, + { url = "https://files.pythonhosted.org/packages/18/1e/f060df47755e87b57684cee7bfc1362b204df55fac96ffebc0631b697b79/wrapt-2.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0065a3b657cec06813b4241d2462ccec287f6863103d7445b725fb3a889736f9", size = 203399, upload-time = "2026-06-20T23:48:34.97Z" }, + { url = "https://files.pythonhosted.org/packages/c4/de/2316a757a1abb6453700b79d83e532146dcef2611348282d4d8889792161/wrapt-2.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30f7424af5c5c345b7f26490e097f74a2ef45b3d08b664dc33571aee3bd3b56c", size = 210461, upload-time = "2026-06-20T23:48:36.569Z" }, + { url = "https://files.pythonhosted.org/packages/ed/29/d1160785ae18ca2495a6d82a21154103d74f656c9fd457fb35f6b11b965a/wrapt-2.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:07fdcb012821859168641acf68afad61ef9783cf37100af85f152550e9677194", size = 195313, upload-time = "2026-06-20T23:48:38.175Z" }, + { url = "https://files.pythonhosted.org/packages/f5/2d/7caa9598ae61a9cf0989cc501739cbeeb7d650ab3193cca1407b9af0c6ab/wrapt-2.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f90038ab58fafb584801ca62d72384d7d5225d93c76f7b773c22fae545bd8066", size = 206116, upload-time = "2026-06-20T23:48:39.804Z" }, + { url = "https://files.pythonhosted.org/packages/ac/02/281ea1088b8650d865f311b35cf86fd21df89128e2909714f1161e01c9d0/wrapt-2.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c5d7825491bfa2d08b97e9557768987952c7b9ae687d06c3320b40a37ccb7f20", size = 192668, upload-time = "2026-06-20T23:48:41.346Z" }, + { url = "https://files.pythonhosted.org/packages/be/7d/976e2d5b4b5c5babda40974edd54d0a5585cb60132ed86b46f4b80239b16/wrapt-2.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ad520e6daa9bbf136f14de735474dbec7dcc0891f718e1d274ce8dc92e645af", size = 198891, upload-time = "2026-06-20T23:48:43.056Z" }, + { url = "https://files.pythonhosted.org/packages/59/b7/e47651797c097f75a37e2ce86dcf04048ff576f3a674f7c558df7b5e9622/wrapt-2.2.2-cp313-cp313t-win32.whl", hash = "sha256:25904acb9475f46c24fe0423dbc8fda8cc5fbc282ab3dc6e72e919748c53f4e9", size = 78537, upload-time = "2026-06-20T23:48:44.509Z" }, + { url = "https://files.pythonhosted.org/packages/d1/6f/9fa5d59fb06d890defb5a8f727ce6a14d2932c8760153f96956628559fee/wrapt-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:305d4c247d61c4115794a169141823c62f719525ddb90b23aa332741c77d2c28", size = 82005, upload-time = "2026-06-20T23:48:46.391Z" }, + { url = "https://files.pythonhosted.org/packages/15/80/4c7bd9873d1f9f7d138d93556b500469dbe24f42710b877519c2b9eb380d/wrapt-2.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c20279cd1a29800815d7b2d6338b60a6c6e78263f9d6e62e0eda251ba9cae2d0", size = 80762, upload-time = "2026-06-20T23:48:47.964Z" }, + { url = "https://files.pythonhosted.org/packages/24/05/7fd9c3f83b2c74cbfc572a0b88aa37431e04bd8aed70d2c0efd3464206de/wrapt-2.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:0e64826f920c42d9d9f87e8cc09ffae66c51ede12d59061a5a426deb9aa71745", size = 81341, upload-time = "2026-06-20T23:48:49.39Z" }, + { url = "https://files.pythonhosted.org/packages/4b/68/1bfa43100dd90d4ef74a05897b86275cf57e1313ca14aae2545bc9f872c9/wrapt-2.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dcaa5e1451bd8751d7bd1568dfa3321c78092a52a7ecb5d1a0f18a5791e1fd00", size = 81921, upload-time = "2026-06-20T23:48:50.986Z" }, + { url = "https://files.pythonhosted.org/packages/74/eb/df7b7f0b631dbbc750f39be27d8b55f65777d8ac86da80e12be41a644c4b/wrapt-2.2.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0abfd648dac9ac9c5b3aa9b523d27f1789046640b58dcd5652a720ddb325e1fc", size = 167713, upload-time = "2026-06-20T23:48:52.598Z" }, + { url = "https://files.pythonhosted.org/packages/4d/9a/d1bd36f6d088c8e652a9383cabbd49af30b8c576302a7eccddbab6963e3f/wrapt-2.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f4bfd8d1eb438153eff8b8cfe87f032ba65731e1ce06138b5090f745a33f6f95", size = 166779, upload-time = "2026-06-20T23:48:54.33Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ae/24ffacd4187fac2740a1972093929e836dea092d42c87d728cd98fee11a6/wrapt-2.2.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c427c9d06d859848a69f0d928fe28b5c33a941b2265d10a0e1f15cd244f1ee33", size = 158407, upload-time = "2026-06-20T23:48:55.944Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ed/974427668249a356051e8d67d47fa54ef6c777f0fcf3bae9d292c047d4b6/wrapt-2.2.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4250b43d1a129d947e083c4dc6baf333c9bb34edd26f912d5b0457841fc858ab", size = 166594, upload-time = "2026-06-20T23:48:57.617Z" }, + { url = "https://files.pythonhosted.org/packages/fb/5f/e1d7c6e4523f78db2fbd7826babd0348da1d5e0834c4f918b9ab5757dfae/wrapt-2.2.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:173e5bb5ca350a6e0abab60b7ec7cdd7992a814cb14b4de670a28f067f105663", size = 157068, upload-time = "2026-06-20T23:48:59.171Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c1/7ebd1027f00700c0b0233b20aceef2b4784294ed64971424c4a78e069e34/wrapt-2.2.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:aa14b01804bce36c6d63d7b6a4f55df390f29f8648cc13a1f40b166f4d54680d", size = 166470, upload-time = "2026-06-20T23:49:00.737Z" }, + { url = "https://files.pythonhosted.org/packages/99/eb/974e471a6a978b8180186b8a9dc5ae3361ce269a967190b709b8ce17abfb/wrapt-2.2.2-cp314-cp314-win32.whl", hash = "sha256:58f9f8d637c9a6e245c6ef5b109b67ec187d2faed23d1405656b51d96e0a5b56", size = 78062, upload-time = "2026-06-20T23:49:02.327Z" }, + { url = "https://files.pythonhosted.org/packages/49/ec/e1281156cdc7a66693838ad7a0865ad641c74abd337a957d668b575aaffb/wrapt-2.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:385cb1866f20479e83299af585375bfa0a4b0c6c9907a981483ea782ea8ae406", size = 80832, upload-time = "2026-06-20T23:49:03.837Z" }, + { url = "https://files.pythonhosted.org/packages/45/7d/1b6b5ddd94005a2dac97a4490c9838f3154977850d633abcb65b30089437/wrapt-2.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:8ffbeaea6771a6eba6e6eeb09767864995726bc8240bb54baf88a9bb1db34d5c", size = 80029, upload-time = "2026-06-20T23:49:05.237Z" }, + { url = "https://files.pythonhosted.org/packages/b0/33/9ebcf8aafe91c601127cbd93708c16aa8f688f34a10bf004046803ecdc4f/wrapt-2.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:09f811d43f6f33ec7515f0be76b159569f4057ab54d3e079c3204dddb90afa2a", size = 83357, upload-time = "2026-06-20T23:49:06.632Z" }, + { url = "https://files.pythonhosted.org/packages/39/38/ec45b635153327b52e52732a0ea980e5f00b7efba65f9e018828f1e69daa/wrapt-2.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a795d3c06e5fbf9ea2f13196180b77aeab1b4685917256ee0d014cc163d90063", size = 83794, upload-time = "2026-06-20T23:49:08.098Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ea/1a89e6d3b7a83c3affe5c09cde77792c947e63e4bc85ad84cd5bb9abb0d8/wrapt-2.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:45c2f2768e790c9f8db90f239ef23a2af8e7570f25a35619ef902df4a738447f", size = 203362, upload-time = "2026-06-20T23:49:09.811Z" }, + { url = "https://files.pythonhosted.org/packages/19/d8/3b58763d9863b5a73771c0d97110f9595d248db454009e07e1535ee905a4/wrapt-2.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbf00ee0cb55ec24e2b0995a71942b85b21a066db8f3f46e1dbfdb9433ffba81", size = 210449, upload-time = "2026-06-20T23:49:11.521Z" }, + { url = "https://files.pythonhosted.org/packages/2d/6f/17fd9e053103d8be148d20d5d7505facc72d5fe1f9127973904ceaed79cf/wrapt-2.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2252f77663651b89255895f58cc6ac08fcb206d4371813e5af61bb62d4f7689c", size = 195349, upload-time = "2026-06-20T23:49:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/ef/04/d0d1ccaaa12cb7dccf28a23f0279a608ba498f71e81d949d5ed54bcfd5c1/wrapt-2.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2cd7181ab1c31192ff5219269830744b5a62020b3a6d433588c4f1c95b8f8bff", size = 206099, upload-time = "2026-06-20T23:49:15.051Z" }, + { url = "https://files.pythonhosted.org/packages/44/b3/e8aa07b619890a2aa6cde1931b1887abb08820721b564a5f80b7ca3f3aa0/wrapt-2.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:6fe35fd51b74867d8b80174c277bd6bbf6a73e443f908129dc531c4b688a20d5", size = 192728, upload-time = "2026-06-20T23:49:16.854Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f0/1819fb50f0d3c9bd758d8a83b56f1b470dee8b5b8eac8702b7c137cea9d4/wrapt-2.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:11d95fc2fbad3163596c39d440e6f21ca9fccece74b56e30a37ac2fca786a07c", size = 198842, upload-time = "2026-06-20T23:49:18.504Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/e88313f16a99930b899ef970d91c281544a470749a359decad994483bbda/wrapt-2.2.2-cp314-cp314t-win32.whl", hash = "sha256:d8a15813215f33fa83667bfc978b300e35669ea8bb424e970a1426bcb7bc6cca", size = 79059, upload-time = "2026-06-20T23:49:20.107Z" }, + { url = "https://files.pythonhosted.org/packages/a0/4f/ac12fda57a55068a094ec42851fb0a40e8489d8941863d517452de62e507/wrapt-2.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d09db0f7e8357060d3c38fc22a018aba683a796bf184360fd1a58f6fc180dc77", size = 82462, upload-time = "2026-06-20T23:49:21.631Z" }, + { url = "https://files.pythonhosted.org/packages/48/a7/df732dac86d9b2027c56bd163dbc883e037b16c3469614752e148d219c61/wrapt-2.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:f32fe639c39561ccc187bcae17e9271be0eb45f1c2952510d2f29b33ab577347", size = 81182, upload-time = "2026-06-20T23:49:23.199Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d2/6317eb6d4554855bbf12d61857774af34747bf88a42c19bf306de67e2fa3/wrapt-2.2.2-py3-none-any.whl", hash = "sha256:5bad217350f19ce99ca5b5e71d406765ea86fe541628426772b657375ee1c048", size = 61460, upload-time = "2026-06-20T23:49:42.966Z" }, +] + +[[package]] +name = "yarl" +version = "1.24.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/df/f1c7a3de0831cd83194f1a85c5bb431b13f81e6b45079314c86d1c4ef3f2/yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12", size = 129057, upload-time = "2026-05-19T21:27:47.564Z" }, + { url = "https://files.pythonhosted.org/packages/48/41/7daafb32dd7562bf45b1ce56562e7e1a9146f6479b6456873eb8a3413c40/yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0", size = 91545, upload-time = "2026-05-19T21:27:50.089Z" }, + { url = "https://files.pythonhosted.org/packages/a8/8f/7b3ec212f1ea0683f55f978e3246bc313c38818664edfc97a9f349a4901e/yarl-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75", size = 91380, upload-time = "2026-05-19T21:27:51.953Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1b/8bafab7db23b0567ae9db749099b329d91e3b82bc6028b2050ba583e116c/yarl-1.24.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:246d32a53a947c8f0189f5d699cbd4c7036de45d9359e13ba238d1239678c727", size = 105957, upload-time = "2026-05-19T21:27:53.98Z" }, + { url = "https://files.pythonhosted.org/packages/7f/77/21030c2f8d21d21559719beafc772ada2014be933418ed1eaed9cc800e42/yarl-1.24.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:64480fb3e4d4ed9ed71c48a91a477384fc342a50ca30071d2f8a88d51d9c9413", size = 97242, upload-time = "2026-05-19T21:27:55.981Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/f9ea63d1b6aa910a866e089d871fff6cbd49caab29b86b35221a62dfa0d5/yarl-1.24.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:349de4701dc3760b6e876628423a8f147ef4f5599d10aba1e10702075d424ed9", size = 114719, upload-time = "2026-05-19T21:27:58.037Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a3/04e0ee98ac58a249ea7ed75223f5f901ba81a834f0b4921b58e5cec11757/yarl-1.24.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d162677af8d5d3d6ebab8394b021f4d041ac107a4b705873148a77a49dc9e1b2", size = 112140, upload-time = "2026-05-19T21:27:59.618Z" }, + { url = "https://files.pythonhosted.org/packages/02/ad/0b9cc9f38a7324a7eb1d80f834eaa5283d17e9271bbda3186e598dddaeac/yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5f5c6ec23a9043f2d139cc072f53dd23168d202a334b9b2fda8de4c3e890d90", size = 106721, upload-time = "2026-05-19T21:28:02.586Z" }, + { url = "https://files.pythonhosted.org/packages/65/e7/a52478ebfc66ec989e085c6ae038b9f1bfa4190baa193b133b669c709e2f/yarl-1.24.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:60de6742447fbbf697f16f070b8a443f1b5fe6ca3826fbef9fe70ecd5328e643", size = 106478, upload-time = "2026-05-19T21:28:04.523Z" }, + { url = "https://files.pythonhosted.org/packages/04/d8/5508530fea8472542de00013ae280765fc938ee196fc4030c43a498afb36/yarl-1.24.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acf93187c3710e422368eb768aee98db551ec7c85adc250207a95c16548ab7ac", size = 105423, upload-time = "2026-05-19T21:28:06.515Z" }, + { url = "https://files.pythonhosted.org/packages/84/f1/ece28505e9628e8b756e11bb4f28864a17cc33b6b44db4d2aaf0622bf630/yarl-1.24.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f4b0352fd41fd34b6651934606268816afd6914d09626f9bcbbf018edb0afb3f", size = 99878, upload-time = "2026-05-19T21:28:08.637Z" }, + { url = "https://files.pythonhosted.org/packages/3f/52/fb5d34529b46dd84013afcfb30b8d2bc2832ed03d412736f577d604fa393/yarl-1.24.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6b208bb939099b4b297438da4e9b25357f0b1c791888669b963e45b203ea9f36", size = 114025, upload-time = "2026-05-19T21:28:10.64Z" }, + { url = "https://files.pythonhosted.org/packages/43/f0/ff9d31aaab024f7a251c0ed308a98ae29bf9f7dc344e78f28b1322431ca2/yarl-1.24.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4b85b8825e631295ff4bc8943f7471d54c533a9360bbe15ebb38e018b555bb8a", size = 105613, upload-time = "2026-05-19T21:28:12.784Z" }, + { url = "https://files.pythonhosted.org/packages/31/7d/3296fb3f3ecd52bf9ae6c16b0895c1cda7e9170a2083861552b683f70264/yarl-1.24.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e26acf20c26cb4fefc631fdb75aca2a6b8fa8b7b5d7f204fb6a8f1e63c706f53", size = 111665, upload-time = "2026-05-19T21:28:14.393Z" }, + { url = "https://files.pythonhosted.org/packages/1a/74/77aa6ddaca4fbf42e45e675a465c43956dd40702281049975a2aa04eae59/yarl-1.24.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:819ca24f8eafcfb683c1bd5f44f2f488cea1274eb8944731ffd2e1f10f619342", size = 106914, upload-time = "2026-05-19T21:28:15.893Z" }, + { url = "https://files.pythonhosted.org/packages/d8/02/7611f22cd1d4ed7373eb7f9ee21fde1046edba2e7c0e514880d760352f48/yarl-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:5cb0f995a901c36be096ccbf4c673591c2faabbe96279598ffaec8c030f85bf4", size = 92658, upload-time = "2026-05-19T21:28:17.471Z" }, + { url = "https://files.pythonhosted.org/packages/91/00/671d0add79938127292839ae44506ce2f7fe8909c72d5a931864f128fd0b/yarl-1.24.2-cp310-cp310-win_arm64.whl", hash = "sha256:f408eace7e22a68b467a0562e0d27d322f91fe3eaaa6f466b962c6cfaea9fa39", size = 87887, upload-time = "2026-05-19T21:28:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, + { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, + { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, + { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" }, + { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, + { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, + { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, + { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" }, + { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, + { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, + { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" }, + { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, + { url = "https://files.pythonhosted.org/packages/21/3c/f960d7a65ef97d8ba9b424fb5128796a4bc710fc6df2ddbbd7dfdc3bbd20/yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45", size = 92808, upload-time = "2026-05-19T21:28:48.465Z" }, + { url = "https://files.pythonhosted.org/packages/03/1a/49fb03750e4de4d2284cd5b885a383133c34eef45bd59631b2bb8b7e81e8/yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122", size = 87610, upload-time = "2026-05-19T21:28:50.07Z" }, + { url = "https://files.pythonhosted.org/packages/f0/da/866bcb01076ba49d2b42b309867bed3826421f1c479655eb7a607b44f20b/yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8", size = 129957, upload-time = "2026-05-19T21:28:51.695Z" }, + { url = "https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2", size = 92164, upload-time = "2026-05-19T21:28:53.242Z" }, + { url = "https://files.pythonhosted.org/packages/29/b6/170e2b8d4e3bc30e6bfdcca53556537f5bf595e938632dfcb059311f3ff6/yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d", size = 91688, upload-time = "2026-05-19T21:28:54.865Z" }, + { url = "https://files.pythonhosted.org/packages/fe/a5/c9f655d5553ea0b99fdac9d6a99ad3f9b3e73b8e5758bb46f58c9831f74c/yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035", size = 102902, upload-time = "2026-05-19T21:28:56.963Z" }, + { url = "https://files.pythonhosted.org/packages/5d/bc/6b9664d815d79af4ee553337f9d606c56bbf269186ada9172de45f1b5f60/yarl-1.24.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576", size = 97931, upload-time = "2026-05-19T21:28:58.56Z" }, + { url = "https://files.pythonhosted.org/packages/98/ec/32ba48acae30fecd60928f5791188b80a9d6ee3840507ffda29fecd37b71/yarl-1.24.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8", size = 111030, upload-time = "2026-05-19T21:29:00.148Z" }, + { url = "https://files.pythonhosted.org/packages/82/5a/6f4cd081e5f4934d2ae3a8ef4abe3afacc010d26f0035ee91b35cd7d7c37/yarl-1.24.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7", size = 110392, upload-time = "2026-05-19T21:29:02.155Z" }, + { url = "https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c", size = 105612, upload-time = "2026-05-19T21:29:04.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/80/264ab684f181e1a876389374519ff05d10248725535ae2ac4e8ac4e563d6/yarl-1.24.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d", size = 104487, upload-time = "2026-05-19T21:29:06.491Z" }, + { url = "https://files.pythonhosted.org/packages/41/07/efabe5df87e96d7ad5959760b888344be48cd6884db127b407c6b5503adc/yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db", size = 102333, upload-time = "2026-05-19T21:29:08.267Z" }, + { url = "https://files.pythonhosted.org/packages/44/0c/bcf7c42603e1009295f586d8890f2ba032c8b53310e815adf0a202c73d9f/yarl-1.24.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712", size = 99025, upload-time = "2026-05-19T21:29:10.682Z" }, + { url = "https://files.pythonhosted.org/packages/4f/82/84482ab1a57a0f21a08afe6a7004c61d741f8f2ecc3b05c321577c612164/yarl-1.24.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996", size = 110507, upload-time = "2026-05-19T21:29:12.954Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8d/a546ba1dfe1b0f290e05fef145cd07614c0f15df1a707195e512d1e39d1d/yarl-1.24.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b", size = 103719, upload-time = "2026-05-19T21:29:14.893Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b6/267f2a09213138473adfce6b8a6e17791d7fee70bd4d9003218e4dec58b0/yarl-1.24.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c", size = 110438, upload-time = "2026-05-19T21:29:16.485Z" }, + { url = "https://files.pythonhosted.org/packages/48/2d/1c8d89c7c5f9cad9fb2902445d94e2ab1d7aa35de029afbb8ae95c42d00f/yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1", size = 105719, upload-time = "2026-05-19T21:29:18.367Z" }, + { url = "https://files.pythonhosted.org/packages/a7/25/722e3b93bd687009afb2d59a35e13d30ddd8f80571445bb0c4e4ce26ec66/yarl-1.24.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad", size = 92901, upload-time = "2026-05-19T21:29:20.014Z" }, + { url = "https://files.pythonhosted.org/packages/39/47/4486ccfb674c04854a1ef8aa77868b6a6f765feaf69633409d7ca4f02cb8/yarl-1.24.2-cp312-cp312-win_arm64.whl", hash = "sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30", size = 87229, upload-time = "2026-05-19T21:29:22.1Z" }, + { url = "https://files.pythonhosted.org/packages/82/62/fcf0ce677f17e5c471c06311dd25964be38a4c586993632910d2e75278bc/yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536", size = 128978, upload-time = "2026-05-19T21:29:23.83Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/8e63299bb71ed61a834121d9d3fe6c9fcf2a6a5d09754ff4f20f2d20baf5/yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607", size = 91733, upload-time = "2026-05-19T21:29:25.375Z" }, + { url = "https://files.pythonhosted.org/packages/c1/24/16748d5dab6daec8b0ed81ccec639a1cded0f18dcc62a4f696b4fe366c37/yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1", size = 91113, upload-time = "2026-05-19T21:29:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/1b/66/b63fff7b71211e866624b21432d5943cbb633eb0c2872d9ee3070648f22c/yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986", size = 103899, upload-time = "2026-05-19T21:29:28.842Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/ba1974b8533909636f7733fe86cf677e3619527c3c2fa913e0ea89c48757/yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488", size = 97862, upload-time = "2026-05-19T21:29:31.086Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a5/123ac993b5c2ba6f554a140305620cb8f150fa543711bbc49be3ec0a65a4/yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b", size = 111060, upload-time = "2026-05-19T21:29:32.657Z" }, + { url = "https://files.pythonhosted.org/packages/23/37/c472d3af3509688392134a88a825276770a187f1daa4de3f6dc0a327a751/yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592", size = 110613, upload-time = "2026-05-19T21:29:34.379Z" }, + { url = "https://files.pythonhosted.org/packages/df/88/09c28dad91e662ccfaa1b78f1c57badde74fc9d0b23e74aef644750ecd73/yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617", size = 107012, upload-time = "2026-05-19T21:29:36.216Z" }, + { url = "https://files.pythonhosted.org/packages/07/ab/9d4f69d571a94f4d112fa7e2e007200f5a54d319f58c82ac7b7baa61f5c6/yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92", size = 105887, upload-time = "2026-05-19T21:29:38.746Z" }, + { url = "https://files.pythonhosted.org/packages/8e/9a/000b2b66c0d772a499fc531d21dab92dfeb73b640a12eed6ba89f49bb2d0/yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a", size = 103620, upload-time = "2026-05-19T21:29:40.368Z" }, + { url = "https://files.pythonhosted.org/packages/41/7c/7c1050f73450fbdaa3f0c72017059f00ce5e13366692f3dba25275a1083d/yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44", size = 100599, upload-time = "2026-05-19T21:29:42.66Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b1/29e5756b3926705f5f6089bd5b9f50a56eaac550da6e260bf713ead44d04/yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a", size = 110604, upload-time = "2026-05-19T21:29:44.632Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4b/8415bc96e9b150cde942fbac9a8182985e58f40ce5c54c34ed015407d3ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf", size = 105161, upload-time = "2026-05-19T21:29:46.755Z" }, + { url = "https://files.pythonhosted.org/packages/8b/d4/cde059abfa229553b7298a2eadde2752e723d50aeedaef86ce59da2718ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056", size = 110619, upload-time = "2026-05-19T21:29:48.972Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2c/d6a6c9a61549f7b6c7e6dc6937d195bcf069582b47b7200dcd0e7b256acf/yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992", size = 107362, upload-time = "2026-05-19T21:29:51Z" }, + { url = "https://files.pythonhosted.org/packages/92/dd/3ae5fe417e9d1c353a548553326eb9935e76b6b727161563b424cc296df3/yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656", size = 92667, upload-time = "2026-05-19T21:29:52.743Z" }, + { url = "https://files.pythonhosted.org/packages/10/cc/a7beb239f78f27fca1b053c8e8595e4179c02e62249b4687ec218c370c50/yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461", size = 87069, upload-time = "2026-05-19T21:29:54.442Z" }, + { url = "https://files.pythonhosted.org/packages/40/0e/e08087695fc12789263821c5dc0f8dc52b5b17efd0887cacf419f8a43ba3/yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2", size = 129670, upload-time = "2026-05-19T21:29:56.631Z" }, + { url = "https://files.pythonhosted.org/packages/3a/98/ab4b5ed1b1b5cd973c8a3eb994c3a6aefb6ce6d399e21bb5f0316c33815c/yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630", size = 91916, upload-time = "2026-05-19T21:29:58.645Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8", size = 91625, upload-time = "2026-05-19T21:30:00.412Z" }, + { url = "https://files.pythonhosted.org/packages/02/a7/45baabfff76829264e623b185cff0c340d7e11bf3e1cd9ea37e7d17934bd/yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14", size = 104574, upload-time = "2026-05-19T21:30:02.544Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/3a5ab144d3d650ca37d4f4b57e56169be8af3ca34c448793e064b30baaed/yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535", size = 97534, upload-time = "2026-05-19T21:30:04.319Z" }, + { url = "https://files.pythonhosted.org/packages/9c/b5/5658fef3681fb5776b4513b052bec750009f47b3a592251c705d75375798/yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14", size = 111481, upload-time = "2026-05-19T21:30:05.988Z" }, + { url = "https://files.pythonhosted.org/packages/4c/06/fdcd7dde037f00866dce123ed4ba23dba94beb56fc4cf561668d27be37f2/yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3", size = 111529, upload-time = "2026-05-19T21:30:07.738Z" }, + { url = "https://files.pythonhosted.org/packages/c2/53/d81269aaafccea0d33396c03035de997b743f11e648e6e27a0df99c72980/yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208", size = 107338, upload-time = "2026-05-19T21:30:09.713Z" }, + { url = "https://files.pythonhosted.org/packages/ae/04/23049463f729bd899df203a7960505a75333edd499cda8aa1d5a82b64df5/yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50", size = 106147, upload-time = "2026-05-19T21:30:11.365Z" }, + { url = "https://files.pythonhosted.org/packages/14/18/04a4b5830b43ed5e4c5015b40e9f6241ad91487d71611061b4e111d6ac80/yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd", size = 104272, upload-time = "2026-05-19T21:30:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f7/8cffdf319aee7a7c1dbd07b61d91c3e3fda460c7a93b5f93e445f3806c4c/yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67", size = 99962, upload-time = "2026-05-19T21:30:15.001Z" }, + { url = "https://files.pythonhosted.org/packages/d7/39/b3cce3b7dbef64ac700ad4cea156a207d01bede0f507587616c364b5468e/yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1", size = 111063, upload-time = "2026-05-19T21:30:16.683Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ea/100818505e7ebf165c7242ff17fdf7d9fee79e27234aeca871c1082920d7/yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1", size = 105438, upload-time = "2026-05-19T21:30:18.769Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d2/e075a0b32aa6625087de9e653087df0759fed5de4a435fef594181102a77/yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b", size = 111458, upload-time = "2026-05-19T21:30:21.024Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5c/ceea7ba98b65c8eb8d947fdc52f9bedfcd43c6a57c9e3c90c17be8f324a3/yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8", size = 107589, upload-time = "2026-05-19T21:30:23.412Z" }, + { url = "https://files.pythonhosted.org/packages/fa/d9/5582d57e2b2db9b85eb6663a22efdd78e08805f3f5389566e9fcad254d1b/yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0", size = 94424, upload-time = "2026-05-19T21:30:25.425Z" }, + { url = "https://files.pythonhosted.org/packages/92/10/7dc07a0e22806a9280f42a57361395506e800c64e22737cd7b0886feab42/yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57", size = 88690, upload-time = "2026-05-19T21:30:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/9e/13/d5b8e2c8667db955bcb3de233f18798fefe7edf1d7429c2c9d4f9c401114/yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b", size = 136248, upload-time = "2026-05-19T21:30:29.297Z" }, + { url = "https://files.pythonhosted.org/packages/de/46/a4a97c05c9c9b8fd266bb2a0df12992c7fbd02391eb9640583411b6dab32/yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761", size = 95084, upload-time = "2026-05-19T21:30:31.031Z" }, + { url = "https://files.pythonhosted.org/packages/95/b2/845cf2074a015e6fe0d0808cf1a2d9e868386c4220d657ebd8302b199043/yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8", size = 95272, upload-time = "2026-05-19T21:30:33.062Z" }, + { url = "https://files.pythonhosted.org/packages/fe/16/e69d4aa244aef45235ddfebc0e04036a6829842bc5a6a795aedc6c998d23/yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed", size = 101497, upload-time = "2026-05-19T21:30:34.842Z" }, + { url = "https://files.pythonhosted.org/packages/15/94/c07107715d621076863ee88b3ddf183fa5e9d4aba5769623c9979828410a/yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543", size = 94002, upload-time = "2026-05-19T21:30:37.724Z" }, + { url = "https://files.pythonhosted.org/packages/a9/35/fc1bbdd895b5e4010b8fdd037f7ed3aa289d3863e08231b30231ca9a0815/yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0", size = 106524, upload-time = "2026-05-19T21:30:40.196Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f2/32b66d0a4ba47c296cf86d03e2c67bff58399fe6d6d84d5205c04c66cc6d/yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024", size = 106165, upload-time = "2026-05-19T21:30:41.888Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/37cb5ff50c5e825d4d38e81bb04d1b7e96bf960f7ab89f9850b162f3f114/yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf", size = 103010, upload-time = "2026-05-19T21:30:43.985Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/4597912315096f7bb359e46e13bf8b60994fcbb2db29b804c0902ef4eff5/yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc", size = 101128, upload-time = "2026-05-19T21:30:46.291Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/c8e86e120521e646013d02a8e3b8884392e28494be8f392366e50d208efc/yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb", size = 101382, upload-time = "2026-05-19T21:30:48.085Z" }, + { url = "https://files.pythonhosted.org/packages/fa/98/70b229236118f89dbeb739b76f10225bbf53b5497725502594c9a01d699a/yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420", size = 95964, upload-time = "2026-05-19T21:30:49.785Z" }, + { url = "https://files.pythonhosted.org/packages/87/f8/56c386981e3c8648d279fdef2397ffec577e8320fd5649745e34d54faeb7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f", size = 106204, upload-time = "2026-05-19T21:30:51.862Z" }, + { url = "https://files.pythonhosted.org/packages/1a/1e/765afe97811ca35933e2a7de70ac57b1997ea2e4ee895719ee7a231fb7e5/yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa", size = 101510, upload-time = "2026-05-19T21:30:53.62Z" }, + { url = "https://files.pythonhosted.org/packages/ee/78/393913f4b9039e1edd09ae8a9bbb9d539be909a8abf6d8a2084585bed4b7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe", size = 105584, upload-time = "2026-05-19T21:30:55.962Z" }, + { url = "https://files.pythonhosted.org/packages/78/87/deb17b7049bbe74ea11a713b86f8f27800cc1c8648b0b797243ebb4830ba/yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd", size = 103410, upload-time = "2026-05-19T21:30:57.962Z" }, + { url = "https://files.pythonhosted.org/packages/8f/be/f9f7594e23b5b93affff0318e4593c1920331bcaefda326cabcad94296a1/yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215", size = 102980, upload-time = "2026-05-19T21:30:59.735Z" }, + { url = "https://files.pythonhosted.org/packages/65/a4/ba80dccd3593ff1f01051a818694d07b58cb8232677ee9a22a5a1f93a9fc/yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d", size = 91219, upload-time = "2026-05-19T21:31:01.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +]