pydoll-python 2.13.1__tar.gz → 2.15.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.
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/PKG-INFO +1 -1
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/chromium/base.py +9 -1
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/requests/request.py +17 -13
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/tab.py +13 -5
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/connection/managers/events_manager.py +6 -4
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/interactions/keyboard.py +9 -3
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pyproject.toml +1 -1
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/LICENSE +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/README.md +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/chromium/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/chromium/chrome.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/chromium/edge.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/interfaces.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/browser_options_manager.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/browser_process_manager.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/proxy_manager.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/temp_dir_manager.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/options.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/requests/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/requests/response.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/browser_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/dom_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/fetch_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/input_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/network_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/page_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/runtime_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/storage_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/commands/target_commands.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/connection/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/connection/connection_handler.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/connection/managers/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/connection/managers/commands_manager.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/constants.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/decorators.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/elements/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/elements/mixins/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/elements/mixins/find_elements_mixin.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/elements/web_element.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/exceptions.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/interactions/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/interactions/iframe.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/interactions/scroll.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/base.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/browser/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/browser/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/browser/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/browser/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/debugger/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/dom/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/dom/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/dom/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/dom/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/emulation/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/fetch/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/fetch/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/fetch/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/fetch/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/input/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/input/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/input/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/input/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/io/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/network/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/network/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/network/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/network/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/page/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/page/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/page/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/page/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/runtime/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/runtime/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/runtime/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/runtime/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/security/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/storage/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/storage/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/storage/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/storage/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/target/__init__.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/target/events.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/target/methods.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/protocol/target/types.py +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/py.typed +0 -0
- {pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/utils.py +0 -0
|
@@ -357,6 +357,9 @@ class Browser(ABC): # noqa: PLR0904
|
|
|
357
357
|
)
|
|
358
358
|
return existing_tabs + new_tabs
|
|
359
359
|
|
|
360
|
+
async def get_tab_by_target(self, target: TargetInfo) -> Tab:
|
|
361
|
+
return Tab(self, **self._get_tab_kwargs(target['targetId']))
|
|
362
|
+
|
|
360
363
|
async def set_download_path(self, path: str, browser_context_id: Optional[str] = None):
|
|
361
364
|
"""Set download directory path (convenience method for set_download_behavior)."""
|
|
362
365
|
logger.info(f'Setting download path: {path} (context={browser_context_id})')
|
|
@@ -411,7 +414,12 @@ class Browser(ABC): # noqa: PLR0904
|
|
|
411
414
|
return await self._execute_command(StorageCommands.set_cookies(cookies, browser_context_id))
|
|
412
415
|
|
|
413
416
|
async def get_cookies(self, browser_context_id: Optional[str] = None) -> list[Cookie]:
|
|
414
|
-
"""Get all cookies from browser or context.
|
|
417
|
+
"""Get all cookies from browser or context.
|
|
418
|
+
|
|
419
|
+
Note:
|
|
420
|
+
This method does not work with native incognito mode (--incognito flag).
|
|
421
|
+
For incognito mode, use ``tab.get_cookies()`` instead.
|
|
422
|
+
"""
|
|
415
423
|
response: GetCookiesResponse = await self._execute_command(
|
|
416
424
|
StorageCommands.get_cookies(browser_context_id)
|
|
417
425
|
)
|
|
@@ -15,36 +15,40 @@ from pydoll.commands.runtime_commands import RuntimeCommands
|
|
|
15
15
|
from pydoll.constants import Scripts
|
|
16
16
|
from pydoll.exceptions import HTTPError
|
|
17
17
|
from pydoll.protocol.fetch.types import HeaderEntry
|
|
18
|
-
from pydoll.protocol.network.events import
|
|
18
|
+
from pydoll.protocol.network.events import (
|
|
19
|
+
NetworkEvent,
|
|
20
|
+
RequestWillBeSentEvent,
|
|
21
|
+
RequestWillBeSentExtraInfoEvent,
|
|
22
|
+
ResponseReceivedEvent,
|
|
23
|
+
ResponseReceivedExtraInfoEvent,
|
|
24
|
+
ResponseReceivedExtraInfoEventParams,
|
|
25
|
+
)
|
|
19
26
|
from pydoll.protocol.network.types import CookieParam
|
|
20
27
|
|
|
21
28
|
logger = logging.getLogger(__name__)
|
|
22
29
|
|
|
30
|
+
RequestReceivedEvent = Union[
|
|
31
|
+
ResponseReceivedEvent,
|
|
32
|
+
ResponseReceivedExtraInfoEvent,
|
|
33
|
+
]
|
|
34
|
+
RequestSentEvent = Union[
|
|
35
|
+
RequestWillBeSentEvent,
|
|
36
|
+
RequestWillBeSentExtraInfoEvent,
|
|
37
|
+
]
|
|
38
|
+
|
|
23
39
|
if TYPE_CHECKING:
|
|
24
40
|
from pydoll.browser.tab import Tab
|
|
25
41
|
from pydoll.protocol.network.events import (
|
|
26
|
-
RequestWillBeSentEvent,
|
|
27
42
|
RequestWillBeSentEventParams,
|
|
28
|
-
RequestWillBeSentExtraInfoEvent,
|
|
29
43
|
RequestWillBeSentExtraInfoEventParams,
|
|
30
|
-
ResponseReceivedEvent,
|
|
31
44
|
ResponseReceivedEventParams,
|
|
32
|
-
ResponseReceivedExtraInfoEvent,
|
|
33
45
|
)
|
|
34
46
|
from pydoll.protocol.runtime.methods import EvaluateResponse
|
|
35
47
|
|
|
36
|
-
RequestReceivedEvent = Union[
|
|
37
|
-
ResponseReceivedEvent,
|
|
38
|
-
ResponseReceivedExtraInfoEvent,
|
|
39
|
-
]
|
|
40
48
|
RequestReceivedEventParams = Union[
|
|
41
49
|
ResponseReceivedEventParams,
|
|
42
50
|
ResponseReceivedExtraInfoEventParams,
|
|
43
51
|
]
|
|
44
|
-
RequestSentEvent = Union[
|
|
45
|
-
RequestWillBeSentEvent,
|
|
46
|
-
RequestWillBeSentExtraInfoEvent,
|
|
47
|
-
]
|
|
48
52
|
RequestSentEventParams = Union[
|
|
49
53
|
RequestWillBeSentEventParams,
|
|
50
54
|
RequestWillBeSentExtraInfoEventParams,
|
|
@@ -61,7 +61,6 @@ from pydoll.protocol.runtime.methods import (
|
|
|
61
61
|
SerializationOptions,
|
|
62
62
|
)
|
|
63
63
|
from pydoll.protocol.runtime.types import CallArgument
|
|
64
|
-
from pydoll.protocol.storage.methods import GetCookiesResponse
|
|
65
64
|
from pydoll.utils import (
|
|
66
65
|
decode_base64_to_bytes,
|
|
67
66
|
has_return_outside_function,
|
|
@@ -77,6 +76,7 @@ if TYPE_CHECKING:
|
|
|
77
76
|
)
|
|
78
77
|
from pydoll.protocol.fetch.types import AuthChallengeResponseType, HeaderEntry, RequestStage
|
|
79
78
|
from pydoll.protocol.network.events import RequestWillBeSentEvent
|
|
79
|
+
from pydoll.protocol.network.methods import GetCookiesResponse as NetworkGetCookiesResponse
|
|
80
80
|
from pydoll.protocol.network.methods import GetResponseBodyResponse
|
|
81
81
|
from pydoll.protocol.network.types import (
|
|
82
82
|
Cookie,
|
|
@@ -88,7 +88,7 @@ if TYPE_CHECKING:
|
|
|
88
88
|
from pydoll.protocol.page.events import FileChooserOpenedEvent
|
|
89
89
|
from pydoll.protocol.page.methods import CaptureScreenshotResponse, PrintToPDFResponse
|
|
90
90
|
from pydoll.protocol.runtime.methods import CallFunctionOnResponse, EvaluateResponse
|
|
91
|
-
from pydoll.protocol.storage.methods import GetCookiesResponse
|
|
91
|
+
from pydoll.protocol.storage.methods import GetCookiesResponse as StorageGetCookiesResponse
|
|
92
92
|
|
|
93
93
|
logger = logging.getLogger(__name__)
|
|
94
94
|
|
|
@@ -468,10 +468,18 @@ class Tab(FindElementsMixin):
|
|
|
468
468
|
async def get_cookies(self) -> list[Cookie]:
|
|
469
469
|
"""Get all cookies accessible from current page."""
|
|
470
470
|
logger.debug('Fetching cookies for current page')
|
|
471
|
-
|
|
472
|
-
|
|
471
|
+
if self._browser_context_id:
|
|
472
|
+
response_storage: StorageGetCookiesResponse = await self._execute_command(
|
|
473
|
+
StorageCommands.get_cookies(self._browser_context_id)
|
|
474
|
+
)
|
|
475
|
+
cookies = response_storage['result']['cookies']
|
|
476
|
+
logger.debug(f'Fetched {len(cookies)} cookies')
|
|
477
|
+
return cookies
|
|
478
|
+
|
|
479
|
+
response_network: NetworkGetCookiesResponse = await self._execute_command(
|
|
480
|
+
NetworkCommands.get_cookies()
|
|
473
481
|
)
|
|
474
|
-
cookies =
|
|
482
|
+
cookies = response_network['result']['cookies']
|
|
475
483
|
logger.debug(f'Fetched {len(cookies)} cookies')
|
|
476
484
|
return cookies
|
|
477
485
|
|
|
@@ -4,14 +4,16 @@ import asyncio
|
|
|
4
4
|
import logging
|
|
5
5
|
from typing import TYPE_CHECKING, cast
|
|
6
6
|
|
|
7
|
-
from pydoll.protocol.page.events import
|
|
7
|
+
from pydoll.protocol.page.events import (
|
|
8
|
+
JavascriptDialogOpeningEvent,
|
|
9
|
+
JavascriptDialogOpeningEventParams,
|
|
10
|
+
)
|
|
8
11
|
|
|
9
12
|
if TYPE_CHECKING:
|
|
10
13
|
from typing import Any, Callable
|
|
11
14
|
|
|
12
15
|
from pydoll.protocol.base import CDPEvent
|
|
13
16
|
from pydoll.protocol.network.events import RequestWillBeSentEvent
|
|
14
|
-
from pydoll.protocol.page.events import JavascriptDialogOpeningEventParams
|
|
15
17
|
|
|
16
18
|
logger = logging.getLogger(__name__)
|
|
17
19
|
|
|
@@ -29,7 +31,7 @@ class EventsManager:
|
|
|
29
31
|
self._event_callbacks: dict[int, dict] = {}
|
|
30
32
|
self._callback_id = 0
|
|
31
33
|
self.network_logs: list[RequestWillBeSentEvent] = []
|
|
32
|
-
self.dialog = JavascriptDialogOpeningEvent(
|
|
34
|
+
self.dialog = JavascriptDialogOpeningEvent() # type: ignore
|
|
33
35
|
logger.info('EventsManager initialized')
|
|
34
36
|
logger.debug('Initial state: callbacks=0, logs=0, dialog=empty')
|
|
35
37
|
|
|
@@ -96,7 +98,7 @@ class EventsManager:
|
|
|
96
98
|
)
|
|
97
99
|
|
|
98
100
|
if 'Page.javascriptDialogClosed' in event_name:
|
|
99
|
-
self.dialog = JavascriptDialogOpeningEvent(
|
|
101
|
+
self.dialog = JavascriptDialogOpeningEvent() # type: ignore
|
|
100
102
|
|
|
101
103
|
await self._trigger_callbacks(event_name, event_data)
|
|
102
104
|
|
|
@@ -233,11 +233,17 @@ class Keyboard:
|
|
|
233
233
|
|
|
234
234
|
async def _type_char(self, char: str):
|
|
235
235
|
"""Type a single character."""
|
|
236
|
-
|
|
237
|
-
type=KeyEventType.
|
|
236
|
+
command_down = InputCommands.dispatch_key_event(
|
|
237
|
+
type=KeyEventType.KEY_DOWN,
|
|
238
238
|
text=char,
|
|
239
|
+
unmodified_text=char,
|
|
239
240
|
)
|
|
240
|
-
await self._executor._execute_command(
|
|
241
|
+
await self._executor._execute_command(command_down)
|
|
242
|
+
|
|
243
|
+
command_up = InputCommands.dispatch_key_event(
|
|
244
|
+
type=KeyEventType.KEY_UP,
|
|
245
|
+
)
|
|
246
|
+
await self._executor._execute_command(command_up)
|
|
241
247
|
|
|
242
248
|
async def _type_backspace(self):
|
|
243
249
|
"""Send backspace keypress."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pydoll-python"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.15.0"
|
|
4
4
|
description = "Pydoll is a library for automating chromium-based browsers without a WebDriver, offering realistic interactions."
|
|
5
5
|
authors = ["Thalison Fernandes <thalissfernandes99@gmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/browser_options_manager.py
RENAMED
|
File without changes
|
{pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/browser/managers/browser_process_manager.py
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
|
{pydoll_python-2.13.1 → pydoll_python-2.15.0}/pydoll/connection/managers/commands_manager.py
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|