ó
^\kdc           @   s?  d  d l  Z  d  d l Z d  d l Z d  d l m 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 y d  d l Z Wn  e k
 rÎ d  d l j Z n Xd  d l m Z m Z e e d d d „ Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z e ƒ  Z  d d „ Z! d „  Z" d d „ Z# d „  Z$ d „  Z% d e& f d „  ƒ  YZ' d e' f d „  ƒ  YZ( d e( f d „  ƒ  YZ) d e' f d „  ƒ  YZ* d d „ Z+ d e& f d „  ƒ  YZ, d e, f d „  ƒ  YZ- d  e, f d! „  ƒ  YZ. e/ d" k r;x# e+ e j0 d# ƒ D] Z1 e1 GHq)Wn  d S($   iÿÿÿÿN(   t   log(   t   unicode(   t   unescape(   t   Popent   PIPEi    c      	   C   sl   y; t  |  d | d | d t j d k ƒ} | j ƒ  | } Wn t k
 rO d SXt | | ƒ } | j | f S(   Nt   stdoutt   stderrt   shellt   win32i   t    (   i   R	   (   t   _Popent   syst   platformt   communicatet   OSErrort   decode_as_stringt
   returncode(   t   argsR   R   t   encodingt   streamt   proct   data(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   _run_command   s    c         C   sK   |  j  d ƒ d } d j g  | j D]! } | j | j k r# | j ^ q# ƒ S(   Nt   schedulei    R	   (   t   getElementsByTagNamet   joint
   childNodest   nodeTypet	   TEXT_NODEt	   nodeValue(   t   entryR   t   t(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   _get_entry_schedule0   s    	c         C   sK   |  j  d ƒ d } d j g  | j D]! } | j | j k r# | j ^ q# ƒ S(   Nt   propertyi    R	   (   R   R   R   R   R   R   (   t   targett   property_textR   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   _get_target_property7   s    	c         C   s+   t  j d k  r! |  j d ƒ } n |  } | S(   Ni   i    s   utf-8(   i   i    (   R   t   version_infot   encode(   t   decoded_strR   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   _get_xml_data>   s    c         G   s6   |  s |  d k r# t  j j | Œ  St  j j |  | Œ S(   Nt   .(   t   ost   pathR   (   t   prefixt   suffix(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   joinpathG   s    c          C   s³   yL t  j ƒ  }  |  s" |  d k r5 t  j ƒ  d }  n  |  rK t j |  ƒ n  Wn  t  j t f k
 rn d  }  n Xt j	 d k } |  s’ d d g | S|  j
 d ƒ r« | r« d S|  Sd  S(   Ns   US-ASCIIi   t   darwins   utf-8s   mac-(   t   localet   getpreferredencodingt   getdefaultlocalet   codecst   lookupt   Errort   LookupErrort   NoneR   R   t
   startswith(   R   t   is_osx(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   determine_console_encodingL   s    
c         C   sL   | d k r t } n  t |  t ƒ s6 |  j | ƒ }  n  t j d |  ƒ }  |  S(   sï  
    Decode the console or file output explicitly using getpreferredencoding.
    The text paraemeter should be a encoded string, if not no decode occurs
    If no encoding is given, getpreferredencoding is used.  If encoding is
    specified, that is used instead.  This would be needed for SVN --xml
    output.  Unicode is explicitly put in composed NFC form.

    --xml should be UTF-8 (SVN Issue 2938) the discussion on the Subversion
    DEV List from 2007 seems to indicate the same.
    t   NFCN(   R7   t   _console_encodingt
   isinstanceR   t   decodet   unicodedatat	   normalize(   t   textR   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR   i   s    	c         C   s«   t  j j j t |  ƒ ƒ } t ƒ  } x| | D]t \ } } | d k r+ | j d k r+ | j | ƒ t | ƒ j	 d ƒ sŸ | j
 | j d ƒ | j d ƒ f ƒ qŸ q+ q+ W| d S(   s+   Parse the entries from a recursive info xmlt   START_ELEMENTR   t   deleteR+   t   kindi   (   t   xmlt   domt   pulldomt   parseStringR(   t   listt   nodeNamet
   expandNodeR    R8   t   appendt   getAttribute(   R'   t   doct   entriest   eventt   node(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   parse_dir_entries�   s    	R	   c   	      C   s  t  j j | ƒ } t  j j | ƒ } t j j j t |  ƒ ƒ } t	 ƒ  } xÅ | D]½ \ } } | d k rO | j
 d k rO | j | ƒ t  j j | j d ƒ ƒ } t  j j | ƒ j | ƒ rÐ | t | ƒ d } n  t | ƒ } x- t | ƒ D] } | j t | | ƒ ƒ qé WqO qO W| S(   s!   Parse a propget svn:externals xmlRB   R"   R+   i   (   R*   R+   t   normpatht   normcaseRE   RF   RG   RH   R(   RI   RJ   RK   RM   R8   t   lenR$   t   parse_external_propRL   R.   (	   R'   R,   RN   t	   externalsRP   RQ   R+   R   t   external(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   parse_externals_xml�   s    	!c         C   sö   g  } xé |  j  ƒ  D]Û } | j ƒ  } | s1 q n  t j d k  rR | j d ƒ } n  t j | ƒ } t j d k  r• g  | D] } | j d ƒ ^ qw } n  t j	 | d ƒ d r¹ | d } n
 | d } t
 | d d ƒ} | j t j j | ƒ ƒ q W| S(   sê   
    Parse the value of a retrieved svn:externals entry.

    possible token setups (with quotng and backscaping in laters versions)
        URL[@#] EXT_FOLDERNAME
        [-r#] URL EXT_FOLDERNAME
        EXT_FOLDERNAME [-r#] URL
    i   i    s   utf-8iÿÿÿÿR   (   i   i    (   i   i    (   t
   splitlinest   lstripR   R%   R&   t   shlext   splitR>   t   urlparset   urlsplitR   RL   R*   R+   RS   (   t   linesRW   t   linet   xRX   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRV   ¨   s     	%
c   	      C   sÇ   t  } t |  d ƒ } d } zš x“ t | j d ƒ D] } | j ƒ  } t | ƒ d k r1 | \ } } | j t | ƒ ƒ } | d k r— | | k r— t } q° | d k r° | r° Pq° q1 q1 WWd  | j	 ƒ  X| S(   Nt   rtR	   i   t   Kt   V(
   t   Falset   opent   itert   readlineR]   RU   t   readt   intt   Truet   close(	   t   filenamet   keyt   foundt   fR   Ra   t   partsRD   t   length(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   parse_prop_fileÌ   s    	t   SvnInfoc           B   s§   e  Z d  Z e d „  ƒ Z e j d e j ƒ Z e	 d d „ ƒ Z
 d d „ Z d „  Z e d „  ƒ Z e d „  ƒ Z d	 „  Z d
 „  Z e d „ Z d „  Z d „  Z RS(   s¸   
    Generic svn_info object.  No has little knowledge of how to extract
    information.  Use cls.load to instatiate according svn version.

    Paths are not filesystem encoded.
    c          C   s?   t  d d d g ƒ \ }  } |  d k r7 | r7 | j ƒ  Sd Sd  S(   Nt   svns	   --versions   --quieti    R	   (   R   t   strip(   t   codeR   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   get_svn_versionè   s    
s!   (?:([\-0-9]+):)?(\d+)([a-z]*)\s*$R	   c   	      C   s^  t  j j | ƒ } t d d | g ƒ \ } } t  j j | d ƒ } t  j j t  j j | d ƒ ƒ p¢ t  j j t  j j | d ƒ ƒ p¢ t  j j t  j j | d ƒ ƒ } t |  j ƒ  j d ƒ ƒ } y t d „  | d	  Dƒ ƒ } Wn t	 k
 rú t ƒ  } n X| st
 | ƒ S| s$| s$| d k  r>t j d t ƒ t | ƒ S| d k  rTt | ƒ St | ƒ S(   NRv   t   infos   .svnRO   s	   dir-propss   dir-prop-baseR)   c         s   s   |  ] } t  | ƒ Vq d  S(   N(   Rk   (   t   .0Rb   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pys	   <genexpr>  s    i   i   i   s?   No SVN 1.3+ command found: falling back on pre 1.7 .svn parsingi   (   i   i   (   i   i   (   R*   R+   RS   R   R   t   isfilet   tupleRy   R]   t
   ValueErrorRu   t   warningst   warnt   DeprecationWarningt   SvnFileInfot	   Svn13Infot	   Svn15Info(	   t   clst   dirnamet   normdirRx   R   t   svn_dirt   has_svnt   svn_versiont   base_svn_version(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   load÷   s(    !!!
	

c         C   s   | |  _  d  |  _ d  |  _ d  S(   N(   R+   R7   t   _entriest
   _externals(   t   selfR+   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   __init__  s    		c         C   sh   t  d d |  j g ƒ \ } } | r5 t j d ƒ d S|  j j | ƒ } | r` t | j d ƒ ƒ Sd Sd S(   s<   Retrieve the directory revision informatino using svnversiont
   svnversions   -cs   svnversion failedi    i   N(   R   R+   R    R€   t   revision_ret   matchRk   t   group(   R�   Rx   R   t   parsed(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   get_revision  s    c         C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S(   N(   R�   R7   t   get_entries(   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRO   (  s    c         C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S(   N(   RŽ   R7   t   get_externals(   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRW   .  s    c         c   s   x |  j  D] } | Vq
 Wd S(   sR   
        Iterate over the svn:external references in the repository path.
        N(   RW   (   R�   t   item(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   iter_externals4  s    c         c   s8   x1 |  j  D]& \ } } | j ƒ  d k r
 | Vq
 q
 Wd S(   sR   
        Iterate over the non-deleted file entries in the repository path
        t   fileN(   RO   t   lower(   R�   R™   RD   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt
   iter_files;  s    c         c   sI   | r |  j  Vn  x1 |  j D]& \ } } | j ƒ  d k r | Vq q Wd S(   sR   
        Iterate over the non-deleted file entries in the repository path
        t   dirN(   R+   RO   Rœ   (   R�   t   include_rootR™   RD   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt	   iter_dirsC  s
    c         C   s   g  S(   N(    (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR—   M  s    c         C   s   g  S(   N(    (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR˜   P  s    (   t   __name__t
   __module__t   __doc__t   staticmethodRy   t   ret   compilet   IR’   t   classmethodRŒ   R�   R–   R!   RO   RW   Rš   R�   Rl   R    R—   R˜   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRu   à   s   			
	Rƒ   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   sK   t  d d d d |  j g d d ƒ\ } } | rA t j d ƒ g  St | ƒ S(   NRv   Rz   s   -Rs   --xmlR   s   utf-8s   svn info failed(   R   R+   R    t   debugRR   (   R�   Rx   R   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR—   U  s    c         C   sº   d d d g } g  } xž |  j  ƒ  D]� } t | | g d d ƒ\ } } | d k rd t j d ƒ g  SxK t | ƒ D]= } | r• t j j | | ƒ } n  | j t j j	 | ƒ ƒ qq Wq" W| S(   NRv   t   propgets   svn:externalsR   s   utf-8i    s   svn propget failed(
   R    R   R    R€   RV   R*   R+   R   RL   RS   (   R�   t   cmdt   resultt   folderRx   R`   RX   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR˜   _  s    !(   R¡   R¢   R—   R˜   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRƒ   T  s   	
R„   c           B   s   e  Z d  „  Z RS(   c         C   si   d d d |  j  d d g } t | d d ƒ\ } } | rJ t j d ƒ g  St | d	 t j  j |  j  ƒ ƒS(
   NRv   Rª   s   svn:externalss   -Rs   --xmlR   s   utf-8s   svn propget failedR,   (   R+   R   R    R©   RY   R*   t   abspath(   R�   R«   Rx   R`   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR˜   s  s    (   R¡   R¢   R˜   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR„   r  s   R‚   c           B   sA   e  Z d  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   R	   c         C   s,   t  t |  ƒ j | ƒ d  |  _ d  |  _ d  S(   N(   t   superR‚   R�   R7   t   _directoriest	   _revision(   R�   R+   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR�   ~  s    	c         c   s×   t  | d d ƒ } t j j | ƒ rÓ t j | ƒ } | t | j ƒ  f Vx‰ | j ƒ  D]x } t	 | ƒ } t  | | ƒ } t j j | ƒ r˜ | t
 d  f VqT t j j | ƒ rT x |  j | ƒ D] } | Vqº WqT qT Wn  d  S(   Ns   .svnRO   (   R.   R*   R+   R|   t   SVNEntriesFileRŒ   Rf   t   parse_revisiont   get_undeleted_recordsR   Rl   R7   t   isdirt	   _walk_svn(   R�   t   baset
   entry_fileRO   R+   R™   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR¶   ƒ  s    c         C   s‰   t  ƒ  } d } xa |  j |  j ƒ D]M \ } } } | rM | j | d f ƒ q" | j | d f ƒ t | | ƒ } q" W| |  _ | |  _ d  S(   Ni    R›   Rž   (   RI   R¶   R+   RL   t   maxR�   R±   (   R�   RO   t   revR+   R|   t   dir_rev(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   _build_entries‘  s    	"	c         C   s#   |  j  d  k r |  j ƒ  n  |  j  S(   N(   R�   R7   R¼   (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR—   Ÿ  s    c         C   s#   |  j  d  k r |  j ƒ  n  |  j  S(   N(   R±   R7   R¼   (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR–   ¤  s    c         C   s½   d d g d d g g } g  } x˜ |  j  ƒ  D]Š } d  } x8 | D]0 } t | | Œ } t j j | ƒ r> | } q> q> W| d  k	 r+ t | d ƒ } t | d d ƒ} | j t	 | ƒ ƒ q+ q+ W| S(   Ns   .svns   dir-prop-bases	   dir-propss   svn:externalsR   s   utf-8(
   R    R7   R.   R*   R+   R|   Rt   R   t   extendRV   (   R�   t
   prop_filesRW   R†   t	   prop_filet	   rel_partsRn   t   ext_prop(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR˜   ©  s    	(   R¡   R¢   R�   R¶   R¼   R—   R–   R˜   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR‚   |  s   				c         c   sq   t  j |  ƒ } x | j ƒ  D] } | Vq Wx? | j ƒ  D]1 } t  j | ƒ } x | j ƒ  D] } | VqZ Wq8 Wd  S(   N(   Ru   RŒ   R�   Rš   (   R†   Rz   R+   t   sub_infot   sub_path(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt
   svn_finder¾  s    	R²   c           B   s8   e  Z d  „  Z e d „  ƒ Z e d „  ƒ Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R�   R   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR�   Ì  s    c         C   sI   t  j j | d d ƒ } t | ƒ } z t j | ƒ } Wd  | j ƒ  X| S(   Ns   .svnRO   (   R*   R+   R   Rg   R²   Rj   Rm   (   t   class_R·   Rn   Rq   R¬   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRŒ   Ï  s    c         C   s5   | j  ƒ  } | j d ƒ } t t g | }  |  | ƒ S(   Ns   <?xml(   Rj   R8   t   SVNEntriesFileTextt   SVNEntriesFileXML(   RÅ   t   fileobjR   t   is_xml(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRj   Ù  s    c         C   s   |  j  ƒ  d g } t | ƒ S(   Ni    (   t   parse_revision_numbersR¹   (   R�   t   all_revs(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR³   à  s    (   R¡   R¢   R�   R¨   RŒ   Rj   R³   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR²   Ë  s   	
RÆ   c           B   sY   e  Z i d  d 6d d 6d d 6Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   i   s   1.4.xi	   s   1.5.xi
   s   1.6.xc         C   s   |  j  S(   N(   t   sections(   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   __get_cached_sectionsì  s    c         C   s³   d } |  j  j | ƒ } g  t t j | ƒ D] } | ^ q+ } yE t | d j d ƒ ƒ } | |  j j ƒ  k r� t	 j
 d | ƒ n  Wn t k
 r– d  SX| |  _ |  j |  _ |  j S(   Ns   
i    s   Unknown subversion verson %d(   R   R]   t   mapt   strRZ   Rk   t   popt   known_svn_versionst   valuesR    R€   R~   RÌ   t(   _SVNEntriesFileText__get_cached_sectionst   get_sections(   R�   t   SECTION_DIVIDERRÌ   Rb   RŠ   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRÔ   ï  s    %	c         C   s   t  |  j ƒ  ƒ S(   N(   t   boolRÔ   (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   is_validþ  s    c         C   s   |  j  ƒ  d d S(   Ni    i   (   RÔ   (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   get_url  s    c         C   sO   d } g  |  j  ƒ  D]2 } t | ƒ | k r | | r t | | ƒ ^ q } | S(   Ni	   (   RÔ   RU   Rk   (   R�   t   revision_line_numbert   sectiont   rev_numbers(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRÊ     s     c         C   s<   d „  } g  |  j  ƒ  D] } | | ƒ r | d ^ q } | S(   Nc         S   s0   |  o/ |  d o/ t  |  ƒ d k  p/ |  d d k S(   Ni    i   i   RC   (   RU   (   t   s(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   <lambda>  s    i    (   RÔ   (   R�   t	   undeletedRÚ   R¬   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR´     s
    	(	   R¡   R¢   RÑ   RÓ   RÔ   R×   RØ   RÊ   R´   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRÆ   å  s   
					
RÇ   c           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   t  S(   N(   Rl   (   R�   (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR×     s    c         C   s(   t  j d ƒ } | j |  j ƒ j d ƒ S(   s   Get repository URLs   url="([^"]+)"i   (   R¥   R¦   t   searchR   R”   (   R�   t   urlre(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRØ     s    c         C   sA   t  j d ƒ } g  | j |  j ƒ D] } t | j d ƒ ƒ ^ q" S(   Ns   committed-rev="(\d+)"i   (   R¥   R¦   t   finditerR   Rk   R”   (   R�   t   revret   m(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRÊ   !  s    c         C   sM   t  j d t  j ƒ } g  | j |  j ƒ D] } t | j d ƒ ƒ ^ q( } | S(   Ns%   name="([^"]+)"(?![^>]+deleted="true")i   (   R¥   R¦   R§   Rá   R   R   R”   (   R�   t   entries_patternR“   t   results(    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyR´   (  s    1(   R¡   R¢   R×   RØ   RÊ   R´   (    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyRÇ     s   			t   __main__i   (2   R*   R¥   R   t	   distutilsR    t   xml.dom.pulldomRE   R\   R0   R3   R?   R   t   setuptools.compatR   t   xml.sax.saxutilsR   R^   t   ImportErrort   urllib.parset   parset
   subprocessR   R
   R   t   _PIPER7   R   R    R$   R(   R.   R:   R<   R   RR   RY   RV   Rt   t   objectRu   Rƒ   R„   R‚   RÄ   R²   RÆ   RÇ   R¡   t   argvt   name(    (    (    sB   /var/www/testScraper/venv/build/setuptools/setuptools/svn_utils.pyt   <module>   sN   									$	t
B3