+
     ]iH  c                   s   R t ^ RIt^ RIt^ RIt^ RIt ^ RIt]P                  R8  d   ]! R]P                   R24      h ^RIHtHtHt ^ RIHtHtHtHtHt ^ RIHt ^ RIHt ^ R	IHt R
 tRR ltR t ! R R]4      t ! R R]4      t ! R R4      t  ! R R]4      t!]PD                   ! R R]4      4       t#R#   ] d!     ^ RI	t L  ] d   t
]! R4      ]
hRt
A
ii ; ii ; i)z
A Cairo backend for Matplotlib
==============================
:Author: Steve Chaplin and others

This backend depends on cairocffi or pycairo.
Nz/Cairo backend requires cairo>=1.14.0, but only z is availablezEcairo backend requires that pycairo>=1.14.0 or cairocffi is installed)_apicbookfont_manager)_BackendFigureCanvasBaseFigureManagerBaseGraphicsContextBaseRendererBase)ttfFontProperty)Path)Affine2Dc                 s    \        V4      ^8X  g	   V'       d   V P                  ! . VR,          OVN5!   R# V P                  ! V!   R# )   Nr   NN)lenset_source_rgba)ctxZcoloralphaZforced_alpha   &&&&H/usr/lib64/python3.14/site-packages/matplotlib/backends/backend_cairo.py	_set_rgbar   %   s7    
5zQ,.U2Y..U#    c                 s   VP                  VR VR7       EF<  w  rEV\        P                  8X  d   V P                  ! V!   K-  V\        P                  8X  d   V P                  4        KT  V\        P                  8X  d   V P                  ! V!   K{  V\        P                  8X  d   \        P                  ! V P                  4       4      pVR,          pVRR pV P                  ! . V^,          V^,          ^,          ,           OV^,          ^,          V^,          ,           OVO5!   EK  V\        P                  8X  g   EK,  V P                  ! V!   EK?  	  R# )T)Zremove_nansclip:Ni   NN)iter_segmentsr	   ZMOVETOmove_toZ	CLOSEPOLYZ
close_pathZLINETOZline_toZCURVE3npasarrayZget_current_pointZcurve_toZCURVE4)	r   path	transformr   pointsZcodeZcurZabs	   &&&&     r   _append_pathr   ,   s    **4d + 44;;KK T^^#NNT[[ KK T[[ **S2245Cr
ArsALLJ37QUQY.J1q519q1u3DJJT[[ LL&!4r   c                s  a  V 3R lpV! R4      p\        \        RV! R4      P                  4        24      pV! R4      p\        P                  P                  WD4      R8  d   \        P                  M\        P                  pW#V3# )zo
Convert a `.FontProperties` or a `.FontEntry` to arguments that can be
passed to `.Context.select_font_face`.
c                 sh   <  \        SR V  24      ! 4       #   \         d    \        ST 4      u # i ; i)Zget_)getattrZAttributeError)Zfieldprops   &r   attrZ-_cairo_font_args_from_font_prop.<locals>.attrC   s:    	(44w022 	(4''	(s    11nameZFONT_SLANT_Zstyleweighti&  )r    cairoZupperr   Zweight_dictZgetZFONT_WEIGHT_NORMALZFONT_WEIGHT_BOLD)r!   r"   r#   Zslantr$   s   f    r   _cairo_font_args_from_font_propr&   >   s|    
( <DE[g)<)<)>(?@AE(^F))--f=C &&))  r   c                   s   a a ] tR t^Rt oV 3R ltR t]R 4       tRR ltRR lt	R t
RR ltR tR	 tV 3R
 ltR tR tRtVtV ;t# )RendererCairoc                s   < Wn         \        V R 7      V n        RV n        RV n        \
        P                  ! \
        P                  ! \
        P                  ^^4      4      V n	        \        SV `-  4        R# ))rendererN)dpiGraphicsContextCairogcwidthheightr%   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfr)   	__class__   &&r   r3   ZRendererCairo.__init__S   sU    &5
e111a8:r   c                s   VP                  4       p\        VR 4      '       d4   \        VR4      '       d"   VP                  4       VP                  4       3pM\        VR4      '       d*   VP	                  4       pVP
                  VP                  3pMXVP                  4        VP                  4        VP                  4       vrVV'       d   \        R4      hVv rsVP                  4        WP                  n        Vw  V n        V n        R# )	get_width
get_heightget_extentszCannot infer surface sizeN)
get_targethasattrr7   r8   r9   r,   r-   saveZ
reset_clipZcopy_clip_rectangle_listZ	TypeErrorrestorer+   r   )r4   r   surfaceZsizeZextZrectZrest_s   &&      r   set_contextZRendererCairo.set_context\   s    .."7K((WWl-K-K$$&(:(:(<<DWm,,%%'C99cjj(DHHJNN668KD ;<<KAqKKM"&
DKr   c                s    Ve=   V P                  4        \        WW#4       V P                  4        V P                  4        V P	                  4        R # N)r<   r   fill_preserver=   stroke)r   Zfill_cr   Zalpha_overridesr   r   _fill_and_strokeZRendererCairo._fill_and_stroken   s9    HHJc5:KKM

r   c                s0   VP                   pVf#   VP                  4       f   VP                  4       MR pV\        4       P	                  ^R4      P                  ^ V P                  4      ,           pVP                  4        \        WRW64       VeZ   VP                  4        \        WTVP                  4       VP                  4       4       VP                  4        VP                  4        VP                  4       pV'       Ed   \!        V P"                  4      pVP%                  4       P'                  \(        P*                  P,                  W4      p	\(        P.                  ! V	4      p
\        W\        4       P	                  W) 4      P                  ^ V4      R 4       V
P1                  V P3                  VP5                  4       4      4       V
P6                  ! VP9                  4       !   V
P                  4        V
P;                  4        \(        P<                  ! V	4      pVP?                  \(        P@                  PB                  4       VP                  4        VPE                  V4       VP                  4        VP                  4        VP;                  4        R # N)#r   Z	get_hatchZclip_extentsr
   scale	translater-   new_pathr   r<   r   	get_alphaget_forced_alpharB   r=   Zget_hatch_pathZintr)   r:   Zcreate_similarr%   ZContentZCOLOR_ALPHAr.   set_line_widthpoints_to_pixelsZget_hatch_linewidthr   Zget_hatch_colorrC   ZSurfacePatternZ
set_extendZExtendZREPEATZ
set_source)r4   r+   r   r   rgbFacer   r   Z
hatch_pathr)   Zhatch_surfaceZ	hatch_ctxZhatch_patterns   &&&&&       r   	draw_pathZRendererCairo.draw_pathw   s   ff ?r||~'=   " 	 z''2.88DKKHI	S	0HHJcBLLNB4G4G4IJKKM&&(
:dhh-CNN,;;))35Mm4I!))#t4>>q#F $$T%:%:2;Q;Q;S%TU%%r'9'9';<##%!00?M$$U\\%8%89HHJNN=)KKM

r   c           	     s   VP                   pVP                  4        \        WrV\        4       P	                  ^R4      ,           4       VP                  4       pVP                  4       w  rrV^ 8X  d   V	^ 8X  d   V
^ 8X  d   V^ 8X  d   RpRpMRpV\        4       P	                  ^R4      P                  ^ V P                  4      ,           pVP                  4        \        VP                  VRR7      4       F  w  pw  r\        V4      '       g   K  VRR w  ppVP                  4        VP                  VV4       VP                  V4       VP                  4        V'       g   VR,          ^ 8X  g   K~  V P                  WvVP!                  4       VP#                  4       4       K  	  V'       g2   V P                  WvVP!                  4       VP#                  4       4       R# R# )   FNT)Zsimplifyi  rF   r   )r   rI   r   r
   rG   Zcopy_path_flatZfill_extentsrH   r-   Z	enumerater   r   r<   Zappend_pathr=   rD   rJ   rK   )r4   r+   Zmarker_pathZmarker_transr   r   rN   r   x1y1Zx2Zy2ZfilledZiZverticesZcodesxys   &&&&&&&           r   draw_markersZRendererCairo.draw_markers   s    ffS|hj6F6Fq"6M'MN((* ))+7rQw27rQwFGFz''2.88DKKHI	 	$-""9u"=%? A 8}}}1
 a#, QX]))bllnb6I6I6KM#%?* !!bllnb.A.A.CE r   c                sd   \         P                  ! VR R R1,          4      p\        P                  P	                  VP                  4       P                  \        P                  VP                  ^,          VP                  ^ ,          VP                  ^,          ^,          4      pVP                  pV P                  V,
          VP                  ^ ,          ,
          pVP                  4        VP                  V\        V4      \        V4      4       VP                  4        VP                  4        R # rE   )r   Z._unmultiplied_rgba8888_to_premultiplied_argb32r%   r/   Zcreate_for_dataZraveldatar0   Zshaper   r-   r<   Zset_source_surfacefloatZpaintr=   )r4   r+   rS   rT   Zimr>   r   s   &&&&&  r   
draw_imageZRendererCairo.draw_image   s    AA"TrT(K$$44HHJOOU00HHQK!bhhqkAo7 ffKK!Obhhqk)
wa%(;		r   c	                sp   V'       d   V P                  WW4WV4       R # VP                  p	V	P                  4        V	P                  W#4       V	P	                  4        V	P
                  ! \        V4      !   V	P                  V P                  VP                  4       4      4       \        P                  ! 4       p
V
P                  VP                  4       4       V	P                  V
4       V'       d'   V	P                  \         P"                  ! V) 4      4       V	P%                  V4       V	P'                  4        R # rA   )_draw_mathtextr   rI   r   r<   select_font_facer&   set_font_sizerM   get_size_in_pointsr%   ZFontOptionsset_antialiasget_antialiasedZset_font_optionsrotater   deg2rad	show_textr=   )r4   r+   rS   rT   sr!   angleismathZmtextr   Zoptss   &&&&&&&&&  r   	draw_textZRendererCairo.draw_text   s    
 qT9 &&CLLNKKHHJ  "A$"GHd33D4K4K4MNO$$&Dr1134  &

2::uf-.MM!KKMr   c                s   VP                   pV P                  P                  P                  W@P                  V4      w  rrpVP                  4        VP                  W#4       V'       d'   VP                  \        P                  ! V) 4      4       V F  w  rpppVP                  4        VP                  VV) 4       VP                  ! \        \        V4      4      !   VP                  V P!                  V4      4       VP#                  \%        V4      4       K  	  V FQ  w  ppppVP                  4        VP'                  VV) VV) 4       VP)                  ^ ^ ^ 4       VP+                  4        KS  	  VP-                  4        R# )    N)r   
_text2pathmathtext_parserparser)   r<   rH   r_   r   r`   rI   r   rZ   r&   r   r[   rM   ra   Zchr	rectangleset_source_rgbrB   r=   )r4   r+   rS   rT   rb   r!   rc   r   r,   r-   descentZglyphsZrectsZfontZfontsizeZidxZoxZoywhs   &&&&&&&             r   rY   ZRendererCairo._draw_mathtext   s2   ffOO++11!XXtD 	.w 	
aJJrzz5&)*+1'DCRLLNKKRC   01FGId33H=>MM#c(# ,2 "LBAqLLNMM"rc1qb)q!Q'	 " 	r   c                s2    V P                   V P                  3# rA   )r,   r-   r4      &r   get_canvas_width_heightZ%RendererCairo.get_canvas_width_height  s    zz4;;&&r   c                s  < VR 8X  d   \         SV `  WV4      # V'       d7   V P                  P                  P	                  WP
                  V4      vrErgWEV3# V P                  pVP                  4        VP                  ! \        V4      !   VP                  V P                  VP                  4       4      4       VP                  V4      R,          w  rpVP                  4        WW,           3# )ZTeX:rP      N)r2   get_text_width_height_descentrg   rh   ri   r)   r1   r<   rZ   r&   r[   rM   r\   Ztext_extentsr=   )r4   rb   r!   rd   r,   r-   rl   r?   r   Z	y_bearingrm   rn   r5   s   &&&&        r   rs   Z+RendererCairo.get_text_width_height_descent  s     U?78&II//55a4H 'E7'))mm 	
