parsek-cdp 0.1.1__tar.gz → 0.1.2__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.
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/PKG-INFO +1 -1
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/browser.py +31 -3
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/feature.py +5 -1
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/frame.py +29 -5
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/target.py +11 -3
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/request_listener/__init__.py +1 -3
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/PKG-INFO +1 -1
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/pyproject.toml +1 -1
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/LICENSE +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/README.md +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/_logging.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/accessibility/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/animation/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/audits/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/autofill/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/backgroundservice/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/bluetoothemulation/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/browser/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cachestorage/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/cast/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/console/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/css/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/debugger/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceaccess/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/deviceorientation/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/dom/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domdebugger/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domsnapshot/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/domstorage/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/emulation/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/eventbreakpoints/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/extensions/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fedcm/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/fetch/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/filesystem/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/headlessexperimental/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/heapprofiler/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/indexeddb/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/input/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/inspector/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/io/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/layertree/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/log/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/media/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/memory/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/datatype.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/event.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/mixins/namespace.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/network/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/overlay/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/page/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performance/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/performancetimeline/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/preload/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/profiler/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/pwa/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/runtime/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/schema/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/security/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/serviceworker/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/storage/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/systeminfo/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/target/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tethering/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/tracing/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webaudio/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/functions.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/cdp/webauthn/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/browser_context.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/element.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/pagable.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/core/page.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/request_listener/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/features/request_listener/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/generate.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/parsek/__init__.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/parsek/events.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/parsek/types.py +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp/py.typed +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/SOURCES.txt +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/dependency_links.txt +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/requires.txt +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/parsek_cdp.egg-info/top_level.txt +0 -0
- {parsek_cdp-0.1.1 → parsek_cdp-0.1.2}/setup.cfg +0 -0
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
import dataclasses
|
|
6
7
|
import json
|
|
7
8
|
import urllib.parse
|
|
8
9
|
import urllib.request
|
|
9
|
-
from
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
10
12
|
|
|
11
13
|
from ..cdp import CDP
|
|
12
14
|
from ..cdp import Target as TargetDomain
|
|
@@ -23,6 +25,32 @@ from .target import (
|
|
|
23
25
|
)
|
|
24
26
|
|
|
25
27
|
|
|
28
|
+
@dataclass
|
|
29
|
+
class LaunchOptions:
|
|
30
|
+
"""How to start the browser.
|
|
31
|
+
|
|
32
|
+
Plain internal config, not a CDP wire type -- ``to_json``/``from_json`` are
|
|
33
|
+
hand-rolled here (rather than via :class:`DataType`, whose ``__FIELDS__``
|
|
34
|
+
machinery is driven by protocol codegen and fills any field absent from the
|
|
35
|
+
payload with ``None``, clobbering these fields' non-``None`` defaults).
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
executable: Optional[str] = None # autodetect if None
|
|
39
|
+
headless: bool = True
|
|
40
|
+
port: int = 0
|
|
41
|
+
user_data_dir: Optional[str] = None
|
|
42
|
+
extra_args: List[str] = field(default_factory=list)
|
|
43
|
+
use_default_args: bool = True
|
|
44
|
+
|
|
45
|
+
def to_json(self) -> Dict[str, Any]:
|
|
46
|
+
return dataclasses.asdict(self)
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_json(cls, data: Dict[str, Any]) -> "LaunchOptions":
|
|
50
|
+
allowed = {f.name for f in dataclasses.fields(cls)}
|
|
51
|
+
return cls(**{k: v for k, v in data.items() if k in allowed})
|
|
52
|
+
|
|
53
|
+
|
|
26
54
|
class Browser[T: Page](Target, PagableTarget[T]):
|
|
27
55
|
"""The browser endpoint.
|
|
28
56
|
|
|
@@ -109,7 +137,7 @@ class Browser[T: Page](Target, PagableTarget[T]):
|
|
|
109
137
|
*,
|
|
110
138
|
features: Optional[tuple] = None,
|
|
111
139
|
page_class: Optional[type] = None,
|
|
112
|
-
|
|
140
|
+
launch_options: LaunchOptions = LaunchOptions(),
|
|
113
141
|
) -> "Browser[T]":
|
|
114
142
|
"""Create a browser on a parsek-cdp-server and return it, connected.
|
|
115
143
|
|
|
@@ -133,7 +161,7 @@ class Browser[T: Page](Target, PagableTarget[T]):
|
|
|
133
161
|
)
|
|
134
162
|
query = "&".join(f"feature={urllib.parse.quote(f.__name__)}" for f in feats)
|
|
135
163
|
url = f"{server.rstrip('/')}/browsers" + (f"?{query}" if query else "")
|
|
136
|
-
payload = json.dumps(
|
|
164
|
+
payload = json.dumps(launch_options.to_json()).encode()
|
|
137
165
|
# Run the blocking HTTP POST off the event loop so it never stalls it
|
|
138
166
|
# (notably when client and server share one loop in tests).
|
|
139
167
|
info = await asyncio.to_thread(cls._post_json, url, payload)
|
|
@@ -43,6 +43,7 @@ import dataclasses
|
|
|
43
43
|
import typing
|
|
44
44
|
from enum import Enum
|
|
45
45
|
from typing import (
|
|
46
|
+
TYPE_CHECKING,
|
|
46
47
|
Any,
|
|
47
48
|
Callable,
|
|
48
49
|
ClassVar,
|
|
@@ -57,6 +58,9 @@ from typing import (
|
|
|
57
58
|
|
|
58
59
|
from ..cdp.mixins.datatype import DataType, FieldMeta, register
|
|
59
60
|
|
|
61
|
+
if TYPE_CHECKING:
|
|
62
|
+
from .page import Page
|
|
63
|
+
|
|
60
64
|
__all__ = ["Feature", "FeatureHost", "parsek_type", "on", "emit"]
|
|
61
65
|
|
|
62
66
|
# python class -> its registered qualified protocol name, for nested-ref resolution.
|
|
@@ -177,7 +181,7 @@ class Feature:
|
|
|
177
181
|
#: client passthrough.
|
|
178
182
|
domains: tuple = ()
|
|
179
183
|
|
|
180
|
-
def __init__(self, host:
|
|
184
|
+
def __init__(self, host: Page, *, role: str = "client") -> None:
|
|
181
185
|
self.host = host
|
|
182
186
|
self.role = role
|
|
183
187
|
#: cdp method -> (event class, bound handler, emits class | None)
|
|
@@ -73,8 +73,19 @@ class Frame:
|
|
|
73
73
|
self._dom_generation = 0
|
|
74
74
|
self._head_elem = None
|
|
75
75
|
|
|
76
|
+
self._bind_frame_tracking()
|
|
76
77
|
self._bind_dom_tracking()
|
|
77
78
|
|
|
79
|
+
def _bind_frame_tracking(self) -> None:
|
|
80
|
+
self.target.on(Page.FrameAttached, self._on_page_attach_frame)
|
|
81
|
+
self.target.on(Page.FrameNavigated, self._on_page_navigated_frame)
|
|
82
|
+
self.target.on(Page.FrameDetached, self._on_page_dettached_frame)
|
|
83
|
+
|
|
84
|
+
def _unbind_frame_tracking(self) -> None:
|
|
85
|
+
self.target.off(Page.FrameAttached, self._on_page_attach_frame)
|
|
86
|
+
self.target.off(Page.FrameNavigated, self._on_page_navigated_frame)
|
|
87
|
+
self.target.off(Page.FrameDetached, self._on_page_dettached_frame)
|
|
88
|
+
|
|
78
89
|
def _bind_dom_tracking(self) -> None:
|
|
79
90
|
"""Track every event that invalidates this frame's ``nodeId`` map.
|
|
80
91
|
|
|
@@ -98,14 +109,15 @@ class Frame:
|
|
|
98
109
|
self._dom_generation += 1
|
|
99
110
|
|
|
100
111
|
def dispose(self) -> None:
|
|
101
|
-
"""Unregister this frame's (and its subtree's)
|
|
112
|
+
"""Unregister this frame's (and its subtree's) target-level handlers.
|
|
102
113
|
|
|
103
114
|
Same-origin frames share one target, so the handlers bound in
|
|
104
|
-
:meth:`_bind_dom_tracking` outlive the
|
|
105
|
-
Call this whenever a frame leaves the
|
|
106
|
-
:meth:`refresh_frame`) so recreated
|
|
107
|
-
the target.
|
|
115
|
+
:meth:`_bind_dom_tracking` / :meth:`_bind_frame_tracking` outlive the
|
|
116
|
+
frame unless removed explicitly. Call this whenever a frame leaves the
|
|
117
|
+
tree (see :meth:`detach_frame` / :meth:`refresh_frame`) so recreated
|
|
118
|
+
frames don't pile up dead handlers on the target.
|
|
108
119
|
"""
|
|
120
|
+
self._unbind_frame_tracking()
|
|
109
121
|
self._unbind_dom_tracking()
|
|
110
122
|
for child in list(self._frames.values()):
|
|
111
123
|
child.dispose()
|
|
@@ -336,6 +348,18 @@ class Frame:
|
|
|
336
348
|
return visible, element
|
|
337
349
|
return not visible, element
|
|
338
350
|
|
|
351
|
+
async def _on_page_attach_frame(self, event: Page.FrameAttached):
|
|
352
|
+
if event.parent_frame_id == self.id:
|
|
353
|
+
await self.refresh_frame()
|
|
354
|
+
|
|
355
|
+
def _on_page_navigated_frame(self, event: Page.FrameNavigated):
|
|
356
|
+
if event.frame.id == self.id:
|
|
357
|
+
self._frame = event.frame
|
|
358
|
+
|
|
359
|
+
def _on_page_dettached_frame(self, event: Page.FrameDetached):
|
|
360
|
+
if event.frame_id in self._frames:
|
|
361
|
+
self._frames.pop(event.frame_id, None)
|
|
362
|
+
|
|
339
363
|
def attach_frame(self, frame: Frame):
|
|
340
364
|
self._frames[frame.id] = frame
|
|
341
365
|
|
|
@@ -386,13 +386,13 @@ class Target(CDPConnection):
|
|
|
386
386
|
``parent_frame_id``; a popup under its ``opener_id``), rooting at this
|
|
387
387
|
target. Existing :class:`Target` objects are reused -- preserving their
|
|
388
388
|
identity and any open websocket -- and targets gone from the snapshot are
|
|
389
|
-
dropped. Returns this target's direct children.
|
|
389
|
+
dropped and closed. Returns this target's direct children.
|
|
390
390
|
"""
|
|
391
391
|
infos = (await self.cdp.Target.get_targets()).target_infos
|
|
392
|
-
self._rebuild_tree(infos)
|
|
392
|
+
await self._rebuild_tree(infos)
|
|
393
393
|
return self.targets
|
|
394
394
|
|
|
395
|
-
def _rebuild_tree(self, infos: list[TargetDomain.TargetInfo]) -> None:
|
|
395
|
+
async def _rebuild_tree(self, infos: list[TargetDomain.TargetInfo]) -> None:
|
|
396
396
|
# ``getTargets`` is browser-wide, so group children by their parent and
|
|
397
397
|
# then walk only the subtree rooted at *this* target -- a page must not
|
|
398
398
|
# adopt unrelated top-level targets (other tabs, extensions, ...).
|
|
@@ -419,6 +419,7 @@ class Target(CDPConnection):
|
|
|
419
419
|
self._targets = {}
|
|
420
420
|
|
|
421
421
|
root_key = None if self.type_ == "browser" else self.id
|
|
422
|
+
attached: set[str] = set()
|
|
422
423
|
|
|
423
424
|
def attach(parent: Target, key: Optional[str], seen: set[str]) -> None:
|
|
424
425
|
for info in children_of.get(key, ()):
|
|
@@ -426,6 +427,7 @@ class Target(CDPConnection):
|
|
|
426
427
|
if tid in seen: # guard against cyclic parent links
|
|
427
428
|
continue
|
|
428
429
|
seen.add(tid)
|
|
430
|
+
attached.add(tid)
|
|
429
431
|
node = known.get(tid) or Target(info, parent)
|
|
430
432
|
node._target = info
|
|
431
433
|
node._parent = parent
|
|
@@ -434,6 +436,12 @@ class Target(CDPConnection):
|
|
|
434
436
|
|
|
435
437
|
attach(self, root_key, set())
|
|
436
438
|
|
|
439
|
+
# Nodes gone from the fresh snapshot aren't reattached above -- close
|
|
440
|
+
# them explicitly so their websocket and receive loop don't leak.
|
|
441
|
+
for tid, node in known.items():
|
|
442
|
+
if tid not in attached:
|
|
443
|
+
await node.close()
|
|
444
|
+
|
|
437
445
|
async def _on_target_created(self, event: TargetDomain.TargetCreated):
|
|
438
446
|
info = event.target_info
|
|
439
447
|
parent_id = info.opener_id or info.parent_frame_id
|
|
@@ -126,9 +126,7 @@ class RequestListener(Feature):
|
|
|
126
126
|
old._completed.set()
|
|
127
127
|
self._requests.clear()
|
|
128
128
|
keep = data.request_id
|
|
129
|
-
self._pending =
|
|
130
|
-
{keep: self._pending[keep]} if keep in self._pending else {}
|
|
131
|
-
)
|
|
129
|
+
self._pending = {keep: self._pending[keep]} if keep in self._pending else {}
|
|
132
130
|
self._resp = {keep: self._resp[keep]} if keep in self._resp else {}
|
|
133
131
|
self._emitted = {keep} if keep in self._emitted else set()
|
|
134
132
|
self._served_from_cache = (
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "parsek-cdp"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "Chrome DevTools Protocol client — generated protocol layer + async runtime (client scope)."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
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
|
|
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
|