
     fm                    R   d dl mZ ddlmZmZ d dlmZ d dlZd dlZe G d d                      Z	 G d d	ej
                  Z G d
 dej
                  Z G d de          Ze G d d                      Ze G d d                      Z	 dcdddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 dedfd.Zdgd/Z	 	 dhdid5Z	 	 	 	 	 	 	 	 	 	 	 	 	 djdkdCZ	 	 dhdldFZdmdGZ	 	 	 	 	 dndodHZdpdKZdqdMZ	 	 dhdrdRZ	 	 	 	 	 	 	 	 	 	 dsdtd\Z	 	 	 dudvd_Z ed`          e G da db                                  ZdS )w    )annotations   )event_classT_JSON_DICT)	dataclassNc                      e Zd ZU ded<   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Z	ded<   dZ
ded<   dZded<   dZded<   d Zed             ZdS )
TouchPointfloatxyNtyping.Optional[float]radius_xradius_yrotation_angleforcetangential_pressuretilt_xtilt_ytyping.Optional[int]twistid_c                |   t                      }| j        |d<   | j        |d<   | j        
| j        |d<   | j        
| j        |d<   | j        
| j        |d<   | j        
| j        |d<   | j        
| j        |d<   | j        
| j        |d<   | j	        
| j	        |d	<   | j
        
| j
        |d
<   | j        
| j        |d<   |S )Nr   r   radiusXradiusYrotationAngler   tangentialPressuretiltXtiltYr   id)dictr   r   r   r   r   r   r   r   r   r   r   selfjsons     q/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/selenium/webdriver/common/devtools/v125/input_.pyto_jsonzTouchPoint.to_json1   s    vvFS	FS	=$"mDO=$"mDO*$($7D!:! JDM#/)-)AD%&;" KDM;" KDM:! JDM8DJ    c                <    | t          |d                   t          |d                   d|v rt          |d                   nd d|v rt          |d                   nd d|v rt          |d                   nd d|v rt          |d                   nd d|v rt          |d                   nd d|v rt          |d                   nd d	|v rt          |d	                   nd d
|v rt          |d
                   nd d|v rt          |d                   nd           S )Nr   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r
   intclsr#   s     r$   	from_jsonzTouchPoint.from_jsonI   sC   sDIDI/8D/@/@U4	?+++d/8D/@/@U4	?+++d;Jd;R;R5o!6777X\*1T//%W&&&tEY]aEaEad+?&@ A A Agk+2d??5g'''+2d??5g'''(/4#d7m$$$T%)T\\d4j!!!t
 
 
 	
r&   )__name__
__module____qualname____annotations__r   r   r   r   r   r   r   r   r   r%   classmethodr+    r&   r$   r	   r	      s         HHH HHH (,H++++ (,H++++ .2N1111 %)E(((( 376666 &*F)))) &*F)))) #'E&&&& #'C&&&&  0 
 
 [
 
 
r&   r	   c                  6    e Zd ZdZdZdZd Zed             ZdS )GestureSourceTypedefaulttouchmousec                    | j         S Nvaluer"   s    r$   r%   zGestureSourceType.to_json_   
    zr&   c                     | |          S r8   r1   r)   s     r$   r+   zGestureSourceType.from_jsonb       s4yyr&   N)	r,   r-   r.   DEFAULTTOUCHMOUSEr%   r0   r+   r1   r&   r$   r3   r3   Z   sM        GEE     [  r&   r3   c                  B    e Zd ZdZdZdZdZdZdZd Z	e
d             Zd	S )
MouseButtonnoneleftmiddlerightbackforwardc                    | j         S r8   r9   r;   s    r$   r%   zMouseButton.to_jsono   r<   r&   c                     | |          S r8   r1   r)   s     r$   r+   zMouseButton.from_jsonr   r>   r&   N)r,   r-   r.   NONELEFTMIDDLERIGHTBACKFORWARDr%   r0   r+   r1   r&   r$   rC   rC   g   s\        DDFEDG     [  r&   rC   c                  B     e Zd ZdZddZed	d            Z fdZ xZS )
TimeSinceEpochz<
    UTC time in seconds, counted from January 1, 1970.
    returnr
   c                    | S r8   r1   r;   s    r$   r%   zTimeSinceEpoch.to_json{   s    r&   r#   c                     | |          S r8   r1   r)   s     r$   r+   zTimeSinceEpoch.from_json~   r>   r&   c                j    d                     t                                                                S )NzTimeSinceEpoch({}))formatsuper__repr__)r"   	__class__s    r$   rZ   zTimeSinceEpoch.__repr__   s'    #**577+;+;+=+=>>>r&   )rT   r
   )r#   r
   rT   rS   )	r,   r-   r.   __doc__r%   r0   r+   rZ   __classcell__)r[   s   @r$   rS   rS   w   sv                [? ? ? ? ? ? ? ? ?r&   rS   c                  \    e Zd ZU ded<   ded<   dZded<   dZded<   d Zed	             ZdS )
DragDataItemstr	mime_typedataNtyping.Optional[str]titlebase_urlc                    t                      }| j        |d<   | j        |d<   | j        
| j        |d<   | j        
| j        |d<   |S )NmimeTyperb   rd   baseURL)r    ra   rb   rd   re   r!   s     r$   r%   zDragDataItem.to_json   sM    vv>ZyV:! JDM=$"mDOr&   c           	          | t          |d                   t          |d                   d|v rt          |d                   nd d|v rt          |d                   nd           S )Nrg   rb   rd   rh   )ra   rb   rd   re   r`   r)   s     r$   r+   zDragDataItem.from_json   st    s$z*++T&\""(/4#d7m$$$T-6$->->Si)))D	
 
 
 	
r&   )	r,   r-   r.   r/   rd   re   r%   r0   r+   r1   r&   r$   r_   r_      s|          NNN III #'E&&&& &*H))))   
 
 [
 
 
r&   r_   c                  N    e Zd ZU ded<   ded<   dZded<   d Zed	             ZdS )
DragDataztyping.List[DragDataItem]itemsr(   drag_operations_maskN!typing.Optional[typing.List[str]]filesc                    t                      }d | j        D             |d<   | j        |d<   | j        d | j        D             |d<   |S )Nc                6    g | ]}|                                 S r1   r%   .0is     r$   
<listcomp>z$DragData.to_json.<locals>.<listcomp>   s     999999r&   rm   dragOperationsMaskc                    g | ]}|S r1   r1   rt   s     r$   rw   z$DragData.to_json.<locals>.<listcomp>   s    3331Q333r&   rp   )r    rm   rn   rp   r!   s     r$   r%   zDragData.to_json   sX    vv99dj999W%)%>!":!33
333DMr&   c                     | d |d         D             t          |d                   d|v rd |d         D             nd           S )Nc                B    g | ]}t                               |          S r1   )r_   r+   rt   s     r$   rw   z&DragData.from_json.<locals>.<listcomp>   s&    DDD<))!,,DDDr&   rm   rx   rp   c                ,    g | ]}t          |          S r1   rj   rt   s     r$   rw   z&DragData.from_json.<locals>.<listcomp>   s    111a3q66111r&   )rm   rn   rp   )r(   r)   s     r$   r+   zDragData.from_json   sd    sDDd7mDDD!$T*>%?!@!@5<__114=1111$
 
 
 	
