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@sOddlZddlZddlmZddlmZddl m Z ddl m Z mZyddlmZWn"ek rddlmZYnXddd d d d d ddddddddddgZejZejZejZejZejZy ejZWne k r$dZYnXej!Z![da"da#ddZ$ddZ%eZ&dd ZGdddZ'e'Z(GdddZ)GdddZ*Gddde*Z+Gd d d Z,Gd!ddZ-Gd"d#d#e.Z/ej0Z1e1d$d%d&Z2ea3iZ4iZ5e Z6Gd'ddZ7Gd(dde7Z8Gd)d*d*e7Z9Gd+d,d,e7Z:d-d Z;e;Z<d.dZ=e=Z>d/d0Z?d1d Z@dd2lmAZAe9aBd3d4ZCd5d6ZDd7d8ZEydd9lmFZGWn"ek r>dd:lHmGZGYnXd;d<ZIdS)=N) monotonic) format_exc)WeakSet)islicecount)deque active_count Conditioncurrent_thread enumerateEventLockRLock SemaphoreBoundedSemaphoreThreadBarrierTimer ThreadError setprofilesettracelocal stack_sizecCs |adS)N) _profile_hook)funcr(/opt/python35/lib/python3.5/threading.pyr0scCs |adS)N) _trace_hook)rrrrr:scOs&tdkrt||St||S)N)_CRLock_PyRLock)argskwargsrrrrHs  c@s|eZdZddZddZddddZeZd d Zd d Zd dZ ddZ ddZ dS)_RLockcCs"t|_d|_d|_dS)Nr)_allocate_lock_block_owner_count)selfrrr__init___s  z_RLock.__init__cCsy|j}yt|j}Wntk r.YnXd|jjrGdnd|jj|jj||j t t |fS)Nz)<%s %s.%s object owner=%r count=%d at %s>lockedunlocked) r%_activenameKeyErrorr$r) __class__ __module__ __qualname__r&hexid)r'ownerrrr__repr__ds    z_RLock.__repr__TcCs\t}|j|kr+|jd7_dS|jj||}|rX||_d|_|S)Nr5) get_identr%r&r$acquire)r'blockingtimeoutmercrrrr7ss   z_RLock.acquirecCsR|jtkrtd|jd|_}|sNd|_|jjdS)Nzcannot release un-acquired lockr5)r%r6 RuntimeErrorr&r$release)r'rrrrr=s   z_RLock.releasecCs|jdS)N)r=)r'tvtbrrr__exit__sz_RLock.__exit__cCs#|jj|\|_|_dS)N)r$r7r&r%)r'staterrr_acquire_restores z_RLock._acquire_restorecCsV|jdkrtd|j}d|_|j}d|_|jj||fS)Nrzcannot release un-acquired lock)r&r<r%r$r=)r'rr3rrr _release_saves      z_RLock._release_savecCs|jtkS)N)r%r6)r'rrr _is_ownedsz_RLock._is_ownedN) __name__r/r0r(r4r7 __enter__r=rArCrDrErrrrr"Us  $    r"c@seZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ dddZ ddZ e ZdS)r NcCs|dkrt}||_|j|_|j|_y|j|_Wntk rZYnXy|j|_Wntk rYnXy|j|_Wntk rYnXt|_ dS)N) r_lockr7r=rDAttributeErrorrCrE_deque_waiters)r'lockrrrr(s$        zCondition.__init__cCs |jjS)N)rIrH)r'rrrrHszCondition.__enter__cGs|jj|S)N)rIrA)r'r rrrrAszCondition.__exit__cCsd|jt|jfS)Nz)rIlenrL)r'rrrr4szCondition.__repr__cCs|jjdS)N)rIr=)r'rrrrDszCondition._release_savecCs|jjdS)N)rIr7)r'xrrrrCszCondition._acquire_restorecCs+|jjdr#|jjdSdSdS)NrFT)rIr7r=)r'rrrrEs zCondition._is_ownedcCs|jstdt}|j|jj||j}d}zW|dkro|jd}n0|dkr|jd|}n|jd}|SWd|j||sy|jj|Wnt k rYnXXdS)Nzcannot wait on un-acquired lockFTr) rEr<r#r7rLappendrDrCremove ValueError)r'r9waiter saved_stategotitrrrwaits*           zCondition.waitcCs~d}|}|}xb|sy|dk r`|dkrFt|}n|t}|dkr`P|j||}qW|S)Nr)_timerV)r' predicater9endtimewaittimeresultrrrwait_for5s        zCondition.wait_forr5c Cs|jstd|j}tt||}|s@dSx>|D]6}|jy|j|WqGtk r|YqGXqGWdS)Nz!cannot notify on un-acquired lock)rEr<rLrK_islicer=rQrR)r'n all_waiterswaiters_to_notifyrSrrrnotifyLs      zCondition.notifycCs|jt|jdS)N)rarNrL)r'rrr notify_allcszCondition.notify_all)rGr/r0r(rHrAr4rDrCrErVr\rarb notifyAllrrrrr s       0 c@sOeZdZdddZddddZeZdd Zd d ZdS) rr5cCs7|dkrtdtt|_||_dS)Nrz$semaphore initial value must be >= 0)rRr r _cond_value)r'valuerrrr({s  zSemaphore.__init__TNc Cs| r|dk rtdd}d}|jx|jdkr|sNP|dk r|dkrvt|}n|t}|dkrP|jj|q8W|jd8_d}WdQRX|S)Nz.can't specify timeout for non-blocking acquireFrr5T)rRrdrerWrV)r'r8r9r;rYrrrr7s$       zSemaphore.acquirec Cs1|j!|jd7_|jjWdQRXdS)Nr5)rdrera)r'rrrr=s zSemaphore.releasecCs|jdS)N)r=)r'r>r?r@rrrrAszSemaphore.__exit__)rGr/r0r(r7rHr=rArrrrros - c@s+eZdZdddZddZdS)rr5cCstj||||_dS)N)rr(_initial_value)r'rfrrrr(szBoundedSemaphore.__init__c CsO|j?|j|jkr(td|jd7_|jjWdQRXdS)Nz!Semaphore released too many timesr5)rdrergrRra)r'rrrr=s  zBoundedSemaphore.releaseN)rGr/r0r(r=rrrrrs c@saeZdZddZddZddZeZddZd d Zd d d Z d S)r cCstt|_d|_dS)NF)r r rd_flag)r'rrrr(szEvent.__init__cCs|jjtdS)N)rdr(r )r'rrr_reset_internal_locksszEvent._reset_internal_lockscCs|jS)N)rh)r'rrris_setsz Event.is_setc Cs+|jd|_|jjWdQRXdS)NT)rdrhrb)r'rrrsets  z Event.setc Cs|jd|_WdQRXdS)NF)rdrh)r'rrrclear s z Event.clearNc Cs:|j*|j}|s+|jj|}|SWdQRXdS)N)rdrhrV)r'r9signaledrrrrVs   z Event.wait) rGr/r0r(rirjisSetrkrlrVrrrrr s    c@seZdZddddZdddZddZdd Zd d Zd d ZddZ ddZ ddZ e ddZ e ddZe ddZdS)rNcCsCtt|_||_||_||_d|_d|_dS)Nr)r r rd_action_timeout_parties_stater&)r'partiesactionr9rrrr(=s     zBarrier.__init__cCs|dkr|j}|jy|j|j}|jd7_z5|d|jkrd|jn |j||SWd|jd8_|jXWdQRXdS)Nr5)rprd_enterr&rq_release_wait_exit)r'r9indexrrrrVMs       z Barrier.waitcCs<x |jdkr"|jjqW|jdkr8tdS)Nr5rrF)rFr5)rrrdrVBrokenBarrierError)r'rrrruks zBarrier._enterc CsIy-|jr|jd|_|jjWn|jYnXdS)Nr5)rorrrdrb_break)r'rrrrvvs    zBarrier._releasecsJjjfdd|s1jtjdkrFtdS)Ncs jdkS)Nr)rrr)r'rrszBarrier._wait..r)rdr\r{rzrr)r'r9r)r'rrws ! z Barrier._waitcCs8|jdkr4|jdkr4d|_|jjdS)Nrr5rF)rFr5)r&rrrdrb)r'rrrrxs z Barrier._exitc Csp|j`|jdkrO|jdkr4d|_qX|jdkrXd|_n d|_|jjWdQRXdS)Nrr5rFrF)rdr&rrrb)r'rrrresets    z Barrier.resetc Cs|j|jWdQRXdS)N)rdr{)r'rrraborts z Barrier.abortcCsd|_|jjdS)Nr}r~)rrrdrb)r'rrrr{s zBarrier._breakcCs|jS)N)rq)r'rrrrsszBarrier.partiescCs|jdkr|jSdS)Nr)rrr&)r'rrr n_waitingszBarrier.n_waitingcCs |jdkS)Nr}r~)rr)r'rrrbrokenszBarrier.broken)rGr/r0r(rVrurvrwrxrrr{propertyrsrrrrrrr4s      c@seZdZdS)rzN)rGr/r0rrrrrzs rzz Thread-%dcCs |tS)N)_counter)templaterrr_newnamesrc @s{eZdZdZejZdddfdddddZddZdd Z d d Z d d Z ddZ ddZ ddZddZddZddZdddZdd2ddZed d!Zejd"d!Zed#d$Zd%d&ZeZed'd(Zejd)d(Zd*d+Zd,d-Zd.d/Zd0d1ZdS)3rFNdaemoncCs|dkri}||_t|p*t|_||_||_|dk r]||_ntj|_d|_ d|_ t |_ d|_ d|_tj|_tj|dS)NFT)_targetstrr_name_args_kwargs _daemonicr r_ident _tstate_lockr _started _is_stopped _initialized_sysstderr_stderr _danglingadd)r'grouptargetr,r r!rrrrr(s             zThread.__init__cCs6|jj|r |jnd|_d|_dS)NT)rri_set_tstate_lockrr)r'is_aliverrrri s    zThread._reset_internal_lockscCsd}|jjrd}|j|jr4d}|jrG|d7}|jdk rg|d|j7}d|jj|j|fS)Ninitialstartedstoppedz daemonz %sz <%s(%s, %s)>) rrjrrrrr.rGr)r'statusrrrr4,s    zThread.__repr__cCs|jstd|jjr0tdt|t|YnXdS)Ndummy_threading)rr+r6r-rmodules)r'rrr_deletes  zThread._deletecCs|jstd|jjs0td|tkrKtd|dkrd|jn|jdt|ddS)NzThread.__init__() not calledz'cannot join thread before it is startedzcannot join current threadr9r)rr<rrjr _wait_for_tstate_lockmax)r'r9rrrjoins      z Thread.joinTr5cCsB|j}|dkrn&|j||r>|j|jdS)N)rr7r=r)r'blockr9rMrrrr$s    zThread._wait_for_tstate_lockcCs|jS)N)r)r'rrrr,2s z Thread.namecCst||_dS)N)rr)r'r,rrrr,=scCs|jS)N)r)r'rrridentBs z Thread.identcCs2|js|jj rdS|jd|j S)NF)rrrjr)r'rrrrNs  zThread.is_alivecCs|jS)N)r)r'rrrr^sz Thread.daemoncCs=|jstd|jjr0td||_dS)NzThread.__init__() not calledz)cannot set daemon status of active thread)rr<rrjr)r'daemonicrrrrns    cCs|jS)N)r)r'rrrisDaemonvszThread.isDaemoncCs ||_dS)N)r)r'rrrr setDaemonyszThread.setDaemoncCs|jS)N)r,)r'rrrgetName|szThread.getNamecCs ||_dS)N)r,)r'r,rrrsetNameszThread.setNamerF)rGr/r0rrexc_inforr(rir4rrrrrrrrrrrr,setterrrisAliverrrrrrrrrrs6   ,       A  #&     c@s:eZdZddddZddZddZdS)rNcCsetj|||_||_|dk r1|ng|_|dk rL|ni|_t|_dS)N)rr(intervalfunctionr r!r finished)r'rrr r!rrrr(s    zTimer.__init__cCs|jjdS)N)rrk)r'rrrcancelsz Timer.cancelcCsI|jj|j|jjs8|j|j|j|jjdS)N)rrVrrjrr r!rk)r'rrrrsz Timer.run)rGr/r0r(rrrrrrrs  c@seZdZddZdS) _MainThreadc CsYtj|dddd|j|jj|jt|t|jrrr _shutdowns       rcCs2x+tD] }|j r |jr |Sq WdS)N)r rr)r>rrrrsrcCstS)N)rrrrr main_threadsr)_local)rc Cstai}t}|attt}|jtx]|D]U}||kr|jdt }||_ |||s               qP&O