PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lY@sdZddddddddd d d d d dddgZdZddlZddlZddlZddZyddlmZmZWn*e k rddZddZYnXeZ Gdd d e Z Gdd d e Z Gddde ZGddde ZGddde ZGd d!d!eZGd"d d ZGd#d d eZGd$d d eZd%d&Zd'd(Zd)ee d*fd+ee d*fd,ee d-fd.ee d.fiZd/d0Zd1d2Zd3d4fZGd5ddZd6d7Zd6d8ZGd9ddZ Gd:ddZ!Gd;dde!Z"Gd<dde!Z#d=d>Z$eZ%dS)?z1.5.3Option make_option SUPPRESS_HELPSUPPRESS_USAGEValuesOptionContainer OptionGroup OptionParser HelpFormatterIndentedHelpFormatterTitledHelpFormatter OptParseError OptionErrorOptionConflictErrorOptionValueErrorBadOptionErrora" Copyright (c) 2001-2006 Gregory P. Ward. All rights reserved. Copyright (c) 2002-2006 Python Software Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NcCsd|jjt||fS)Nz<%s at 0x%x: %s>) __class____name__id)selfr'/opt/python35/lib/python3.5/optparse.py_reprNsr)gettextngettextcCs|S)Nr)messagerrrr[srcCs|dkr|S|S)Nr)Zsingularpluralnrrrr^s rc@s(eZdZddZddZdS)r cCs ||_dS)N)msg)rrrrr__init__gszOptParseError.__init__cCs|jS)N)r)rrrr__str__jszOptParseError.__str__N)r __module__ __qualname__r r!rrrrr fs  c@s(eZdZddZddZdS)r cCs||_t||_dS)N)rstr option_id)rroptionrrrr ts zOptionError.__init__cCs(|jrd|j|jfS|jSdS)Nz option %s: %s)r%r)rrrrr!xs zOptionError.__str__N)rr"r#r r!rrrrr ns  c@seZdZdS)rN)rr"r#rrrrr~s c@seZdZdS)rN)rr"r#rrrrrs c@s(eZdZddZddZdS)rcCs ||_dS)N)opt_str)rr'rrrr szBadOptionError.__init__cCstd|jS)Nzno such option: %s)_r')rrrrr!szBadOptionError.__str__N)rr"r#r r!rrrrrs  c@s(eZdZddZddZdS)AmbiguousOptionErrorcCstj||||_dS)N)rr possibilities)rr'r*rrrr szAmbiguousOptionError.__init__cCs#td|jdj|jfS)Nzambiguous option: %s (%s?)z, )r(r'joinr*)rrrrr!s zAmbiguousOptionError.__str__N)rr"r#r r!rrrrr)s  r)c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd S)!r ZnonecCsd|_||_|dkr`yttjd}Wnttfk rUd}YnX|d8}||_t|t |d|d|_ |_ d|_ d|_ d|_||_d|_i|_d|_d|_dS) NCOLUMNSPrz%defaultz%s %sz%s=%s)parserindent_incrementintosenvironKeyError ValueErrorwidthminmax help_positionmax_help_positioncurrent_indentlevel help_width short_first default_tagoption_strings_short_opt_fmt _long_opt_fmt)rr1r;r7r?rrrr s$      *       zHelpFormatter.__init__cCs ||_dS)N)r0)rr0rrr set_parserszHelpFormatter.set_parsercCs1|dkrtd|d|d|_dS)N z/invalid metavar delimiter for short options: %rz%s)rErF)r6rB)rdelimrrrset_short_opt_delimiters  z%HelpFormatter.set_short_opt_delimitercCs1|dkrtd|d|d|_dS)N=rFz.invalid metavar delimiter for long options: %rz%s)rIrF)r6rC)rrGrrrset_long_opt_delimiters  z$HelpFormatter.set_long_opt_delimitercCs%|j|j7_|jd7_dS)Nr)r<r1r=)rrrrindentszHelpFormatter.indentcCs%|j|j8_|jd8_dS)Nr)r<r1r=)rrrrdedentszHelpFormatter.dedentcCstddS)Nzsubclasses must implement)NotImplementedError)rusagerrr format_usageszHelpFormatter.format_usagecCstddS)Nzsubclasses must implement)rM)rheadingrrrformat_headingszHelpFormatter.format_headingcCsBt|j|jd}d|j}tj||d|d|S)N rFinitial_indentsubsequent_indent)r9r7r<textwrapfill)rtext text_widthrKrrr _format_texts   zHelpFormatter._format_textcCs|r|j|dSdSdS)N rE)rY)r descriptionrrrformat_descriptionsz HelpFormatter.format_descriptioncCs#|rd|j|dSdSdS)NrZrE)rY)repilogrrr format_epilogszHelpFormatter.format_epilogcCsu|jdks|j r |jS|jjj|j}|tksP|dkrY|j}|jj|jt |S)N) r0r@helpdefaultsgetdest NO_DEFAULTNO_DEFAULT_VALUEreplacer$)rr&Z default_valuerrrexpand_defaults  zHelpFormatter.expand_defaultcs)g}j|}jjd}t||kr[djd|f}j}ndjd||f}d}|j||jrj|}tj|j }|jd|d|df|j fdd|ddDn|d d kr|jd dj |S) Nr.z%*s%s rEz %*s%-*s rcs&g|]}djd|fqS)z%*s%s rE)r:).0line)rrr Ds z/HelpFormatter.format_option..rrZ) rAr:r<lenappendr_rfrUwrapr>extendr+)rr&resultoptsZ opt_width indent_first help_text help_linesr)rr format_option's$     zHelpFormatter.format_optioncCs|jd}xI|jD]>}|j|}||j|}|j|}||j|)rr0Zmax_lenoptstringsgrouprrrstore_option_stringsJs      $  z"HelpFormatter.store_option_stringscs|jre|jp!|jjfdd|jD}fdd|jD}n|j}|j}jr||}n ||}dj|S)Ncs#g|]}j|fqSr)rB)rgZsopt)metavarrrrri`s z7HelpFormatter.format_option_strings..cs#g|]}j|fqSr)rC)rgZlopt)r|rrrribs z, ) takes_valuer|rbupper _short_opts _long_optsr?r+)rr&Z short_optsZ long_optsrpr)r|rrrv\s       z#HelpFormatter.format_option_stringsN)rr"r#rdr rDrHrJrKrLrOrQrYr\r^rfrtr{rvrrrrr s +           # c@s@eZdZddddddZddZd d ZdS) r r.NrcCstj|||||dS)N)r r )rr1r;r7r?rrrr sszIndentedHelpFormatter.__init__cCstd|S)Nz Usage: %s )r()rrNrrrrO{sz"IndentedHelpFormatter.format_usagecCsd|jd|fS)Nz%*s%s: rE)r<)rrPrrrrQ~sz$IndentedHelpFormatter.format_heading)rr"r#r rOrQrrrrr os  c@s@eZdZddddddZddZdd ZdS) r rrNcCstj|||||dS)N)r r )rr1r;r7r?rrrr szTitledHelpFormatter.__init__cCsd|jtd|fS)Nz%s %s ZUsage)rQr()rrNrrrrOsz TitledHelpFormatter.format_usagecCsd|d|jt|fS)Nz%s %s z=-)r=rk)rrPrrrrQsz"TitledHelpFormatter.format_heading)rr"r#r rOrQrrrrr s  cCs|ddjdkr%d}n`|ddjdkr`d}|ddpZd}n%|dddkrd}nd}|||S) Nr.0xZ0b0r )lower)valtyperadixrrr _parse_nums  rcCs t|tS)N)rr2)rrrr _parse_intsrr2Zintegerlongfloatzfloating-pointcomplexc CsYt|j\}}y||SWn1tk rTttd|||fYnXdS)Nzoption %s: invalid %s value: %r) _builtin_cvtrr6rr()r&rxvalueZcvtZwhatrrr check_builtins  rcCsQ||jkr|Sdjtt|j}ttd|||fdS)Nz, z.option %s: invalid choice: %r (choose from %s))choicesr+mapreprrr()r&rxrrrrr check_choices  rZNOZDEFAULTc @seZdZddddddddd d d d g Zd@ZdAZdBZdCZdDZdEZ de de de de de iZ dZ ddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1ZeeeeeeegZ d2d3ZeZd4d5Zd6d7Zd8d9Zd:d;Zd<d=Z d>d?Z!dS)Fractionrrbdefaultnargsconstrcallback callback_argscallback_kwargsr_r|store store_const store_true store_falserl append_constcountversionstringr2rrrchoiceNcOs]g|_g|_|j|}|j||j|x|jD]}||qEWdS)N)rr_check_opt_strings_set_opt_strings _set_attrs CHECK_METHODS)rrpattrscheckerrrrr 3s    zOption.__init__cCs)dd|D}|s%td|S)NcSsg|]}|r|qSrr)rgrxrrrriJs z-Option._check_opt_strings..z+at least one option string must be supplied) TypeError)rrprrrrFs zOption._check_opt_stringscCsx|D]}t|dkr5td||qt|dkr|ddkod|ddksztd|||jj|q|dddko|ddkstd|||jj|qWdS) Nr.z>invalid option string %r: must be at least two characters longr-rzMinvalid short option string %r: must be of the form -x, (x any non-dash char)z--zGinvalid long option string %r: must start with --, followed by non-dash)rkr rrlr)rrprxrrrrOs$   & zOption._set_opt_stringscCsxj|jD]_}||kr:t||||||=q |dkrYt||tq t||dq W|rt|j}tddj||dS)Nrzinvalid keyword arguments: %sz, )ATTRSsetattrrcsortedkeysr r+)rrattrrrrrds   zOption._set_attrscCsG|jdkrd|_n(|j|jkrCtd|j|dS)Nrzinvalid action: %r)rACTIONSr )rrrr _check_actionws zOption._check_actioncCs|jdkrH|j|jkr|jdk r<d|_qd|_nt|jtri|jj|_|jdkrd|_|j|jkrtd|j||j|jkrtd|j|dS)Nrrr$zinvalid option type: %rz$must not supply a type for action %r) rrALWAYS_TYPED_ACTIONSr isinstancerTYPESr TYPED_ACTIONS)rrrr _check_type}s   zOption._check_typecCs|jdkrz|jdkr0td|qt|jttfstdtt|jjdd|n%|jdk rtd|j|dS)Nrz/must supply a list of choices for type 'choice'z1choices must be a list of strings ('%s' supplied)'rz#must not supply choices for type %r)rrr rtuplelistr$split)rrrr _check_choices,zOption._check_choicecCs|j|jkp|jdk }|jdkr||r||jrh|jdddjdd|_n|jdd|_dS)Nrr.rr(r)r STORE_ACTIONSrrbrrer)rr}rrr _check_dests  )zOption._check_destcCs;|j|jkr7|jdk r7td|j|dS)Nz*'const' must not be supplied for action %r)r CONST_ACTIONSrr )rrrr _check_consts! zOption._check_constcCsV|j|jkr-|jdkrRd|_n%|jdk rRtd|j|dS)Nrz*'nargs' must not be supplied for action %r)rrrr )rrrr _check_nargss  zOption._check_nargscCs |jdkrt|js4td|j||jdk rlt|jt rltd|j||jdk rt|jt rtd|j|na|jdk rtd|j||jdk rtd||jdk rtd|dS)Nrzcallback not callable: %rz3callback_args, if supplied, must be a tuple: not %rz4callback_kwargs, if supplied, must be a dict: not %rz.callback supplied (%r) for non-callback optionz.callback_args supplied for non-callback optionz0callback_kwargs supplied for non-callback option) rcallablerr rrrrdict)rrrr_check_callbacks0 zOption._check_callbackcCsdj|j|jS)N/)r+rr)rrrrr!szOption.__str__cCs |jdk S)N)r)rrrrr}szOption.takes_valuecCs#|jr|jdS|jdSdS)Nr)rr)rrrrget_opt_strings  zOption.get_opt_stringcCs9|jj|j}|dkr%|S||||SdS)N) TYPE_CHECKERrar)rrxrrrrr check_values zOption.check_valuecsO|dk rKjdkr+j|Stfdd|DSdS)Nrcs"g|]}j|qSr)r)rgv)rxrrrris z(Option.convert_value..)rrr)rrxrr)rxrr convert_values zOption.convert_valuecCs4|j||}|j|j|j||||S)N)r take_actionrrb)rrxrvaluesr0rrrprocessszOption.processc Cs|dkrt|||n|dkrAt|||jnb|dkr`t||dnC|dkrt||dn$|dkr|j|gj|n|dkr|j|gj|jn|d krt|||j|d d n|d krJ|jpf}|jp(i}|j||||||nY|d krm|j|jn6|dkr|j |jnt d|j d S)NrrrTrFrlrrrrrr_rzunknown action %r) rr ensure_valuerlrrr print_helpexit print_versionr6r) rrrbrxrrr0argskwargsrrrrs4       #       zOption.take_action) rrrrrlrrrr_r)rrrrrlrr)rrlr)rrl)rr)rr2rrrr)"rr"r#rrrrrrrrrrrr rrrrrrrrrrr!r__repr__r}rrrrrrrrrrs                 SUPPRESSZHELPZUSAGEc@seZdZdddZddZeZddZdd Zd d Z d d Z dddZ dddZ ddZ dS)rNcCs7|r3x*|jD]\}}t|||qWdS)N)itemsr)rr`rrrrrr 8szValues.__init__cCs t|jS)N)r$__dict__)rrrrr!=szValues.__str__cCsCt|tr|j|jkSt|tr;|j|kStSdS)N)rrrrNotImplemented)rotherrrr__eq__Bs  z Values.__eq__cCsMxFt|D]8}||kr ||}|dk r t|||q WdS)N)dirr)rrrZdvalrrr_update_carefulJs    zValues._update_carefulcCs|jj|dS)N)rupdate)rrrrr _update_looseWszValues._update_loosecCsL|dkr|j|n,|dkr8|j|ntd|dS)NcarefulZloosezinvalid update mode: %r)rrr6)rrmoderrr_update_s   zValues._updatercCs1t|tj|}|jt||dS)N) __import__sysmodulesrvars)rmodnamermodrrr read_modulegs  zValues.read_modulecCs3i}tt|j||j||dS)N)execopenreadr)rfilenamerrrrr read_filelszValues.read_filecCsBt|| s%t||dkr5t|||t||S)N)hasattrgetattrr)rrrrrrrqs%zValues.ensure_value)rr"r#r r!rrrrrrrrrrrrrr6s     c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"rcCs1|j||_|j||j|dS)N)_create_option_list option_classset_conflict_handlerset_description)rrconflict_handlerr[rrrr s   zOptionContainer.__init__cCsi|_i|_i|_dS)N) _short_opt _long_optr`)rrrr_create_option_mappingss  z'OptionContainer._create_option_mappingscCs(|j|_|j|_|j|_dS)N)rrr`)rr0rrr_share_option_mappingss  z&OptionContainer._share_option_mappingscCs)|dkrtd|||_dS)Nerrorresolvez$invalid conflict_resolution value %r)rr)r6r)rhandlerrrrrs z$OptionContainer.set_conflict_handlercCs ||_dS)N)r[)rr[rrrrszOptionContainer.set_descriptioncCs|jS)N)r[)rrrrget_descriptionszOptionContainer.get_descriptioncCs|`|`|`dS)N)rrr`)rrrrdestroyszOptionContainer.destroycCsYg}x:|jD]/}||jkr|j||j|fqWx:|jD]/}||jkrM|j||j|fqMW|rU|j}|dkrtddjdd|D|n|dkrUx|D]w\}}|jdr|jj ||j|=n|jj ||j|=|jp;|js|j j j |qWdS)Nrz conflicting option string(s): %sz, cSsg|]}|dqS)rr)rgcorrrris z3OptionContainer._check_conflict..rz--) rrrlrrrrr+ startswithremove containerru)rr&Z conflict_optsrxrZc_optionrrr_check_conflicts.      zOptionContainer._check_conflictcOs;t|dtr(|j||}nQt|dkrm| rm|d}t|tsytd|n td|j||jj|||_ x|j D]}||j |Z!d?d@Z"ddAdBZ#dCdDZ$ddEdFZ%ddGdHZ&dIdJZ'ddKdLZ(ddMdNZ)dS)OrNrTc Cstj|||||j|| |_||_d|_d|_|dkr\t}||_|jj || |_ |j |d||j dS)NTadd_help) rr set_usageprograllow_interspersed_argsprocess_default_valuesr r rDr]_populate_option_list_init_parsing_state) rrNrurrrr[r Zadd_help_optionrr]rrrr s           zOptionParser.__init__cCsAtj|x|jD]}|jqW|`|`|`dS)N)rrrwrur )rrzrrrrs  zOptionParser.destroycCs g|_g|_|jdS)N)rurwr)rrrrrs  z OptionParser._create_option_listcCs&|jdddddtddS)Nz-hz--helprr_zshow this help message and exit)rr()rrrr_add_help_optionszOptionParser._add_help_optioncCs#|jddddtddS)Nz --versionrrr_z&show program's version number and exit)rr()rrrr_add_version_options z OptionParser._add_version_optioncCsS|jr|j|j|r,|j||jr?|j|rO|jdS)N)standard_option_listrrrr)rrurrrrrs    z"OptionParser._populate_option_listcCsd|_d|_d|_dS)N)rargslargsr)rrrrrs  z OptionParser._init_parsing_statecCsn|dkrtd|_nL|tkr6d|_n4|jjdra|dd|_n ||_dS)Nz%prog [options]zusage: )r(rNrrr)rrNrrrrs   zOptionParser.set_usagecCs d|_dS)NT)r)rrrrenable_interspersed_argssz%OptionParser.enable_interspersed_argscCs d|_dS)NF)r)rrrrdisable_interspersed_argssz&OptionParser.disable_interspersed_argscCs ||_dS)N)r)rrrrrset_process_default_values sz'OptionParser.set_process_default_valuescCs||j|ttfk r}z|jt |WYdd}~XnX||}|j ||S)N) r)r%rrr _process_argsrrrr$ check_values)rrrrrstoperrrrr parse_argsJs    & zOptionParser.parse_argscCs ||fS)Nr)rrrrrrr+qs zOptionParser.check_valuescCsx|r|d}|dkr*|d=dS|dddkrS|j||q|dddkrt|dkr|j||q|jr|j||d=qdSqWdS)Nrz--r.rr)_process_long_optrk_process_short_optsrrl)rrrrargrrrr*~s   (   zOptionParser._process_argscCst||jS)N) _match_abbrevr)rrxrrr_match_long_optszOptionParser._match_long_optc CsK|jd}d|krL|jdd\}}|jd|d}n |}d}|j|}|j|}|jr |j}t||kr|jt dd|d|d |iq1|dkr|jd} q1t |d|} |d|=n&|r+|jt d |nd} |j || ||dS) NrrIrTFz.%(option)s option requires %(number)d argumentz/%(option)s option requires %(number)d argumentsr&numberz%s option does not take a value) poprinsertr3rr}rrkrrrr(r) rrrr1rxZnext_argZhad_explicit_valuer&rrrrrr/s0       zOptionParser._process_long_optc Cs^|jd}d}d}x<|ddD]*}d|}|jj|}|d7}|sjt||jr3|t|kr|jd||dd}|j} t|| kr|jt dd| d|d | iq9| dkr |jd} q9t |d| } |d| =nd} |j || |||r,Pq,WdS) NrFrrTz.%(option)s option requires %(number)d argumentz/%(option)s option requires %(number)d argumentsr&r4) r5rrarr}rkr6rrrrr) rrrr1r,iZchrxr&rrrrrr0s6       z OptionParser._process_short_optscCs1|jdkr&tjjtjdS|jSdS)Nr)rr3pathbasenamerr()rrrr get_prog_nameszOptionParser.get_prog_namecCs|jd|jS)Nz%prog)rer:)rsrrrexpand_prog_name szOptionParser.expand_prog_namecCs|j|jS)N)r<r[)rrrrrszOptionParser.get_descriptionrcCs'|rtjj|tj|dS)N)rstderrwriter)rstatusrrrrrszOptionParser.exitcCs4|jtj|jdd|j|fdS)Nr.z%s: error: %s ) print_usagerr=rr:)rrrrrrszOptionParser.errorcCs-|jr%|jj|j|jSdSdS)NrE)rNr rOr<)rrrr get_usage"s  zOptionParser.get_usagecCs#|jrt|jd|dS)Nfile)rNprintrA)rrBrrrr@)s zOptionParser.print_usagecCs!|jr|j|jSdSdS)NrE)rr<)rrrr get_version5s zOptionParser.get_versioncCs#|jrt|jd|dS)NrB)rrCrD)rrBrrrr;s zOptionParser.print_versioncCs|dkr|j}|j|g}|j|jtd|j|jr}|jtj|||jdx4|j D])}|j|j ||jdqW|j dj |ddS)NZOptionsrZrErrj) r r{rlrQr(rKrurr rwr rLr+)rr rorzrrrr Fs       zOptionParser.format_option_helpcCs|j|jS)N)r^r])rr rrrr^WszOptionParser.format_epilogcCs|dkr|j}g}|jr;|j|jd|jr^|j|j|d|j|j||j|j|dj|S)NrZrE) r rNrlrAr[r\r r^r+)rr rorrrr Zs    zOptionParser.format_helpcCs,|dkrtj}|j|jdS)N)rstdoutr>r )rrBrrrrfs  zOptionParser.print_help)*rr"r#rrr rrrrrrrrrrr r!r#r%r&r'r)r.r+r*r3r/r0r:r<rrrrAr@rDrr r^r rrrrrrQs^ F             ' 3 $ )        cs{|krSfdd|jD}t|dkrI|dS|s^tn|jt|dS)Ncs%g|]}|jr|qSr)r)rgZword)r;rrris z!_match_abbrev..rr)rrkrsortr))r;Zwordmapr*r)r;rr2ss  r2)& __version____all__Z __copyright__rr3rUrrr ImportErrorr( Exceptionr r rrrr)r r r rrrrrrrrcrrrrrrrr2rrrrrsp          t  A$