
    q&f_                     P   U 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Zd dl	Z	d dl
Z
d dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ  ej@                  d      Z!ejD                  jF                  Z#ejD                  jH                  Z$ejD                  jJ                  Z%	 ejL                  Z'ejT                  Z*ejV                  Z+ejX                  Z,ejZ                  Z-ej\                  r<de)d
e)fdZ#ded
efdZ%de)d	e)d
dfdZ'de)d
e)fdZ*de)d
dfdZ+de)d	e)d
dfdZ,de)d
dfdZ-dZ/e0e1d<    ejd                  d       Z2e3e1d<    ejd                  e2       eZ4de)d
ee)e)f   fdZ5d
e0fdZ6de)d
e3fdZ7de)d
e)fdZ8de)de)d ee)   d!ee)   d
e)f
d"Z9d#e)d
e0fd$Z:d#e)d%e0d&e0d
dfd'Z;	 	 dide)d	e)d(ee)   d)e0d
df
d*Z<de)d
e0fd+Z=de)d
e0fd,Z>de)d
ee)   fd-Z?d.e)d
ee)   fd/Z@d.e)d
ee)   fd0ZAd
e)fd1ZBdjd2ZCde)d
e)fd3ZDde)d
e)fd4ZEd5e)d6e)d
e0fd7ZFd5e)d6e)d
e0fd8ZGde)d
e)fd9ZHej                  j                  ZKe3e1d:<   eHZLej                  r&de)d
e)fd;ZHej                  j                  ZKde)d
e)fd<ZLej                  d=k(  r< eOg d>d?@      ZPde)d
e)fdAZHej                  j                  ZKeHZLde)d
e0fdBZ=de)d
e0fdCZ>ej                  dDk(  rdE Z>daReee)      e1dF<   dGe)d
e)fdHZSdGe)d
ee)   fdIZTdJe3d
e0fdKZUdLej                  d
e0fdMZWdNe)d
ee)   fdOZXdjdPZYej                  ej                  hZ\dQee)   d
eeej                        fdRZ]d
e)fdSZ^dkdTee3   d
ee)   fdUZ_dkdVee3   d
ee)   fdWZ`de)d
ee)   fdXZadYee)   d
e3fdZZbd[ Zcde)d\e0d
dfd]Zd	 	 dld^e)dee)   d_eee3ee3   f      d
ee)   fd`ZedjdaZf G db dc      ZgdLeej                     d
e0fddZhdLeej                     d
e0fdeZidf Zjd
e)fdgZkde)d
dfdhZly# e($ r de)d	e)d
efdZ'Y [w xY w)m    N)AnyAnyStrIterableIteratorListMatchNoReturnOptionalSequenceTupleUnion   )_)open)encodingerrorpolicypycompatosutilsrcdstreturnc                 @    t        t        j                  d| |fz        )Ns!   hardlinks not supported: %s to %s)OSErrorerrnoEINVALr   r   s     1/usr/lib/python3/dist-packages/mercurial/posix.pyoslinkr   =   s"    LL>#sK
 	
    pathc                     t         NNotImplementedErrorr!   s    r   normpathr'   J       !!r    c                     t         r#   r$   r&   s    r   abspathr*   M   r(   r    c                     t         r#   r$   r   s     r   r   r   P   r(   r    c                     t         r#   r$   r&   s    r   readlinkr-   S   r(   r    c                     t         r#   r$   r&   s    r   unlinkr/   V   r(   r    c                     t         r#   r$   r   s     r   renamer1   Y   r(   r    namec                     t         r#   r$   r2   s    r   
removedirsr5   \   r(   r    Fexpandglobsumaskpc                     | j                  dd      }t        |      dk(  rd| fS |d   j                  d      }|r||d   fS |d   dz   |d   fS )a  Same as posixpath.split, but faster

    >>> import posixpath
    >>> for f in [b'/absolute/path/to/file',
    ...           b'relative/path/to/file',
    ...           b'file_alone',
    ...           b'path/to/directory/',
    ...           b'/multiple/path//separators',
    ...           b'/file_at_root',
    ...           b'///multiple_leading_separators_at_root',
    ...           b'']:
    ...     assert split(f) == posixpath.split(f), f
       /r   r    r   )rsplitlenrstrip)r8   htnhs      r   splitr@   h   sb     