=dCD$//0G0G0IJK**1-c2	aQ]""r   c                s    V P                   P                  P                  4        ^V P                   n        RV P                   n        RV P                   n        V P                   # )rP   FN)r+   r   r<   Z_alphaZ_forced_alphaZ_hatchro   rp   r   new_gcZRendererCairo.new_gc'  sC    
  %wwr   c                s6    V^H,          V P                   ,          # )H   )r)   )r4   r      &&r   rM   ZRendererCairo.points_to_pixels3  s    {TXX%%r   )r)   r+   r-   r1   r,   rA   )FN)__name__
__module____qualname____firstlineno__r3   r@   ZstaticmethodrD   rO   rU   rX   re   rY   rq   rs   rt   rM   __static_attributes____classdictcell____classcell__r5   __classdict__   @@r   r'   r'   R   sX     '$  #J.E`04'#0
& &r   r'   c                   s"  a a ] tR tRt oR]P
                  R]P                  R]P                  /tR]P                  R]P                  R]P                  /tV 3R ltR tV 3R	 ltR
 tR tR tR tR tR tRV 3R lltR tR tR tRtVtV ;t# )r*   i8  ZbevelZmiterroundZbuttZ
projectingc                s0   < \         SV `  4        Wn        R # rA   )r2   r3   r(   )r4   r(   r5   r6   r   r3   ZGraphicsContextCairo.__init__E  s     r   c                s:    V P                   P                  4        R # rA   )r   r=   ro   rp   r   r=   ZGraphicsContextCairo.restoreI  s    r   c                s   < \         SV `  V4       \        V P                  V P                  V P                  4       V P                  4       4       R # rA   )r2   	set_alphar   r   _rgbrJ   rK   )r4   r   r5   r6   r   r   ZGraphicsContextCairo.set_alphaL  s:    % HHdii!143H3H3J	Lr   c                s    V P                   P                  V'       d   \        P                  4       R # \        P                  4       R # rA   )r   r]   r%   ZANTIALIAS_DEFAULTZANTIALIAS_NONE)r4   r   rv   r   set_antialiasedZ$GraphicsContextCairo.set_antialiasedQ  s/    '(E##	D.3.B.B	Dr   c                s6    V P                   P                  4       # rA   )r   Zget_antialiasro   rp   r   r^   Z$GraphicsContextCairo.get_antialiasedU  s    xx%%''r   c                    V P                   P                  \        P                  ! V P                  VR 7      4       Wn        R# ))ZcapstyleN)r   Zset_line_capr    check_getitem_capd	_capstyle)r4   Zcsrv   r   set_capstyleZ!GraphicsContextCairo.set_capstyleX  s*    d00bIJr   c                s    V'       g   R # \         P                  ! VP                  4      w  r#rEV P                  pVP	                  4        VP                  W P                  P                  V,
          V,
          WE4       VP                  4        R # rA   )	r   r   Zboundsr   rI   rj   r(   r-   r   )r4   rj   rS   rT   rm   rn   r      &&     r   set_clip_rectangleZ'GraphicsContextCairo.set_clip_rectangle\  s]    XXi../
