Skip to content

Commit

Permalink
[misc] Update header year & clearer built-in datasets progress bar msg
Browse files Browse the repository at this point in the history
  • Loading branch information
felixdittrich92 committed Jan 6, 2025
1 parent e6bf82d commit 779eaab
Show file tree
Hide file tree
Showing 166 changed files with 197 additions and 179 deletions.
2 changes: 1 addition & 1 deletion .github/verify_pr_labels.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/routes/detection.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/routes/kie.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/routes/ocr.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/routes/recognition.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/schemas.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion api/app/vision.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion demo/app.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion demo/backend/pytorch.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion demo/backend/tensorflow.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/contrib/artefacts.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/contrib/base.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/cord.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -76,7 +76,9 @@ def __init__(
self.data: list[tuple[str | np.ndarray, str | dict[str, Any] | np.ndarray]] = []
self.train = train
np_dtype = np.float32
for img_path in tqdm(iterable=os.listdir(tmp_root), desc="Unpacking CORD", total=len(os.listdir(tmp_root))):
for img_path in tqdm(
iterable=os.listdir(tmp_root), desc="Preparing and Loading CORD", total=len(os.listdir(tmp_root))
):
# File existence check
if not os.path.exists(os.path.join(tmp_root, img_path)):
raise FileNotFoundError(f"unable to locate {os.path.join(tmp_root, img_path)}")
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/datasets/base.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/datasets/pytorch.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/datasets/tensorflow.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/detection.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/doc_artefacts.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/funsd.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -71,7 +71,9 @@ def __init__(
# # list images
tmp_root = os.path.join(self.root, subfolder, "images")
self.data: list[tuple[str | np.ndarray, str | dict[str, Any] | np.ndarray]] = []
for img_path in tqdm(iterable=os.listdir(tmp_root), desc="Unpacking FUNSD", total=len(os.listdir(tmp_root))):
for img_path in tqdm(
iterable=os.listdir(tmp_root), desc="Preparing and Loading FUNSD", total=len(os.listdir(tmp_root))
):
# File existence check
if not os.path.exists(os.path.join(tmp_root, img_path)):
raise FileNotFoundError(f"unable to locate {os.path.join(tmp_root, img_path)}")
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/generator/base.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/generator/pytorch.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/generator/tensorflow.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
4 changes: 2 additions & 2 deletions doctr/datasets/ic03.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -80,7 +80,7 @@ def __init__(
xml_tree = ET.parse(os.path.join(tmp_root, "words.xml"))
xml_root = xml_tree.getroot()

for image in tqdm(iterable=xml_root, desc="Unpacking IC03", total=len(xml_root)):
for image in tqdm(iterable=xml_root, desc="Preparing and Loading IC03", total=len(xml_root)):
name, _resolution, rectangles = image

# File existence check
Expand Down
4 changes: 2 additions & 2 deletions doctr/datasets/ic13.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -70,7 +70,7 @@ def __init__(

img_names = os.listdir(img_folder)

for img_name in tqdm(iterable=img_names, desc="Unpacking IC13", total=len(img_names)):
for img_name in tqdm(iterable=img_names, desc="Preparing and Loading IC13", total=len(img_names)):
img_path = Path(img_folder, img_name)
label_path = Path(label_folder, "gt_" + Path(img_name).stem + ".txt")

Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/iiit5k.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -72,7 +72,9 @@ def __init__(
self.data: list[tuple[str | np.ndarray, str | dict[str, Any] | np.ndarray]] = []
np_dtype = np.float32

for img_path, label, box_targets in tqdm(iterable=mat_data, desc="Unpacking IIIT5K", total=len(mat_data)):
for img_path, label, box_targets in tqdm(
iterable=mat_data, desc="Preparing and Loading IIIT5K", total=len(mat_data)
):
_raw_path = img_path[0]
_raw_label = label[0]

Expand Down
4 changes: 2 additions & 2 deletions doctr/datasets/iiithws.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -63,7 +63,7 @@ def __init__(
set_slice = slice(train_samples) if self.train else slice(train_samples, None)

for annotation in tqdm(
iterable=annotations[set_slice], desc="Unpacking IIITHWS", total=len(annotations[set_slice])
iterable=annotations[set_slice], desc="Preparing and Loading IIITHWS", total=len(annotations[set_slice])
):
img_path, label = annotation.split()[0:2]
img_path = os.path.join(img_folder, img_path)
Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/imgur5k.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -95,7 +95,9 @@ def __init__(
with open(label_path) as f:
annotation_file = json.load(f)

for img_name in tqdm(iterable=img_names[set_slice], desc="Unpacking IMGUR5K", total=len(img_names[set_slice])):
for img_name in tqdm(
iterable=img_names[set_slice], desc="Preparing and Loading IMGUR5K", total=len(img_names[set_slice])
):
img_path = Path(img_folder, img_name)
img_id = img_name.split(".")[0]

Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/loader.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/mjsynth.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -94,7 +94,9 @@ def __init__(
train_samples = int(len(img_paths) * 0.9)
set_slice = slice(train_samples) if self.train else slice(train_samples, None)

for path in tqdm(iterable=img_paths[set_slice], desc="Unpacking MJSynth", total=len(img_paths[set_slice])):
for path in tqdm(
iterable=img_paths[set_slice], desc="Preparing and Loading MJSynth", total=len(img_paths[set_slice])
):
if path not in self.BLACKLIST:
label = path.split("_")[1]
img_path = os.path.join(img_folder, path[2:]).strip()
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/ocr.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/orientation.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/recognition.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/sroie.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -76,7 +76,9 @@ def __init__(
self.data: list[tuple[str | np.ndarray, str | dict[str, Any] | np.ndarray]] = []
np_dtype = np.float32

for img_path in tqdm(iterable=os.listdir(tmp_root), desc="Unpacking SROIE", total=len(os.listdir(tmp_root))):
for img_path in tqdm(
iterable=os.listdir(tmp_root), desc="Preparing and Loading SROIE", total=len(os.listdir(tmp_root))
):
# File existence check
if not os.path.exists(os.path.join(tmp_root, img_path)):
raise FileNotFoundError(f"unable to locate {os.path.join(tmp_root, img_path)}")
Expand Down
6 changes: 4 additions & 2 deletions doctr/datasets/svhn.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -80,7 +80,9 @@ def __init__(
with h5py.File(os.path.join(tmp_root, "digitStruct.mat"), "r") as f:
img_refs = f["digitStruct/name"]
box_refs = f["digitStruct/bbox"]
for img_ref, box_ref in tqdm(iterable=zip(img_refs, box_refs), desc="Unpacking SVHN", total=len(img_refs)):
for img_ref, box_ref in tqdm(
iterable=zip(img_refs, box_refs), desc="Preparing and Loading SVHN", total=len(img_refs)
):
# convert ascii matrix to string
img_name = "".join(map(chr, f[img_ref[0]][()].flatten()))

Expand Down
4 changes: 2 additions & 2 deletions doctr/datasets/svt.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -73,7 +73,7 @@ def __init__(
)
xml_root = xml_tree.getroot()

for image in tqdm(iterable=xml_root, desc="Unpacking SVT", total=len(xml_root)):
for image in tqdm(iterable=xml_root, desc="Preparing and Loading SVT", total=len(xml_root)):
name, _, _, _resolution, rectangles = image

# File existence check
Expand Down
4 changes: 2 additions & 2 deletions doctr/datasets/synthtext.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down Expand Up @@ -90,7 +90,7 @@ def __init__(
del mat_data

for img_path, word_boxes, txt in tqdm(
iterable=zip(paths, boxes, labels), desc="Unpacking SynthText", total=len(paths)
iterable=zip(paths, boxes, labels), desc="Preparing and Loading SynthText", total=len(paths)
):
# File existence check
if not os.path.exists(os.path.join(tmp_root, img_path[0])):
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
2 changes: 1 addition & 1 deletion doctr/datasets/vocabs.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand Down
8 changes: 6 additions & 2 deletions doctr/datasets/wildreceipt.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Mindee.
# Copyright (C) 2021-2025, Mindee.

# This program is licensed under the Apache License 2.0.
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
Expand All @@ -9,6 +9,7 @@
from typing import Any

import numpy as np
from tqdm import tqdm

from .datasets import AbstractDataset
from .utils import convert_target_to_relative, crop_bboxes_from_image
Expand Down Expand Up @@ -79,7 +80,10 @@ def __init__(
json_strings = data.strip().split("\n")
box: list[float] | np.ndarray
_targets = []
for json_string in json_strings:

for json_string in tqdm(
iterable=json_strings, desc="Preparing and Loading WILDRECEIPT", total=len(json_strings)
):
json_data = json.loads(json_string)
img_path = json_data["file_name"]
annotations = json_data["annotations"]
Expand Down
Loading

0 comments on commit 779eaab

Please sign in to comment.