vlrdevapi 2.0.0__tar.gz → 2.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/CHANGELOG.md +27 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/PKG-INFO +1 -1
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/pyproject.toml +1 -1
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/__init__.py +1 -1
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/_common_parsing.py +6 -8
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/agents/models.py +0 -2
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/agents/parser.py +1 -1
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/profile/parser.py +1 -1
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/players/parser.py +112 -94
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/uv.lock +1 -1
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.gitattributes +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.github/workflows/docs-check.yml +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.github/workflows/publish.yml +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.github/workflows/test.yml +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.gitignore +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.python-version +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/.readthedocs.yaml +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/CODE_OF_CONDUCT.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/CONTRIBUTING.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/LICENCE +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/README.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/SECURITY.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/SUPPORT.md +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/scripts/check_mdx_examples.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/scripts/download_fixtures.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/__init__.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_base.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_cache.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_client.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/_common.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/info/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/info/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/info/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/info/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/info/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/list/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/list/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/list/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/list/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/list/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/matches/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/matches/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/matches/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/matches/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/matches/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/stages/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/stages/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/stages/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/stages/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/stages/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/standings/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/standings/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/standings/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/standings/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/standings/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/teams/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/teams/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/teams/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/teams/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_event/teams/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/common.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/completed/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/completed/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/completed/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/completed/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/completed/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/live/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/live/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/live/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/live/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/live/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/upcoming/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/upcoming/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/upcoming/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/upcoming/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_matches/upcoming/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/agents/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/agents/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/agents/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/info/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/info/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/info/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/info/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/info/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/matches/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/matches/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/matches/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/matches/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/matches/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/profile/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/profile/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/profile/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/profile/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/teams/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/teams/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/teams/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/teams/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_player/teams/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/economy/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/economy/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/economy/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/economy/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/economy/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/info/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/info/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/info/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/info/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/info/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/match_namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/match_namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/performance/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/performance/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/performance/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/performance/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/performance/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/players/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/players/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/players/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/players/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/rounds/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/rounds/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/rounds/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/rounds/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/rounds/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/vods/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/vods/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/vods/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/vods/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_series/vods/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/completed_matches/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/completed_matches/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/completed_matches/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/completed_matches/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/completed_matches/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/info/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/info/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/info/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/info/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/info/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/placements/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/placements/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/placements/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/placements/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/placements/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/roster/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/roster/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/roster/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/roster/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/roster/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/stats/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/stats/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/stats/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/stats/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/stats/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/transactions/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/transactions/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/transactions/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/transactions/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/transactions/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/upcoming_matches/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/upcoming_matches/models.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/upcoming_matches/namespace.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/upcoming_matches/namespace.pyi +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_team/upcoming_matches/parser.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_utils/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_utils/pagination.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_utils/paths.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_utils/team_enrichment.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/_utils/team_parsing.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/commons/__init__.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/commons/countries.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/commons/datetime.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/commons/mappings.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/commons/prizes.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/commons/timezone.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/exceptions.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/fetcher.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/py.typed +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/src/vlrdevapi/validators.py +0 -0
- {vlrdevapi-2.0.0 → vlrdevapi-2.0.1}/wrangler.jsonc +0 -0
|
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
7
|
|
|
8
|
+
## [2.0.1] - 2026-07-29
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Series player stats** — overview tab HTML changed from `<table>` to
|
|
13
|
+
`<div>` on vlr.gg; updated CSS selectors to match the new structure.
|
|
14
|
+
- **Player agent stats** — agent table class changed from `wf-table` to
|
|
15
|
+
`st-table.mod-agent-rows`; column count reduced from 17 to 16 (FKPR and
|
|
16
|
+
FDPR columns consolidated into a single FK:FD ratio column).
|
|
17
|
+
- **Player profile** — same agent table selector fix; the profile fallback
|
|
18
|
+
to `timespan=all` now works correctly.
|
|
19
|
+
- **Team fixtures** — updated stale test assertions for NRG Haven map
|
|
20
|
+
stats (games played, wins, losses, etc.) and total winnings to match
|
|
21
|
+
current vlr.gg data.
|
|
22
|
+
|
|
23
|
+
### Removed
|
|
24
|
+
|
|
25
|
+
- `fkpr` and `fdpr` fields from `AgentStats` model — vlr.gg no longer
|
|
26
|
+
exposes separate First Kills Per Round / First Deaths Per Round columns.
|
|
27
|
+
The `first_kills` and `first_deaths` total fields remain available.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **Documentation** — agents schema reference updated to reflect the
|
|
32
|
+
removal of `fkpr` and `fdpr`.
|
|
33
|
+
|
|
8
34
|
## [2.0.0] - 2026-07-07
|
|
9
35
|
|
|
10
36
|
### Major Rewrite
|
|
@@ -66,4 +92,5 @@ The API surface, module structure, and type system are all new.
|
|
|
66
92
|
- `aiohttp` and `asyncio` dependencies.
|
|
67
93
|
- v1.x match/event/team parsing modules.
|
|
68
94
|
|
|
95
|
+
[2.0.1]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.0.0...v2.0.1
|
|
69
96
|
[2.0.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v1.6.2...v2.0.0
|
|
@@ -139,7 +139,7 @@ def _parse_agent_row(tr: Node) -> AgentStats:
|
|
|
139
139
|
stats = AgentStats()
|
|
140
140
|
tds = tr.css("td")
|
|
141
141
|
|
|
142
|
-
if len(tds) <
|
|
142
|
+
if len(tds) < 16:
|
|
143
143
|
return stats
|
|
144
144
|
|
|
145
145
|
img_el = tds[0].css_first("img")
|
|
@@ -160,12 +160,10 @@ def _parse_agent_row(tr: Node) -> AgentStats:
|
|
|
160
160
|
stats.kast = tds[7].text(strip=True)
|
|
161
161
|
stats.kpr = _parse_float(tds[8].text(strip=True))
|
|
162
162
|
stats.apr = _parse_float(tds[9].text(strip=True))
|
|
163
|
-
stats.
|
|
164
|
-
stats.
|
|
165
|
-
stats.
|
|
166
|
-
stats.
|
|
167
|
-
stats.
|
|
168
|
-
stats.first_kills = _parse_int(tds[15].text(strip=True))
|
|
169
|
-
stats.first_deaths = _parse_int(tds[16].text(strip=True))
|
|
163
|
+
stats.kills = _parse_int(tds[11].text(strip=True))
|
|
164
|
+
stats.deaths = _parse_int(tds[12].text(strip=True))
|
|
165
|
+
stats.assists = _parse_int(tds[13].text(strip=True))
|
|
166
|
+
stats.first_kills = _parse_int(tds[14].text(strip=True))
|
|
167
|
+
stats.first_deaths = _parse_int(tds[15].text(strip=True))
|
|
170
168
|
|
|
171
169
|
return stats
|
|
@@ -18,8 +18,6 @@ class AgentStats(BaseModel):
|
|
|
18
18
|
kast: str = Field(default="", description="Kill, Assist, Survive, Trade %")
|
|
19
19
|
kpr: float | None = Field(default=None, description="Kills Per Round")
|
|
20
20
|
apr: float | None = Field(default=None, description="Assists Per Round")
|
|
21
|
-
fkpr: float | None = Field(default=None, description="First Kills Per Round")
|
|
22
|
-
fdpr: float | None = Field(default=None, description="First Deaths Per Round")
|
|
23
21
|
kills: int | None = Field(default=None, description="Total kills")
|
|
24
22
|
deaths: int | None = Field(default=None, description="Total deaths")
|
|
25
23
|
assists: int | None = Field(default=None, description="Total assists")
|
|
@@ -16,7 +16,7 @@ def parse_agent_stats(html: HTMLParser, timespan: str = "all") -> AgentStatsPage
|
|
|
16
16
|
card = _next_sibling_card(search_from)
|
|
17
17
|
if card is None:
|
|
18
18
|
break
|
|
19
|
-
table = card.css_first("table.
|
|
19
|
+
table = card.css_first("table.st-table.mod-agent-rows")
|
|
20
20
|
if table is None:
|
|
21
21
|
break
|
|
22
22
|
tbody = table.css_first("tbody")
|
|
@@ -69,7 +69,7 @@ def _parse_agents(html: HTMLParser, profile: PlayerProfile) -> None:
|
|
|
69
69
|
card = _next_sibling_card(search_from)
|
|
70
70
|
if card is None:
|
|
71
71
|
break
|
|
72
|
-
table = card.css_first("table.
|
|
72
|
+
table = card.css_first("table.st-table.mod-agent-rows")
|
|
73
73
|
if table is None:
|
|
74
74
|
break
|
|
75
75
|
tbody = table.css_first("tbody")
|
|
@@ -138,119 +138,137 @@ def _parse_stat_cell(td: Node) -> tuple:
|
|
|
138
138
|
return overall, attack, defend
|
|
139
139
|
|
|
140
140
|
|
|
141
|
-
def _parse_player_row(
|
|
142
|
-
|
|
141
|
+
def _parse_player_row(cell: Node) -> PlayerGameStats:
|
|
142
|
+
player = PlayerGameStats()
|
|
143
143
|
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
a = cell.css_first("a")
|
|
145
|
+
if a:
|
|
146
|
+
href = a.attributes.get("href", "") or ""
|
|
147
|
+
parts = href.strip("/").split("/")
|
|
148
|
+
if len(parts) >= 2:
|
|
149
|
+
with contextlib.suppress(ValueError):
|
|
150
|
+
player.player_id = int(parts[1])
|
|
146
151
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
td_player = tds[0] if len(tds) > 0 else None
|
|
156
|
-
td_agents = tds[1] if len(tds) > 1 else None
|
|
157
|
-
|
|
158
|
-
if td_player:
|
|
159
|
-
a = td_player.css_first("a")
|
|
160
|
-
if a:
|
|
161
|
-
href = a.attributes.get("href", "") or ""
|
|
162
|
-
parts = href.strip("/").split("/")
|
|
163
|
-
if len(parts) >= 2:
|
|
164
|
-
with contextlib.suppress(ValueError):
|
|
165
|
-
player.player_id = int(parts[1])
|
|
166
|
-
|
|
167
|
-
name_el = td_player.css_first(".text-of")
|
|
168
|
-
if name_el:
|
|
169
|
-
player.name = name_el.text(strip=True)
|
|
152
|
+
name_el = cell.css_first(".ovw-player-name")
|
|
153
|
+
if name_el:
|
|
154
|
+
player.name = name_el.text(strip=True)
|
|
155
|
+
else:
|
|
156
|
+
bold_el = cell.css_first("div[style*='font-weight: 700']")
|
|
157
|
+
if bold_el:
|
|
158
|
+
player.name = bold_el.text(strip=True)
|
|
170
159
|
else:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
for div in td_player.css("div"):
|
|
176
|
-
text = div.text(strip=True)
|
|
177
|
-
if text and len(text) <= 20 and not div.css("div"):
|
|
178
|
-
player.name = text
|
|
179
|
-
break
|
|
180
|
-
|
|
181
|
-
team_el = td_player.css_first(".ge-text-light")
|
|
182
|
-
if team_el:
|
|
183
|
-
player.team_short = team_el.text(strip=True)
|
|
184
|
-
|
|
185
|
-
flag_el = td_player.css_first("i.flag")
|
|
186
|
-
if flag_el:
|
|
187
|
-
for cls in (flag_el.attributes.get("class") or "").split():
|
|
188
|
-
if cls.startswith("mod-") and cls != "mod-none":
|
|
189
|
-
player.country_code = cls[4:]
|
|
190
|
-
player.country = get_country_name(player.country_code)
|
|
160
|
+
for div in cell.css("div"):
|
|
161
|
+
text = div.text(strip=True)
|
|
162
|
+
if text and len(text) <= 20 and not div.css("div"):
|
|
163
|
+
player.name = text
|
|
191
164
|
break
|
|
192
165
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
if alt:
|
|
197
|
-
player.agents.append(alt.title())
|
|
166
|
+
team_el = cell.css_first(".ovw-player-tag")
|
|
167
|
+
if team_el:
|
|
168
|
+
player.team_short = team_el.text(strip=True)
|
|
198
169
|
|
|
199
|
-
|
|
170
|
+
flag_el = cell.css_first("i.flag")
|
|
171
|
+
if flag_el:
|
|
172
|
+
for cls in (flag_el.attributes.get("class") or "").split():
|
|
173
|
+
if cls.startswith("mod-") and cls != "mod-none":
|
|
174
|
+
player.country_code = cls[4:]
|
|
175
|
+
player.country = get_country_name(player.country_code)
|
|
176
|
+
break
|
|
200
177
|
|
|
178
|
+
for img in cell.css(".ovw-agents img"):
|
|
179
|
+
alt = img.attributes.get("alt", "") or ""
|
|
180
|
+
if alt:
|
|
181
|
+
player.agents.append(alt.title())
|
|
201
182
|
|
|
202
|
-
|
|
203
|
-
"""Parse an entire player stats table into PlayerGameStats list.
|
|
183
|
+
return player
|
|
204
184
|
|
|
205
|
-
Args:
|
|
206
|
-
table: The table Node containing player stat rows.
|
|
207
185
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
186
|
+
def _parse_kda_cell(cell: Node) -> tuple:
|
|
187
|
+
kills_o = kills_a = kills_d = None
|
|
188
|
+
deaths_o = deaths_a = deaths_d = None
|
|
189
|
+
assists_o = assists_a = assists_d = None
|
|
211
190
|
|
|
212
|
-
""
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
191
|
+
for stat_span in cell.css("span.ovw-kda-stat"):
|
|
192
|
+
col = stat_span.attributes.get("data-col", "")
|
|
193
|
+
both_el = stat_span.css_first("span.mod-both")
|
|
194
|
+
t_el = stat_span.css_first("span.mod-t")
|
|
195
|
+
ct_el = stat_span.css_first("span.mod-ct")
|
|
196
|
+
both = _parse_int(both_el.text(strip=True)) if both_el is not None else None
|
|
197
|
+
t = _parse_int(t_el.text(strip=True)) if t_el is not None else None
|
|
198
|
+
ct = _parse_int(ct_el.text(strip=True)) if ct_el is not None else None
|
|
199
|
+
if col == "kills":
|
|
200
|
+
kills_o, kills_a, kills_d = both, t, ct
|
|
201
|
+
elif col == "deaths":
|
|
202
|
+
deaths_o, deaths_a, deaths_d = both, t, ct
|
|
203
|
+
elif col == "assists":
|
|
204
|
+
assists_o, assists_a, assists_d = both, t, ct
|
|
219
205
|
|
|
220
|
-
|
|
206
|
+
return (kills_o, kills_a, kills_d, deaths_o, deaths_a, deaths_d, assists_o, assists_a, assists_d)
|
|
221
207
|
|
|
222
|
-
stat_tds = tds[2:14]
|
|
223
208
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
209
|
+
def _parse_table(table: Node) -> list[PlayerGameStats]:
|
|
210
|
+
players: list[PlayerGameStats] = []
|
|
211
|
+
rows = table.css("div.ovw-row")
|
|
212
|
+
for row in rows:
|
|
213
|
+
cls = row.attributes.get("class", "") or ""
|
|
214
|
+
if "mod-head" in cls:
|
|
215
|
+
continue
|
|
227
216
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
attack_vals.append(a)
|
|
232
|
-
defend_vals.append(d)
|
|
217
|
+
cells = row.css("div.ovw-cell")
|
|
218
|
+
if len(cells) < 11:
|
|
219
|
+
continue
|
|
233
220
|
|
|
234
|
-
|
|
221
|
+
player = _parse_player_row(cells[0])
|
|
222
|
+
|
|
223
|
+
rating_vals = _parse_stat_cell(cells[1])
|
|
224
|
+
acs_vals = _parse_stat_cell(cells[2])
|
|
225
|
+
kills_vals, deaths_vals, assists_vals = None, None, None
|
|
226
|
+
kda_vals = _parse_kda_cell(cells[3])
|
|
227
|
+
kills_vals = (kda_vals[0], kda_vals[1], kda_vals[2])
|
|
228
|
+
deaths_vals = (kda_vals[3], kda_vals[4], kda_vals[5])
|
|
229
|
+
assists_vals = (kda_vals[6], kda_vals[7], kda_vals[8])
|
|
230
|
+
kd_diff_vals = _parse_stat_cell(cells[4])
|
|
231
|
+
kast_vals = _parse_stat_cell(cells[5])
|
|
232
|
+
adr_vals = _parse_stat_cell(cells[6])
|
|
233
|
+
hs_percent_vals = _parse_stat_cell(cells[7])
|
|
234
|
+
first_kills_vals = _parse_stat_cell(cells[8])
|
|
235
|
+
first_deaths_vals = _parse_stat_cell(cells[9])
|
|
236
|
+
fk_fd_diff_vals = _parse_stat_cell(cells[10])
|
|
237
|
+
|
|
238
|
+
def _build_side(
|
|
239
|
+
rating_t, acs_t, kills_t, deaths_t, assists_t, kd_diff_t, kast_t, adr_t, hs_percent_t, first_kills_t, first_deaths_t, fk_fd_diff_t,
|
|
240
|
+
) -> SideStats:
|
|
235
241
|
return SideStats(
|
|
236
|
-
rating=
|
|
237
|
-
acs=
|
|
238
|
-
kills=
|
|
239
|
-
deaths=
|
|
240
|
-
assists=
|
|
241
|
-
kd_diff=
|
|
242
|
-
kast=
|
|
243
|
-
adr=
|
|
244
|
-
hs_percent=
|
|
245
|
-
first_kills=
|
|
246
|
-
first_deaths=
|
|
247
|
-
fk_fd_diff=
|
|
242
|
+
rating=rating_t,
|
|
243
|
+
acs=acs_t,
|
|
244
|
+
kills=kills_t,
|
|
245
|
+
deaths=deaths_t,
|
|
246
|
+
assists=assists_t,
|
|
247
|
+
kd_diff=kd_diff_t,
|
|
248
|
+
kast=kast_t,
|
|
249
|
+
adr=adr_t,
|
|
250
|
+
hs_percent=hs_percent_t,
|
|
251
|
+
first_kills=first_kills_t,
|
|
252
|
+
first_deaths=first_deaths_t,
|
|
253
|
+
fk_fd_diff=fk_fd_diff_t,
|
|
248
254
|
)
|
|
249
255
|
|
|
250
256
|
player.stats = PlayerStats(
|
|
251
|
-
overall=_build_side(
|
|
252
|
-
|
|
253
|
-
|
|
257
|
+
overall=_build_side(
|
|
258
|
+
rating_vals[0], acs_vals[0], kills_vals[0], deaths_vals[0], assists_vals[0],
|
|
259
|
+
kd_diff_vals[0], kast_vals[0], adr_vals[0], hs_percent_vals[0],
|
|
260
|
+
first_kills_vals[0], first_deaths_vals[0], fk_fd_diff_vals[0],
|
|
261
|
+
),
|
|
262
|
+
attack=_build_side(
|
|
263
|
+
rating_vals[1], acs_vals[1], kills_vals[1], deaths_vals[1], assists_vals[1],
|
|
264
|
+
kd_diff_vals[1], kast_vals[1], adr_vals[1], hs_percent_vals[1],
|
|
265
|
+
first_kills_vals[1], first_deaths_vals[1], fk_fd_diff_vals[1],
|
|
266
|
+
),
|
|
267
|
+
defend=_build_side(
|
|
268
|
+
rating_vals[2], acs_vals[2], kills_vals[2], deaths_vals[2], assists_vals[2],
|
|
269
|
+
kd_diff_vals[2], kast_vals[2], adr_vals[2], hs_percent_vals[2],
|
|
270
|
+
first_kills_vals[2], first_deaths_vals[2], fk_fd_diff_vals[2],
|
|
271
|
+
),
|
|
254
272
|
)
|
|
255
273
|
|
|
256
274
|
players.append(player)
|
|
@@ -319,7 +337,7 @@ def parse_players_stats(html: HTMLParser, game_id: str = "all") -> PlayersStats:
|
|
|
319
337
|
if not result.map_name:
|
|
320
338
|
result.map_name = map_div.text(strip=True)
|
|
321
339
|
|
|
322
|
-
tables = game_div.css("
|
|
340
|
+
tables = game_div.css("div.ovw-table")
|
|
323
341
|
if len(tables) < 2:
|
|
324
342
|
return result
|
|
325
343
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|