ahha--1A5q<
r   c                s8   V'       g   R # VP                  4       w  r#V P                  pVP                  4        V\        4       P	                  ^R4      P                  ^ V P                  P                  4      ,           p\        WBV4       VP                  4        R # rE   )
Zget_transformed_path_and_affiner   rI   r
   rG   rH   r(   r-   r   r   )r4   r   ZtpathZaffiner      &&   r   set_clip_pathZ"GraphicsContextCairo.set_clip_pathe  sq    <<>hhJ$$Q+55a9M9MNOS(
r   c           	     s    W3V n         Vf   V P                  P                  . ^ 4       R # V P                  P                  \        V P                  P                  \        P                  ! V4      4      4      V4       R # rA   )_dashesr   Zset_dashZlistr(   rM   r   r   )r4   ZoffsetZdashes   &&&r   
set_dashesZGraphicsContextCairo.set_dashesp  sY    ~>HHb!$HHT]]33BJJv4FGHr   c                s   < \         SV `  W4       \        V P                  4      ^8X  d'   V P                  P
                  ! V P                  !   R# V P                  P                  ! V P                  !   R# )r   N)r2   set_foregroundr   r   r   rk   r   )r4   ZfgZisRGBAr5   s   &&&r   r   Z#GraphicsContextCairo.set_foregroundy  sL    r*tyy>QHH##TYY/HH$$dii0r   c                s`    V P                   P                  4       P                  4       R ,          # )r   )r   Z
