
     fx                        U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlm Z ddlmZ  ed	  ej        d
          D                       ZdZeed<   	 ddlZddlZdZn# e$ r Y nw xY wej        d         dk    ZdZej        dk    rDddlZ	 ej        j         !                                 n# e"$ r Y nw xY w	 ddl#Z#dZn# e$ r dZY nw xY wdZ$dZ%dZ&	 ej        '                    d          r7 ej(        ddgej)        ej)                  Z*e*+                                dk    Z&n$# e,$ rZ-e-j        ej.        k    rn Y dZ-[-ndZ-[-ww xY wdZ/	 ej        '                    d          r7 ej(        ddgej)        ej)                  Z*e*+                                dk    Z/n$# e,$ rZ-e-j        ej.        k    rn Y dZ-[-ndZ-[-ww xY wej        '                    d          rWdZ0dZ1ej2        3                    d          dk    rdZ0dZ1n0ej2        3                    d          dk    rdZ1dZ0ndej2        v rdZ1dZ0ej        dk    rddlmZ e
dBd            Z4 ej5        dd          Z6 ej5        dd          Z7 ej5        dd           Z8 G d! d"e9          Z: G d# d$e:          Z;d% Z<dCd&Z=dDd*Z>dEd+Z?d, Z@dBd-ZAd. ZBd/ ZCd0 ZDd1 ZEe<d2             ZFe<d3             ZGdFd6ZHdGd7ZIdHd8ZJdHd9ZKd: ZLd; ZMd< ZNdBd=ZOd> ZPej        d?k    reJZQn>ej        dk    reIZQn0ej        '                    d          reKZQn eRd@ej        z             e?ZSere>ZSesej         dAk     re?ZSdS dS dS dS )Iz0.1.30    N)contextmanager)Image)ImageOps)	ImageDraw)__version__)	ImageGrabc                 ,    g | ]}t          |          S  int).0xs     U/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/pyscreeze/__init__.py
<listcomp>r      s    BBB1ABBB    .F
_useOpenCVT   win32linuxwhichgnome-screenshot)stdoutstderrscrotXDG_SESSION_TYPEx11waylandWAYLAND_DISPLAY)windllc              #     K   t           j                            |           }|dk    rt          d          	 |V  t          j        t          j        gt           j        j        _        t           j                            | |          dk    rt          d          dS # t          j        t          j        gt           j        j        _        t           j                            | |          dk    rt          d          w xY w)a   
        A context manager for handling calling GetDC() and ReleaseDC().

        This is used for win32 API calls, used by the pixel() function
        on Windows.

        Args:
            hWnd (int): The handle for the window to get a device context
        of, defaults to 0
        r   z(windll.user32.GetDC failed : return NULLz)windll.user32.ReleaseDC failed : return 0N)r    user32GetDCWindowsErrorctypes	c_ssize_t	ReleaseDCargtypes)hWndhDCs     r   __win32_openDCr+   n   s       m!!$''!88IJJJ	PIII060@&BR/SFM#,}&&tS11Q66"#NOOO 76 170@&BR/SFM#,}&&tS11Q66"#NOOOOOOOs   B A!C>Boxzleft top width heightPointzx yRGBzred green bluec                       e Zd ZdZdS )PyScreezeExceptionzPyScreezeException is a generic exception class raised when a
    PyScreeze-related error happens. If a PyScreeze function raises an
    exception that isn't PyScreezeException or a subclass, assume it is
    a bug in PyScreeze.N__name__