$	B
2w!|Av	Ad	B	2a5ya54<Ar    c                       y)z@return true if it is safe to hold open file handles to hardlinksT rB   r    r   openhardlinksrC      s    r    c                 @    t        j                  |       j                  S )z-return number of hardlinks for the given file)oslstatst_nlinkr4   s    r   nlinksrH      s    88D>"""r    output_linec                     | dd }t         j                  dk(  r|d   dk(  r|dd }|S |j                  d      r|j                  d      r	d	|v r|dd }|S )
z<parses the output produced by patch and returns the filename   N   OpenVMSr      `r      '    )r   sysplatform
startswithendswith)rI   pfs     r   parsepatchoutputrU      sh    	RS	Bz)a5D=AbB I ==2;;t#4AbBIr    sshcmdhostuserportc                     |xr d||fz  xs |}d|dd v r!t        j                  t        d      |z        t        |      }|rdt        |      |fz  }|S )zBuild argument list for sshs   %s@%s   -Nr   s4   illegal ssh hostname or username starting with -: %ss   -p %s %s)r   Abortr   
shellquote)rV   rW   rX   rY   argss        r   sshargsr_      sq     -Xt,5DtBQxkkEFM
 	
 dDj.55Kr    fc                 L    t        j                  |       j                  dz  dk7  S )z"check whether a file is executable@   r   )rE   rF   st_mode)r`   s    r   isexecrd      s     88A;&!++r    lxc                 P   t        j                  |       }|j                  }|r^t        j                  |      sHt        | d      5 }|j                         }d d d        t        |        	 t        j                  |        y y t        j                  |      rPt        j                  |       }t        |        t        | d      5 }|j                  |       d d d        dt         z  }|dz  }|j                  dkD  rmt        |      t        |      k7  rVt        | d      5 }|j                         }d d d        t        |        t        | d      5 }|j                         d d d        |r*|s(t        j                  | ||dz  dz	  t         z  z         y |s|rt        j                  | |dz         y y y # 1 sw Y   `xY w# t        $ r6 t        | d      5 }|j                         d d d        Y y # 1 sw Y   Y y xY ww xY w# 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w)Ns   rbs   wb  rb   r   i$     )rE   rF   rc   statS_ISLNKr   readr/   symlinkr   writer-   r7   rG   boolchmod)r`   re   rf   stsfpdatasxs           r   setflagsrv      s   	!B


A||Aa !2wwy!1I#

4# 	||A{{1~q	!U^ 	rHHTN	UFN	
UB	{{Q47d2h.!U^ 	r779D	q	!U^ 	rHHTN	 	 	AUq(E61122
AI QC! !
  #!U^ #rHHTN# # 		# # 	#	 		 		 	sZ   F4*G HHH4F>H G2(H 2G<	7H <H HHH%modeenforcewritablec                     	 t        j                  |       j                  dz  }|}|r|t
        j                  z  }t        j                  ||       y# t        $ r |}|t         }|dz  }Y Iw xY w)zCopy the file mode from the file at path src to dst.
    If src doesn't exist, we're using mode instead. If mode is None, we're
    using umask.  Nrh   )rE   rF   rc   FileNotFoundErrorr7   rj   S_IWUSRrp   )r   r   rw   rx   rc   new_modes         r   copymoder~      sq    ((3-''%/ HDLL HHS(  ?fG5	s   "A A.-A.c                 l   	 t         j                  t         j                  z  t         j                  z  }t        j
                  j                  | d      }t        j
                  j                  |d      }t        j
                  j                  |d      }t        j
                  j                  |      sN	 t	        j                  |       t        j
                  j                  |      rt        ||       nt        ||       t        j
                  j                  |      rt        j
                  j                  |d      }t        j
                  j                  |d      }	 t	        j                   |      j                  }||z  dk7  r4	 t	        j                   |      j                  }||z  dk(  ryt#        |       t#        |       |}n| }d	}t%        j&                  |d
      \  }	}
	 t	        j                   |	       t	        j                   |
      j                  }||z  dk(  rkt	        j(                  |
|dz  |z         t	        j                   |
      j                  |z  dk7  r*|t	        j*                  |
|       d	}
	 |
t#        |
       yy|
t#        |
       y	y	# t        t        f$ r Y w xY w# t        $ r= t        |d      j!                          t	        j                   |      j                  }Y Rw xY w# t        $ r Y Cw xY w# |
t#        |
       w w xY w# t        t        f$ r Y yw xY w)z}
    Check whether the given path is on a filesystem with UNIX-like exec flags

    Requires a directory (like /foo/.hg)
       .hg   wcaches   stores   checkisexecs   checknoexecr      wTNs   hg-checkexec-dirprefixrz   F)rj   S_IXUSRS_IXGRPS_IXOTHrE   r!   joinexistsmkdirr~   IOErrorr   isdirrc   r{   r   closer/   r   mkstemprp   r1   )r!   	EXECFLAGSbasedircachedirstoredircheckisexecchecknoexecmcheckdirfhfns              r   	checkexecr      s   BLL4<</$,,>	'',,tV,77<<377<<2ww~~h' "77>>(+Xx0Wh/ 77=="'',,x@K'',,x@K$GGK(00 y=A%9GGK088 9})#;'{#  H HK!!h7GHB	HHRL##A9}!QY23772;&&2a7".		"k2!~r
 r~r
 _ W% $ - 9[$/557GGK0889 % L ~r
 W s   B1L! 4AJ AL! !K>  L! 	J5 (L! 17L! )BL L! L! J2.L! 1J22L! 5AK;7L! :K;;L! >	LL! 
LL! LL! !L32L3c                    	 t         j                  j                  | dd      }t         j                  j                  |d      }t         j                  j                  |      ryt         j                  j	                  |      r|}n| }d}t        j                  t        j                  |      d      }t        j                  |      }	 d}|At        j                  |d      }t         j                  j                  |j                        }n=d	}	 t         j                  j                  ||      }t        |d
      j                          	 t        j                   ||       |t#        |       n	 t        j$                  ||       	 ||j                          yy# t        $ r Y yw xY w# t&        $ r t#        |       Y :w xY w# t(        $ r Y ||j                          w xY w# ||j                          w w xY w# t*        $ r Y yt&        $ rQ}|j,                  t,        j.                  k(  r*t         j                  j1                  |      rt#        |       Y d}~yd}~ww xY w)z?check whether the given path is on a symlink-capable filesystemTr   r   s	   checklinkNz
checklink-r   s   hg-checklink-s   checklink-targetr   F)rE   r!   r   islinkr   tempfilemktempr   fsdecodefsencodenamedtempfilebasenamer2   r   r   PermissionErrorrm   r/   r1   r   FileExistsErrorAttributeErrorr   EIOr   )	r!   r   	checklinkr   r2   fdtargetfullpathinsts	            r   r   r   >  s    77<<fi8GGLL<8	77>>)$77=="HHH!!(+M
   &+	B++ )9 ))"''2 -	!!ww||Hf=H4(..0

64(#4L%		$	2 
 >HHJ "+ ' ! !! # %t% # >HHJ >HHJ " 	 	zzUYY&277>>$+?t		s   	AG? :F $G 1F+ G? 	F(%G? 'F((G? +G?G GG 	G$G' G? #G$$G' 'G<<G? ?	I#
I#AII#c                      y)zCheck that the base-relative path is a valid filename on this platform.
    Returns None if the path is ok, or a UI string describing the problem.NrB   r&   s    r   checkosfilenamer     s     r    dirpathc                 2     t        t        dd       |       S )zGet the filesystem mount point from a directory (best-effort)

    Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
    getfsmountpointc                      y r#   rB   rf   s    r   <lambda>z!getfsmountpoint.<locals>.<lambda>      r    getattrr   r   s    r   r   r     s    
 >76,n=gFFr    c                 2     t        t        dd       |       S )zGet the filesystem type name from a directory (best-effort)

    Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
    	getfstypec                      y r#   rB   r   s    r   r   zgetfstype.<locals>.<lambda>  r   r    r   r   s    r   r   r     s    
 876;7@@r    c                  R    t        j                  t        j                  d            S )N )r   
strtolocalgetpassrB   r    r   get_passwordr     s    wr233r    c                      y r#   rB   )r   s    r   	setbinaryr         r    c                     | S r#   rB   r&   s    r   pconvertr         Kr    c                     | S r#   rB   r&   s    r   	localpathr     r   r    fpath1fpath2c                 B    t         j                  j                  | |      S )zwReturns whether path1 and path2 refer to the same file. This is only
    guaranteed to work for files, not directories.)rE   r!   samefile)r   r   s     r   r   r     s     77FF++r    c                     t        j                  |       }t        j                  |      }|j                  |j                  k(  S )zyReturns whether fpath1 and fpath2 are on the same device. This is only
    guaranteed to work for files, not directories.)rE   rF   st_dev)r   r   st1st2s       r   
samedevicer     s3     ((6
C
((6
C::##r    c                 "    | j                         S r#   )lowerr&   s    r   normcaser     s    ::<r    normcasespecc                 b    	 t        j                  |       S # t        $ r t        |       cY S w xY w)a  
        Normalize a filename for OS X-compatible comparison:
        - escape-encode invalid characters
        - decompose to NFD
        - lowercase
        - omit ignored characters [200c-200f, 202a-202e, 206a-206f,feff]

        >>> normcase(b'UPPER')
        'upper'
        >>> normcase(b'Caf\xc3\xa9')
        'cafe\xcc\x81'
        >>> normcase(b'\xc3\x89')
        'e\xcc\x81'
        >>> normcase(b'\xb8\xca\xc3\xca\xbe\xc8.JPG') # issue3918
        '%b8%ca%c3\xca\xbe%c8.jpg'
        )r   
asciilowerUnicodeDecodeErrornormcasefallbackr&   s    r   r   r     s2    $	*&&t,,! 	*#D))	*s    ..c           	         	 | j                  d      }t        j                  d|      j                         j                  d      }t        j                  |      S # t        $ r d}d}t        |       }||k  rY	 t        j                  | |      }|t        |      z  }n(# t
        $ r dt        | ||dz          z  }|dz  }Y nw xY w||z  }||k  rY|j                  d      }Y w xY w)Nzutf-8r    r   s   %%%02Xr   NFD)decoder   r<   r   getutf8char
ValueErrorordunicodedata	normalizer   encodehfsignoreclean)r!   urr   posre   cencs          r   r   r     s    	"G$A$ ##E1-335<<WE&&s++' " 	"ACD	A' ,,T37A3q6MC! !CS37(;$<<A1HC Q ' !A	"s;   A C%9$BC%"C C%CC%C%$C%s   cygwin)s   /usr/bins   /usr/libs	   /cygdriveT)reversec                 j   t        |       }|dk(  s| d   t        j                  k7  rt        j                  |       S t
        D ][  }| j                  |      st        |      }||k(  r|c S | |   t        j                  k(  s@|t        j                  | |d        z   c S  t        j                  |       S )Nr   )r<   r   ossepr   uppercygwinmountpointsrR   )r!   pathlenmpmplens       r   r   r     s    d)qLd1g7>>$'' $ 	9B??2&GE	E{hnn,HNN4<888	9 ~~d##r    c                      yNFrB   r&   s    r   r   r         r    c                      yr   rB   r&   s    r   r   r   !  r   r    rL   c                      yr   rB   r&   s    r   r   r   '  r   r    _needsshellquoterr   c                     t         j                  dk(  rd| z  S t        t        j                  d      j
                  a| rt        |       s| S d| j                  dd      z  S )NrL   s   "%s"s   [^a-zA-Z0-9._/+-]s   '%s'rO   s   '\'')r   rQ   r   recompilesearchreplacerr   s    r   r]   r]   .  s\    z){::&;<CC!!$4222r    c                 0    t        j                  | d      S )z7Parse a command string in POSIX shell way (best-effort)T)posix)r   
shlexsplitr   s    r   
shellsplitr   ;  s    q--r    pidc                     t         j                  dk(  ry	 t        j                  | d       y# t        $ r'}|j
                  t
        j                  k7  cY d}~S d}~ww xY w)z5return False if pid dead, True if running or not surerL   Tr   N)r   rQ   rE   killr   r   ESRCH)r   r   s     r   testpidr  @  sK    z))
Q )zzU[[(()s   - 	AAAArq   c                 D    | j                   t        j                         k(  S )z;Return True if the stat object st is from the current user.)st_uidrE   getuidrq   s    r   isownerr  K  s    99		##r    commandc                    t         j                  dk(  r| S dt        dt        t           fd}t         j                  | v r ||       S t         j                  dk(  r& |t
        j                  j                  d|             S t        j                  j                  dd      j                  t         j                        D ].  } |t
        j                  j                  ||             }|,|c S  y	)
zFind executable for command searching like which does.
    If command is a basename then PATH is searched for command.
    PATH isn't searched if command is an absolute or relative path.
    If command isn't found None is returned.rL   
executabler   c                     	 t         j                  j                  |       r&t        j                  | t         j                        r| S y r#   )rE   r!   isfileaccessX_OK)r  s    r   findexistingzfindexe.<locals>.findexistingX  s/    277>>*%"))J*Hr    s   plan9s   /bins   PATHr    N)r   rQ   bytesr
   r   rE   r!   r   r   environgetr@   	ospathsep)r	  r  r!   r  s       r   findexer  P  s    
 z) 8E?  ~~ G$$x'BGGLL':;;  $$Wc2889K9KL !"'',,tW"=>
! r    c                       y r#   rB   rB   r    r   setsignalhandlerr  k  r   r    filesc              #      K   t         j                  }t        j                  }| D ])  }	  ||      } ||j                        t
        vrd}| + y# t        t        f$ r d}Y w xY ww)zqStat each file in files. Yield each stat, or None if a file does not
    exist or has a type we don't care about.N)rE   rF   rj   S_IFMTrc   _wantedkindsr{   NotADirectoryError)r  rF   getkindnfrq   s        r   	statfilesr  r  so      HHEkkG 	rBrzz",6 
 "#56 	B	s(   &A)"AA)A&#A)%A&&A)c                  P    t        j                  t        j                               S )zreturn name of current user)r   r   r   getuserrB   r    r   r!  r!    s    W__.//r    uidc                     | t        j                         } 	 t        j                  t	        j
                  |       d         S # t        $ r d| z  cY S w xY w)ziReturn the name of the user with the given uid.

    If uid is None, return the name of the current user.r   s   %d)rE   r  r   r   pwdgetpwuidKeyError)r"  s    r   usernamer'    sQ    
 {iik  c!21!566 s{s   *A AAgidc                     | t        j                         } 	 t        j                  t	        j
                  |       d         S # t        $ r t        j                  |       cY S w xY w)zkReturn the name of the group with the given gid.

    If gid is None, return the name of the current group.r   )rE   getgidr   r   grpgetgrgidr&  bytestr)r(  s    r   	groupnamer.    sX    
 {iik%  c!21!566 %$$%s   *A A$#A$c                     t        j                  |       } t        j                  t         j                  t	        t        j                  |       j                              S )zkReturn the list of members of the group with the given
    name, KeyError if the group does not exist.
    )r   r   rapplyr   listr+  getgrnamgr_memr4   s    r   groupmembersr4    s?     T"D??8,,d3<<3E3L3L.MNNr    r^   c                 v    t        j                  t         j                  t        t         dd      z  | d   |       S )NP_DETACHr   )rE   spawnvpP_NOWAITr   )r^   s    r   spawndetachedr9    s+    ::bkkGB
A$>>QNNr    c                  (    t         j                  d d S )Nr   )sysargvrB   r    r   gethgcmdr=    s    88BQ<r    
notindexedc                 .    t        j                  |        y r#   )rE   r   )r!   r>  s     r   makedirr@    s    HHTNr    keyscopec                      y r#   rB   )rA  r2   rB  s      r   	lookupregrD    s    
 r    c                       y)zHide current shell window.

    Used to hide the window opened when starting asynchronous
    child process under Windows, unneeded on other systems.
    NrB   rB   r    r   
hidewindowrF    s     	r    c                   `    e Zd ZdeddfdZdefdZej                  Zde	defdZ
de	defdZy)		cachestatr!   r   Nc                 8    t        j                  |      | _        y r#   )rE   rj   )selfr!   s     r   __init__zcachestat.__init__  s    GGDM	r    c                 @    t        | j                  j                        S r#   )ro   rj   st_ino)rJ  s    r   	cacheablezcachestat.cacheable  s    DII$$%%r    otherc                    	 | j                   j                  |j                   j                  k(  xr | j                   j                  |j                   j                  k(  xre | j                   j                  |j                   j                  k(  xr5 | j                   j                  |j                   j                  k(  xr | j                   j
                  |j                   j
                  k(  xr | j                   j                  |j                   j                  k(  xr | j                   j                  |j                   j                  k(  xrx | j                   t         j                     |j                   t         j                     k(  xr; | j                   t         j                     |j                   t         j                     k(  S # t        $ r Y yw xY wr   )rj   rc   rM  r   rG   r  st_gidst_sizeST_MTIMEST_CTIMEr   rJ  rO  s     r   __eq__zcachestat.__eq__  sf   	 		!!UZZ%7%77 JII$$

(9(99JII$$

(9(99J II&&%***=*==J II$$

(9(99	J
 II$$

(9(99J II%%););;J IIdmm,

4==0IIJ IIdmm,

4==0II
  		s   GG 	GGc                     | |k(   S r#   rB   rU  s     r   __ne__zcachestat.__ne__  s    5=  r    )__name__
__module____qualname__r  rK  ro   rN  object__hash__r   rV  rX  rB   r    r   rH  rH    sR    "U "t "&4 & HC D *!C !D !r    rH  c                 H    | rt        j                  | j                        S dS )z(check whether a stat result is a symlinkF)rj   rk   rc   r  s    r   
statislinkr_    s    ')4<<

#4u4r    c                 .    | r| j                   dz  dk7  S dS )z1check whether a stat result is an executable filerb   r   F)rc   r  s    r   
statisexecra    s    (*BJJ!#55r    c           
          	 t        j                   | | |       }t        t	        t        t        |g                         S # t        $ r t               w xY w)zblock until something happens on any file descriptor

    This is a generic helper that will check for any activity
    (read, write.  exception) and return the list of touched files.

    In unsupported cases, it will raise a NotImplementedError)selectr   r%   sortedr1  setsum)fdsress     r   pollri    sP    $mmCc* $s3sB<()**  $!##$s   A   Ac                    t        j                   | t         j                        }|t        j                  z  }t        j                   | t         j                  |      }	 g }	 	 | j                         }|sn|j                  |       &dj                  |      t        j                   | t         j                  |       S # t        $ r Y Aw xY w# t        j                   | t         j                  |       w xY w)z$Read all available data from a pipe.r    )	fcntlF_GETFLrE   
O_NONBLOCKF_SETFLrl   appendr   r   )pipeflagsoldflagschunksrr   s        r   readpipert    s    
 KKemm,E	R]]E{{46H3IIKa   xxD%--2  
 	D%--2s<   C "B= 4C 5B= C =	C	C C		C 'C3c                 ~   t         j                  j                  |      \  }}d}	 |r9t        j                  dt         j                        }t        j
                  |       | j                  |       |rt        j                  |       |rt        j                  |       yy# |rt        j                  |       w w xY w)z1Bind the UNIX domain socket to the specified pathN   .)	rE   r!   r@   r   O_DIRECTORYchdirbindfchdirr   )sockr!   dirnamer   bakwdfds        r   bindunixsocketr~    s    
 d+GXG	ggdBNN3GHHW		(IIgHHW 7HHW s   A#B" "B<r   )r   Nr#   )NN)mr   rk  r   r+  rE   r$  r   rc  rj   r;  r   typingr   r   r   r   r   r   r   r	   r
   r   r   r   i18nr   r   r   r   r   r   r   	importmodr   r!   r'   samestatr*   linkr   r   r  r-   r/   r1   r5   TYPE_CHECKINGr6   ro   __annotations__r7   int	posixfiler@   rC   rH   rU   r_   rd   rv   r~   r   r   r   r   r   r   r   r   r   r   r   r   normcasespecsr   r   r   isdarwinrQ   rd  r   rO  r   r]   r   r  stat_resultr  r  r  S_IFREGS_IFLNKr  r  r!  r'  r.  r4  r9  r=  r@  rD  rF  rH  r_  ra  ri  rt  r~  rB   r    r   <module>r     s      
 	 
 	   
         
		(	#7777
''//

WWF ;;		]]
	"u " ""f " ""E " "$ ""u " ""U "t ""E " "$ "" "4 " T RXXa[s  	U uUE\* .t 
# #3 #
	% 	E 	&.uo=Ee_
,e , ,
) )$ )4 )D )^ !!			 5/ 	
 
2ME Md M`>E >d >B% HUO GU Gx GAu A% A4e 4	5 U E e ,U ,E ,d ,$u $e $ $5 U 
 **00c 0 *u * *. ))//L,u , ,2 9$ 	

 $u $ $& ))//L $  $  :% ,0 (5<( /
3% 
3E 
3.% .DK .
) ) )$ $4 $
U x 6	 dll+Xe_ (2>>2J)K 0 0

(3- 
8E? 

%8C= 
%HUO 
%Ou Oe OOU O O% T d  !15	
5/ E#x},-. e_		! !D58BNN+ 5 5
68BNN+ 6 6
+3e 32u  A  


E 
 
( 

s   =P P%$P%