absfuyu 4.1.0__tar.gz → 4.1.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 absfuyu might be problematic. Click here for more details.
- {absfuyu-4.1.0 → absfuyu-4.1.1}/PKG-INFO +1 -1
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/__init__.py +1 -1
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/cli/do_group.py +27 -4
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/core.py +2 -3
- absfuyu-4.1.1/src/absfuyu/tools/checksum.py +143 -0
- absfuyu-4.1.0/src/absfuyu/tools/checksum.py +0 -56
- {absfuyu-4.1.0 → absfuyu-4.1.1}/.gitignore +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/LICENSE +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/README.md +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/dev_requirements.txt +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/docs/Makefile +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/docs/conf.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/docs/index.rst +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/docs/info.md +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/docs/make.bat +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/docs/modules.rst +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/images/repository-image-crop.png +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/images/repository-image-white.png +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/images/repository-image.png +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/pyproject.toml +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/__main__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/cli/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/cli/color.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/cli/config_group.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/cli/game_group.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/config/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/config/config.json +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/everything.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/beautiful.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/dev/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/dev/password_hash.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/dev/passwordlib.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/dev/project_starter.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/dev/shutdownizer.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/extra/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/extensions/extra/data_analysis.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/fun/WGS.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/fun/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/fun/tarot.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/game/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/game/game_stat.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/game/sudoku.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/game/tictactoe.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/game/wordle.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/general/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/general/content.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/general/data_extension.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/general/generator.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/general/human.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/logger.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/pkg_data/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/pkg_data/chemistry.pkl +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/pkg_data/tarot.pkl +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/py.typed +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/sort.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/tools/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/tools/converter.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/tools/keygen.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/tools/obfuscator.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/tools/stats.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/tools/web.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/api.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/json_method.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/lunar.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/path.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/performance.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/pkl.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/shorten_number.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/util/zipped.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/src/absfuyu/version.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/__init__.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/conftest.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_beautiful.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_config.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_data_analysis.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_data_extension.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_everything.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_extensions.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_fun.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_game.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_generator.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_logger.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_passwordlib.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_pkg_data.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_tarot.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_tools.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_util.py +0 -0
- {absfuyu-4.1.0 → absfuyu-4.1.1}/tests/test_version.py +0 -0
|
@@ -3,7 +3,7 @@ ABSFUYU CLI
|
|
|
3
3
|
-----------
|
|
4
4
|
Do
|
|
5
5
|
|
|
6
|
-
Version: 1.3.
|
|
6
|
+
Version: 1.3.1
|
|
7
7
|
Date updated: 01/02/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
@@ -18,7 +18,7 @@ from absfuyu import __title__
|
|
|
18
18
|
from absfuyu.cli.color import COLOR
|
|
19
19
|
from absfuyu.core import __package_feature__
|
|
20
20
|
from absfuyu.general.human import Human2
|
|
21
|
-
from absfuyu.tools.checksum import
|
|
21
|
+
from absfuyu.tools.checksum import Checksum
|
|
22
22
|
from absfuyu.util.zipped import Zipper
|
|
23
23
|
from absfuyu.version import PkgVersion
|
|
24
24
|
|
|
@@ -109,6 +109,26 @@ def unzip_files_in_dir(dir: str) -> None:
|
|
|
109
109
|
show_default=True,
|
|
110
110
|
help="Hash mode",
|
|
111
111
|
)
|
|
112
|
+
@click.option(
|
|
113
|
+
"--save-result",
|
|
114
|
+
"-s",
|
|
115
|
+
"save_result",
|
|
116
|
+
type=bool,
|
|
117
|
+
default=False,
|
|
118
|
+
is_flag=True,
|
|
119
|
+
show_default=True,
|
|
120
|
+
help="Save checksum result to file",
|
|
121
|
+
)
|
|
122
|
+
@click.option(
|
|
123
|
+
"--recursive",
|
|
124
|
+
"-r",
|
|
125
|
+
"recursive_mode",
|
|
126
|
+
type=bool,
|
|
127
|
+
default=False,
|
|
128
|
+
is_flag=True,
|
|
129
|
+
show_default=True,
|
|
130
|
+
help="Do checksum for every file in the folder (including child folder)",
|
|
131
|
+
)
|
|
112
132
|
@click.option(
|
|
113
133
|
"--compare",
|
|
114
134
|
"-c",
|
|
@@ -121,11 +141,14 @@ def unzip_files_in_dir(dir: str) -> None:
|
|
|
121
141
|
def file_checksum(
|
|
122
142
|
file_path: str,
|
|
123
143
|
hash_mode: str | Literal["md5", "sha1", "sha256", "sha512"],
|
|
144
|
+
save_result: bool,
|
|
145
|
+
recursive_mode: bool,
|
|
124
146
|
hash_to_compare: str,
|
|
125
147
|
) -> None:
|
|
126
148
|
"""Checksum for file"""
|
|
127
|
-
|
|
128
|
-
|
|
149
|
+
# print(hash_mode, save_result, recursive_mode)
|
|
150
|
+
instance = Checksum(file_path, hash_mode=hash_mode, save_result_to_file=save_result)
|
|
151
|
+
res = instance.checksum(recursive=recursive_mode)
|
|
129
152
|
if hash_to_compare:
|
|
130
153
|
print(res == hash_to_compare)
|
|
131
154
|
else:
|
|
@@ -3,7 +3,7 @@ Absfuyu: Core
|
|
|
3
3
|
-------------
|
|
4
4
|
Contain type hints and other stuffs
|
|
5
5
|
|
|
6
|
-
Version: 2.3.
|
|
6
|
+
Version: 2.3.1
|
|
7
7
|
Date updated: 01/02/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
@@ -25,7 +25,6 @@ __package_feature__ = ["beautiful", "extra", "res", "full", "dev"]
|
|
|
25
25
|
###########################################################################
|
|
26
26
|
from importlib import import_module
|
|
27
27
|
from importlib.resources import files
|
|
28
|
-
from typing import Iterable
|
|
29
28
|
|
|
30
29
|
|
|
31
30
|
class CLITextColor:
|
|
@@ -54,5 +53,5 @@ try:
|
|
|
54
53
|
tqdm = import_module("tqdm").tqdm
|
|
55
54
|
except ModuleNotFoundError:
|
|
56
55
|
|
|
57
|
-
def tqdm(iterable
|
|
56
|
+
def tqdm(iterable, **kwargs):
|
|
58
57
|
return iterable
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Absufyu: Checksum
|
|
3
|
+
-----------------
|
|
4
|
+
Check MD5, SHA256, ...
|
|
5
|
+
|
|
6
|
+
Version: 1.1.0
|
|
7
|
+
Date updated: 01/02/2025 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# Module level
|
|
11
|
+
###########################################################################
|
|
12
|
+
__all__ = ["Checksum", "checksum_operation"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Library
|
|
16
|
+
###########################################################################
|
|
17
|
+
import hashlib
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Literal
|
|
20
|
+
|
|
21
|
+
from absfuyu.core import tqdm
|
|
22
|
+
|
|
23
|
+
# Function
|
|
24
|
+
###########################################################################
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Deprecated
|
|
28
|
+
def checksum_operation(
|
|
29
|
+
file: Path | str,
|
|
30
|
+
hash_mode: str | Literal["md5", "sha1", "sha256", "sha512"] = "sha256",
|
|
31
|
+
) -> str:
|
|
32
|
+
"""This performs checksum"""
|
|
33
|
+
if hash_mode.lower() == "md5":
|
|
34
|
+
hash_engine = hashlib.md5()
|
|
35
|
+
elif hash_mode.lower() == "sha1":
|
|
36
|
+
hash_engine = hashlib.sha1()
|
|
37
|
+
elif hash_mode.lower() == "sha256":
|
|
38
|
+
hash_engine = hashlib.sha256()
|
|
39
|
+
elif hash_mode.lower() == "sha512":
|
|
40
|
+
hash_engine = hashlib.sha512()
|
|
41
|
+
else:
|
|
42
|
+
hash_engine = hashlib.md5()
|
|
43
|
+
|
|
44
|
+
with open(Path(file), "rb") as f:
|
|
45
|
+
while True:
|
|
46
|
+
data = f.read(4096)
|
|
47
|
+
if len(data) == 0:
|
|
48
|
+
break
|
|
49
|
+
else:
|
|
50
|
+
hash_engine.update(data)
|
|
51
|
+
return hash_engine.hexdigest()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class Checksum:
|
|
55
|
+
def __init__(
|
|
56
|
+
self,
|
|
57
|
+
path: str | Path,
|
|
58
|
+
hash_mode: str | Literal["md5", "sha1", "sha256", "sha512"] = "sha256",
|
|
59
|
+
save_result_to_file: bool = False,
|
|
60
|
+
) -> None:
|
|
61
|
+
self.path = Path(path)
|
|
62
|
+
self.hash_mode = hash_mode
|
|
63
|
+
self.save_result_to_file = save_result_to_file
|
|
64
|
+
self.checksum_result_file_name = "checksum_results.txt"
|
|
65
|
+
|
|
66
|
+
def _get_hash_engine(self):
|
|
67
|
+
hash_mode = self.hash_mode
|
|
68
|
+
if hash_mode.lower() == "md5":
|
|
69
|
+
hash_engine = hashlib.md5()
|
|
70
|
+
elif hash_mode.lower() == "sha1":
|
|
71
|
+
hash_engine = hashlib.sha1()
|
|
72
|
+
elif hash_mode.lower() == "sha256":
|
|
73
|
+
hash_engine = hashlib.sha256()
|
|
74
|
+
elif hash_mode.lower() == "sha512":
|
|
75
|
+
hash_engine = hashlib.sha512()
|
|
76
|
+
else:
|
|
77
|
+
hash_engine = hashlib.md5()
|
|
78
|
+
return hash_engine
|
|
79
|
+
|
|
80
|
+
def _checksum_operation(
|
|
81
|
+
self,
|
|
82
|
+
file: Path | str,
|
|
83
|
+
) -> str:
|
|
84
|
+
"""This performs checksum"""
|
|
85
|
+
|
|
86
|
+
hash_engine = self._get_hash_engine().copy()
|
|
87
|
+
with open(Path(file), "rb") as f:
|
|
88
|
+
# Read and hash the file in 4K chunks. Reading the whole
|
|
89
|
+
# file at once might consume a lot of memory if it is
|
|
90
|
+
# large.
|
|
91
|
+
while True:
|
|
92
|
+
data = f.read(4096)
|
|
93
|
+
if len(data) == 0:
|
|
94
|
+
break
|
|
95
|
+
else:
|
|
96
|
+
hash_engine.update(data)
|
|
97
|
+
return hash_engine.hexdigest() # type: ignore
|
|
98
|
+
|
|
99
|
+
def checksum(self, recursive: bool = True) -> str:
|
|
100
|
+
"""Perform checksum
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
recursive : bool, optional
|
|
105
|
+
Do checksum for every file in the folder (including child folder), by default True
|
|
106
|
+
|
|
107
|
+
Returns
|
|
108
|
+
-------
|
|
109
|
+
str
|
|
110
|
+
Checksum hash
|
|
111
|
+
"""
|
|
112
|
+
if self.path.absolute().is_dir():
|
|
113
|
+
new_path = self.path.joinpath(self.checksum_result_file_name)
|
|
114
|
+
# List of files
|
|
115
|
+
if recursive:
|
|
116
|
+
file_list: list[Path] = [
|
|
117
|
+
x for x in self.path.glob("**/*") if x.is_file()
|
|
118
|
+
]
|
|
119
|
+
else:
|
|
120
|
+
file_list = [x for x in self.path.glob("*") if x.is_file()]
|
|
121
|
+
|
|
122
|
+
# Checksum
|
|
123
|
+
res = []
|
|
124
|
+
for x in tqdm(file_list, desc="Calculating hash", unit_scale=True):
|
|
125
|
+
name = x.relative_to(self.path)
|
|
126
|
+
res.append(f"{self._checksum_operation(x)} | {name}")
|
|
127
|
+
output = "\n".join(res)
|
|
128
|
+
else:
|
|
129
|
+
new_path = self.path.with_name(self.checksum_result_file_name)
|
|
130
|
+
output = self._checksum_operation(self.path)
|
|
131
|
+
|
|
132
|
+
# Save result
|
|
133
|
+
if self.save_result_to_file:
|
|
134
|
+
with open(new_path, "w", encoding="utf-8") as f:
|
|
135
|
+
f.write(output)
|
|
136
|
+
|
|
137
|
+
return output
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
# Run
|
|
141
|
+
###########################################################################
|
|
142
|
+
if __name__ == "__main__":
|
|
143
|
+
pass
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Absufyu: Checksum
|
|
3
|
-
-----------------
|
|
4
|
-
Check MD5, SHA256, ...
|
|
5
|
-
|
|
6
|
-
Version: 1.0.0
|
|
7
|
-
Date updated: 01/02/2025 (dd/mm/yyyy)
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
# Module level
|
|
11
|
-
###########################################################################
|
|
12
|
-
__all__ = ["checksum_operation"]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Library
|
|
16
|
-
###########################################################################
|
|
17
|
-
import hashlib
|
|
18
|
-
from pathlib import Path
|
|
19
|
-
from typing import Literal
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Function
|
|
23
|
-
###########################################################################
|
|
24
|
-
def checksum_operation(
|
|
25
|
-
file: Path | str,
|
|
26
|
-
hash_mode: str | Literal["md5", "sha1", "sha256", "sha512"] = "sha256",
|
|
27
|
-
) -> str:
|
|
28
|
-
"""This performs checksum"""
|
|
29
|
-
if hash_mode.lower() == "md5":
|
|
30
|
-
hash_engine = hashlib.md5()
|
|
31
|
-
elif hash_mode.lower() == "sha1":
|
|
32
|
-
hash_engine = hashlib.sha1()
|
|
33
|
-
elif hash_mode.lower() == "sha256":
|
|
34
|
-
hash_engine = hashlib.sha256()
|
|
35
|
-
elif hash_mode.lower() == "sha512":
|
|
36
|
-
hash_engine = hashlib.sha512()
|
|
37
|
-
else:
|
|
38
|
-
hash_engine = hashlib.md5()
|
|
39
|
-
|
|
40
|
-
with open(Path(file), "rb") as f:
|
|
41
|
-
# Read and hash the file in 4K chunks. Reading the whole
|
|
42
|
-
# file at once might consume a lot of memory if it is
|
|
43
|
-
# large.
|
|
44
|
-
while True:
|
|
45
|
-
data = f.read(4096)
|
|
46
|
-
if len(data) == 0:
|
|
47
|
-
break
|
|
48
|
-
else:
|
|
49
|
-
hash_engine.update(data)
|
|
50
|
-
return hash_engine.hexdigest()
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
# Run
|
|
54
|
-
###########################################################################
|
|
55
|
-
if __name__ == "__main__":
|
|
56
|
-
pass
|
|
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
|