
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    Œ=Ý_jf  ã                N   @   s8  d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ zdd	lmZ W n ek
rÀ   dZY nX zdd
lmZ W n ek
rê   dZY nX e
jdk�rddlZndZe
jd dkZdddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZgNZejd[kZejd\kZe
j d]¡Ze
j d^¡Z e Z!e
j d_¡Z"e
j d`¡Z#e
j da¡Z$e"�pe#�pe$Z%e
j db¡Z&e
j dc¡Z'ddZ(deZ)dfZ*dgZ+dhZ,diZ-djZ.dkZ/dlZ0dmZ1dnZ2doZ3dpZ4dqZ5drZ6dsZ7dtZ8duZ9dvZ:dwZ;dxZ<dyZ=dzZ>d{Z?d|Z@d}ZAedk�r°d~ZBdZCdZDn G d€d�„ d�ejEƒZFeGƒ  HeFjI¡ edk�räd‚ZJdƒZKn G d„d…„ d…ejEƒZLeGƒ  HeLjI¡ e
 M¡ ZNe�sd†ZOn2ze
 P¡ ZOW n$ eQk
�rH   e�r@d‡nd†ZOY nX edHdˆd‰dŠd‹dŒd�gƒZRedDdˆd‰dŠd‹gƒZSedBdŽd�d�d‘d’d“gƒZTedCd”d•d–d—d˜d™gƒZUedEdšd›dœd�dždŸd d¡gƒZVedId¢d£d¤d¥d¦gƒZWed@d§d¨d©dªd«d¬d¦gƒZXedFd¨d­d®d¯d°gƒZYedGd±d²d³d´gƒZZedAdµd¶d·d¸gƒZ[ed¹dºd»d¼gƒZ\ed½d¾dºd¿dÀgƒZ]edÁd‹dÂdÃgƒZ^edÄd¾dºgƒZ_ed8dÅdÆdÇdÈgƒZ`ed=dÉd§gƒZaed>dÊdËdÌgƒZbed?dÍdÎdÏgƒZced:dÍdÎdÏgƒZded;dŽd�d�d‘gƒZeed<dÐdÑgƒZfed9dÒdÓgƒZged7d§d¨d©dªd«d¬gƒZhedÔdÕdÖgƒZieeegeegfeegegfegegfeegegfegegfeegeegfegeegfegeegfd×œZjedk	�r�ej HegegfegegfdØœ¡ edk	�r²ej HdÙegeegfi¡ G dÚdÛ„ dÛekƒZlG dÜdÝ„ dÝelƒZmG dÞdß„ dßemƒZnG dàdá„ dáelƒZoG dâdã„ dãelƒZp�ddädP„ZqdådM„ Zrdædç„ ZsdèdL„ ZtdédO„ ZuerdêdQ„ ƒZvdëdN„ ZwdìdR„ ZxdídS„ Zy�ddîdV„ZzdïdK„ Z{G dðdñ„ dñƒZ|dòdT„ Z}e|ƒ Z~e~je}_e~j€e}_€dódô„ Z�dõdö„ Z‚�ddødU„Zƒdùdú„ Z„e�rÆdûdü„ Z…ndýdü„ Z…ere
j†fdþdY„ƒZ‡�d�d dX„Zˆddÿe
j†f�ddZ„Z‰eŠe ‹�dd¡ƒ�r*ddlŒZŒ�ddW„ Z�n
�ddW„ Z�dS (	  z9Common objects shared by __init__.py and _ps*.py modules.é    )ÚdivisionÚprint_functionN)Údefaultdict)Ú
namedtuple)ÚAF_INET)Ú
SOCK_DGRAM)ÚSOCK_STREAM)ÚAF_INET6)ÚAF_UNIX)é   é   r   ÚFREEBSDÚBSDÚLINUXÚNETBSDÚOPENBSDÚMACOSÚOSXÚPOSIXÚSUNOSÚWINDOWSÚ
CONN_CLOSEÚCONN_CLOSE_WAITÚCONN_CLOSINGÚCONN_ESTABLISHEDÚCONN_FIN_WAIT1ÚCONN_FIN_WAIT2ÚCONN_LAST_ACKÚCONN_LISTENÚ	CONN_NONEÚCONN_SYN_RECVÚCONN_SYN_SENTÚCONN_TIME_WAITÚNIC_DUPLEX_FULLÚNIC_DUPLEX_HALFÚNIC_DUPLEX_UNKNOWNÚSTATUS_DEADÚSTATUS_DISK_SLEEPÚSTATUS_IDLEÚSTATUS_LOCKEDÚSTATUS_RUNNINGÚSTATUS_SLEEPINGÚSTATUS_STOPPEDÚSTATUS_SUSPENDEDÚSTATUS_TRACING_STOPÚSTATUS_WAITINGÚSTATUS_WAKE_KILLÚSTATUS_WAKINGÚSTATUS_ZOMBIEÚSTATUS_PARKEDÚENCODINGÚENCODING_ERRSr	   ÚpconnÚ	pcputimesÚpctxswÚpgidsÚpioÚpioniceÚ	popenfileÚpthreadÚpuidsÚsconnÚ	scpustatsÚsdiskioÚ	sdiskpartÚ
sdiskusageÚsnetioÚsnicaddrÚ	snicstatsÚsswapÚsuserÚ	conn_tmapÚdeprecated_methodÚisfile_strictÚmemoizeÚparse_environ_blockÚpath_exists_strictÚusage_percentÚsupports_ipv6Úsockfam_to_enumÚsocktype_to_enumÚwrap_numbersÚbytes2humanÚconn_to_ntupleÚdebugÚhiliteÚterm_supports_colorsÚprint_colorÚposixÚntÚlinuxÚdarwinÚfreebsdZopenbsdZnetbsd)ÚsunosÚsolarisÚaixÚrunningÚsleepingz
disk-sleepÚstoppedztracing-stopÚzombieÚdeadz	wake-killÚwakingÚidleÚlockedÚwaitingÚ	suspendedÚparkedÚESTABLISHEDÚSYN_SENTÚSYN_RECVÚ	FIN_WAIT1Ú	FIN_WAIT2Ú	TIME_WAITÚCLOSEÚ
CLOSE_WAITÚLAST_ACKÚLISTENÚCLOSINGÚNONEé   é   c                   @   s   e Zd ZdZdZdZdS )Ú	NicDuplexry   rz   r   N)Ú__name__Ú
__module__Ú__qualname__r#   r$   r%   © r   r   úA/opt/alt/python38/lib64/python3.8/site-packages/psutil/_common.pyr{   ‡   s   r{   éÿÿÿÿéþÿÿÿc                   @   s   e Zd ZdZdZdS )ÚBatteryTimer�   r‚   N)r|   r}   r~   ÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDr   r   r   r€   rƒ   “   s   rƒ   ÚreplaceÚsurrogateescapeÚtotalÚusedÚfreeÚpercentÚsinÚsoutÚ
read_countÚwrite_countÚ
read_bytesÚwrite_bytesÚ	read_timeÚ
write_timeÚdeviceÚ
mountpointÚfstypeÚoptsÚmaxfileÚmaxpathÚ
bytes_sentÚ
bytes_recvÚpackets_sentÚpackets_recvÚerrinÚerroutÚdropinÚdropoutÚnameÚterminalÚhostÚstartedÚpidÚfdÚfamilyÚtypeÚladdrÚraddrÚstatusÚaddressÚnetmaskÚ	broadcastÚptpÚisupÚduplexÚspeedÚmtuÚctx_switchesÚ
interruptsÚsoft_interruptsÚsyscallsÚscpufreqÚcurrentÚminÚmaxÚshwtempÚlabelÚhighÚcriticalÚsbatteryÚsecsleftÚpower_pluggedÚsfanÚuserÚsystemÚchildren_userÚchildren_systemÚpathÚidÚ	user_timeÚsystem_timeÚrealÚ	effectiveÚsavedÚioclassÚvalueÚ	voluntaryÚinvoluntaryÚaddrÚipÚport)ÚallÚtcpÚtcp4ÚudpÚudp4ÚinetÚinet4Úinet6)Útcp6Úudp6Úunixc                   @   s*   e Zd ZdZdZd	dd„Zdd„ ZeZdS )
ÚErrorzQBase exception class. All other psutil exceptions inherit
    from this one.
    ÚpsutilÚ c                 C   s   t  | |¡ || _d S ©N)Ú	ExceptionÚ__init__Úmsg)Úselfrè   r   r   r€   rç     s    zError.__init__c                 C   s   d| j j| jf }| ¡ S )Nzpsutil.%s %s)Ú	__class__r|   rè   Ústrip©ré   Úretr   r   r€   Ú__repr__  s    zError.__repr__N)rä   )r|   r}   r~   Ú__doc__rç   rî   Ú__str__r   r   r   r€   râ     s
   