__module____qualname____doc__r
   r   r   r0   r0      s         
 	Dr   r0   c                       e Zd ZdZdS )ImageNotFoundExceptionzImageNotFoundException is an exception class raised when the
    locate functions fail to locate an image. You must set
    pyscreeze.USE_IMAGE_NOT_FOUND_EXCEPTION to True to enable this feature.
    Otherwise, the locate functions will return None.Nr1   r
   r   r   r7   r7      s        9 9
 	Dr   r7   c                 F     t          j                    fd            }|S )z
    A decorator that marks a function as requiring PyGetWindow to be installed.
    This raises PyScreezeException if Pillow wasn't imported.
    c                  @    t           rt          d           | i |S )Nz9The PyGetWindow package is required to use this function.)_PYGETWINDOW_UNAVAILABLEr0   )argskwargswrappedFunctions     r   wrapperz$requiresPyGetWindow.<locals>.wrapper   s0    # 	b$%`aaa////r   )	functoolswraps)r=   r>   s   ` r   requiresPyGetWindowrA      s:     __%%0 0 0 0 &%0
 Nr   c                    |t           }t          | t                    rV|r t          j        | t          j                  }nt          j        | t          j                  }|t          d| z            nt          | t          j	                  r=|r8t          | j                  dk    r t          j        | t          j                  }n| }nt          | d          rmt          j        |                     d                    }|dddddddf                                         }|rt          j        |t          j                  }nt%          d          |S )
    TODO
    NzkFailed to read %s because file is missing, has improper permissions, or is an unsupported or invalid format   convertr.   z<expected an image filename, OpenCV numpy array, or PIL image)GRAYSCALE_DEFAULT
isinstancestrcv2imreadIMREAD_GRAYSCALEIMREAD_COLORIOErrornumpyndarraylenshapecvtColorCOLOR_BGR2GRAYhasattrarrayrE   copy	TypeError)img	grayscaleimg_cv	img_arrays       r   	_load_cv2r]      sV    %	#s X  	7ZS%9::FFZS%566F>0256    
C	'	' X 	SY1,,\#s'9::FFFF	i	 	  XKE 2 233	111aaa2:&++-- 	>\&#*<==FVWWWMr   '     +?c              #      K   |t           }t          |          }t          | |          } | j        dd         \  }}t          ||          }|r9||d         |d         |d         z   |d         |d         |d         z   f         }nd}|j        d         | j        d         k     s|j        d         | j        d         k     rt	          d          |dk    r&|dz  }| dd|dd|f         } |dd|dd|f         }nd}t          j        || t
          j                  }	t          j	        |	j
                  |	|k                                             }
t          j        |
d|         |	j                  }t          |d                   dk    r-t          r$t          d	|	                                z            dS |d         |z  |d         z   }|d         |z  |d         z   }t#          ||          D ]\  }}t%          ||||          V  dS )
a  
    TODO - rewrite this
        faster but more memory-intensive than pure python
        step 2 skips every other row and column = ~3x faster but prone to miss;
            to compensate, the algorithm automatically reduces the confidence
            threshold by 5% (which helps but will not avoid all misses).
        limitations:
          - OpenCV 3.x & python 3.x not tested
          - RGBA images are treated as RBG (ignores alpha channel)
    Nr   r_   rD   r   r   r   zBneedle dimension(s) exceed the haystack image or region dimensionsgffffff?z6Could not locate the image (highest confidence = %.3f))rG   floatr]   rR   
