U ©Î.emã@sjdZddlZddlZddlZdddgZGdd„deƒZdddœd d„Zdd d„Zd d „Z e d krfe ƒdS)z�Implementation of the UUencode and UUdecode functions. encode(in_file, out_file [,name, mode], *, backtick=False) decode(in_file [, out_file, mode, quiet]) éNÚErrorÚencodeÚdecodec@s eZdZdS)rN)Ú__name__Ú __module__Ú __qualname__©rrú/usr/lib64/python3.8/uu.pyr&sF©Úbacktickc Csjg}�zH|dkrtjj}n`t|tƒrz|dkr8tj |¡}|dkrfzt  |¡j }Wnt k rdYnXt |dƒ}|  |¡|dkrŒtjj}nt|tƒrªt |dƒ}|  |¡|dkr¶d}|dkrÂd}| dd¡}| dd ¡}| d |d @|f d ¡¡| d ¡}t|ƒdk�r0| tj||d�¡| d ¡}�q|�rB| d¡n | d¡W5|D]}| ¡�qTXdS)z Uuencode fileú-NÚrbÚwbi¶Ú z\nú z\rz begin %o %s iÿÚasciié-rr s` end s end )ÚcloseÚsysÚstdinÚbufferÚ isinstanceÚstrÚosÚpathÚbasenameÚstatÚst_modeÚAttributeErrorÚopenÚappendÚstdoutÚreplaceÚwriterÚreadÚlenÚbinasciiZb2a_uu)Úin_fileÚout_fileÚnameÚmoder Ú opened_filesÚfÚdatarrr r)sF             c Cspg}|dkrtjj}nt|tƒr4t|dƒ}| |¡�z| ¡}|sLt dƒ‚|  d¡sXq8|  dd¡}t |ƒdkr8|ddkr8zt |d d ƒWqªWq8tk r¦Yq8Xq8|d k�r:|d d ¡ d ¡}tj |¡rât d|›�ƒ‚|  tj¡�s*dtj›�|k�s*tj�r:|  tj¡�s*dtj›�|k�r:t d|›d�ƒ‚|d k�rRt |d d ƒ}|dk�rftjj}n0t|tƒ�r–t|dƒ}t ||¡|}| |¡| ¡} | �rD|  d ¡dk�rDzt | ¡} Wnjtj k �r,} zH| ddd@ddd} t | d | …¡} |�stj d| ¡W5d } ~ XYnX| | ¡| ¡} �qž| �sRt dƒ‚W5|D]}| ¡�qZXd S)zDecode uuencoded filer r z'No valid begin line found in input filesbeginó éérééNs rz Cannot overwrite existing file: z..zRefusing to write to z due to directory traversalrsendé é?ééz Warning: %s zTruncated input file)rrrrrrr rÚreadlinerÚ startswithÚsplitr%ÚintÚ ValueErrorÚrstriprrrÚexistsÚsepÚaltsepr!ÚchmodÚstripr&Za2b_uuÚstderrr#) r'r(r*Úquietr+r,ZhdrZ hdrfieldsÚfpÚsr-ÚvÚnbytesrrr rcsr        ÿþ ýü       "   cCs4ddl}|jdd�}|jddddd d d �|jd d ddd d d �| ¡\}}t|ƒdkrl| d¡t d¡tjj }tj j }t|ƒdkr�|d}t|ƒdkr¤|d}|j rì|j ràt |tƒrÆt|dƒ}nttjddƒt d¡t ||ƒnD|j �r&t |tƒ�r t|dƒ}nttjddƒt d¡t||ƒdS)zuuencode/uudecode main programrNz'usage: %prog [-d] [-t] [input [output]])Zusagez-dz--decoderzDecode (instead of encode)?FÚ store_true)ÚdestÚhelpÚdefaultÚactionz-tz--textÚtextz2data is text, encoded format unix-compatible text?r/zincorrect number of argumentsr1rz: cannot do -t to stdoutr z: cannot do -t from stdin)ÚoptparseZ OptionParserZ add_optionÚ parse_argsr%ÚerrorrÚexitrrr!rrMrrrÚprintÚargvr)rNÚparserZoptionsÚargsÚinputÚoutputrrr Útest­s6              rXÚ__main__)NN)NNF) Ú__doc__r&rrÚ__all__Ú ExceptionrrrrXrrrrr Ús : J&