râ   c                   @   s   e Zd ZdZdZddd„ZdS )ÚNoSuchProcesszXException raised when a process with a certain PID doesn't
    or no longer exists.
    rã   Nc                 C   sX   t  | |¡ || _|| _|| _|d krT|r@d| jt| jƒf }n
d| j }d| | _d S )Nú(pid=%s, name=%s)ú(pid=%s)zprocess no longer exists ©râ   rç   r¦   r¢   rè   Úrepr)ré   r¦   r¢   rè   Údetailsr   r   r€   rç   '  s    
zNoSuchProcess.__init__)NN©r|   r}   r~   rï   rç   r   r   r   r€   rñ   !  s   rñ   c                   @   s   e Zd ZdZdZddd„ZdS )ÚZombieProcessa1  Exception raised when querying a zombie process. This is
    raised on macOS, BSD and Solaris only, and not always: depending
    on the query the OS may be able to succeed anyway.
    On Linux all zombie processes are querable (hence this is never
    raised). Windows doesn't have zombie processes.
    rã   Nc                 C   s~   t  | |¡ || _|| _|| _|| _|d krzd| g}|rN| dt| jƒ ¡ |rb| d| j ¡ dd |¡ }d| | _d S )Nzpid=%szname=%szppid=%sz(%s)z, z'process still exists but it's a zombie )	rñ   rç   r¦   Úppidr¢   rè   Úappendrõ   Újoin)ré   r¦   r¢   rù   rè   Úargsrö   r   r   r€   rç   =  s    
