a
    $ñ»jæc  ã                   @  s|  d dl mZ d dlZd dlZd dlmZ ddlmZmZ ddl	m
Z
 ddl	mZ G dd	„ d	eƒZG d
d„ deƒZG dd„ dejƒZeG dd„ dƒƒZG dd„ dejƒZG dd„ dejƒZeG dd„ dƒƒZG dd„ dejƒZeG dd„ dƒƒZeG dd„ dƒƒZdadddddddœd d!„Zdbd"dddd#œd$d%„Zdcddd&œd'd(„Zddd)ddd*dd+œd,d-„Zded)ddd.œd/d0„Zdd1œd2d3„Zdd1œd4d5„Zdd1œd6d7„Z d8d1œd9d:„Z!d;d1œd<d=„Z"dfdd*d>d?œd@dA„Z#dgd)d*dBdCœdDdE„Z$ddFdGœdHdI„Z%dhdJdKdLœdMdN„Z&ddddOœdPdQ„Z'diddddRœdSdT„Z(dddUœdVdW„Z)d)ddXœdYdZ„Z*ed[ƒeG d\d]„ d]ƒƒƒZ+ed^ƒeG d_d`„ d`ƒƒƒZ,dS )jé    )ÚannotationsN)Ú	dataclassé   )Úevent_classÚT_JSON_DICT)Úpage)Útargetc                      s>   e Zd Zddœdd„Zedd dœdd„ƒZ‡ fdd	„Z‡  ZS )
ÚBrowserContextIDÚstr©Úreturnc                 C  s   | S ©N© ©Úselfr   r   ú3E:\soccer\ml_env\Lib\site-packages\mycdp/browser.pyÚto_json   s    zBrowserContextID.to_json©Újsonr   c                 C  s   | |ƒS r   r   ©Úclsr   r   r   r   Ú	from_json   s    zBrowserContextID.from_jsonc                   s   d  tƒ  ¡ ¡S )NzBrowserContextID({})©ÚformatÚsuperÚ__repr__r   ©Ú	__class__r   r   r      s    zBrowserContextID.__repr__©Ú__name__Ú
__module__Ú__qualname__r   Úclassmethodr   r   Ú__classcell__r   r   r   r   r	      s   r	   c                      s>   e Zd Zddœdd„Zedd dœdd„ƒZ‡ fdd	„Z‡  ZS )
ÚWindowIDÚintr   c                 C  s   | S r   r   r   r   r   r   r      s    zWindowID.to_jsonr   c                 C  s   | |ƒS r   r   r   r   r   r   r   !   s    zWindowID.from_jsonc                   s   d  tƒ  ¡ ¡S )NzWindowID({})r   r   r   r   r   r   %   s    zWindowID.__repr__r   r   r   r   r   r$      s   r$   c                   @  sB   e Zd ZdZdZdZdZdZddœdd	„Ze	dd d
œdd„ƒZ
dS )ÚWindowStatez The state of the browser window.ÚnormalZ	minimizedZ	maximizedZ
fullscreenr
   r   c                 C  s   | j S r   ©Úvaluer   r   r   r   r   0   s    zWindowState.to_jsonr   c                 C  s   | |ƒS r   r   r   r   r   r   r   3   s    zWindowState.from_jsonN)r   r    r!   Ú__doc__ZNORMALZ	MINIMIZEDZ	MAXIMIZEDZ
FULLSCREENr   r"   r   r   r   r   r   r&   )   s   r&   c                   @  sp   e Zd ZU dZdZded< dZded< dZded< dZded< dZ	ded	< d
dœdd„Z
ed
d dœdd„ƒZdS )ÚBoundsz!Browser window bounds informationNztyping.Optional[int]ÚleftÚtopÚwidthÚheightztyping.Optional[WindowState]Úwindow_stater   r   c                 C  s”   t ƒ }| jd ur| j|d< | jd ur.| j|d< | jd urB| j|d< | jd urV| j|d< | jd ur�z| j ¡ |d< W n tyŽ   | j|d< Y n0 |S )Nr,   r-   r.   r/   ÚwindowState)Údictr,   r-   r.   r/   r0   r   Ú	Exception©r   r   r   r   r   r   F   s    








