ó ÅfERc@sÃddlZddlZddlZddlZddlZddlZddlZdd„Zda da ddd„Z ddGd„ƒYZ ddHd „ƒYZ d ad ad d „Zd „Zd „Zde fd„ƒYZeZde fd„ƒYZddId„ƒYZddJd„ƒYZdefd„ƒYZddKd„ƒYZd d„Zd dd„Zd„Zd„Zedkr¿eej ƒd kr-ej dd!kr-edLdMdNfdOdPdQƒedRdSdTfdUdVdWƒedXdYdZfd[d\d]ƒed^d_d`fdadbdcƒej!d ƒneej ƒd krbej dd1krbedlƒned"dd.d d#dmdndoƒed$d d.d d'dpdqdrdsƒ ed&d3d.d%d'dtdudvdwƒ ed4d5d.d d2dxdydzƒed6d7d.d8d2d{d|d}ƒed9d:d.d;d2d~dd€ƒed<d=d.d d'dƒed>d?d.d@d'd‚ƒedAdBd.dCd'dƒƒedDd.d.d d2d„d…d†d‡dˆd‰dŠd‹dŒddŽddd‘d’d“d”d•d–ƒndS(—iÿÿÿÿNicCs[yLd}tj|tj|ƒ}tjd|ƒd}|dkrGdS|SWndSXdS(s Get the real terminal width tabcdefghthhhhiiiPN(tfcntltioctlttermiost TIOCGWINSZtstructtunpack(tfdtbuftret((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytterminal_widths gð?cCsAtjƒ}tdks(|t|kr=t|ƒa|antS(s6 Get the real terminal width, but cache it for a bit. N(ttimet_term_width_valtNonet_term_width_lastR (Rt cache_timeouttnow((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytterminal_width_cached-s    t TerminalLinecBsMeZdZdd ddd„Zd„Zdd„Zd d„Zd „ZRS( sB Help create dynamic progress bars, uses terminal_width_cached(). iigð?cCsX|dkr|}n||_t||ƒ|_|j|krK||_nt|_dS(N(Rt_min_lenRt_llentFalset_fin(tselftmin_resttbeg_lenRR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt__init__;s    cCs|j|jS(s Usable length for elements. (RR(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt__len__DsicCs"|j|krdS|j||S(sw After a fixed length, split the rest of the line length among a number of different elements (default=2). i(R(Rtfixedtelements((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt rest_splitHscCs_|dkrt|ƒ}nt|ƒ|kr9t|_n|jrFdS|jt|ƒ8_|S(s‹ If there is room left in the line, above min_len, add element. Note that as soon as one add fails all the rest will fail too. tN(RtlentTrueRR(Rtelementtfull_len((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytaddOs   cCs|jS(sA Current rest of line, same as .rest_split(fixed=0, elements=1). (R(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytrest]sN( t__name__t __module__t__doc__RRRRR%R&(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR8s    t BaseMetercBsheZd„Zddddddd„Zdd„Zdd„Zdd„Zdd„Zdd„Z RS(cCsad|_d|_d|_d|_d|_d|_d|_d|_d|_ t ƒ|_ dS(Ng333333Ó?i( t update_periodRtfilenameturltbasenamettexttsizet start_timetlast_amount_readtlast_update_timet RateEstimatortre(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRbs         cCs©||_||_||_||_||_|dk rOt|ƒd|_n|dkrjtjƒ}n||_ |j j ||ƒd|_ ||_ |j|ƒdS(NtBi(R,R-R.R/R0Rt format_numbertfsizeR R1R5tstartR2R3t _do_start(RR,R-R.R0RR/((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR9os          cCsdS(N((RR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR:scCsw|dkrtjƒ}n|j s;||j|jkrs|jj||ƒ||_||_|j||ƒndS(N(RR R3R+R5tupdateR2t _do_update(Rt amount_readR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR;„s    cCsdS(N((RR=R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR<scCsT|dkrtjƒ}n|jj||ƒ||_||_|j||ƒdS(N(RR R5R;R2R3t_do_end(RR=R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytend’s    cCsdS(N((RR=R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR>™sN( R'R(RRR9R:R;R<R?R>(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR*as    icCs|a|adS(N(t_text_meter_total_sizet_text_meter_sofar_size(R0t downloaded((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyttext_meter_total_size¡scCs_|}dt||ƒ}||t||ƒdkrE|d7}n|jd|||fƒS(Nt=gà?t-s [%-*.*s](tintR%(ttltbar_max_lengthtpctblentbar((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt _term_add_barÖs  cCsZ|rG||kr%|jdƒtfS||krG|jdƒtfSn|jdƒtfS(Ns !!! s ... t is (R%R"R(RGtosizeR0((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt _term_add_endÝs   t TextMetercBs/eZejd„Zdd„Zdd„ZRS(cCstj|ƒ||_dS(N(R*Rtfo(RRQ((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRæs c Cs]|jjƒ}t|ƒ}|jdk r6|j}n |j}t|jjƒƒ}d}tr{t|}|dt}nt ddƒ} | j dkr¢t } nt } | j d|ƒ} |jdkr6| j dt|| ƒƒ} | j dƒ} | j d |ƒ}d | jƒ| jƒ||| | | f}n|jjƒ}t|| ƒ}|jjƒ}| j d|ƒ} | j d ƒ} |dkršd }n| j d |dtdƒƒ}| j d|dƒ}| j d |ƒ}d| jdƒ}t| ||ƒ}d| jƒ| jƒ|||||| | | f }|jj|ƒ|jjƒdS(NidiiiPs | %5sBs %9sRMis %5sB/ss%-*.*s%s%s%s%s s ETA R s (%i%%)R$s (100%)s %2i%%is %-*.*s%s%s%s%s%s%s%s i is ii(R5t elapsed_timeR7R/RR.t average_rateR@RARRR"RR%R0t format_timeR&tremaining_timet fraction_readR!RRLRQtwritetflush(RR=RtetimetfreadR/tave_dlt sofar_sizetsofar_pcRGt use_hourstui_sizetui_timetui_endtui_ratetouttrtimetfrtimetfract ui_sofar_pctui_pcRJtui_bar((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR<êsN        c Cs.t|ƒ}|jdk r'|j}n |j}tdƒ}|jdkrTt}nt}|jd|ƒ}|jdt |j j ƒ|ƒƒ}t ||j |ƒ\} } d|jƒ|jƒ|||| f} |jj| ƒ|jjƒ| rüdStrt|7anttkr*dadandS(NiiPs | %5sBs %9ss %-*.*s%s%s%s i(R7R/RR.RRR"RR%RTR5RRROR0R&RQRWRXR@RA( RR=Rt total_sizeR/RGR^R_R`Ratnot_doneRc((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR> s,     %   N(R'R(tsyststderrRRR<R>(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRPås 6tMultiFileHelpercBsAeZd„Zd„Zd„Zd„Zdd„Zd„ZRS(cCstj|ƒ||_dS(N(R*Rtmaster(RRo((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyREs cCs|jj||ƒdS(N(Rot start_meter(RR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR:IscCs|jj||ƒdS(N(Rot update_meter(RR=R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR<LscCs?t||jƒ|_t|jƒ|_|jj||ƒdS(N(RTR1t ftotal_timeR7R2t ftotal_sizeRot end_meter(RR=R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR>PscCs|jj|||ƒdS(N(Rot failure_meter(RtmessageR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytfailureUscCs|jj||ƒdS(N(Rot message_meter(RRv((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRvXsN( R'R(RR:R<R>RRwRv(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRnDs      t _FakeLockcBseZd„Zd„ZRS(cCsdS(N((R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytacquire\scCsdS(N((R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytrelease^s(R'R(RzR{(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRy[s tMultiFileMetercBsÈeZeZed„Zdddd„Zd„Zdd„Z d„Z d„Z d„Z d„Z d„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„ZRS(cCs g|_g|_|r*tjƒ|_n tƒ|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_tƒ|_dS(Ng333333Ó?i(tmeterstin_progress_meterstthreadt allocate_lockt_lockRyR+Rtnumfilestfinished_filest failed_filest open_filesRjt failed_sizeR1tfinished_file_sizeR3R4R5(Rtthreaded((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRcs              cCs|dkrtjƒ}n||_d|_d|_d|_||_d|_||_d|_ ||_ |j j ||ƒ|j |ƒdS(Ni(RR R‚RƒR„R…RjR†R1R‡R3R5R9R:(RR‚RjR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR9ws          cCsdS(N((RR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR:…scCsE|dkrtjƒ}n|jj|jƒ|ƒ|j|ƒdS(N(RR R5R;t _amount_readR>(RR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR?ˆs cCsdS(N((RR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR>scCs|jjƒdS(N(RRz(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytlockscCs|jjƒdS(N(RR{(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytunlock‘scCs#|j|ƒ}|jj|ƒ|S(N(t helperclassR}tappend(Rtnewmeter((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pytnewMeter•scCs|jj|ƒdS(N(R}tremove(Rtmeter((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt removeMeteršscCs…||jkrtdƒ‚n|jjƒz5||jkr_|jj|ƒ|jd7_nWd|jjƒX|j||ƒdS(Nsattempt to use orphaned meteri( R}t ValueErrorRRzR~RR…R{t_do_start_meter(RR‘R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRpŸs cCsdS(N((RR‘R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR”«scCsw||jkrtdƒ‚n|j s>||j|jkrs|jj|jƒ|ƒ||_|j||ƒndS(Nsattempt to use orphaned meter(R}R“R3R+R5R;R‰t_do_update_meter(RR‘R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRq®s  cCsdS(N((RR‘R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR•·scCs¬||jkrtdƒ‚n|jjƒz\y|jj|ƒWntk rUnX|jd8_|jd7_|j|j 7_Wd|jj ƒX|j ||ƒdS(Nsattempt to use orphaned meteri( R}R“RRzR~RR…RƒR‡R2R{t _do_end_meter(RR‘R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRtºs  cCsdS(N((RR‘R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR–ÈscCsÓ||jkrtdƒ‚n|jjƒz€y|jj|ƒWntk rUnX|jd8_|jd7_|jr¡|j dk r¡|j |j7_ n d|_ Wd|jj ƒX|j |||ƒdS(Nsattempt to use orphaned meteri( R}R“RRzR~RR…R„R0R†RR{t_do_failure_meter(RR‘RvR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRuËs   cCsdS(N((RR‘RvR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR—ÜscCsdS(N((RR‘Rv((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRxßscCs.|j}x|jD]}||j7}qW|S(N(R‡R~R2(Rttottm((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR‰äs N(R'R(RnRŒR"RRR9R:R?R>RŠR‹RR’RpR”RqR•RtR–RuR—RxR‰(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR|as(               tTextMultiFileMetercBs>eZejed„Zd„Zd„Zd„Zd„Z RS(cCs-||_tj||ƒd|_|_dS(Ni(RQR|Rt index_timetindex(RRQRˆ((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRìs cCs |jjƒzê|j}|jp%d}|jj}|jj}d|jjƒpUdd}|jjƒ}|jj ƒ} |jjƒpd} d| } t |jj ƒƒ} ||j krÝ|d|_ |j d7_ n|j t|jƒkrd|_ n|j|j }|jp |j} |dkrPd|d|j || f} ntddƒ}|jdkr}t}d }n t}d }|jd t |ƒƒ}|jjs |jd |t||ƒfƒ}|jdƒ}|jd| ƒ}d|jƒ|jƒ| ||||f}n¹|jd |t| |ƒfƒ}|jdƒ}|jd| dtdƒƒ}|jd| ƒ}d|jdƒ}t||| ƒ}d|jƒ|jƒ| ||||||f }|jj|ƒ|jjƒWd|jjƒXdS(Niidig\Âõ(\ß?gð?s (%u/%u): %siiPi is | %5sBs %*sRMis %5sB/ss %-*.*s%s%s%s%s s ETA s %i%%R$s (100%)is %-*.*s%s%s%s%s%s%s i is ii(RRzRƒR‚R5R2ttotalRVRRRUR7RSR›RœR!R}R/R.RRR"RR%RTR&RRLRQRWRXR{(RR‘RtdfttftddttdtpdtdttrtRftpfR[R/RGR^ttime_lenR_R`RaRbRcRgRJRi((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR•s`        !  ""  c Cs–|jjƒztd}|jp%|j}|j}t|ƒd}|jjƒ}t|o`||ƒd}|j} |j pd} t|ƒ} |jp|j} | dkrÂd| | | f} nt dƒ} | j dkrìt }d}n t }d }| jd | ƒ}| jd |t||ƒfƒ}t| |j|ƒ\}}d | jƒ| jƒ| |||f}|jj|ƒWd|jjƒXdS( Ns %-30.30s %6.6s %8.8s %9.9sR6sB/sis (%u/%u): %siiPi is | %5sBs %*ss %-*.*s%s%s%s (RRzR/R.R2R7R5RRRƒR‚RRR"RR%RTROR0R&RQRWR{(RR‘RtformattfnR0R8tettfrateRžRŸRjR/RGR^R¦R_R`RaRkRc((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR–As6       "cCsù|jjƒzÔd}|jp%|j}t|ƒtdƒtdƒfkr[|jƒ}n|smdg}nd||d|dp†df}|jjd|dƒx*|d D]}|jjd |dƒq±W|jjƒWd|j ||ƒXdS( Ns%-30.30s %6.6s %sR us%-79stFAILEDis s is ( RRzR/R.ttypet splitlinesRQRWR{R•(RR‘RvRR§R¨RcR™((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR—bs $ !cCs&|jjƒzWd|jjƒXdS(N(RRzR{(RR‘Rv((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRxqs ( R'R(RlRmR"RR•R–R—Rx(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRšës  A ! R4cBsqeZdd„Zd d d„Zd d„Zd„Zd„Zd„Zd„Z d„Z d „Z d d „Z RS( g@cCs ||_dS(N(t timescale(RR®((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR|scCsL|dkrtjƒ}n||_||_||_d|_d|_dS(Ni(RR RR1R3R2tave_rate(RRR((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR9s     cCs²|dkrtjƒ}n|dks6||jkrU||_||_d|_dS||j}||j}|jr¥||_|j|||j|jƒ|_n||_dS(Ni(RR R2R3R¯t_temporal_rolling_aveR®(RR=Rt time_difft read_diff((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR;‡s        cCs|jS(s/get the average transfer rate (in bytes/second)(R¯(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRS¡scCs|j|jS(sEthe time between the start of the transfer and the most recent update(R3R1(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRR¥scCs-|j s|j rdS|j|j|jS(sestimated time remainingN(R¯RRR2(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRU©scCs>|jdkrdS|jdkr&dSt|jƒ|jSdS(s[the fraction of the data that has been read (can be None for unknown transfer size)igð?N(RRtfloatR2(R((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRV®s cCs5||}|dkrd}n|j||||ƒS(sqa temporal rolling average performs smooth averaging even when updates come at irregular intervals. This is performed by scaling the "epsilon" according to the time since the last update. Specifically, epsilon = time_diff / timescale As a general rule, the average will take on a completely new value after 'timescale' seconds.igð?(t _rolling_ave(RR±R²tlast_aveR®tepsilon((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR°·s  cCs\y||}Wntk r'd}nX|dkr8|S|dkrH|S||d||S(sKperform a "rolling average" iteration a rolling average "folds" new data into an existing average with some weight, epsilon. epsilon must be between 0.0 and 1.0 (inclusive) a value of 0.0 means only the old value (initial value) counts, and a value of 1.0 means only the newest value is considered.iN(tZeroDivisionErrorR(RR±R²RµR¶t recent_rate((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR´Ãs    g.@cCsj|dkrdSttj||ƒtjdƒƒ}t|ƒ}|dkrR|Stt|ƒ|?|>ƒS(s—round the remaining time, depending on its size If rt is between n*start_time and (n+1)*start_time round downward to the nearest multiple of n (for any counting number n). If rt < start_time, round down to the nearest 1. For example (for start_time = 15.0): 2.7 -> 2.0 25.2 -> 25.0 26.4 -> 26.0 35.3 -> 34.0 63.6 -> 60.0 igi(RFtmathtlogR³(RR¤R1tshift((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt_round_remaining_timeÔs &  N( R'R(RRR9R;RSRRRURVR°R´R¼(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR4{s      cCsœ|dks|dkr)|r"dSdSno|tdƒkr?dSt|ƒ}|d}|d}|rŠ|d}|d}d|||fSd||fSdS( Nis--:--:--s--:--tinftInfinitei<s%02i:%02i:%02is %02i:%02i(RR³RF(tsecondsR^tminutesthours((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyRTès     RMc Csúddddddddd g }|r0d }nd }d }d }t|ƒd}x0||kr„||kr„|d}||}qUWt|ƒtdƒksµt|ƒtdƒkr¾d}n|dkrÓd}nd}|t|pèd ƒ|||fS(s4Turn numbers into human-readable metric-like numbersR tktMtGtTtPtEtZtYg@@g@içiils%i%s%sgfffffæ#@s%.1f%s%ss%.0f%s%s(R!R¬R³( tnumbertSItspacetsymbolststeptthreshtdeptht max_depthR§((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyR7ùs0   0   c Gs¿tƒ}d|||f}|j|d|||d|ƒ|}d} xc|D][\} } | d7} xB||| t|ƒkr©|| 7}|j|ƒtj| ƒqhWqOW|j|ƒdS(Ns (%d/%d): %ss"http://www.example.com/path/to/fn/R/ii(RPR9R!R;R tsleepR?( R¨tcurR˜tbegR0targsttmR/tnumtofftinctdelay((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt_tst s     cGsõddGHtdtƒ}i}d}d}d}xæ|D]Þ}d}t|ƒdkrj|\} } | }nt|ƒdkrŽ|\} } }n|jƒ} | j| d| | | d| ƒ|d 7}|dk sÖt‚||7}||| <| dks|dkr d}q7|| 7}q7W|j||ƒd}d} x©|D]¡\} }| d 7} xˆ||| t|ƒkrÜ|| 7}xP|jD]D} || |kr»| j|| ƒ|j | ƒq„| j |ƒq„Wt j |ƒqUWq<W|j sñt‚dS( NREiORˆiiis"http://www.example.com/path/to/fn/R/i( RšRRR!RR9tAssertionErrorR}R?R’R;R RÒ(tdatasRÕRÖtdl_sizesR×Rjt dl_total_sizetdatatdl_sizeR¨R0tnmRØRÙRÚ((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyt_mtst.sJ           t__main__itmultissm-1.0.0-1.fc8.i386.rpmièss-1.0.1-1.fc8.i386.rpmiˆsm-1.0.1-2.fc8.i386.rpmi'idg…ëQ¸Õ?iôgÐ?gš™™™™™¹?i %&i gš™™™™™É?i2Ri@Bis1large-file-name-Foo-11.8.7-4.5.6.1.fc8.x86_64.rpmis2large-file-name-Foo2-11.8.7-4.5.6.2.fc8.x86_64.rpmii!¡s2large-file-name-Foo3-11.8.7-4.5.6.3.fc8.x86_64.rpmii²q s2large-file-name-Foo4-10.8.7-4.5.6.1.fc8.x86_64.rpmis2large-file-name-Foo5-10.8.7-4.5.6.2.fc8.x86_64.rpmii‰s2large-file-name-Foo6-10.8.7-4.5.6.3.fc8.x86_64.rpmi iNs1large-file-name-Foox-9.8.7-4.5.6.1.fc8.x86_64.rpmgà?i †((((((ssm-1.0.0-1.fc8.i386.rpmiè(ss-1.0.1-1.fc8.i386.rpmiˆ(sm-1.0.1-2.fc8.i386.rpmi'(idg…ëQ¸Õ?(iôgÐ?(iègš™™™™™¹?(ssm-1.0.0-1.fc8.i386.rpmiè(ss-1.0.1-1.fc8.i386.rpmiˆ(sm-1.0.1-2.fc8.i386.rpmNi'(idg…ëQ¸Õ?(iôgÐ?(iègš™™™™™¹?(ssm-1.0.0-1.fc8.i386.rpmiè(ss-1.0.1-1.fc8.i386.rpmi %&(sm-1.0.1-2.fc8.i386.rpmi'(i gš™™™™™É?(i2gš™™™™™¹?(iègš™™™™™¹?(ssm-1.0.0-1.fc8.i386.rpmiè(ss-1.0.1-1.fc8.i386.rpmNi %&(sm-1.0.1-2.fc8.i386.rpmNi'(i gš™™™™™É?(i2gš™™™™™¹?(iègš™™™™™¹?iø*iRiH”iˆÖiÈ.iØ?.ièf.iø.i8Ð=(i gš™™™™™É?(i gš™™™™™¹?(idgÐ?(i gš™™™™™É?(idgš™™™™™¹?(idgš™™™™™¹?(idgÐ?(i gš™™™™™É?(idgš™™™™™¹?(idgš™™™™™¹?(idgÐ?(iègš™™™™™É?(iègš™™™™™¹?(i'gš™™™™™¹?(iègš™™™™™É?(iègš™™™™™¹?(i'gš™™™™™¹?(iègš™™™™™É?(iègš™™™™™¹?(i'gš™™™™™¹?(idgš™™™™™¹?(idgš™™™™™¹?(igš™™™™™¹?(i gà?(i †gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i †gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i †gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i †gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i'gš™™™™™¹?(i †gš™™™™™¹?(igš™™™™™¹?("RlR R¹RRRRR RR RRRR*R@RARCRLRORPttext_progress_meterRnRyR|RšR4RTR7RÛRãR'R!targvtexit(((s7/usr/lib/python2.7/site-packages/urlgrabber/progress.pyts–         )> 5  ]Šm '  , (    (