r&   )r,   r-   r.   r/   rp   r%   r0   r+   r1   r&   r$   rl   rl      sm         $$$$  04E3333   
 
 [
 
 
r&   rl   type_r`   r   r
   r   rb   	modifiersr   rT   0typing.Generator[T_JSON_DICT, T_JSON_DICT, None]c              #     K   t                      }| |d<   ||d<   ||d<   |                                |d<   |||d<   d|d}|V }dS )	a)  
    Dispatches a drag event into the page.

    **EXPERIMENTAL**

    :param type_: Type of the drag event.
    :param x: X coordinate of the event relative to the main frame's viewport in CSS pixels.
    :param y: Y coordinate of the event relative to the main frame's viewport in CSS pixels. 0 refers to the top of the viewport and Y increases as it proceeds towards the bottom of the viewport.
    :param data:
    :param modifiers: *(Optional)* Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
    typer   r   rb   Nr~   zInput.dispatchDragEventmethodparamsr    r%   )r}   r   r   rb   r~   r   cmd_dictr#   s           r$   dispatch_drag_eventr      sn      $ &&FF6NF3KF3K\\^^F6N'{+ H >>DDDr&   	timestamptyping.Optional[TimeSinceEpoch]textrc   unmodified_textkey_identifiercodekeywindows_virtual_key_codenative_virtual_key_codeauto_repeattyping.Optional[bool]	is_keypadis_system_keylocationcommandsro   c              #  >  K   t                      }| |d<   |||d<   ||                                |d<   |||d<   |||d<   |||d<   |||d<   |||d	<   |||d
<   |	|	|d<   |
|
|d<   |||d<   |||d<   |||d<   |d |D             |d<   d|d}|V }dS )a+  
    Dispatches a key event to the page.

    :param type_: Type of the key event.
    :param modifiers: *(Optional)* Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
    :param timestamp: *(Optional)* Time at which the event occurred.
    :param text: *(Optional)* Text as generated by processing a virtual key code with a keyboard layout. Not needed for for ```keyUp```` and ````rawKeyDown```` events (default: "")
    :param unmodified_text: *(Optional)* Text that would have been generated by the keyboard if no modifiers were pressed (except for shift). Useful for shortcut (accelerator) key handling (default: "").
    :param key_identifier: *(Optional)* Unique key identifier (e.g., 'U+0041') (default: "").
    :param code: *(Optional)* Unique DOM defined string value for each physical key (e.g., 'KeyA') (default: "").
    :param key: *(Optional)* Unique DOM defined string value describing the meaning of the key in the context of active modifiers, keyboard layout, etc (e.g., 'AltGr') (default: "").
    :param windows_virtual_key_code: *(Optional)* Windows virtual key code (default: 0).
    :param native_virtual_key_code: *(Optional)* Native virtual key code (default: 0).
    :param auto_repeat: *(Optional)* Whether the event was generated from auto repeat (default: false).
    :param is_keypad: *(Optional)* Whether the event was generated from the keypad (default: false).
    :param is_system_key: *(Optional)* Whether the event was a system key event (default: false).
    :param location: *(Optional)* Whether the event was from the left or right side of the keyboard. 1=Left, 2=Right (default: 0).
    :param commands: **(EXPERIMENTAL)** *(Optional)* Editing commands to send with the key event (e.g., 'selectAll') (default: []). These are related to but not equal the command names used in ````document.execCommand``` and NSStandardKeyBindingResponding. See https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/editing/commands/editor_command_names.h for valid command names.
    r   Nr~   r   r   unmodifiedTextkeyIdentifierr   r   windowsVirtualKeyCodenativeVirtualKeyCode
autoRepeatisKeypadisSystemKeyr   c                    g | ]}|S r1   r1   rt   s     r$   rw   z&dispatch_key_event.<locals>.<listcomp>&  s    222Aa222r&   r   zInput.dispatchKeyEventr   r   )r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   s                     r$   dispatch_key_eventr      s5     H &&FF6N'{'//11{v"#2 !"0v
u+*B&'*)@%&*|&z  -}%z22222z* H >>DDDr&   c              #  B   K   t                      }| |d<   d|d}|V }dS )z
    This method emulates inserting text that doesn't come from a key press,
    for example an emoji keyboard or an IME.

    **EXPERIMENTAL**

    :param text: The text to insert.
    r   zInput.insertTextr   Nr    )r   r   r   r#   s       r$   insert_textr   .  s;       &&FF6N$ H >>DDDr&   selection_startr(   selection_endreplacement_startreplacement_endc              #  r   K   t                      }| |d<   ||d<   ||d<   |||d<   |||d<   d|d}|V }dS )	a  
    This method sets the current candidate text for IME.
    Use imeCommitComposition to commit the final text.
    Use imeSetComposition with empty string as text to cancel composition.

    **EXPERIMENTAL**

    :param text: The text to insert
    :param selection_start: selection start
    :param selection_end: selection end
    :param replacement_start: *(Optional)* replacement start
    :param replacement_end: *(Optional)* replacement end
    r   selectionStartselectionEndNreplacementStartreplacementEndzInput.imeSetCompositionr   r   )r   r   r   r   r   r   r   r#   s           r$   ime_set_compositionr   B  sr      ( &&FF6N.F*F>$%6!""#2 + H >>DDDr&   buttontyping.Optional[MouseButton]buttonsclick_countr   r   r   r   r   r   delta_xdelta_ypointer_typec              #  T  K   t                      }| |d<   ||d<   ||d<   |||d<   ||                                |d<   ||                                |d<   |||d<   |||d	<   |||d
<   |	|	|d<   |
|
|d<   |||d<   |||d<   |||d<   |||d<   |||d<   d|d}|V }dS )a  
    Dispatches a mouse event to the page.

    :param type_: Type of the mouse event.
    :param x: X coordinate of the event relative to the main frame's viewport in CSS pixels.
    :param y: Y coordinate of the event relative to the main frame's viewport in CSS pixels. 0 refers to the top of the viewport and Y increases as it proceeds towards the bottom of the viewport.
    :param modifiers: *(Optional)* Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
    :param timestamp: *(Optional)* Time at which the event occurred.
    :param button: *(Optional)* Mouse button (default: "none").
    :param buttons: *(Optional)* A number indicating which buttons are pressed on the mouse when a mouse event is triggered. Left=1, Right=2, Middle=4, Back=8, Forward=16, None=0.
    :param click_count: *(Optional)* Number of times the mouse button was clicked (default: 0).
    :param force: **(EXPERIMENTAL)** *(Optional)* The normalized pressure, which has a range of [0,1] (default: 0).
    :param tangential_pressure: **(EXPERIMENTAL)** *(Optional)* The normalized tangential pressure, which has a range of [-1,1] (default: 0).
    :param tilt_x: *(Optional)* The plane angle between the Y-Z plane and the plane containing both the stylus axis and the Y axis, in degrees of the range [-90,90], a positive tiltX is to the right (default: 0).
    :param tilt_y: *(Optional)* The plane angle between the X-Z plane and the plane containing both the stylus axis and the X axis, in degrees of the range [-90,90], a positive tiltY is towards the user (default: 0).
    :param twist: **(EXPERIMENTAL)** *(Optional)* The clockwise rotation of a pen stylus around its own major axis, in degrees in the range [0,359] (default: 0).
    :param delta_x: *(Optional)* X delta in CSS pixels for mouse wheel event (default: 0).
    :param delta_y: *(Optional)* Y delta in CSS pixels for mouse wheel event (default: 0).
    :param pointer_type: *(Optional)* Pointer type (default: "mouse").
    r   r   r   Nr~   r   r   r   
clickCountr   r   r   r   r   deltaXdeltaYpointerTypezInput.dispatchMouseEventr   r   )r}   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   s                      r$   dispatch_mouse_eventr   e  s1     L &&FF6NF3KF3K'{'//11{!>>++x#y*|w&':#$ w ww"x"x ,}, H >>DDDr&   touch_pointstyping.List[TouchPoint]c              #     K   t                      }| |d<   d |D             |d<   |||d<   ||                                |d<   d|d}|V }dS )	au  
    Dispatches a touch event to the page.

    :param type_: Type of the touch event. TouchEnd and TouchCancel must not contain any touch points, while TouchStart and TouchMove must contains at least one.
    :param touch_points: Active touch points on the touch device. One event per any changed point (compared to previous touch event in a sequence) is generated, emulating pressing/moving/releasing points one by one.
    :param modifiers: *(Optional)* Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
    :param timestamp: *(Optional)* Time at which the event occurred.
    r   c                6    g | ]}|                                 S r1   rs   rt   s     r$   rw   z(dispatch_touch_event.<locals>.<listcomp>  s     ???QQYY[[???r&   touchPointsNr~   r   zInput.dispatchTouchEventr   r   )r}   r   r~   r   r   r   r#   s          r$   dispatch_touch_eventr     s       &&FF6N??,???F='{'//11{, H >>DDDr&   c               #     K   ddi} | V }dS )z2
    Cancels any active dragging in the page.
    r   zInput.cancelDraggingNr1   )r   r#   s     r$   cancel_draggingr     s$      
 	(H >>DDDr&   c	              #     K   t                      }	| |	d<   ||	d<   ||	d<   |                                |	d<   ||                                |	d<   |||	d<   |||	d<   |||	d	<   |||	d
<   d|	d}
|
V }dS )a)  
    Emulates touch event from the mouse event parameters.

    **EXPERIMENTAL**

    :param type_: Type of the mouse event.
    :param x: X coordinate of the mouse pointer in DIP.
    :param y: Y coordinate of the mouse pointer in DIP.
    :param button: Mouse button. Only "none", "left", "right" are supported.
    :param timestamp: *(Optional)* Time at which the event occurred (default: current time).
    :param delta_x: *(Optional)* X delta in DIP for mouse wheel event (default: 0).
    :param delta_y: *(Optional)* Y delta in DIP for mouse wheel event (default: 0).
    :param modifiers: *(Optional)* Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
    :param click_count: *(Optional)* Number of times the mouse button was clicked (default: 0).
    r   r   r   r   Nr   r   r   r~   r   z Input.emulateTouchFromMouseEventr   r   )r}   r   r   r   r   r   r   r~   r   r   r   r#   s               r$   emulate_touch_from_mouse_eventr     s      4 &&FF6NF3KF3K~~''F8'//11{"x"x'{*|4 H >>DDDr&   ignoreboolc              #  B   K   t                      }| |d<   d|d}|V }dS )z
    Ignores input events (useful while auditing page).

    :param ignore: Ignores input events processing when set to true.
    r   zInput.setIgnoreInputEventsr   Nr   )r   r   r   r#   s       r$   set_ignore_input_eventsr     s<       &&FF8. H >>DDDr&   enabledc              #  B   K   t                      }| |d<   d|d}|V }dS )z
    Prevents default drag and drop behavior and instead emits ``Input.dragIntercepted`` events.
    Drag and drop behavior can be directly controlled via ``Input.dispatchDragEvent``.

    **EXPERIMENTAL**

    :param enabled:
    r   zInput.setInterceptDragsr   Nr   )r   r   r   r#   s       r$   set_intercept_dragsr     s<       &&FF9+ H >>DDDr&   scale_factorrelative_speedgesture_source_type"typing.Optional[GestureSourceType]c              #     K   t                      }| |d<   ||d<   ||d<   |||d<   ||                                |d<   d|d}|V }dS )	ai  
    Synthesizes a pinch gesture over a time period by issuing appropriate touch events.

    **EXPERIMENTAL**

    :param x: X coordinate of the start of the gesture in CSS pixels.
    :param y: Y coordinate of the start of the gesture in CSS pixels.
    :param scale_factor: Relative scale factor after zooming (>1.0 zooms in, <1.0 zooms out).
    :param relative_speed: *(Optional)* Relative pointer speed in pixels per second (default: 800).
    :param gesture_source_type: *(Optional)* Which type of input events to be generated (default: 'default', which queries the platform for the preferred input type).
    r   r   scaleFactorNrelativeSpeedgestureSourceTypezInput.synthesizePinchGesturer   r   )r   r   r   r   r   r   r   r#   s           r$   synthesize_pinch_gesturer   +  s{      $ &&FF3KF3K(F=!"0&&9&A&A&C&C"#0 H >>DDDr&   
x_distance
y_distancex_overscrolly_overscrollprevent_flingspeedrepeat_countrepeat_delay_msinteraction_marker_namec              #     K   t                      }| |d<   ||d<   |||d<   |||d<   |||d<   |||d<   |||d<   |||d	<   ||                                |d
<   |	|	|d<   |
|
|d<   |||d<   d|d}|V }dS )ai  
    Synthesizes a scroll gesture over a time period by issuing appropriate touch events.

    **EXPERIMENTAL**

    :param x: X coordinate of the start of the gesture in CSS pixels.
    :param y: Y coordinate of the start of the gesture in CSS pixels.
    :param x_distance: *(Optional)* The distance to scroll along the X axis (positive to scroll left).
    :param y_distance: *(Optional)* The distance to scroll along the Y axis (positive to scroll up).
    :param x_overscroll: *(Optional)* The number of additional pixels to scroll back along the X axis, in addition to the given distance.
    :param y_overscroll: *(Optional)* The number of additional pixels to scroll back along the Y axis, in addition to the given distance.
    :param prevent_fling: *(Optional)* Prevent fling (default: true).
    :param speed: *(Optional)* Swipe speed in pixels per second (default: 800).
    :param gesture_source_type: *(Optional)* Which type of input events to be generated (default: 'default', which queries the platform for the preferred input type).
    :param repeat_count: *(Optional)* The number of times to repeat the gesture (default: 0).
    :param repeat_delay_ms: *(Optional)* The number of milliseconds delay between each repeat. (default: 250).
    :param interaction_marker_name: *(Optional)* The name of the interaction markers to generate, if not empty (default: "").
    r   r   N	xDistance	yDistancexOverscrollyOverscrollpreventFlingr   r   repeatCountrepeatDelayMsinteractionMarkerNamezInput.synthesizeScrollGesturer   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   s                  r$   synthesize_scroll_gesturer   L  s      @ &&FF3KF3K({({ ,} ,} !.~w&&9&A&A&C&C"# ,}""1**A&'1 H >>DDDr&   duration	tap_countc              #     K   t                      }| |d<   ||d<   |||d<   |||d<   ||                                |d<   d|d}|V }dS )	au  
    Synthesizes a tap gesture over a time period by issuing appropriate touch events.

    **EXPERIMENTAL**

    :param x: X coordinate of the start of the gesture in CSS pixels.
    :param y: Y coordinate of the start of the gesture in CSS pixels.
    :param duration: *(Optional)* Duration between touchdown and touchup events in ms (default: 50).
    :param tap_count: *(Optional)* Number of times to perform the tap (e.g. 2 for double tap, default: 1).
    :param gesture_source_type: *(Optional)* Which type of input events to be generated (default: 'default', which queries the platform for the preferred input type).
    r   r   Nr   tapCountr   zInput.synthesizeTapGesturer   r   )r   r   r   r   r   r   r   r#   s           r$   synthesize_tap_gesturer     s      $ &&FF3KF3K%z&z&&9&A&A&C&C"#. H >>DDDr&   zInput.dragInterceptedc                  6    e Zd ZU dZded<   ed	d            ZdS )
DragInterceptedz
    **EXPERIMENTAL**

    Emitted only when ``Input.setInterceptDrags`` is enabled. Use this data with ``Input.dispatchDragEvent`` to
    restore normal drag and drop behavior.
    rl   rb   r#   r   rT   c                V     | t                               |d                             S )Nrb   )rb   )rl   r+   r)   s     r$   r+   zDragIntercepted.from_json  s0    s##DL11
 
 
 	
r&   N)r#   r   rT   r   )r,   r-   r.   r\   r/   r0   r+   r1   r&   r$   r   r     sI           NNN
 
 
 [
 
 
r&   r   r8   )r}   r`   r   r
   r   r
   rb   rl   r~   r   rT   r   )NNNNNNNNNNNNNN) r}   r`   r~   r   r   r   r   rc   r   rc   r   rc   r   rc   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rT   r   )r   r`   rT   r   )NN)r   r`   r   r(   r   r(   r   r   r   r   rT   r   )NNNNNNNNNNNNN)"r}   r`   r   r
   r   r
   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rc   rT   r   )
