landingai-ade 0.17.0__tar.gz → 0.18.0__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 landingai-ade might be problematic. Click here for more details.
- landingai_ade-0.18.0/.release-please-manifest.json +3 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/CHANGELOG.md +18 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/PKG-INFO +1 -1
- landingai_ade-0.18.0/api.md +32 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/pyproject.toml +1 -1
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_client.py +13 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_files.py +12 -1
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_types.py +2 -2
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_version.py +1 -1
- landingai_ade-0.18.0/src/landingai_ade/resources/__init__.py +19 -0
- landingai_ade-0.18.0/src/landingai_ade/resources/parse_jobs.py +462 -0
- landingai_ade-0.18.0/src/landingai_ade/types/__init__.py +14 -0
- landingai_ade-0.18.0/src/landingai_ade/types/parse_job_create_params.py +45 -0
- landingai_ade-0.18.0/src/landingai_ade/types/parse_job_create_response.py +9 -0
- landingai_ade-0.18.0/src/landingai_ade/types/parse_job_get_response.py +111 -0
- landingai_ade-0.18.0/src/landingai_ade/types/parse_job_list_params.py +21 -0
- landingai_ade-0.18.0/src/landingai_ade/types/parse_job_list_response.py +31 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/types/parse_response.py +6 -49
- landingai_ade-0.18.0/src/landingai_ade/types/shared/__init__.py +4 -0
- landingai_ade-0.18.0/src/landingai_ade/types/shared/parse_grounding_box.py +15 -0
- landingai_ade-0.18.0/src/landingai_ade/types/shared/parse_metadata.py +23 -0
- landingai_ade-0.18.0/tests/api_resources/test_parse_jobs.py +268 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_files.py +8 -7
- landingai_ade-0.17.0/.release-please-manifest.json +0 -3
- landingai_ade-0.17.0/api.md +0 -12
- landingai_ade-0.17.0/src/landingai_ade/types/__init__.py +0 -8
- landingai_ade-0.17.0/tests/api_resources/__init__.py +0 -1
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/.gitignore +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/CONTRIBUTING.md +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/LICENSE +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/README.md +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/SECURITY.md +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/bin/check-release-environment +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/bin/publish-pypi +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/examples/.keep +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/noxfile.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/release-please-config.json +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/requirements-dev.lock +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/requirements.lock +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/__init__.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_base_client.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_compat.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_constants.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_exceptions.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_models.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_qs.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_resource.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_response.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_streaming.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/__init__.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_compat.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_datetime_parse.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_logs.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_proxy.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_reflection.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_resources_proxy.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_streams.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_sync.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_transform.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_typing.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/_utils/_utils.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/lib/.keep +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/lib/__init__.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/lib/schema_utils.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/lib/url_utils.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/py.typed +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/types/client_extract_params.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/types/client_parse_params.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/src/landingai_ade/types/extract_response.py +0 -0
- {landingai_ade-0.17.0/src/landingai_ade/resources → landingai_ade-0.18.0/tests}/__init__.py +0 -0
- {landingai_ade-0.17.0/tests → landingai_ade-0.18.0/tests/api_resources}/__init__.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/api_resources/test_client.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/conftest.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/sample_file.txt +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_client.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_deepcopy.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_extract_files.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_models.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_qs.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_required_args.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_response.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_streaming.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_transform.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_utils/test_proxy.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/test_utils/test_typing.py +0 -0
- {landingai_ade-0.17.0 → landingai_ade-0.18.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.18.0 (2025-10-10)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.17.1...v0.18.0](https://github.com/landing-ai/ade-python/compare/v0.17.1...v0.18.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** manual updates ([5743253](https://github.com/landing-ai/ade-python/commit/57432532d8ff622e1980d892a13cad5184cc92c5))
|
|
10
|
+
* **api:** update via SDK Studio ([d94d74a](https://github.com/landing-ai/ade-python/commit/d94d74a9545dba1d8de7e7c616ac63b602c28c95))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Chores
|
|
14
|
+
|
|
15
|
+
* remove custom code ([ba76a38](https://github.com/landing-ai/ade-python/commit/ba76a38dd201f37f687cf43fe6ad2605787bfd0a))
|
|
16
|
+
|
|
17
|
+
## 0.17.1 (2025-10-02)
|
|
18
|
+
|
|
19
|
+
Full Changelog: [v0.17.0...v0.17.1](https://github.com/landing-ai/ade-python/compare/v0.17.0...v0.17.1)
|
|
20
|
+
|
|
3
21
|
## 0.17.0 (2025-10-02)
|
|
4
22
|
|
|
5
23
|
Full Changelog: [v0.16.0...v0.17.0](https://github.com/landing-ai/ade-python/compare/v0.16.0...v0.17.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: landingai-ade
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.0
|
|
4
4
|
Summary: The official Python library for the landingai-ade API
|
|
5
5
|
Project-URL: Homepage, https://github.com/landing-ai/ade-python
|
|
6
6
|
Project-URL: Repository, https://github.com/landing-ai/ade-python
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Shared Types
|
|
2
|
+
|
|
3
|
+
```python
|
|
4
|
+
from landingai_ade.types import ParseGroundingBox, ParseMetadata
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
# LandingAIADE
|
|
8
|
+
|
|
9
|
+
Types:
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from landingai_ade.types import ExtractResponse, ParseResponse
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Methods:
|
|
16
|
+
|
|
17
|
+
- <code title="post /v1/ade/extract">client.<a href="./src/landingai_ade/_client.py">extract</a>(\*\*<a href="src/landingai_ade/types/client_extract_params.py">params</a>) -> <a href="./src/landingai_ade/types/extract_response.py">ExtractResponse</a></code>
|
|
18
|
+
- <code title="post /v1/ade/parse">client.<a href="./src/landingai_ade/_client.py">parse</a>(\*\*<a href="src/landingai_ade/types/client_parse_params.py">params</a>) -> <a href="./src/landingai_ade/types/parse_response.py">ParseResponse</a></code>
|
|
19
|
+
|
|
20
|
+
# ParseJobs
|
|
21
|
+
|
|
22
|
+
Types:
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
from landingai_ade.types import ParseJobCreateResponse, ParseJobListResponse, ParseJobGetResponse
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Methods:
|
|
29
|
+
|
|
30
|
+
- <code title="post /v1/ade/parse/jobs">client.parse_jobs.<a href="./src/landingai_ade/resources/parse_jobs.py">create</a>(\*\*<a href="src/landingai_ade/types/parse_job_create_params.py">params</a>) -> <a href="./src/landingai_ade/types/parse_job_create_response.py">ParseJobCreateResponse</a></code>
|
|
31
|
+
- <code title="get /v1/ade/parse/jobs">client.parse_jobs.<a href="./src/landingai_ade/resources/parse_jobs.py">list</a>(\*\*<a href="src/landingai_ade/types/parse_job_list_params.py">params</a>) -> <a href="./src/landingai_ade/types/parse_job_list_response.py">ParseJobListResponse</a></code>
|
|
32
|
+
- <code title="get /v1/ade/parse/jobs/{job_id}">client.parse_jobs.<a href="./src/landingai_ade/resources/parse_jobs.py">get</a>(job_id) -> <a href="./src/landingai_ade/types/parse_job_get_response.py">ParseJobGetResponse</a></code>
|
|
@@ -41,6 +41,7 @@ from ._response import (
|
|
|
41
41
|
async_to_raw_response_wrapper,
|
|
42
42
|
async_to_streamed_response_wrapper,
|
|
43
43
|
)
|
|
44
|
+
from .resources import parse_jobs
|
|
44
45
|
from ._streaming import Stream as Stream, AsyncStream as AsyncStream
|
|
45
46
|
from ._exceptions import APIStatusError, LandingAiadeError
|
|
46
47
|
from ._base_client import (
|
|
@@ -74,6 +75,7 @@ ENVIRONMENTS: Dict[str, str] = {
|
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
class LandingAIADE(SyncAPIClient):
|
|
78
|
+
parse_jobs: parse_jobs.ParseJobsResource
|
|
77
79
|
with_raw_response: LandingAIADEWithRawResponse
|
|
78
80
|
with_streaming_response: LandingAIADEWithStreamedResponse
|
|
79
81
|
|
|
@@ -155,6 +157,7 @@ class LandingAIADE(SyncAPIClient):
|
|
|
155
157
|
_strict_response_validation=_strict_response_validation,
|
|
156
158
|
)
|
|
157
159
|
|
|
160
|
+
self.parse_jobs = parse_jobs.ParseJobsResource(self)
|
|
158
161
|
self.with_raw_response = LandingAIADEWithRawResponse(self)
|
|
159
162
|
self.with_streaming_response = LandingAIADEWithStreamedResponse(self)
|
|
160
163
|
|
|
@@ -422,6 +425,7 @@ class LandingAIADE(SyncAPIClient):
|
|
|
422
425
|
|
|
423
426
|
|
|
424
427
|
class AsyncLandingAIADE(AsyncAPIClient):
|
|
428
|
+
parse_jobs: parse_jobs.AsyncParseJobsResource
|
|
425
429
|
with_raw_response: AsyncLandingAIADEWithRawResponse
|
|
426
430
|
with_streaming_response: AsyncLandingAIADEWithStreamedResponse
|
|
427
431
|
|
|
@@ -503,6 +507,7 @@ class AsyncLandingAIADE(AsyncAPIClient):
|
|
|
503
507
|
_strict_response_validation=_strict_response_validation,
|
|
504
508
|
)
|
|
505
509
|
|
|
510
|
+
self.parse_jobs = parse_jobs.AsyncParseJobsResource(self)
|
|
506
511
|
self.with_raw_response = AsyncLandingAIADEWithRawResponse(self)
|
|
507
512
|
self.with_streaming_response = AsyncLandingAIADEWithStreamedResponse(self)
|
|
508
513
|
|
|
@@ -771,6 +776,8 @@ class AsyncLandingAIADE(AsyncAPIClient):
|
|
|
771
776
|
|
|
772
777
|
class LandingAIADEWithRawResponse:
|
|
773
778
|
def __init__(self, client: LandingAIADE) -> None:
|
|
779
|
+
self.parse_jobs = parse_jobs.ParseJobsResourceWithRawResponse(client.parse_jobs)
|
|
780
|
+
|
|
774
781
|
self.extract = to_raw_response_wrapper(
|
|
775
782
|
client.extract,
|
|
776
783
|
)
|
|
@@ -781,6 +788,8 @@ class LandingAIADEWithRawResponse:
|
|
|
781
788
|
|
|
782
789
|
class AsyncLandingAIADEWithRawResponse:
|
|
783
790
|
def __init__(self, client: AsyncLandingAIADE) -> None:
|
|
791
|
+
self.parse_jobs = parse_jobs.AsyncParseJobsResourceWithRawResponse(client.parse_jobs)
|
|
792
|
+
|
|
784
793
|
self.extract = async_to_raw_response_wrapper(
|
|
785
794
|
client.extract,
|
|
786
795
|
)
|
|
@@ -791,6 +800,8 @@ class AsyncLandingAIADEWithRawResponse:
|
|
|
791
800
|
|
|
792
801
|
class LandingAIADEWithStreamedResponse:
|
|
793
802
|
def __init__(self, client: LandingAIADE) -> None:
|
|
803
|
+
self.parse_jobs = parse_jobs.ParseJobsResourceWithStreamingResponse(client.parse_jobs)
|
|
804
|
+
|
|
794
805
|
self.extract = to_streamed_response_wrapper(
|
|
795
806
|
client.extract,
|
|
796
807
|
)
|
|
@@ -801,6 +812,8 @@ class LandingAIADEWithStreamedResponse:
|
|
|
801
812
|
|
|
802
813
|
class AsyncLandingAIADEWithStreamedResponse:
|
|
803
814
|
def __init__(self, client: AsyncLandingAIADE) -> None:
|
|
815
|
+
self.parse_jobs = parse_jobs.AsyncParseJobsResourceWithStreamingResponse(client.parse_jobs)
|
|
816
|
+
|
|
804
817
|
self.extract = async_to_streamed_response_wrapper(
|
|
805
818
|
client.extract,
|
|
806
819
|
)
|
|
@@ -26,7 +26,7 @@ def is_base64_file_input(obj: object) -> TypeGuard[Base64FileInput]:
|
|
|
26
26
|
|
|
27
27
|
def is_file_content(obj: object) -> TypeGuard[FileContent]:
|
|
28
28
|
return (
|
|
29
|
-
isinstance(obj, bytes) or isinstance(obj, tuple) or isinstance(obj, io.IOBase) or isinstance(obj, os.PathLike)
|
|
29
|
+
isinstance(obj, bytes) or isinstance(obj, str) or isinstance(obj, tuple) or isinstance(obj, io.IOBase) or isinstance(obj, os.PathLike)
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
|
|
@@ -66,6 +66,9 @@ def _transform_file(file: FileTypes) -> HttpxFileTypes:
|
|
|
66
66
|
path = pathlib.Path(file)
|
|
67
67
|
return (path.name, path.read_bytes())
|
|
68
68
|
|
|
69
|
+
if isinstance(file, str):
|
|
70
|
+
return file.encode('utf-8')
|
|
71
|
+
|
|
69
72
|
return file
|
|
70
73
|
|
|
71
74
|
if is_tuple_t(file):
|
|
@@ -77,6 +80,8 @@ def _transform_file(file: FileTypes) -> HttpxFileTypes:
|
|
|
77
80
|
def read_file_content(file: FileContent) -> HttpxFileContent:
|
|
78
81
|
if isinstance(file, os.PathLike):
|
|
79
82
|
return pathlib.Path(file).read_bytes()
|
|
83
|
+
if isinstance(file, str):
|
|
84
|
+
return file.encode('utf-8')
|
|
80
85
|
return file
|
|
81
86
|
|
|
82
87
|
|
|
@@ -108,6 +113,9 @@ async def _async_transform_file(file: FileTypes) -> HttpxFileTypes:
|
|
|
108
113
|
path = anyio.Path(file)
|
|
109
114
|
return (path.name, await path.read_bytes())
|
|
110
115
|
|
|
116
|
+
if isinstance(file, str):
|
|
117
|
+
return file.encode('utf-8')
|
|
118
|
+
|
|
111
119
|
return file
|
|
112
120
|
|
|
113
121
|
if is_tuple_t(file):
|
|
@@ -120,4 +128,7 @@ async def async_read_file_content(file: FileContent) -> HttpxFileContent:
|
|
|
120
128
|
if isinstance(file, os.PathLike):
|
|
121
129
|
return await anyio.Path(file).read_bytes()
|
|
122
130
|
|
|
131
|
+
if isinstance(file, str):
|
|
132
|
+
return file.encode('utf-8')
|
|
133
|
+
|
|
123
134
|
return file
|
|
@@ -52,10 +52,10 @@ ProxiesDict = Dict["str | URL", Union[None, str, URL, Proxy]]
|
|
|
52
52
|
ProxiesTypes = Union[str, Proxy, ProxiesDict]
|
|
53
53
|
if TYPE_CHECKING:
|
|
54
54
|
Base64FileInput = Union[IO[bytes], PathLike[str]]
|
|
55
|
-
FileContent = Union[IO[bytes], bytes, PathLike[str]]
|
|
55
|
+
FileContent = Union[IO[bytes], bytes, str, PathLike[str]]
|
|
56
56
|
else:
|
|
57
57
|
Base64FileInput = Union[IO[bytes], PathLike]
|
|
58
|
-
FileContent = Union[IO[bytes], bytes, PathLike] # PathLike is not subscriptable in Python 3.8.
|
|
58
|
+
FileContent = Union[IO[bytes], bytes, str, PathLike] # PathLike is not subscriptable in Python 3.8.
|
|
59
59
|
FileTypes = Union[
|
|
60
60
|
# file (or bytes)
|
|
61
61
|
FileContent,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from .parse_jobs import (
|
|
4
|
+
ParseJobsResource,
|
|
5
|
+
AsyncParseJobsResource,
|
|
6
|
+
ParseJobsResourceWithRawResponse,
|
|
7
|
+
AsyncParseJobsResourceWithRawResponse,
|
|
8
|
+
ParseJobsResourceWithStreamingResponse,
|
|
9
|
+
AsyncParseJobsResourceWithStreamingResponse,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"ParseJobsResource",
|
|
14
|
+
"AsyncParseJobsResource",
|
|
15
|
+
"ParseJobsResourceWithRawResponse",
|
|
16
|
+
"AsyncParseJobsResourceWithRawResponse",
|
|
17
|
+
"ParseJobsResourceWithStreamingResponse",
|
|
18
|
+
"AsyncParseJobsResourceWithStreamingResponse",
|
|
19
|
+
]
|