zBounds.to_jsonr   c              
   C  sª   | |  dd ¡d ur t|  d¡ƒnd |  dd ¡d ur@t|  d¡ƒnd |  dd ¡d ur`t|  d¡ƒnd |  dd ¡d ur€t|  d¡ƒnd |  dd ¡d ur¢t |  d¡¡nd d�S )Nr,   r-   r.   r/   r1   )r,   r-   r.   r/   r0   )Úgetr%   r&   r   r   r   r   r   r   W   s"    ÿÿÿÿÿèzBounds.from_json)r   r    r!   r*   r,   Ú__annotations__r-   r.   r/   r0   r   r"   r   r   r   r   r   r+   8   s   
r+   c                   @  sª   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d d!œd"d#„Z"e#d d d$œd%d&„ƒZ$d'S )(ÚPermissionTypeZaccessibilityEventsZaudioCaptureZbackgroundSyncZbackgroundFetchZcapturedSurfaceControlZclipboardReadWriteZclipboardSanitizedWriteZdisplayCaptureZdurableStorageZflashZgeolocationZidleDetectionZ
localFontsZlocalNetworkZloopbackNetworkZmidiZ	midiSysexZnfcZnotificationsZpaymentHandlerZperiodicBackgroundSyncZprotectedMediaIdentifierZsensorsZstorageAccessZspeakerSelectionZtopLevelStorageAccessZvideoCaptureZvideoCapturePanTiltZoomZwakeLockScreenZwakeLockSystemZwindowManagementr
   r   c                 C  s   | j S r   r(   r   r   r   r   r   —   s    zPermissionType.to_jsonr   c                 C  s   | |ƒS r   r   r   r   r   r   r   š   s    zPermissionType.from_jsonN)%r   r    r!   ZACCESSIBILITY_EVENTSZAUDIO_CAPTUREZBACKGROUND_SYNCZBACKGROUND_FETCHZCAPTURED_SURFACE_CONTROLZCLIPBOARD_READ_WRITEZCLIPBOARD_SANITIZED_WRITEZDISPLAY_CAPTUREZDURABLE_STORAGEZFLASHZGEOLOCATIONZIDLE_DETECTIONZLOCAL_FONTSZLOCAL_NETWORKZLOOPBACK_NETWORKZMIDIZ
MIDI_SYSEXÚNFCZNOTIFICATIONSZPAYMENT_HANDLERZPERIODIC_BACKGROUND_SYNCZPROTECTED_MEDIA_IDENTIFIERZSENSORSZSTORAGE_ACCESSZSPEAKER_SELECTIONZTOP_LEVEL_STORAGE_ACCESSZVIDEO_CAPTUREZVIDEO_CAPTURE_PAN_TILT_ZOOMZWAKE_LOCK_SCREENZWAKE_LOCK_SYSTEMZWINDOW_MANAGEMENTr   r"   r   r   r   r   r   r7   v   sD   r7   c                   @  s:   e Zd ZdZdZdZddœdd„Zedd dœd	d
„ƒZdS )ÚPermissionSettingZgrantedZdeniedÚpromptr
   r   c                 C  s   | j S r   r(   r   r   r   r   r   ¤   s    zPermissionSetting.to_jsonr   c                 C  s   | |ƒS r   r   r   r   r   r   r   §   s    zPermissionSetting.from_jsonN)	r   r    r!   ZGRANTEDZDENIEDZPROMPTr   r"   r   r   r   r   r   r9   Ÿ   s   r9   c                   @  sx   e Zd ZU dZded< dZded< dZded< dZded< dZded	< dZ	ded
< ddœdd„Z
edd dœdd„ƒZdS )ÚPermissionDescriptorz�
    Definition of PermissionDescriptor defined in the Permissions API:
    https://w3c.github.io/permissions/#dom-permissiondescriptor.
    r
   ÚnameNútyping.Optional[bool]ÚsysexÚuser_visible_onlyÚallow_without_sanitizationÚallow_without_gestureÚpan_tilt_zoomr   r   c                 C  sx   t ƒ }| j|d< | jd ur$| j|d< | jd ur8| j|d< | jd urL| j|d< | jd ur`| j|d< | jd urt| j|d< |S )Nr<   r>   ÚuserVisibleOnlyÚallowWithoutSanitizationÚallowWithoutGestureÚpanTiltZoom)r2   r<   r>   r?   r@   rA   rB   r4   r   r   r   r   À   s    