ValueErrorrJ   matchTemplateTM_CCOEFF_NORMEDrO   arangesizeflattenunravel_indexrQ   USE_IMAGE_NOT_FOUND_EXCEPTIONr7   maxzipr,   )needleImagehaystackImagerZ   limitregionstep
confidenceneedleHeightneedleWidthresultmatch_indicesmatchesmatchxmatchyr   ys                   r   _locateAll_opencvr|      sM      %	z""JK33K + 1"1" 5L+mY77M %fQi&)fQi2G&GPQU[\]U^aghiajUjIj&jk1 1! 4448KA8NQ\QbcdQe8e8e]^^^qyyd
!&&D&&&D&.1%ffffffn5 }k3;OPPFL--v
/B.K.K.M.MNM!-"7FFG
71:!( 	()adjdndndpdp)pqqqF QZ$*FQZ$*FFF## 3 31!Q\2222223 3r   c              #     K   |t          d          |t          }d}t          | t                    r$t	          | d          }t          j        |          } d}t          |t                    r$t	          |d          }t          j        |          }|D|                    |d         |d         |d         |d         z   |d         |d         z   f          }nd}|r)t          j        |           } t          j        |          }n@| j	        d	k    r| 
                    d
          } |j	        d	k    r|
                    d
          }| j        \  }	|j        \  }
}t          |                                           t          |                                          }fdt          |	          D             }|d         }t          |          k    s
J d            d |D             g|	z  k    s
J d            d}d}|dk    rt           }nt"          }t          |          D ]} |||||
z  |dz   |
z           |          D ]}d}t          d|	|          D ]3}||z   |
z  |z   }|z  |dz   z           |||z            k    rd} n4|rc|dz  }t%          ||d         z   ||d         z   |	          V  |6||k    r0||                                 ||                                   dS ||                                 ||                                 |dk    rt(          rt+          d          dS dS )rC   NzIThe confidence keyword argument is only available if OpenCV is installed.rbr   r_   r   rD   rb   RGBAr.   c                 6    g | ]}|z  |d z   z           S )r_   r
   )r   r{   needleImageDataru   s     r   r   z%_locateAll_pillow.<locals>.<listcomp>9  s=       EFK1q5K*??@  r   z`The calculated width of first row of the needle image is not the same as the width of the image.c                 ,    g | ]}t          |          S r
   )rQ   )r   rows     r   r   z%_locateAll_pillow.<locals>.<listcomp>A  s    000CHH000r   z?The needleImageRows aren't the same size as the original image.TFCould not locate the image.)NotImplementedErrorrG   rH   rI   openr   cropr   rZ   moderE   rh   tuplegetdatarangerQ   _kmp_steppingFindr,   closerk   r7   )rn   ro   rZ   rp   rq   rr   rs   needleFileObjhaystackFileObjrt   haystackWidthhaystackHeighthaystackImageDataneedleImageRowsneedleImageFirstRownumMatchesFoundfirstFindFuncr{   ry   
foundMatchsearchyhaystackStartr   ru   s                         @@r   _locateAll_pillowr     s7      !"mnnn %	M+s## 0[$//j//O-%% 4}d33
?33%**F1Ivay&)fUViBWY_`aYbeklmenYn+opp 9(55 *=99 v%%%--e44K'')11%88M !, 0K$1$6!M>K//1122Om335566    JOP\J]J]  O *!, 	  K///i 	0//0000055   X   O Dqyy%>""  #m!21}3DAQ^G^3^!_ae
 
 	 	F J L$77  !(1 = F#Gk$9Wq[K<W$WX(9T)TUV V "'JE	V
  
1$&6!9,a&)m[,WWWWW$E)A)A$0%++---&2'--///FFF-	2  "!( 	()FGGGF	 r   c                     d|d<   t          t          | |fi |          }t          |          dk    r|d         S t          rt	          d          dS )rC   r_   rp   r   r   N)r   	locateAllrQ   rk   r7   )rn   ro   r<   pointss       r   locater   x  sa     F7O9[-BB6BBCCF
6{{Qay( 	()FGGG4r   c                 h   t          j                     }	 	 t          d          }t          | |fi |}	 |j                                         n# t
          $ r Y nw xY w|st          j                     |z
  |k    r|S n5# t          $ r( t          j                     |z
  |k    rt          r Y dS Y nw xY w)zTODO - rewrite this
    minSearchTime - amount of time in seconds to repeat taking
    screenshots and trying to locate a match.  The default of 0 performs
    a single search.
    TNrq   )time