r}   r`   r   r   r~   r   r   r   rT   r   )rT   r   )NNNNN)r}   r`   r   r(   r   r(   r   rC   r   r   r   r   r   r   r~   r   r   r   rT   r   )r   r   rT   r   )r   r   rT   r   )r   r
   r   r
   r   r
   r   r   r   r   rT   r   )
NNNNNNNNNN)r   r
   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rc   rT   r   )NNN)r   r
   r   r
   r   r   r   r   r   r   rT   r   )
__future__r   utilr   r   dataclassesr   enumtypingr	   Enumr3   rC   r
   rS   r_   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r&   r$   <module>r      s   # " " " " " * * * * * * * * ! ! ! ! ! !  
I
 I
 I
 I
 I
 I
 I
 I
X
 
 
 
 
	 
 
 
    $)    ? ? ? ? ?U ? ? ?  
  
  
  
  
  
  
  
F 
 
 
 
 
 
 
 
> +/    D +/59%)04/3%)$(9=8<-1+//3)-6:F F F F FR   0 3704         N +/59/3(,,0(,6:)-)-&**.*.-1!H H H H H\ +/59	    8    6:*.*.*.,0- - - - -`   "   0 04BF    H .2-1/3/3/3&*BF-1048<; ; ; ; ;B *.*.BF    D $%%

 
 
 
 
 
 
  &%
 
 
r&   