zPermissionDescriptor.to_jsonr   c              
   C  s´   | t | d¡ƒ| dd ¡d ur,t| d¡ƒnd | dd ¡d urLt| d¡ƒnd | dd ¡d urlt| d¡ƒnd | dd ¡d urŒt| d¡ƒnd | dd ¡d ur¬t| d¡ƒnd d�S )Nr<   r>   rC   rD   rE   rF   )r<   r>   r?   r@   rA   rB   )r
   r5   Úboolr   r   r   r   r   Ï   s$    ÿÿÿÿÿçzPermissionDescriptor.from_json)r   r    r!   r*   r6   r>   r?   r@   rA   rB   r   r"   r   r   r   r   r   r;   ¬   s   
r;   c                   @  s:   e Zd ZdZdZdZddœdd„Zedd dœd	d
„ƒZdS )ÚBrowserCommandIdz2Browser command ids used by executeBrowserCommand.ZopenTabSearchZcloseTabSearchr
   r   c                 C  s   | j S r   r(   r   r   r   r   r   ô   s    zBrowserCommandId.to_jsonr   c                 C  s   | |ƒS r   r   r   r   r   r   r   ÷   s    zBrowserCommandId.from_jsonN)	r   r    r!   r*   ZOPEN_TAB_SEARCHZCLOSE_TAB_SEARCHr   r"   r   r   r   r   r   rH   ï   s   rH   c                   @  sL   e Zd ZU dZded< ded< ded< ddœdd	„Zedd d
œdd„ƒZdS )ÚBucketzChrome histogram bucket.r%   ÚlowÚhighÚcountr   r   c                 C  s(   t ƒ }| j|d< | j|d< | j|d< |S )NrJ   rK   rL   )r2   rJ   rK   rL   r4   r   r   r   r     s
    


zBucket.to_jsonr   c                 C  s,   | t | d¡ƒt | d¡ƒt | d¡ƒd�S )NrJ   rK   rL   )rJ   rK   rL   )r%   r5   r   r   r   r   r     s
    ýzBucket.from_jsonN©r   r    r!   r*   r6   r   r"   r   r   r   r   r   rI   ü   s   
rI   c                   @  sT   e Zd ZU dZded< ded< ded< ded< d	d
œdd„Zed	d dœdd„ƒZdS )Ú	HistogramzChrome histogram.r
   r<   r%   Úsum_rL   ztyping.List[Bucket]Úbucketsr   r   c                 C  sh   t ƒ }| j|d< | j|d< | j|d< zdd„ | jD ƒ|d< W n& tyb   dd„ | jD ƒ|d< Y n0 |S )Nr<   ÚsumrL   c                 S  s   g | ]}|  ¡ ‘qS r   ©r   ©Ú.0Úir   r   r   Ú
<listcomp>(  ó    z%Histogram.to_json.<locals>.<listcomp>rP   c                 S  s   g | ]}|‘qS r   r   rS   r   r   r   rV   *  rW   )r2   r<   rO   rL   rP   r3   r4   r   r   r   r   "  s    


zHistogram.to_jsonr   c                 C  s<   | t | d¡ƒt| d¡ƒt| d¡ƒdd„ |d D ƒd�S )Nr<   rQ   rL   c                 S  s   g | ]}t  |¡‘qS r   )rI   r   rS   r   r   r   rV   3  rW   z'Histogram.from_json.<locals>.<listcomp>rP   )r<   rO   rL   rP   )r
   r5   r%   r   r   r   r   r   -  s    üzHistogram.from_jsonNrM   r   r   r   r   rN     s   