screenshotr   fpr   AttributeErrorr7   rk   )imageminSearchTimer<   startscreenshotImretVals         r   locateOnScreenr     s     IKKE 	  &T222LE<::6::F%%''''!    	
  u,}<< =% 	  	  	 y{{U"]220  44	 32	  s4   A> A A> 
AA> A A> >,B0/B0c                     t          d          }t          | |fi |}	 |j                                         n# t          $ r Y nw xY w|S )rC   Nr   )r   r   r   r   r   )r   r<   r   r   s       r   locateAllOnScreenr     sp     T***Lul55f55F    		
 Ms   : 
AAc                 B    t          | fi |}|dS t          |          S rC   N)r   center)r   r<   coordss      r   locateCenterOnScreenr     s/     E,,V,,F~tf~~r   c                 L   t          t          |                     }g }d}|D ]z}t          |          \  }}t          ||z
            }	t          ||z
            }
|                    |	|	z  |
|
z  z              |d         ||         k     rt          |          dz
  }{||         S )rC   r   rF   r_   )listr   r   absappendrQ   )r   r   r{   foundMatchesBoxesdistancesSquaredshortestDistanceIndexfoundMatchesBoxfoundMatchXfoundMatchY	xDistance	yDistances              r   locateOnScreenNearr     s    
 .u5566 - > >#)/#:#: [K((	K((		I 5	I8M MNNNB"23H"III$'(8$9$9A$=! 233r   c                 F    t          | ||fi |}|dS t          |          S r   )r   r   )r   r   r{   r<   r   s        r   locateCenterOnScreenNearr     s3      q!66v66F~tf~~r   c                 ^   t          j        |          }t          |          dk    rt          d|z            t          |          dk    rt          d|dd |D                       |d         }|                                 t          | fd|j        |j        |j        |j	        fi|S )rC   r   z,Could not find a window with %s in the titler_   zFound multiple windows with z in the title: c                 ,    g | ]}t          |          S r
   )rI   )r   wins     r   r   z"locateOnWindow.<locals>.<listcomp>  s    HmHmHmVYSHmHmHmr   rq   )
pygetwindowgetWindowsWithTitlerQ   r0   activater   lefttopwidthheight)r   titler<   matchingWindowsr   s        r   locateOnWindowr     s    
 "5e<<O
?q   !OSX!YZZZ	_			!	!  AFHmHm]lHmHmHmHmn
 
 	
 !
CLLNNN%]]37CIsz(R]V\]]]r   c                     dS r   r
   )r   s    r   screenshotWindowr     s	    
 	Dr   red_showRegionOnScreen.pngc                    t                      }t          j        |          }| d         | d         | d         | d         z   | d         | d         z   f} |                    | |           |                    |           dS )rC   r   r_   r   rD   )outlineN)r   r   Draw	rectanglesave)rq   outlineColorfilenamer   draws        r   showRegionOnScreenr     s    
 <<L>,''Dq	q	q	F1Iq	F1I	F 	NN6<N000hr   c                    t          j        |          }|t          |          dk    s
J d            t          |d         t                    rQt          |d         t                    r6t          |d         t                    rt          |d         t                    s
J d            |                    |d         |d         |d         |d         z   |d         |d         z   f          }| |                    |            |S )	rC   )all_screensN   ,region argument must be a tuple of four intsr   r_   r   rD   )r   grabrQ   rH   r   r   r   )imageFilenamerq   
allScreensims       r   _screenshot_win32r     s'    
J	/	/	/B6{{a!O&)S))  	wjC.H.H  	wZX^_`XacfMgMg  	wlvw}~  xA  CF  mG  mG  	w  	w  Iw  	w  	w  	wWWfQiF1Iq	,A6!9vVWyCXYZZ 
Ir   c                    t           dk     r| 5dt          j                                                            d          z  }n| }t	          j        dd|g           t          j        |          }| t          |          dk    s
J d            t          |d	         t                    rQt          |d
         t                    r6t          |d         t                    rt          |d         t                    s
J d            |                    |d	         |d
         |d         |d	         z   |d         |d
         z   f          }t          j        |           |                    |           n|                                 | t          j        |           nY|Dt!          j        |d	         |d
         |d         |d	         z   |d         |d
         z   f          }nt!          j                    }|S )rC   )   r   r_   Nzscreenshot%s.png%Y-%m%d_%H-%M-%S-%fscreencapturez-xr   r   r   r_   r   rD   )bbox)PILLOW_VERSIONdatetimenowstrftime
subprocesscallr   r   rQ   rH   r   r   osunlinkr   loadr   r   r   rq   tmpFilenamer   s       r   _screenshot_osxr   $  s   
 	!!  ,0A0E0E0G0G0P0PQf0g0ghKK'K$<===Z$$v;;!###%S###fQi--  {*VAY2L2L  {Q[\bcd\egjQkQk  {pz  |B  CD  |E  GJ  qK  qK  {  {  M{  {  {  {&)VAYq	F1I0EvaySYZ[S\G\]^^BIk"""GGK     GGIII Ik""" fQiF1Iq	<QSYZ[S\_efg_hSh%ijjjBB !!BIr   c                    | 5dt           j                                                             d          z  }n| }t          dk    rt          rt          j                    }| |                    |            ||S t          |          dk    s
J d            t          |d         t                    rQt          |d         t                    r6t          |d	         t                    rt          |d
         t                    s
J d            |                    |d         |d         |d	         |d         z   |d
         |d         z   f          }|S t          rt          rt          j        dd|g           nRt          rt          j        dd|g           n3t           rt          rt          st#          d          t%          d          t'          j        |          }| t          |          dk    s
J d            t          |d         t                    rQt          |d         t                    r6t          |d	         t                    rt          |d
         t                    s
J d            |                    |d         |d         |d	         |d         z   |d
         |d         z   f          }t+          j        |           |                    |           n|                                 | t+          j        |           |S )rC   Nz.screenshot%s.pngr   )	   r   r   r   r   r   r_   r   rD   r   z-zr   z-fzYour computer uses the Wayland window system. Scrot works on the X11 window system but not Wayland. You must install gnome-screenshot by running `sudo apt install gnome-screenshot`zTo take screenshots, you must install Pillow version 9.2.0 or greater and gnome-screenshot by running `sudo apt install gnome-screenshot`)r   r   r   r   GNOMESCREENSHOT_EXISTSr   r   r   rQ   rH   r   r   RUNNING_X11SCROT_EXISTSr   r   RUNNING_WAYLANDr0   	Exceptionr   r   r   r   r   r   s       r   _screenshot_linuxr   J  sh   
 )X->-B-B-D-D-M-MNc-d-de# ""'=" ^$GGM""">I v;;!###%S###fQi--  {*VAY2L2L  {Q[\bcd\egjQkQk  {pz  |B  CD  |E  GJ  qK  qK  {  {  M{  {  {  {&)VAYq	F1I0EvaySYZ[S\G\]^^BI	 
 
 	$45555	 	
+T;?@@@@	 
\ 
2H 
  C
 
 	
  X
 
 	
 
K	 	 B6{{a!O&)S))  	wjC.H.H  	wZX^_`XacfMgMg  	wlvw}~  xA  CF  mG  mG  	w  	w  Iw  	w  	w  	wWWfQiF1Iq	,A6!9vVWyCXYZZ
	+
 				
	+Ir   c              #     K   dgt          |           dz   z  }d}t          t          |                     D ]N}||k    r>| |         | ||z
           k    r)||||z
           z  }||k    r| |         | ||z
           k    )|||dz   <   Od}d}|D ]~}|t          |           k    s|dk    rG| |         |k    r;|||         z  }|||         z  }|t          |           k    )|dk    r| |         |k    ;|dz  }|t          |           k    r|V  dS )rC   r_   r   N)rQ   r   )	needlehaystack_dummyshiftsshiftposstartPosmatchLencs	            r   r   r     s_     
 SCKK!O$FES[[!!    sllvc{fS5[.AAAVC%K((E sllvc{fS5[.AAAsQw HH  #f++%%Q6(;Kq;P;Px((Hx((H #f++%%Q6(;Kq;P;P 	As6{{""NNN r   c              #      K   t          dt          |          t          |           z
  dz             D ]D}d}t          dt          |           |          D ]}|||z            | |         k    rd} n|r|V  EdS )rC   r   r_   TFN)r   rQ   )r   r   rr   r  r   r  s         r   r   r     s       !S]]S[[81<==  
CKK.. 	 	C3'6#;66"
 7  	NNN r   c                     t          | d         t          | d         dz            z   | d         t          | d         dz            z             S )am  
    Returns a `Point` object with the x and y set to an integer determined by the format of `coords`.

    The `coords` argument is a 4-integer tuple of (left, top, width, height).

    For example:

    >>> center((10, 10, 6, 8))
    Point(x=13, y=14)
    >>> center((10, 10, 7, 9))
    Point(x=13, y=14)
    >>> center((10, 10, 8, 10))
    Point(x=14, y=15)
    r   r   r_   rD   )r-   r   )r   s    r   r   r     sF    " SQ///SQ=O=O1OPPPr   c                    t          | t          j        j                  r"t	          |           dk    rt          d          t          | |          }t	          |          dk    st	          |          dk    r^|dd         \  }}}|dd         \  }}	}
t          ||z
            |k    o+t          ||	z
            |k    ot          ||
z
            |k    S t	          |          dk    ryt	          |          dk    rf|\  }}}}|\  }}	}
}t          ||z
            |k    oAt          ||	z
            |k    o+t          ||
z
            |k    ot          ||z
            |k    S J dt	          |          dt	          |                      )	z
    Return True if the pixel at x, y is matches the expected color of the RGB
    tuple, each color represented from 0 to 255, within an optional tolerance.
    r   zpixelMatchesColor() has updated and no longer accepts a tuple of (x, y) values for the first argument. Pass these arguments as two separate arguments instead: pixelMatchesColor(x, y, rgb) instead of pixelMatchesColor((x, y), rgb)rD   Nr   FzNColor mode was expected to be length 3 (RGB) or 4 (RGBA), but pixel is length z  and expectedRGBColor is length )rH   collectionsabcSequencerQ   rX   pixelr   )r   r{   expectedRGBColor	tolerancepixrgbexRexGexBaexAs                r   pixelMatchesColorr    s    ![_-.. A3q66Q;;  @  A  A  	A
1++C
3xx1}},--22bqb'1a(!,S#AG	)jAG	0IjPSTUX[T[P\P\`iPij	SQ3/00A55
1a-S#sS\\Y& ,QW*,QW*, QW*		
	
 	
3xxxx-...0	
 	
 	
r   c                 b   t          | t          j        j                  r"t	          |           dk    rt          d          t          j        dk    rt                      5 }t          j
                            || |          }|dk     r"t          d                    |                    d                    |          fdt          ddd          D             \  }}}|||fcd	d	d	           S # 1 swxY w Y   d	S t          t!                                          | |f          d	d
          S )zn
    Returns the color of the screen pixel at x, y as an RGB tuple, each color represented from 0 to 255.
    r   zpixel() has updated and no longer accepts a tuple of (x, y) values for the first argument. Pass these arguments as two separate arguments instead: pixel(x, y) instead of pixel((x, y))r   r   z(windll.gdi32.GetPixel failed : return {}z{:0>6x}c              3   N   K   | ]}t          ||d z            d          V   dS )r      Nr   )r   ibbggrrs     r   	<genexpr>zpixel.<locals>.<genexpr>  s:      JJas6!a!e),b11JJJJJJr   r   NrD   )rH   r  r  r  rQ   rX   sysplatformr+   r    gdi32GetPixelr$   formatr   r.   r   getpixel)r   r{   hdccolorr  r  r  r  s          @r   r  r    ss    ![_-.. S3q66Q;;  R  S  S  	S |w 	L))#q!44Eqyy"#M#T#TUZ#[#[\\\%%e,,FJJJJ5Aq>>JJJGAq!q!9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Z\\**Aq6222A2688s   !BC22C69C6darwinz'PyScreeze is not supported on platform 3)r   )N)Nr^   Nr_   r`   )NNNr_   N)r   r   )NNF)NN)Tr   r  r   r?   r   r   r!  r   errno
contextlibr   PILr   r   r   PIL__version__r   r   splitr   r   bool__annotations__rJ   rO   ImportErrorversion_infoRUNNING_PYTHON_2r:   r"  r%   r    r"   SetProcessDPIAwarer   r   rG   rk   r   
startswithPopenPIPE	whichProcwaitOSErrorexENOENTr   r   r   environgetr+   
namedtupler,   r-   r.   r   r0   r7   rA   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   <module>rA     s   h          				     



   % % % % % %                   - - - - - -      BB(<(<S(A(ABBBCC
D   	JJJLLLJJ 	 	 	D	 #A&!+  <7 MMM//1111   ) $)    ( ( (#'   (   !%  

|w'' 7$J$g/A%B:?cmcrsss	!*!1!1Q!6   	x5< 	 		 

|w'' -$J$gw%7
XbXghhh	 ~~''1,   	x5< 	 		 <7## KO	z~~())U22	*	+	+y	8	8	bj	(	( <7 P P P ^P, kU$;<<w..kU$455	 	 	 	 	 	 	 		 	 	 	 	/ 	 	 	  ) ) ) )X23 23 23 23ji i i iX  "       <  (  4 4 40   ^ ^ ^" 	 	 	       "    # # # #L< < < <~  0  Q Q Q( 
  
  
  
F9 9 9: <8 JJ\W"JJ\W%% X"JJ

G#,V
W
WW 	 &!I &# 5 5%			& && & 5 5sh   3
A> >BB,C CCC C('C(2AE E%	E  E%+AF= =GGG