zZombieProcess.__init__)NNNr÷   r   r   r   r€   rø   4  s   rø   c                   @   s   e Zd ZdZdZddd„ZdS )ÚAccessDeniedz@Exception raised when permission to perform an action is denied.rã   Nc                 C   sj   t  | |¡ || _|| _|| _|d krf|d k	rJ|d k	rJd|t|ƒf | _n|d k	r`d| j | _nd| _d S )Nrò   ró   rä   rô   )ré   r¦   r¢   rè   r   r   r€   rç   Q  s    zAccessDenied.__init__)NNNr÷   r   r   r   r€   rý   M  s   rý   c                   @   s   e Zd ZdZdZddd„ZdS )ÚTimeoutExpiredzWRaised on Process.wait(timeout) if timeout expires and process
    is still alive.
    rã   Nc                 C   sn   t  | d| ¡ || _|| _|| _|d k	rN|d k	rN|  jd|t|ƒf 7  _n|d k	rj|  jd| j 7  _d S )Nztimeout after %s secondsz (pid=%s, name=%s)z	 (pid=%s))râ   rç   Úsecondsr¦   r¢   rè   rõ   )ré   rÿ   r¦   r¢   r   r   r€   rç   e  s    zTimeoutExpired.__init__)NNr÷   r   r   r   r€   rþ   _  s   rþ   c                 C   sF   zt | ƒ| d }W n tk
r*   Y dS X |dk	r>t||ƒ}|S dS )z5Calculate percentage usage of 'used' against 'total'.éd   g        N)ÚfloatÚZeroDivisionErrorÚround)r‰   rˆ   Úround_rí   r   r   r€   rO   u  s    
c                    s2   t  ˆ¡‡ ‡fdd„ƒ}‡ fdd„}i ‰ ||_|S )a  A simple memoize decorator for functions supporting (hashable)
    positional arguments.
    It also provides a cache_clear() function for clearing the cache:

    >>> @memoize
    ... def foo()
    ...     return 1
        ...
    >>> foo()
    1
    >>> foo.cache_clear()
    >>>
    c                     sN   | t t| ¡ ƒƒf}z
ˆ | W S  tk
rH   ˆ| |Ž }ˆ |< | Y S X d S rå   )Ú	frozensetÚsortedÚitemsÚKeyError)rü   ÚkwargsÚkeyrí   ©ÚcacheÚfunr   r€   Úwrapper�  s    
zmemoize.<locals>.wrapperc                      s   ˆ   ¡  dS )zClear cache.N)Úclearr   )r  r   r€   Úcache_clear˜  s    zmemoize.<locals>.cache_clear)Ú	functoolsÚwrapsr  )r  r  r  r   r  r€   rL   �  s    c                    s6   t  ˆ ¡‡ fdd„ƒ}dd„ }dd„ }||_||_|S )aú  A memoize decorator which is disabled by default. It can be
    activated and deactivated on request.
    For efficiency reasons it can be used only against class methods
    accepting no arguments.

    >>> class Foo:
    ...     @memoize
    ...     def foo()
    ...         print(1)
    ...
    >>> f = Foo()
    >>> # deactivated (default)
    >>> foo()
    1
    >>> foo()
    1
    >>>
    >>> # activated
    >>> foo.cache_activate(self)
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    c                    sT   z| j ˆ  }W n@ tk
r*   ˆ | ƒ Y S  tk
rN   ˆ | ƒ }| j ˆ < Y nX |S rå   )Ú_cacheÚAttributeErrorr  rì   ©r  r   r€   r  »  s    z'memoize_when_activated.<locals>.wrapperc                 S   s
   i | _ dS )zjActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.N)r  ©Úprocr   r   r€   Úcache_activateÉ  s    z.memoize_when_activated.<locals>.cache_activatec                 S   s"   z| ` W n tk