rN   ztyping.Optional[str]z!typing.Optional[BrowserContextID]z0typing.Generator[T_JSON_DICT, T_JSON_DICT, None])Ú
permissionÚsettingÚoriginÚembedded_originÚbrowser_context_idr   c                 c  sÆ   t ƒ }z|  ¡ |d< W n ty0   | |d< Y n0 z| ¡ |d< W n ty\   ||d< Y n0 |durn||d< |dur~||d< |dur²z| ¡ |d< W n ty°   ||d< Y n0 d|dœ}|V }dS )	a»  
    Set permission settings for given embedding and embedded origins.
    :param permission: Descriptor of permission to override.
    :param setting: Setting of the permission.
    :param origin: *(Optional)* Embedding origin the permission applies to,
     all origins if not specified.
    :param embedded_origin: *(Optional)*
     Embedded origin the permission applies to.
     It is ignored unless the embedding origin is present and valid.
     If the embedding origin is provided but the embedded origin isn't,
     the embedding origin is used as the embedded origin.
    :param browser_context_id: *(Optional)* Context to override.
     When omitted, default browser context is used.
    rX   rY   NrZ   ZembeddedOriginÚbrowserContextIdzBrowser.setPermission©ÚmethodÚparams©r2   r   r3   )rX   rY   rZ   r[   r\   r`   Úcmd_dictr   r   r   r   Úset_permission7  s,    þrc   ztyping.List[PermissionType])ÚpermissionsrZ   r\   r   c                 c  sš   t ƒ }zdd„ | D ƒ|d< W n$ ty@   dd„ | D ƒ|d< Y n0 |durR||d< |dur†z| ¡ |d< W n ty„   ||d< Y n0 d|d	œ}|V }dS )
aT  
    Grant specific permissions to the given origin and reject all others.
    :param permissions:
    :param origin: *(Optional)* Origin the permission applies to,
     all origins if not specified.
    :param browser_context_id: *(Optional)* BrowserContext to
     override permissions. When omitted, default browser context is used.
    c                 S  s   g | ]}|  ¡ ‘qS r   rR   rS   r   r   r   rV   t  rW   z%grant_permissions.<locals>.<listcomp>rd   c                 S  s   g | ]}|‘qS r   r   rS   r   r   r   rV   v  rW   NrZ   r]   zBrowser.grantPermissionsr^   )r2   r3   r   )rd   rZ   r\   r`   rb   r   r   r   r   Úgrant_permissionse  s     þre   )r\   r   c                 c  sN   t ƒ }| dur:z|  ¡ |d< W n ty8   | |d< Y n0 d|dœ}|V }dS )z¿
    Reset all permission management for all origins.
    :param browser_context_id: *(Optional)* BrowserContext
     to reset permissions. When omitted, default browser context is used.
    Nr]   zBrowser.resetPermissionsr^   ra   )r\   r`   rb   r   r   r   r   Úreset_permissions…  s    þrf   r
   r=   )Úbehaviorr\   Údownload_pathÚevents_enabledr   c                 c  sv   t ƒ }| |d< |durBz| ¡ |d< W n ty@   ||d< Y n0 |durR||d< |durb||d< d|dœ}|V }dS )a¬  
    Set the behavior when downloading a file.
    :param behavior: Whether to allow all or deny all download requests,
     or use default Chrome behavior if available (otherwise deny).
     `allowAndName` allows download and names files
     according to their download guids.
    :param browser_context_id: *(Optional)*
     BrowserContext to set download behavior.
     When omitted, default browser context is used.
    :param download_path: *(Optional)*
     The default path to save downloaded files to.
     This is required if behavior is set to 'allow' or 'allowAndName'.
    :param events_enabled: *(Optional)*
     Whether to emit download events (defaults to false).
    rg   Nr]   ZdownloadPathZeventsEnabledzBrowser.setDownloadBehaviorr^   ra   )rg   r\   rh   ri   r`   rb   r   r   r   r   Úset_download_behaviorš  s    þrj   )Úguidr\   r   c                 c  sV   t ƒ }| |d< |durBz| ¡ |d< W n ty@   ||d< Y n0 d|dœ}|V }dS )zô
    Cancel a download if in progress.
    :param guid: Global unique identifier of the download.
    :param browser_context_id: *(Optional)*
     BrowserContext to perform the action in.
     When omitted, default browser context is used.
    rk   Nr]   zBrowser.cancelDownloadr^   ra   )rk   r\   r`   rb   r   r   r   r   Úcancel_downloadÁ  s    
þrl   r   c                  c  s   ddi} | V }dS )zClose browser gracefully.r_   zBrowser.closeNr   ©rb   r   r   r   r   ÚcloseÙ  s    ÿrn   c                  c  s   ddi} | V }dS )z#Crashes browser on the main thread.r_   zBrowser.crashNr   rm   r   r   r   Úcrashá  s    ÿro   c                  c  s   ddi} | V }dS )zCrashes GPU process.r_   zBrowser.crashGpuProcessNr   rm   r   r   r   Úcrash_gpu_processé  s    ÿrp   zQtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[str, str, str, str, str]]c                  c  sN   ddi} | V }t | d¡ƒt | d¡ƒt | d¡ƒt | d¡ƒt | d¡ƒfS )a*  
    Returns version information.
    :returns: A tuple with the following items:
        0. **protocolVersion** - Protocol version.
        1. **product** - Product name.
        2. **revision** - Product revision.
        3. **userAgent** - User-Agent.
        4. **jsVersion** - V8 version.
    r_   zBrowser.getVersionZprotocolVersionÚproductÚrevisionZ	userAgentZ	jsVersion)r
   r5   rm   r   r   r   Úget_versionñ  s    ÿûrs   z<typing.Generator[T_JSON_DICT, T_JSON_DICT, typing.List[str]]c                  c  s    ddi} | V }dd„ |d D ƒS )z½
    Returns the command line switches for the browser process if,
    and only if --enable-automation is on the command-line.
    **EXPERIMENTAL**
    :returns: Commandline parameters
    r_   zBrowser.getBrowserCommandLinec                 S  s   g | ]}t |ƒ‘qS r   )r
   rS   r   r   r   rV     rW   z,get_browser_command_line.<locals>.<listcomp>Ú	argumentsr   rm   r   r   r   Úget_browser_command_line  s    
ÿru   zBtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.List[Histogram]])ÚqueryÚdeltar   c                 c  sH   t ƒ }| dur| |d< |dur&||d< d|dœ}|V }dd„ |d D ƒS )	aL  
    Get Chrome histograms.
    :param query: *(Optional)* Requested substring in name.
     Only histograms which have query as a substring in their name
     are extracted. An empty or absent query returns all histograms.
    :param delta: *(Optional)* If true, retrieve delta since last delta call.
    :returns: Histograms.
    Nrv   rw   zBrowser.getHistogramsr^   c                 S  s   g | ]}t  |¡‘qS r   )rN   r   rS   r   r   r   rV   1  rW   z"get_histograms.<locals>.<listcomp>Z
histograms©r2   )rv   rw   r`   rb   r   r   r   r   Úget_histograms  s    þry   z5typing.Generator[T_JSON_DICT, T_JSON_DICT, Histogram])r<   rw   r   c                 c  s>   t ƒ }| |d< |dur||d< d|dœ}|V }t | d¡¡S )zÐ
    Get a Chrome histogram by name.
    **EXPERIMENTAL**
    :param name: Requested histogram name.
    :param delta: *(Optional)* If true, retrieve delta since last delta call.
    :returns: Histogram.
    r<   Nrw   zBrowser.getHistogramr^   Z	histogram)r2   rN   r   r5   )r<   rw   r`   rb   r   r   r   r   Úget_histogram4  s    
þrz   z2typing.Generator[T_JSON_DICT, T_JSON_DICT, Bounds])Ú	window_idr   c                 c  sR   t ƒ }z|  ¡ |d< W n ty0   | |d< Y n0 d|dœ}|V }t | d¡¡S )a  
    Get position and size of the browser window.
    **EXPERIMENTAL**
    :param window_id: Browser window id.
    :returns: Bounds information of the window.
     When window state is 'minimized',
     the restored window position and size are returned.
    ÚwindowIdzBrowser.getWindowBoundsr^   Úbounds)r2   r   r3   r+   r   r5   )r{   r`   rb   r   r   r   r   Úget_window_boundsJ  s    þr~   z typing.Optional[target.TargetID]zJtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[WindowID, Bounds]])Ú	target_idr   c                 c  sj   t ƒ }| dur:z|  ¡ |d< W n ty8   | |d< Y n0 d|dœ}|V }t | d¡¡t | d¡¡fS )aÁ  
    Get the browser window that contains the devtools target.
    :param target_id: *(Optional)* Devtools agent host id.
     If called as a part of the session, associated targetId is used.
    :returns: A tuple with the following items:
        0. **windowId** - Browser window id.
        1. **bounds** - Bounds information of the window.
        When window state is 'minimized',
        the restored window position and size are returned.
    NZtargetIdzBrowser.getWindowForTargetr^   r|   r}   )r2   r   r3   r$   r   r5   r+   )r   r`   rb   r   r   r   r   Úget_window_for_targetb  s    þþr€   )r{   r}   r   c                 c  sr   t ƒ }z|  ¡ |d< W n ty0   | |d< Y n0 z| ¡ |d< W n ty\   ||d< Y n0 d|dœ}|V }dS )a-  
    Set position and/or size of the browser window.
    :param window_id: Browser window id.
    :param bounds: New window bounds.
     The 'minimized', 'maximized' and 'fullscreen' states
     cannot be combined with 'left', 'top', 'width' or 'height'.
     Leaves unspecified fields unchanged.
    r|   r}   zBrowser.setWindowBoundsr^   Nra   )r{   r}   r`   rb   r   r   r   r   Úset_window_bounds‚  s    þr�   )Úbadge_labelÚimager   c                 c  s:   t ƒ }| dur| |d< |dur&||d< d|dœ}|V }dS )zÂ
    Set dock tile details, platform-specific.
    :param badge_label: *(Optional)*
    :param image: *(Optional)* Png encoded image.
     (Encoded as a base64 string when passed over JSON)
    NZ
