mò
Ñ« Dc           @   sª  d  Z  d Z d Z y e Wn d< \ Z Z n XyŒ d k Z d k Z d k Z d k Z d k	 Z	 e i
 i e i
 i e	 i e i ƒ  ƒ d d d ƒ ƒ e e e i
 ƒ Z d	 k l Z l Z Wn1 y e i i d
 e ƒ Wn e GHn X‚  n Xe i
 i e i d ƒ d Z e i
 i e ƒ d Z e i d ƒ i e ƒ i ƒ  Z d „  Z d „  Z d „  Z d k l  Z  d k! Z! e i d ƒ Z" e i d ƒ Z# e i d ƒ Z$ d Z% d Z& d Z' d Z( d Z) d Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d  „  Z3 d! „  Z4 d" „  Z5 d# „  Z6 d$ „  Z7 d% „  Z8 d& „  Z9 d' „  Z: d( „  Z; d) „  Z< d* „  Z= d+ „  Z> d, „  Z? d- „  Z@ d. „  ZA d/ „  ZB d0 „  ZC d1 „  ZD d2 „  ZE d3 „  ZF d4 „  ZG eH d5 j oÑ e ZI e i d ZJ e e j oR yD eK eJ ƒ o3 eL d6 eJ d ƒ o e i d ZI e i d7 ZJ n WqGqGXn eK eJ ƒ d8 j  o  d9 eI e eM eJ ƒ ƒ f ZN n d: eI e eJ ƒ f ZN eL eN ƒ p d; GHn d S(=   s£   ASCII text document compression scheme

   a (possibly) new method of compression that leaves documents
   searchable in their compressed state by tokenizing wordss4  
    docpack -- an ASCII text document compression scheme
    Copyright (C) 2005  John Comeau <jc.jcomeau.com>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    s7   Not all needed libraries found, upgrade or check path: i   i    Ni   t   libt   python(   s   gpls	   jclicenses   %s
s   [0-9A-Za-z]+c          G   s   t  S(   N(   t   False(   t   whatever(    (    t   ./docpack.pyt
   DebugPrint3   s    c          G   s´   |  \ } } t | ƒ t i j o t | ƒ } n t t d ƒ o | i	 | ƒ Sn^ d } xP t d t | ƒ ƒ D]9 } | | | } | t | ƒ d j o | | } qo qo W| Sd S(   s   for pythons without str.joint   joint    i    i   N(   t   argst   stringt   arrayt   typet   typest
   StringTypet   evalt   hasattrt   strR   t   joinedt   ranget   lent   index(   R   R   R	   R   R
   (    (    R   R   6   s       c          G   sg   |  \ } } t | ƒ p
 d } n t d d ƒ o | i | ƒ Sn  t i t i	 | ƒ ƒ i | ƒ Sd S(   s   for pythons without str.splitR   t   splitN(
   R   R	   t   string_to_splitR   t   NoneR   R   t   ret   compilet   escape(   R   R	   R   (    (    R   R   D   s      
(   s	   countdicts   \d+.s   (\d+)(.)s
   tokens.txts   ptokens.txtt   datat   pdatau   ð€€u    c          G   s¬   d |  d } } | | i ƒ  j o d Sn} | | i ƒ  j o d Snb d } xM t t | ƒ ƒ D]9 } | | | | i ƒ  j o | t | ƒ d } q` q` W| d d !Sd S(   sŠ   codify the capitalization scheme of an array of words

    a word longer than 36 characters with uneven capitalization
    will break thisR   i    t   Ct   ct   ;iÿÿÿÿN(	   R   t   capdatat   wordt   uppert   lowerR   R   R   R   (   R   R   R!   R    (    (    R   t   capitalization[   s      c          G   sÃ   |  \ } } | d j o | i ƒ  Sn™ | d j o | Sn„ | d d j or t d | ƒ } t t t d | d ƒ ƒ } x3 | D]+ } y | | i ƒ  | | <Wq ‚  q Xq Wd i | ƒ Sn d S(   s   return the capitalized tokenR   R   i    R   R   i   N(   R   t   tokenR$   R"   t   mapR   t   letterst   intR   R    R   R   (   R   R'   R$   R    R   R%   (    (    R   t
   capitalizel   s         c             s»   |  \ } ‰  t | ƒ t i j o t | d ƒ } n t ˆ  ƒ t i j o! ˆ  d d j o t ˆ  ƒ ‰  n ˆ  i ƒ  } | i
 ‡  d †  ƒ x | D] } | i d | ƒ q’ W| i ƒ  d S(   sA   write out keys of countdict starting from highest-frequency tokent   wbi    t   {c            s   t  ˆ  | ˆ  |  ƒ S(   N(   t   cmpt	   tokendictt   bt   a(   R/   R.   (   R-   (    R   t   <lambda>…   s    s   %s
N(   R   t
   filehandleR-   R   R   R   t   openR   t   keyst	   tokenlistt   sortR%   t   writet   close(   R   R-   R%   R4   R1   (    (   R-   R   t	   writekeys}   s     ' c          G   sQ  t  |  ƒ d j o( t |  d ƒ t i j o |  d }  n |  } t ƒ  t ƒ  } } xð | D]è } t
 d | ƒ xÒ t | ƒ i ƒ  D]¾ }	 t i |	 ƒ } t i |	 ƒ } xu t t  | ƒ ƒ D]a } | | | | }
 } t | ƒ t |
 ƒ } | |
 i ƒ  d | |
 i ƒ  <| | d | | <q¸ Wt | d ƒ } | | d | | <q Wq[ W| | f S(   Ni   i    s   extracting tokens fromiÿÿÿÿ(   R   R   R   R   R   t   filelistt	   countdictt   tokenst   ptokenst   filenameR   R2   t	   readlinest   linet   TOKENPATTERNt   findallt   wordsR   t   punctuationR   R   R!   t   punctt   punctuation_tokenR$   t   pwordR#   (   R   RF   R   RC   R=   R<   R;   RD   RB   R?   R!   R9   (    (    R   t   extract_tokensŠ   s(    -    c          G   sø   |  d } t | ƒ d j o d SnÐ t | ƒ d j o t | ƒ Sn¯ d \ } } } d } x’ t d | ƒ d g D]z } | | j o] | d j o? | d j o | t | ƒ } qÑ | t
 | ƒ t | ƒ } n | d } } qr | d } qr W| Sd S(   s5   codify the punctuation according to a standard schemei    t   Ni   R   N(   R   R   i    (   R   t   ptokenR   t   eolcodet	   newptokent   currentt   countR&   R   t   charR   (   R   RM   RI   RN   RL   RK   (    (    R   RE      s$     
  c          G   sy   |  d d } } xa t d t | ƒ ƒ D]J } | | t i j o" | t t	 | | ƒ d ƒ } q' | | | } q' W| S(   s!   codify any end-of-line charactersi    R   i`   N(
   R   R%   t   newtokenR   R   R   t   ost   linesept   chrt   ord(   R   R   RO   R%   (    (    R   RJ   ±   s      "c          G   sš   t  d „  t i ƒ } t  d t i ƒ } |  d d } } x[ t	 d t
 | ƒ ƒ D]D } | | | j o | | | i | | ƒ } qN | | | } qN W| S(   s7   convert coded EOL characters back to their escape codesc         C   s   t  t |  ƒ d ƒ S(   Ni`   (   RR   RS   R   (   R   (    (    R   R0   ½   s    i    R   N(   R&   RP   RQ   t   codedR   t   decodedR   R%   RO   R   R   R   (   R   RU   R   RO   R%   RT   (    (    R   t	   eoldecode»   s      c          G   s‰  |  \ } } }	 } t | ƒ oU y |	 t | ƒ t t ƒ } Wqz t
 i i d t | ƒ t | ƒ f ƒ ‚  qz Xn d } | t | ƒ t t ƒ } t i d ƒ } | i | ƒ } | o# | d | i ƒ  !} | i ƒ  } n d } | i d d ƒ } t i | ƒ }
 t i | ƒ } d } xI t d t | ƒ ƒ D]2 } | |
 | t  | | d ƒ | | d 7} q.W| |
 d 7} t! | ƒ t" | | ƒ S(   Ns   No such char %s (%d)
R   s   [Cc][0-9;]*$i    RH   i   iÿÿÿÿ(#   R   RN   t   pcharR;   R<   R   t   safe_ordRS   t   BASECHARR%   t   syst   stderrR6   t   reprRC   R   R   t   capspatternt   searcht   matcht   startt   groupR$   t   replacet   PACKPATTERNR   t	   nonpackedt   UNPACKPATTERNRA   t   packedR   R   R(   RV   R)   (   R   RN   Rf   R   R]   RC   R_   R<   R$   R;   Rd   RW   R%   (    (    R   t
   detokenizeÇ   s0    & 0c          G   s¼   |  d } t i i | t ƒ } t i i | t ƒ } t	 d | | f ƒ yC t
 t i t | ƒ i ƒ  ƒ } t
 d „  t | d ƒ i ƒ  ƒ } Wn$ t i i d | | f ƒ ‚  n X| | f S(   Ni    s   loading tokenfiles %s and %sc         C   s   |  d  S(   Niÿÿÿÿ(   t   s(   Rh   (    (    R   R0   ê   s    t   rbs&   Problem loading tokens from %s and %s
(   R   t   destdirRP   t   pathR   t	   TOKENFILEt	   tokenfilet
   PTOKENFILEt
   ptokenfileR   R&   R   t   stripR2   R>   R;   R<   RZ   R[   R6   (   R   R;   R<   Rm   Rj   Ro   (    (    R   t   load_tokensã   s    
%c          G   sÕ   t  |  ƒ d j  o( t i i t i d ƒ t i d ƒ n— |  d |  d } } t
 | ƒ \ } } t i i | t ƒ } t i | ƒ xJ t | | ƒ D]9 } t d | ƒ t | | | | ƒ } t i i | ƒ q” Wd S(   sÇ   docpack version of unix 'cat' utility

    Usage: dpcat TOKENDIR FILEPATH [FILEPATH...]
    first arg must be the location of the token files, all following
    args are the filenames to be displayedi   s   
i   i    s   displaying path %sN(   R   R   RZ   R[   R6   t   dpcatt   __doc__t   exitt   srcdirR9   Rq   R;   R<   RP   Rk   R   t   DATAt   datadirt   chdirt   relpathR   t   docunpack_filet   linest   stdoutt
   writelines(   R   R;   R<   R{   R9   Rw   Rk   Ru   (    (    R   Rr   ñ   s      c    	         sP  t  |  ƒ d j  o( t i i t i d ƒ t i d ƒ n|  d } t	 | ƒ \ } } t i i | t d ƒ } t i | ƒ |  d ‰ t | ˆ ƒ ‰  x´ |  d D]¨ ‰ ˆ i | ƒ o ˆ i | ƒ d ‰ n t d „  t ˆ ƒ i ƒ  ƒ } t ‡  d †  | ƒ oG t | ˆ | | ƒ } t i i t ‡ d	 †  t ‡ d
 †  | ƒ ƒ ƒ q  q  Wd S(   s  docpack version (very limited) of unix 'grep' utility

    Usage: dpgrep TOKENDIR PATTERN FILEPATH [FILEPATH...]
    first arg must be the location of the token files,
    second must be a word (token) for which to search (case-insensitive),
    and at least one file must be specifiedi   s   
i   i    R   i   c         C   s   |  i d ƒ S(   Ns   utf-8(   Rh   t   decode(   Rh   (    (    R   R0     s    c            s
   ˆ  |  j S(   N(   t
   searchcharRh   (   Rh   (   R   (    R   R0     s    c            s   d ˆ  |  f S(   Ns   %s: %s(   Rk   Rh   (   Rh   (   Rk   (    R   R0     s    c            s   ˆ  |  i ƒ  j S(   N(   t   searchtokenRh   R#   (   Rh   (   R€   (    R   R0     s    N(   R   R   RZ   R[   R6   t   dpgrepRs   Rt   Ru   Rq   R;   R<   RP   Rk   R   Rv   t   stripdirRx   R€   t   compress_tokenR   t
   startswithR   R&   R2   R>   R{   t   filterRz   R|   R}   (	   R   R;   R<   R{   R‚   R   Rk   R€   Ru   (    (   R   Rk   R€   R   R     s&     

  c          G   sU   |  \ } } | o! t i i | ƒ t i | ƒ n t i i | ƒ t i d ƒ d  S(   Ni    (   R   t
   errorlevelt   textRZ   R[   R6   Rt   R|   (   R   R‡   R†   (    (    R   t   usage  s    c          G   s  t  |  ƒ d j of t |  d ƒ t i j oL y+ |  d d |  d d |  d d f }  Wq‚  t d t i ƒ qXn“ t  |  ƒ d j o= y |  d |  d |  d f }  Wqt d t i ƒ qXnC t  |  ƒ d j o/ t |  d ƒ t i j o |  d g |  d <n y |  \ } } }
 Wn t d t i ƒ n Xt |
 ƒ t i j o |
 g }
 n t | |
 ƒ }
 t | ƒ \ } } xœ |
 D]” } t | | ƒ \ }	 } |	 or t | ƒ \ } } xE t d t  | ƒ ƒ D]. } t | | | |	 ƒ t | | | | ƒ qÍW|	 i ƒ  | i ƒ  qƒqƒWd S(   su   pack ASCII text files into docpack format

    Usage: docpack_files SOURCE_DIRECTORY DESTINATION_DIRECTORY FILE [...]i   i    i   i   N(   R   R   R   R   t   ListTypeRˆ   t   docpack_filesRs   R   Ru   Rj   R9   Ry   Rq   R;   R<   R=   t   prepare_outputt   datafilet	   pdatafilet   docpack_filet
   tokenlinest   ptokenlinesR   R   t   writecompressedR7   (   R   Rj   R   R=   Ru   R<   R   R;   R   RŒ   R9   R   (    (    R   RŠ   '  s>     - +   -      c    
      G   s  |  d |  d |  d } } } y |  d |  d } } Wn5 t | ƒ \ } } t i t i	 i
 | t ƒ ƒ n Xt | ƒ t i j o | g } n xx | D]p } t | | | | ƒ } t i	 i
 | | ƒ }	 t t i	 i |	 ƒ d ƒ t |	 d ƒ } | i | ƒ | i ƒ  q› Wd  S(   Ni    i   i   i   i   R*   (   R   Ru   Rj   R9   R;   R<   Rq   RP   Rx   Rk   R   Rv   R   R   R   R=   Rz   R{   t   textfilet   mkdirsR   R2   t   outputR}   R7   (
   R   R<   R”   R{   R9   R=   R;   Rj   Ru   R’   (    (    R   t   docunpack_filesA  s         c          G   s    |  d } | g } xG t t i i | d ƒ d ƒ o% | i t i i | d ƒ d ƒ q W| i ƒ  x2 | D]* } t i i	 | ƒ p t i
 | ƒ qn qn Wd  S(   Ni    iÿÿÿÿi   (   R   Rk   t   dirsR   RP   R   t   appendt   reverset   dirt   existst   mkdir(   R   R–   Rk   R™   (    (    R   R“   R  s    
	 !&
  c          G   s  |  d }
 t d |
 ƒ g  g  } } xä t |
 ƒ i ƒ  D]Ð }	 t i	 |	 ƒ } t i |	 ƒ } g  g  } } xe t t | ƒ ƒ D]Q } | | | | } } t | ƒ t | ƒ } | i | i ƒ  ƒ | i | ƒ q{ Wt | d ƒ } | i | ƒ | i | ƒ | i | ƒ q7 W| | f S(   Ni    s   compressing fileiÿÿÿÿ(   R   R=   R   R   R   R2   R>   R?   R@   RA   RB   R   RC   t	   tokenlinet
   ptokenlineR   R   R   R!   RD   RE   R$   RF   R—   R#   (   R   R   RC   Rœ   R   RD   RB   R   R!   R?   R=   R   RF   (    (    R   RŽ   [  s&    
  c          G   sŽ  |  d |  d } } t i i | t ƒ } t i i | t ƒ } t
 d | ƒ y |  d |  d }
 } Wn@ t | ƒ \ }
 } t
 d | ƒ t i t i i | ƒ ƒ n Xt i i | | ƒ } t d „  t | ƒ i ƒ  ƒ } t d „  t | ƒ i ƒ  ƒ }	 g  } x‡ t d t | ƒ ƒ D]p } d	 } xT t d  t | | ƒ d	 g t |	 | ƒ ƒ D]% \ } } | t | | |
 | ƒ } qPW| | g 7} qW| S(
   Ni    i   s   unpacking document %si   i   s   changing directory to %sc         C   s   |  d  i d ƒ S(   Niÿÿÿÿs   utf-8(   Rh   R~   (   Rh   (    (    R   R0   |  s    c         C   s   |  d  i d ƒ S(   Niÿÿÿÿs   utf-8(   Rh   R~   (   Rh   (    (    R   R0   ~  s    R   (   R   Ru   R=   RP   Rk   R   t   PDATAt   pdatadirRv   Rw   R   R;   R<   Rq   Rx   t	   pfilenameR&   R2   R>   R   R   R{   R   R   R   R?   R   t   unicode_arrayRN   RW   Rg   (   R   R   R=   Rw   R    Ru   R<   RW   RŸ   R   R;   R?   R   RN   R{   (    (    R   Rz   p  s2    		  c          G   sc  |  d } t t ƒ d j o t d  | ƒ Sn2| i d ƒ } d g  } } x| t | ƒ j  oú t
 | | ƒ d j o/ | i | | | d !i d ƒ ƒ | d 7} qM t
 | | ƒ d j o/ | i | | | d !i d ƒ ƒ | d 7} qM t
 | | ƒ d j o/ | i | | | d	 !i d ƒ ƒ | d	 7} qM | i | | i d ƒ ƒ | d 7} qM W| Sd  S(
   Ni    i   s   utf-8ið   i   ià   i   i€   i   (   R   R	   R   t   UNICODE_TESTR&   R   t   encodet   bytesR   R
   RS   R—   R~   (   R   R	   R   R¤   R
   (    (    R   R¡   ‰  s&    
 !!!c          G   sÃ   |  \ } } t i i t i i | t | ƒ ƒ } t i i t i i | t	 | ƒ ƒ } t t i i | ƒ d ƒ t t i i | ƒ d ƒ t i i | ƒ o d Sn t | d ƒ t | d ƒ f Sd S(   sC   put together pathname of output and create directories if necessaryi    R*   N(   NN(   R   Rj   R=   RP   Rk   t   abspathR   Rv   RŒ   Rž   R   R“   R   Rš   R   R2   (   R   RŒ   Rj   R=   R   (    (    R   R‹   ¡  s     $$ c          G   se   t  |  d ƒ } | d j o | d 7} n y t | ƒ } Wn# t j
 o t d | ƒ } n X| S(   Ni    i Ø  i   s	   u'\U%08x'(   R(   R   t	   charvaluet   unichrRN   t
   ValueErrorR   (   R   RN   R¦   (    (    R   t   safe_unichr«  s     c          G   sÑ   |  d } t | ƒ d j o t | ƒ } n† t | i d ƒ ƒ d j o t d t | ƒ ‚ nS t t | i d ƒ ƒ \ } } } } | d @d >| d @d	 >B| d @d
 >B| d @B} | d j o | d } n | S(   Ni    i   s   utf-8i   s%   cannot convert unicode character "%s"i   i   i?   i   i   i Ø  i   (   R   RN   R   RS   R   R£   R¨   R\   R&   t   b1t   b2t   b3t   b4(   R   R   R­   RN   Rª   R«   R¬   (    (    R   RX   ¶  s    
$. c          G   sv   |  \ } } } d } x@ | D]8 } y | t | | ƒ } Wq t d | ƒ ‚  q Xq W| i d | i	 d ƒ ƒ d  S(   Nu    s   token "%s" not in tokenlists   %s
s   utf-8(
   R   R?   R4   t   outfilet   outlineR%   Rƒ   R   R6   R£   (   R   R¯   R%   R®   R4   R?   (    (    R   R‘   Å  s     c          G   s)   |  \ } } t | i | ƒ t t ƒ ƒ S(   N(   R   R4   R%   R©   R   RS   RY   (   R   R%   R4   (    (    R   Rƒ   Ó  s    c          G   sˆ   y |  d } Wn( t i i d t ƒ t i d ƒ n Xy t i i	 |  d ƒ } Wn( t i i	 t i i | d ƒ ƒ } n X| | f S(   Ni    s3   Usage: %s SOURCE_DIRECTORY [DESTINATION_DIRECTORY]
i   s   .docpack(   R   t   srcRZ   R[   R6   t   commandRt   RP   Rk   R¥   t   destR   (   R   R°   R²   (    (    R   t   packinit×  s    %c          G   s}   y |  d } Wn( t i i d t ƒ t i d ƒ n Xy t i i	 |  d ƒ } Wn t i i | ƒ d } n X| | f S(   Ni    s3   Usage: %s SOURCE_DIRECTORY [DESTINATION_DIRECTORY]
i   (   R   R°   RZ   R[   R6   R±   Rt   RP   Rk   R¥   R²   R   (   R   R°   R²   (    (    R   t
   unpackinitä  s    c             sÄ   t  |  ƒ d j o* t |  d ƒ t i j o |  \ ‰  } n |  d |  d ‰  } t i i	 ˆ  ƒ ‰  t
 t i i	 | ƒ } t i i ˆ  ƒ } t i i | d | d d ƒ ‰  t
 ‡  d †  | ƒ } | S(   s5   trim off front of path so we don't overwrite sources!i   i   i    R   c            s   |  i ˆ  ƒ d S(   Ni   (   Rk   R   t   srcpath(   Rk   (   Rµ   (    R   R0   û  s    N(   R   R   R   R   R   Rµ   R9   RP   Rk   R¥   R&   R   t   srcarrayR   (   R   R¶   R9   Rµ   (    (   Rµ   R   Ry   ñ  s     - c          G   s  t  |  Œ  \ } } t i i d | ƒ t i | ƒ g  t	 } } t i i d t | ƒ y t i | ƒ Wn„ t i i t i i | t ƒ ƒ p[ t | ƒ \ } } t t i i | t ƒ | ƒ t t i i | t ƒ | ƒ h  h  } } qî n Xt | | | ƒ d S(   s-   pack entire source tree into destination trees   Writing compressed files to %s
t   .N(   R³   R   R°   R²   RZ   R[   R6   RP   Rx   R   R9   t   tokenfiles_existRk   t   walkt   getfilesR›   Rš   R   Rn   RG   R;   R<   R8   Rl   RŠ   (   R   R;   R°   R<   R²   R¸   R9   (    (    R   t   docpackþ  s     "c          G   s²   t  |  Œ  \ } } t i t i i | t ƒ ƒ g  } t i i
 d t | ƒ y t i | ƒ Wn( t i i d | ƒ t i d ƒ n Xt | ƒ \ } } t | | | | | ƒ d  S(   NR·   s:   Destination path %s already exists, try another or delete
i   (   R´   R   R°   R²   RP   Rx   Rk   R   Rv   R9   R¹   Rº   R›   RZ   R[   R6   Rt   Rq   R;   R<   R•   (   R   R;   R°   R<   R²   R9   (    (    R   t	   docunpack  s    c          G   s]   |  \ } } } xG | D]? } t i i | | ƒ } t i i | ƒ p | i	 | ƒ q q Wd  S(   N(
   R   R9   t   dirnamet   fnamest   fnameRP   Rk   R   t   isdirR—   (   R   R¾   R9   R¿   Rk   R½   (    (    R   Rº     s     t   __main__s   type(%s) == types.FunctionTypei   i   s   %s%ss   %s(%s)R   (   i   i    (O   Rs   t	   Copyrightt   errormessaget   TrueR   RZ   RP   R   R   t   pwdRk   R—   R   t   getpwuidt   geteuidR\   t   com.jcomeaut   gplt	   jclicenseR[   R6   R   t   argvt   selft   splitextR±   R   R^   Ra   t   originalselfR   t   com.jcomeau.arcaneR:   t   structR@   Rc   Re   Rl   Rn   Rv   Rž   R¢   RY   R$   R)   R8   RG   RE   RJ   RV   Rg   Rq   Rr   R   Rˆ   RŠ   R•   R“   RŽ   Rz   R¡   R‹   R©   RX   R‘   Rƒ   R³   R´   Ry   R»   R¼   Rº   t   __name__t   functionR   R   R   t   tuplet   action(<   RÒ   R‘   RV   RÂ   R8   Rž   R   Rƒ   R´   R•   Rv   RÉ   Rº   RÐ   Rl   R)   RÌ   R³   R   Rg   R   Rˆ   RÄ   Rr   RE   RŠ   RJ   R$   RÎ   Re   R   R:   R“   RZ   RÅ   Rc   R¡   R   R   R¢   Ry   R   R¼   R   RŽ   RX   R»   RÃ   R‹   R@   RG   RÊ   R±   Rq   RY   RÔ   Rn   RP   R©   Rz   (    (    R   t   ?   s–   -5				
							
															
										""  