r   Y nX dS )zDeactivate and clear cache.N)r  r  r  r   r   r€   Úcache_deactivateÎ  s    z0memoize_when_activated.<locals>.cache_deactivate)r  r  r  r  )r  r  r  r  r   r  r€   Úmemoize_when_activated¡  s    r  c              
   C   s\   zt  | ¡}W n< tk
rJ } z|jtjtjfkr4‚ W Y ¢dS d}~X Y nX t |j¡S dS )zœSame as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    FN)ÚosÚstatÚOSErrorÚerrnoÚEPERMÚEACCESÚS_ISREGÚst_mode)rÉ   ÚstÚerrr   r   r€   rK   Ú  s    c              
   C   sT   zt  | ¡ W n< tk
rJ } z|jtjtjfkr4‚ W Y ¢dS d}~X Y nX dS dS )zœSame as os.path.exists() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    FNT)r  r  r  r  r  r   )rÉ   r$  r   r   r€   rN   é  s    c               	   C   sd   t jrtdkrdS z4t   tt j¡} t | ¡� |  d¡ W 5 Q R X W dS  t jk
r^   Y dS X dS )z2Return True if IPv6 is supported on this platform.NF)z::1r   T)ÚsocketÚhas_ipv6r	   r   Ú
contextlibÚclosingÚbindÚerror)Úsockr   r   r€   rP   ø  s    c                 C   sv   i }d}t }|  d|¡}||kr"qr|  d||¡}||krh| ||… }| |d |… }|r`| ¡ }|||< |d }q|S )zCParse a C environ block of environment variables into a dictionary.r   ú ú=rz   )r   ÚfindÚupper)Údatarí   ÚposÚWINDOWS_Únext_posÚ	equal_posr
  rÑ   r   r   r€   rM     s    
c                 C   s6   t dkr| S zt | ¡W S  tk
r0   |  Y S X dS )z�Convert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)Úenumr%  ÚAddressFamilyÚ
ValueError©Únumr   r   r€   rQ   "  s    c                 C   s6   t dkr| S zt | ¡W S  tk
r0   |  Y S X dS )zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)r5  r%  Ú
SocketKindr7  r8  r   r   r€   rR   /  s    c                 C   s�   |t jtfkr&|rt|Ž }|r&t|Ž }|t jkrJ|ttfkrJ| |t¡}nt}t|ƒ}t|ƒ}|dkrxt	| |||||ƒS t
| ||||||ƒS dS )z2Convert a raw connection tuple to a proper ntuple.N)r%  r   r	   rÔ   r   Úgetr   rQ   rR   r6   r?   )r§   ÚfamÚtype_rª   r«   r¬   Ú
status_mapr¦   r   r   r€   rU   <  s    c                    s   ‡ fdd„}|S )zƒA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c                    s:   d| j ˆf ‰ | jd krˆ | _t | ¡‡ ‡fdd„ƒ}|S )Nz8%s() is deprecated and will be removed; use %s() insteadc                    s    t jˆ tdd� t| ˆƒ||ŽS )Nry   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚDeprecationWarningÚgetattr)ré   rü   r	  )rè   Úreplacementr   r€   ÚinnerY  s    z/deprecated_method.<locals>.outer.<locals>.inner)r|   rï   r  r  )r  rF  ©rE  ©rè   r€   ÚouterS  s     ÿ
z deprecated_method.<locals>.outerr   )rE  rI  r   rG  r€   rJ   O  s    c                   @   sB   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zddd„Zdd„ Z	d
S )Ú_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    c                 C   s    t  ¡ | _i | _i | _i | _d S rå   )Ú	threadingÚLockÚlockr  Ú	remindersÚreminder_keys©ré   r   r   r€   rç   f  s    
z_WrapNumbers.__init__c                 C   sT   || j kst‚|| jkst‚|| jks*t‚|| j |< ttƒ| j|< ttƒ| j|< d S rå   )r  ÚAssertionErrorrN  rO  r   ÚintÚset)ré   Ú
input_dictr¢   r   r   r€   Ú	_add_dictl  s    
z_WrapNumbers._add_dictc                 C   s\   | j | }t| ¡ ƒt| ¡ ƒ }|D ]0}| j| | D ]}| j| |= q8| j| |= q&dS )z†In case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)r  rS  ÚkeysrO  rN  )ré   rT  r¢   Úold_dictÚ	gone_keysÚgone_keyÚremkeyr   r   r€   Ú_remove_dead_reminderst  s    
z#_WrapNumbers._remove_dead_remindersc              	   C   s
  || j kr|  ||¡ |S |  ||¡ | j | }i }| ¡ D ]¾}|| }z|| }W n  tk