badgeLabelrƒ   zBrowser.setDockTiler^   rx   )r‚   rƒ   r`   rb   r   r   r   r   Úset_dock_tile�  s    
þr„   )Ú
command_idr   c                 c  sF   t ƒ }z|  ¡ |d< W n ty0   | |d< Y n0 d|dœ}|V }dS )zR
    Invoke custom browser commands used by telemetry.
    :param command_id:
    Z	commandIdzBrowser.executeBrowserCommandr^   Nra   )r…   r`   rb   r   r   r   r   Úexecute_browser_command³  s    þr†   )Úurlr   c                 c  s"   t ƒ }| |d< d|dœ}|V }dS )z­
    Allows a site to use privacy sandbox features that require enrollment
    without the site actually being enrolled. Only supported on page targets.
    :param url:
    r‡   z+Browser.addPrivacySandboxEnrollmentOverrider^   Nrx   )r‡   r`   rb   r   r   r   r   Ú'add_privacy_sandbox_enrollment_overrideÆ  s    þrˆ   zBrowser.downloadWillBeginc                   @  sF   e Zd ZU dZded< ded< ded< ded< edd d	œd
d„ƒZdS )ÚDownloadWillBeginz-Fired when page is about to start a download.zpage.FrameIdÚframe_idr
   rk   r‡   Úsuggested_filenamer   r   c                 C  s<   | t j | d¡¡t| d¡ƒt| d¡ƒt| d¡ƒd�S )NZframeIdrk   r‡   ZsuggestedFilename)rŠ   rk   r‡   r‹   )r   ZFrameIdr   r5   r
   r   r   r   r   r   å  s    üzDownloadWillBegin.from_jsonN©r   r    r!   r*   r6   r"   r   r   r   r   r   r‰   ×  s   
r‰   zBrowser.downloadProgressc                   @  sF   e Zd ZU dZded< ded< ded< ded< edd d	œd
d„ƒZdS )ÚDownloadProgresszK
    Fired when download makes progress. Last call has `done` == true.
    r
   rk   ÚfloatÚtotal_bytesÚreceived_bytesÚstater   r   c                 C  s8   | t | d¡ƒt| d¡ƒt| d¡ƒt | d¡ƒd�S )Nrk   Z
totalBytesZreceivedBytesr‘   )rk   r�   r�   r‘   )r
   r5   rŽ   r   r   r   r   r   þ  s    üzDownloadProgress.from_jsonNrŒ   r   r   r   r   r�   ï  s   
r�   )NNN)NN)N)NNN)N)NN)N)N)NN)-Ú
__future__r   ÚenumÚtypingÚdataclassesr   Úutilr   r   Ú r   r   r
   r	   r%   r$   ÚEnumr&   r+   r7   r9   r;   rH   rI   rN   rc   re   rf   rj   rl   rn   ro   rp   rs   ru   ry   rz   r~   r€   r�   r„   r†   rˆ   r‰   r�   r   r   r   r   Ú<module>   sv   =)B#   û0  ý! ÿ   ü( ÿ ÿ ÿ ÿ   þ