get_sourceZget_rgbaro   rp   r   get_rgbZGraphicsContextCairo.get_rgb  s#    xx""$--/33r   c                r   ))Z	joinstyleN)r   Zset_line_joinr    r   _joind
_joinstyle)r4   Zjsrv   r   set_joinstyleZ"GraphicsContextCairo.set_joinstyle  s*    t11$++LMr   c                s    \        V4      V n        V P                  P                  V P                  P                  V4      4       R # rA   )rW   
_linewidthr   rL   r(   rM   )r4   rm   rv   r   set_linewidthZ"GraphicsContextCairo.set_linewidth  s.    ( > >q ABr   )r   r   r   r   r(   rA   )rw   rx   ry   rz   r%   ZLINE_JOIN_BEVELZLINE_JOIN_MITERZLINE_JOIN_ROUNDr   ZLINE_CAP_BUTTZLINE_CAP_SQUAREZLINE_CAP_ROUNDr   r3   r=   r   r   r^   r   r   r   r   r   r   r   r   r{   r|   r}   r~   r   r   r*   r*   8  s     %''%''%''F 	u**u,,u++E!L
D(	14C Cr   r*   c                   s&   a  ] tR tRt o R tRtV tR# )_CairoRegioni  c                s    Wn         W n        R # rA   )_slices_data)r4   ZslicesrV   r   r   r3   Z_CairoRegion.__init__  s    
r   )r   r   N)rw   rx   ry   rz   r3   r{   r|   r      @r   r   r     s      r   r   c                   s   a  ] tR tRt o ]R 4       tR tR tR tR t	R t
]
tR tR	R
/R lt]P                  ! ]R4      t]P                  ! ]R4      t]P                  ! ]R4      t]P                  ! ]R4      tRtV tR# )FigureCanvasCairoi  c                s    \        V R 4      '       g%   \        V P                  P                  4      V n        V P                  # _cached_renderer)r;   r'   figurer)   r   ro   rp   r   	_rendererZFigureCanvasCairo._renderer  s3     t/00$1$++//$BD!$$$r   c                s    V P                   # rA   )r   ro   rp   r   get_rendererZFigureCanvasCairo.get_renderer  s    ~~r   c           	     s   V P                   P                  P                  P                  4       p\	        V\
        P                  4      '       g   \        R 4      hVP                  4       pVP                  4       p\        P                  ! VP                  4      p\        P                  ! VP                  4      p\        P                  ! WAP                  ,
          4      p\        P                  ! WAP                   ,
          4      p^ V8:  dJ   Wc8:  dD   VP                  VP                  8:  d)   ^ V8:  d"   W8:  d   VP                   VP                  8:  g   \#        R4      h\%        Ww\'        W,
          ^ 4      ,           4      \%        WU\'        We,
          ^ 4      ,           4      3p	\(        P*                  ! VP-                  4       \(        P.                  4      P1                  WC34      V	,          P3                  4       p
\5        W4      # )z;copy_from_bbox only works when rendering to an ImageSurfacezInvalid bbox)r   r+   r   r:   
isinstancer%   r/   RuntimeErrorr7   r8   mathZceilx0ZfloorrQ   rR   y0
ValueErrorZsliceZmaxr   
frombufferget_datauint32reshapeZcopyr   )r4   Zbboxr>   swshr   rQ   r   rR   ZslsrV   s   &&         r   copy_from_bboxZ FigureCanvasCairo.copy_from_bbox  s_   ..##''224'5#5#566MO O !YYtwwZZ YYrGG|$ZZWW%RBHDGG);GTWW-?^,,BS!_,-uRc"'1o9M/NNg..0"))<""3((, 	C&&r   c                s   V P                   P                  P                  P                  4       p\	        V\
        P                  4      '       g   \        R 4      hVP                  4        VP                  4       pVP                  4       pVP                  w  rVVP                  \        P                  ! VP                  4       \        P                   4      P#                  WC34      WV3&   VP%                  VP&                  VP&                  VP(                  VP&                  ,
          VP(                  VP&                  ,
          4       R# )z;restore_region only works when rendering to an ImageSurfaceN)r   r+   r   r:   r   r%   r/   r   Zflushr7   r8   r   r   r   r   r   r   r   Zmark_dirty_rectangleZstartZstop)r4   Zregionr>   r   r   ZslyZslxr   r   restore_regionZ FigureCanvasCairo.restore_region  s    ..##''224'5#5#566MO O !>>)/ 
w'')299	5
'2(
CH
&$$IIsyy#((SYY"63998L	Nr   c                sD    V P                  4       P                  V4       R # rA   )_get_printed_image_surfaceZwrite_to_png)r4   fobjrv   r   	print_pngZFigureCanvasCairo.print_png  s    '')66t<r   c           	     s    V P                  4       w  r#V P                  4       P                  4       pVP                  \        P
                  ! \        P                  ! V4      P                  W#^34      4      4       R# )rr   N)	get_width_heightr   r   Zwriter   Z._premultiplied_argb32_to_unmultiplied_rgba8888r   r   r   )r4   r   r,   r-   Zbufr   r   
print_rgbaZFigureCanvasCairo.print_rgba  s]    --/--/88:

5GGJJsO##UA$679 	:r   c                sf   V P                   P                  V P                  n        V P                  4       w  r\        P
                  ! \        P                  W4      pV P                  P                  \        P                  ! V4      4       V P                   P                  V P                  4       V# rA   )
r   r)   r   r   r%   r/   r0   r@   r.   draw)r4   r,   r-   r>   s   &   r   r   Z,FigureCanvasCairo._get_printed_image_surface  st    ![[__--/$$U%8%8%H""5==#9:(r   orientationZportraitc               s   ^HpW@P                   n        V P                   P                  4       w  rVWT,          Wd,          rVR8X  d   YrVR8X  d:   \        \        R4      '       g   \        R4      h\        P                  ! W'V4      p	MVR8X  d:   \        \        R4      '       g   \        R4      h\        P                  ! W'V4      p	MVR9   d   \        \        R	4      '       g   \        R
4      hVR8X  dH   \        V\        4      '       d   \        P                  ! VR4      pM\        P                  ! RRVR7      p\        P                  ! W'V4      p	M\        RV: 24      hV P                   P                  V P                  n        V P                  P                  \        P                   ! V	4      4       V P                  P"                  P$                  p
VR8X  d:   V
P'                  \(        P*                  ^,          4       V
P-                  ^ V) 4       V P                   P/                  V P                  4       V
P1                  4        V	P3                  4        VR8X  d   VP5                  4        R# R# )ru   Z	landscapeps	PSSurfacez3cairo has not been compiled with PS support enabledpdf
PDFSurfacez4cairo has not been compiled with PDF support enabledsvgz
SVGSurfacez4cairo has not been compiled with SVG support enabledZwbN)ZfileobjzUnknown format: )svgr   )r   r)   Zget_size_inchesr;   r%   r   r   r   r   ZstrgzipZGzipFiler   r   r   r@   r.   r+   r   r_   r   ZpirH   r   Z	show_pageZfinishZclose)r4   Zfmtr   r   r)   Zw_inZh_inZwidth_in_pointsZheight_in_pointsr>   r   s   &&&$       r   _saveZFigureCanvasCairo._save  s    [[002
,0J
)+%  . $;5+.." $5 6 6ood=MNGE\5,//" $5 6 6&&t>NOGO#5,//" $5 6 6f}dC((==t4D==tTBD&&t>NOG/w788![[__""5==#9:nn##+%JJruuqy!MM!../ 	(&=JJL r   r   r   r   r   r   N)rw   rx   ry   rz   Zpropertyr   r   r   r   r   r   Z	print_rawr   r   	functoolsZpartialmethodZ	print_pdfZprint_psZ	print_svgZ
print_svgzr{   r|   r   r   r   r   r     s     % %'&N=: I1j 1f ''u5I&&ud3H''u5I((7Jr   r   c                   s6    ] tR tRt]P
                  t]t]	t
RtR# )_BackendCairoi   N)rw   rx   ry   rz   r%   ZversionZbackend_versionr   ZFigureCanvasr   ZFigureManagerr{   r   r   r   r   r     s    mmO$L%Mr   r   )rP   i   rf   rA   )$Z__doc__r   r   r   Znumpyr   r%   Zversion_infoZImportErrorZ	cairocffiZerrZ r    r   r   Zmatplotlib.backend_basesr   r   r   r   r   Zmatplotlib.font_managerr   Zmatplotlib.pathr	   Zmatplotlib.transformsr
   r   r   r&   r'   r*   r   r   Zexportr   r   r   r   <module>r      s       %J& &&+&8&8%9H I 	I ' ) (  4   *$"$(c&L c&LQC. QCh x8( x8v 
&H & &u  %%! %!$	%%%s)   +B< <C#C

C	CCC#