rt   |||< Y q<Y nX g }tt|ƒƒD ]f}	||	 }
||	 }||	f}|
|k rÔ| j| |  |7  < | j| |  	|¡ | 
|
| j| |  ¡ q†t|ƒ||< q<|| j |< |S )zkCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`
        )r  rU  r[  rV  r  ÚrangeÚlenrN  rO  Úaddrú   Útuple)ré   rT  r¢   rW  Únew_dictr
  Úinput_tupleÚ	old_tupleÚbitsÚiÚinput_valueÚ	old_valuerZ  r   r   r€   Úrun  s2    



z_WrapNumbers.runNc              	   C   sh   | j �X |dkr0| j ¡  | j ¡  | j ¡  n*| j |d¡ | j |d¡ | j |d¡ W 5 Q R X dS )z>Clear the internal cache, optionally only for function 'name'.N)rM  r  r  rN  rO  Úpop)ré   r¢   r   r   r€   r  ¦  s    

z_WrapNumbers.cache_clearc              
   C   s.   | j � | j| j| jfW  5 Q R £ S Q R X dS )z5Return internal cache dicts as a tuple of 3 elements.N)rM  r  rN  rO  rP  r   r   r€   Ú
cache_info²  s    z_WrapNumbers.cache_info)N)
r|   r}   r~   rï   rç   rU  r[  rg  r  ri  r   r   r   r€   rJ  a  s   '
rJ  c              
   C   s*   t j� t  | |¡W  5 Q R £ S Q R X dS )zÅGiven an `input_dict` and a function `name`, adjust the numbers
    which "wrap" (restart from zero) across different calls by adding
    "old value" to "new value" and return an updated dict.
    N)Ú_wnrM  rg  )rT  r¢   r   r   r€   rS   ¸  s    c                 K   s   t | df|ŽS )NÚrb)Úopen©Úfnamer	  r   r   r€   Úopen_binaryÆ  s    ro  c                 K   s*   t r| dt¡ | dt¡ t| df|ŽS )z¨On Python 3 opens a file in text mode by using fs encoding and
    a proper en/decoding errors handler.
    On Python 2 this is just an alias for open(name, 'rt').
    ÚencodingÚerrorsÚrt)ÚPY3Ú
setdefaultr4   r5   rl  rm  r   r   r€   Ú	open_textÊ  s    ru  ú%(value).1f%(symbol)sc                 C   sŠ   d}i }t |dd… ƒD ]\}}d|d d > ||< qt|dd… ƒD ].}| || krFt| ƒ||  }|tƒ    S qF|t|d | d� S )zŒUsed by various scripts. See:
    http://goo.gl/zeJZl

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	ÚBÚKÚMÚGÚTÚPÚEÚZÚYrz   Né
   r   )ÚsymbolrÑ   )Ú	enumerateÚreversedr  ÚlocalsÚdict)ÚnÚformatÚsymbolsÚprefixrd  Úsr�  rÑ   r   r   r€   rT   Ø  s    	c                   C   s   t jd jS )z+Return updated psutil.PROCFS_PATH constant.rã   )ÚsysÚmodulesÚPROCFS_PATHr   r   r   r€   Úget_procfs_pathì  s    rŽ  c                 C   s   | j ttd�S )N)rp  rq  )Údecoder4   r5   ©rŠ  r   r   r€   r�  ò  s    r�  c                 C   s   | S rå   r   r�  r   r   r€   r�  õ  s    c                 C   s`   t jdkrdS z2dd l}|  ¡ s$t‚| ¡  | d¡dks>t‚W n tk
