kinemotion 0.19.0__tar.gz → 0.20.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.
Potentially problematic release.
This version of kinemotion might be problematic. Click here for more details.
- {kinemotion-0.19.0 → kinemotion-0.20.1}/CHANGELOG.md +16 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/PKG-INFO +53 -10
- {kinemotion-0.19.0 → kinemotion-0.20.1}/README.md +52 -9
- {kinemotion-0.19.0 → kinemotion-0.20.1}/pyproject.toml +1 -1
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/video_io.py +12 -2
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_aspect_ratio.py +21 -2
- {kinemotion-0.19.0 → kinemotion-0.20.1}/uv.lock +1 -1
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.dockerignore +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/pull_request_template.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/workflows/release.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.github/workflows/test.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.gitignore +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.readthedocs.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/.tool-versions +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/CLAUDE.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/CONTRIBUTING.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/Dockerfile +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/GEMINI.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/LICENSE +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/SECURITY.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/README.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/api/cmj.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/api/core.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/api/dropjump.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/api/overview.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/index.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/reference/parameters.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/technical/framerate.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/examples/bulk/README.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/mkdocs.yml +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/requirements-docs.txt +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/samples/cmjs/README.md +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/sonar-project.properties +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/api.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/__init__.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_api.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_cli_imports.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_cmj_analysis.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_cmj_kinematics.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_filtering.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_joint_angles.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_kinematics.py +0 -0
- {kinemotion-0.19.0 → kinemotion-0.20.1}/tests/test_polyorder.py +0 -0
|
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.20.1 (2025-11-10)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- Add test coverage for ffprobe warning path
|
|
15
|
+
([`8ae3e55`](https://github.com/feniix/kinemotion/commit/8ae3e552a3bfb749d4e9bad10c634093db5eddee))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## v0.20.0 (2025-11-10)
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
- Add platform-specific installation guide and ffprobe warnings
|
|
23
|
+
([`b61c8c6`](https://github.com/feniix/kinemotion/commit/b61c8c6dbc2191ca321a2b813aa995c3a68b0b0b))
|
|
24
|
+
|
|
25
|
+
|
|
10
26
|
## v0.19.0 (2025-11-10)
|
|
11
27
|
|
|
12
28
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.20.1
|
|
4
4
|
Summary: Video-based kinematic analysis for athletic performance
|
|
5
5
|
Project-URL: Homepage, https://github.com/feniix/kinemotion
|
|
6
6
|
Project-URL: Repository, https://github.com/feniix/kinemotion
|
|
@@ -93,27 +93,70 @@ For clinical, research, or performance assessment requiring validated accuracy,
|
|
|
93
93
|
|
|
94
94
|
## Setup
|
|
95
95
|
|
|
96
|
-
###
|
|
96
|
+
### System Requirements
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
- asdf plugins for Python and uv
|
|
98
|
+
**All Platforms:**
|
|
100
99
|
|
|
101
|
-
|
|
100
|
+
- Python 3.10, 3.11, or 3.12
|
|
102
101
|
|
|
103
|
-
|
|
102
|
+
**Platform-Specific:**
|
|
103
|
+
|
|
104
|
+
#### Windows
|
|
105
|
+
|
|
106
|
+
No additional system dependencies required.
|
|
107
|
+
|
|
108
|
+
**Recommended for mobile video support:**
|
|
109
|
+
|
|
110
|
+
- [FFmpeg](https://ffmpeg.org/download.html) - Download and add to PATH
|
|
111
|
+
|
|
112
|
+
#### macOS
|
|
113
|
+
|
|
114
|
+
No additional system dependencies required.
|
|
115
|
+
|
|
116
|
+
**Recommended for mobile video support:**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
brew install ffmpeg
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### Linux (Ubuntu/Debian)
|
|
123
|
+
|
|
124
|
+
**Recommended system libraries:**
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
sudo apt-get update
|
|
128
|
+
sudo apt-get install -y \
|
|
129
|
+
libgl1-mesa-glx \
|
|
130
|
+
libglib2.0-0 \
|
|
131
|
+
ffmpeg
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Note:** `ffmpeg` provides the `ffprobe` tool for video metadata extraction (rotation, aspect ratio). Kinemotion works without it, but mobile/rotated videos may not process correctly. A warning will be shown if `ffprobe` is not available.
|
|
135
|
+
|
|
136
|
+
### Installation Methods
|
|
137
|
+
|
|
138
|
+
#### From PyPI (Recommended)
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
pip install kinemotion
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### From Source (Development)
|
|
145
|
+
|
|
146
|
+
**Step 1:** Install asdf plugins (if not already installed):
|
|
104
147
|
|
|
105
148
|
```bash
|
|
106
149
|
asdf plugin add python
|
|
107
150
|
asdf plugin add uv
|
|
108
151
|
```
|
|
109
152
|
|
|
110
|
-
|
|
153
|
+
**Step 2:** Install versions specified in `.tool-versions`:
|
|
111
154
|
|
|
112
155
|
```bash
|
|
113
156
|
asdf install
|
|
114
157
|
```
|
|
115
158
|
|
|
116
|
-
|
|
159
|
+
**Step 3:** Install project dependencies using uv:
|
|
117
160
|
|
|
118
161
|
```bash
|
|
119
162
|
uv sync
|
|
@@ -125,7 +168,7 @@ This will install all dependencies and make the `kinemotion` command available.
|
|
|
125
168
|
|
|
126
169
|
Kinemotion supports two jump types with intelligent auto-tuning that automatically optimizes parameters based on video characteristics.
|
|
127
170
|
|
|
128
|
-
### Drop
|
|
171
|
+
### Analyzing Drop Jumps
|
|
129
172
|
|
|
130
173
|
Analyzes reactive strength and ground contact time:
|
|
131
174
|
|
|
@@ -134,7 +177,7 @@ Analyzes reactive strength and ground contact time:
|
|
|
134
177
|
kinemotion dropjump-analyze video.mp4
|
|
135
178
|
```
|
|
136
179
|
|
|
137
|
-
###
|
|
180
|
+
### Analyzing CMJ
|
|
138
181
|
|
|
139
182
|
Analyzes jump height and biomechanics:
|
|
140
183
|
|
|
@@ -64,27 +64,70 @@ For clinical, research, or performance assessment requiring validated accuracy,
|
|
|
64
64
|
|
|
65
65
|
## Setup
|
|
66
66
|
|
|
67
|
-
###
|
|
67
|
+
### System Requirements
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
- asdf plugins for Python and uv
|
|
69
|
+
**All Platforms:**
|
|
71
70
|
|
|
72
|
-
|
|
71
|
+
- Python 3.10, 3.11, or 3.12
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
**Platform-Specific:**
|
|
74
|
+
|
|
75
|
+
#### Windows
|
|
76
|
+
|
|
77
|
+
No additional system dependencies required.
|
|
78
|
+
|
|
79
|
+
**Recommended for mobile video support:**
|
|
80
|
+
|
|
81
|
+
- [FFmpeg](https://ffmpeg.org/download.html) - Download and add to PATH
|
|
82
|
+
|
|
83
|
+
#### macOS
|
|
84
|
+
|
|
85
|
+
No additional system dependencies required.
|
|
86
|
+
|
|
87
|
+
**Recommended for mobile video support:**
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
brew install ffmpeg
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### Linux (Ubuntu/Debian)
|
|
94
|
+
|
|
95
|
+
**Recommended system libraries:**
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
sudo apt-get update
|
|
99
|
+
sudo apt-get install -y \
|
|
100
|
+
libgl1-mesa-glx \
|
|
101
|
+
libglib2.0-0 \
|
|
102
|
+
ffmpeg
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Note:** `ffmpeg` provides the `ffprobe` tool for video metadata extraction (rotation, aspect ratio). Kinemotion works without it, but mobile/rotated videos may not process correctly. A warning will be shown if `ffprobe` is not available.
|
|
106
|
+
|
|
107
|
+
### Installation Methods
|
|
108
|
+
|
|
109
|
+
#### From PyPI (Recommended)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
pip install kinemotion
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
#### From Source (Development)
|
|
116
|
+
|
|
117
|
+
**Step 1:** Install asdf plugins (if not already installed):
|
|
75
118
|
|
|
76
119
|
```bash
|
|
77
120
|
asdf plugin add python
|
|
78
121
|
asdf plugin add uv
|
|
79
122
|
```
|
|
80
123
|
|
|
81
|
-
|
|
124
|
+
**Step 2:** Install versions specified in `.tool-versions`:
|
|
82
125
|
|
|
83
126
|
```bash
|
|
84
127
|
asdf install
|
|
85
128
|
```
|
|
86
129
|
|
|
87
|
-
|
|
130
|
+
**Step 3:** Install project dependencies using uv:
|
|
88
131
|
|
|
89
132
|
```bash
|
|
90
133
|
uv sync
|
|
@@ -96,7 +139,7 @@ This will install all dependencies and make the `kinemotion` command available.
|
|
|
96
139
|
|
|
97
140
|
Kinemotion supports two jump types with intelligent auto-tuning that automatically optimizes parameters based on video characteristics.
|
|
98
141
|
|
|
99
|
-
### Drop
|
|
142
|
+
### Analyzing Drop Jumps
|
|
100
143
|
|
|
101
144
|
Analyzes reactive strength and ground contact time:
|
|
102
145
|
|
|
@@ -105,7 +148,7 @@ Analyzes reactive strength and ground contact time:
|
|
|
105
148
|
kinemotion dropjump-analyze video.mp4
|
|
106
149
|
```
|
|
107
150
|
|
|
108
|
-
###
|
|
151
|
+
### Analyzing CMJ
|
|
109
152
|
|
|
110
153
|
Analyzes jump height and biomechanics:
|
|
111
154
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import subprocess
|
|
5
|
+
import warnings
|
|
5
6
|
|
|
6
7
|
import cv2
|
|
7
8
|
import numpy as np
|
|
@@ -147,8 +148,17 @@ class VideoProcessor:
|
|
|
147
148
|
# Extract rotation from side_data_list (common for iPhone videos)
|
|
148
149
|
self.rotation = self._extract_rotation_from_stream(stream)
|
|
149
150
|
|
|
150
|
-
except
|
|
151
|
-
#
|
|
151
|
+
except FileNotFoundError:
|
|
152
|
+
# ffprobe not found - warn user about reduced functionality
|
|
153
|
+
warnings.warn(
|
|
154
|
+
"ffprobe not found. Video rotation and aspect ratio metadata will be "
|
|
155
|
+
"ignored. This may cause issues with mobile/rotated videos. "
|
|
156
|
+
"Install FFmpeg for full video support: https://ffmpeg.org/download.html",
|
|
157
|
+
UserWarning,
|
|
158
|
+
stacklevel=2,
|
|
159
|
+
)
|
|
160
|
+
except (subprocess.TimeoutExpired, json.JSONDecodeError):
|
|
161
|
+
# If ffprobe fails for other reasons, silently continue with defaults
|
|
152
162
|
pass
|
|
153
163
|
|
|
154
164
|
def read_frame(self) -> np.ndarray | None:
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import tempfile
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
from unittest.mock import patch
|
|
5
6
|
|
|
6
7
|
import cv2
|
|
7
8
|
import numpy as np
|
|
9
|
+
import pytest
|
|
8
10
|
|
|
9
11
|
from kinemotion.core.video_io import VideoProcessor
|
|
10
12
|
from kinemotion.dropjump.debug_overlay import DebugOverlayRenderer
|
|
@@ -98,8 +100,6 @@ def test_aspect_ratio_9_16_portrait():
|
|
|
98
100
|
|
|
99
101
|
def test_frame_dimension_validation():
|
|
100
102
|
"""Test that mismatched frame dimensions raise an error."""
|
|
101
|
-
import pytest
|
|
102
|
-
|
|
103
103
|
output_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name
|
|
104
104
|
|
|
105
105
|
try:
|
|
@@ -117,3 +117,22 @@ def test_frame_dimension_validation():
|
|
|
117
117
|
|
|
118
118
|
finally:
|
|
119
119
|
Path(output_path).unlink(missing_ok=True)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def test_ffprobe_not_found_warning():
|
|
123
|
+
"""Test that warning is shown when ffprobe is not available."""
|
|
124
|
+
test_video = create_test_video(640, 480)
|
|
125
|
+
|
|
126
|
+
try:
|
|
127
|
+
# Mock subprocess.run to raise FileNotFoundError (ffprobe not found)
|
|
128
|
+
with patch(
|
|
129
|
+
"subprocess.run", side_effect=FileNotFoundError("ffprobe not found")
|
|
130
|
+
):
|
|
131
|
+
with pytest.warns(
|
|
132
|
+
UserWarning, match="ffprobe not found.*rotation and aspect ratio"
|
|
133
|
+
):
|
|
134
|
+
video = VideoProcessor(test_video)
|
|
135
|
+
video.close()
|
|
136
|
+
|
|
137
|
+
finally:
|
|
138
|
+
Path(test_video).unlink()
|
|
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
|
{kinemotion-0.19.0 → kinemotion-0.20.1}/docs/research/sports-biomechanics-pose-estimation.md
RENAMED
|
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
|