rV   Y dS X dS d S )Nr[   Tr   ÚcolorsF)r  r¢   ÚcursesÚisattyrQ  Ú	setuptermÚtigetnumræ   )Úfiler’  r   r   r€   rX   þ  s    
Fc                 C   s�   t ƒ s
| S g }tddddddddd	d
�	}d|d< z|| }W n( tk
rd   tdt| ¡ ƒ ƒ‚Y nX | |¡ |r~| d¡ dd |¡| f S )z*Return an highlighted version of 'string'.Ú32Ú91Ú33Ú93Ú34Ú35Ú36Ú37Ú30)	ÚgreenÚredÚbrownÚyellowÚblueÚvioletÚ	lightblueÚgreyÚdarkgreyÚ29Nz#invalid color %r; choose between %sÚ1z[%sm%s[0mú;)rX   r…  r  r7  ÚlistrV  rú   rû   )rŠ  ÚcolorÚboldÚattrr‘  r   r   r€   rW     s(       ÿ
ÿ

c              	   C   s  t ƒ st| |d� nêtr.tt| ||ƒ|d� nÐddl}d}|jjj}|jjj}t	ddddd�}||d< z|| }W n, t
k
rž   td	|t| ¡ ƒf ƒ‚Y nX |r´|dkr´|d
7 }|tjkrÂdnd}	|j|_||	ƒ}
||
|ƒ zt| |d� W 5 ||
|ƒ X dS )z$Print a colorized version of string.©r–  r   Né   ry   r   é   )r   r¡  r¢  r£  z#invalid color %r; choose between %ré   iôÿÿÿiõÿÿÿ)rX   Úprintr   rW   ÚctypesÚwindllÚKernel32ÚGetStdHandleÚSetConsoleTextAttributer…  r  r7  r¬  rV  r‹  ÚstderrÚc_ulongÚrestype)rŠ  r­  r®  r–  rµ  ÚDEFAULT_COLORr¸  r¹  r‘  Ú	handle_idÚhandler   r   r€   rY      s6    
ÿ 
ÿ
ZPSUTIL_DEBUGc                 C   s6   t  t  ¡ j¡\}}}}}td||| f tjd� dS )z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.zpsutil-debug [%s:%s]> %sr°  N)ÚinspectÚgetframeinfoÚcurrentframeÚf_backr´  r‹  rº  )rè   rn  ÚlinenoÚ	func_nameÚlinesÚindexr   r   r€   rV   F  s    ÿÿc                 C   s   d S rå   r   rH  r   r   r€   rV   M  s    )N)N)rv  )NF)Žrï   Ú
__future__r   r   r'  r  r  r  r%  r  r‹  rK  rA  Úcollectionsr   r   r   r   r   r	   ÚImportErrorr
   Úversion_infor5  rs  Ú__all__r¢   r   r   ÚplatformÚ
startswithr   r   r   r   r   r   r   r   ÚAIXr*   r+   r'   r,   r.   r2   r&   r0   r1   r(   r)   r/   r-   r3   r   r!   r    r   r   r"   r   r   r   r   r   r   r#   r$   r%   ÚIntEnumr{   ÚglobalsÚupdateÚ__members__r„   r…   rƒ   Úgetfilesystemencodingr4   r5   Úgetfilesystemencodeerrorsr  rG   rC   rA   rB   rD   rH   r?   rE   rF   r@   r¹   r½   rÁ   rÄ   r7   r<   r=   r>   r9   r:   r;   r8   r6   rÔ   rI   ræ   râ   rñ   rø   rý   rþ   rO   rL   r  rK   rN   rP   rM   rQ   rR   rU   rJ   rJ  rS   rj  r  ri  ro  ru  rT   rŽ  r�  ÚstdoutrX   rW   rY   ÚboolÚgetenvrÀ  rV   r   r   r   r€   Ú<module>   s.  


                                                           å$

	


ÿ  þ ÿ   ý ÿÿ 
ÿ 
ÿ
ÿ ÿÿ	

ø


þ
 ÿ
 9
W	
	  ÿ#