+
    }ib                     >   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RIH
t
 ^ RIHt ^ RIHt  ^ RIHt  ^ RIHt ]! ]P"                  ! R4      4      t]! 4       t. RNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NR5NR6NR7NR8NR9NR:NR;NR<NR=NR>NR?NR@NRANRBNRCNRDNRENRFNt]P,                  RG8H  t]P,                  RH8H  t]P2                  P5                  RI4      t]P2                  P5                  RJ4      t]t]P2                  P5                  R4      t]P2                  P5                  RK4      t]P2                  P5                  RL4      t ];'       g    ];'       g    ] t!]P2                  P5                  R4      t"]P2                  P5                  RM4      t#RNt$ROt%RPt&RQt'RRt(RSt)RTt*RUt+RVt,RWt-RXt.RYt/RZt0R[t1R\t2R]t3R^t4R_t5R`t6Rat7Rbt8Rct9Rdt:Ret;Rft<Rgt= ! Rh Ri]P|                  4      t?]@! 4       P                  ]?P                  4        ! Rj Rk]P|                  4      tC]@! 4       P                  ]CP                  4       ]P                  ! 4       tE]P                  ! 4       tGRl]
]].]].3Rm]
].].3Rn]
.].3Ro]
].].3Rp]
.].3Rq]
].]].3Rr]
.]].3Rs].]].3/tH]e   ]HP                  Rt].].3Ru].].3/4       ]e!   ]"'       g   ]HP                  Rv].]].3/4        ! Rw Rx]I4      tJ ! Ry Rz]J4      tK ! R{ R|]K4      tL ! R} R~]J4      tM ! R R]J4      tNRR ltOR tPR tQR tRR tSR tTR tUR tVR tWRR ltXR tYR tZ ! R R4      t[R t\][! 4       t]]]P                  ]\n^        ]]P                  ]\n_        Rt`R taR tb]]b3R ltc]3R ltdRR lteR tfR tg]P]P                  3R l4       tiRR ltjRR]P                  3R ltkR tlR#   ] d    Rt ELi ; i  ] d    Rt ELi ; i)zCommon objects shared by __init__.py and _ps*.py modules.

Note: this module is imported by setup.py, so it should not import
psutil or third-party modules.
N)AF_INET)
SOCK_DGRAM)SOCK_STREAM)AF_INET6)AF_UNIXPSUTIL_DEBUG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   	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	open_textopen_binarycatbcatbytes2humanconn_to_ntupledebughiliteterm_supports_colorsprint_colorposixntlinuxdarwinopenbsdnetbsd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NONEc                   "    ] tR t^zt^t^t^ tRtR# )	NicDuplex N)__name__
__module____qualname____firstlineno__r   r   r    __static_attributes__rf       `/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/psutil/_common.pyre   re   z   s    OOrl   re   c                       ] tR t^tRtRtRtR# )BatteryTimerf   N)rg   rh   ri   rj   POWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDrk   rf   rl   rm   ro   ro      s    rl   ro   alltcptcp4udpudp4inetinet4inet6tcp6udp6unixc                   :   a  ] tR t^t o RtRtR tR tR tRtV t	R# )ErrorzIBase exception class. All other psutil exceptions inherit
from this one.
psutilc                    \         P                  ! 4       pV F-  p\        WR 4      pV'       g   VR8X  g   K   V^ 8X  g   K)  WBV&   K/  	  V# )Npid)collectionsOrderedDictgetattr)selfattrsinfonamevalues   &&   rm   	_infodictError._infodict   sC    &&(DD-E5A:"T
  rl   c                N   V P                  R4      pV'       dJ   RP                  RP                  VP                  4        UUu. uF  w  r#V RV: 2NK  	  upp4      4      pMRpRP                  \	        V RR4      V3 Uu. uF  qU'       g   K  VNK  	  up4      # u uppi u upi )	r   z({}), =N msg )r   ppidr   )r   formatjoinitemsr   )r   r   kvdetailsxs   &     rm   __str__Error.__str__   s    ~~56mm		DJJLALDAaS!<LABG GxxWT5"%=w$GM$Gq1$GMNN	 B Ns   B	B"B"c           	         V P                  R4      pRP                  VP                  4        UUu. uF  w  r#V RV: 2NK  	  upp4      pRV P                  P                   RV R2# u uppi )r   r   r   zpsutil.())r   r   r   secondsr   )r   r   r   	__class__rg   )r   r   r   r   r   s   &    rm   __repr__Error.__repr__   sf    ~~GH))djjlCldas!A5\lCD0017)1== Ds   A(
rf   N)
rg   rh   ri   rj   __doc__r   r   r   rk   __classdictcell____classdict__s   @rm   r   r      s&      J	O> >rl   r   c                   8   a  ] tR t^t o RtRtRR ltR tRtV tR# )NoSuchProcesszPException raised when a process with a certain PID doesn't
or no longer exists.
r   Nc                j    \         P                  V 4       Wn        W n        T;'       g    R V n        R# )zprocess no longer existsNr   __init__r   r   r   r   r   r   r   s   &&&&rm   r   NoSuchProcess.__init__   s(    t	444rl   c                `    V P                   V P                  V P                  V P                  33# Nr   r   r   r   r   s   &rm   
__reduce__NoSuchProcess.__reduce__   $    499dhh ?@@rl   r   r   r   NN	rg   rh   ri   rj   r   r   r   rk   r   r   s   @rm   r   r      s"      J5A Arl   r   c                   8   a  ] tR t^t o RtRtRR ltR tRtV tR# )ZombieProcessa  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                `    \         P                  WW$4       W0n        T;'       g    R V n        R# )z"PID still exists but it's a zombieN)r   r   r   r   )r   r   r   r   r   s   &&&&&rm   r   ZombieProcess.__init__   s'    t$4	>>>rl   c                v    V P                   V P                  V P                  V P                  V P                  33# r   )r   r   r   r   r   r   s   &rm   r   ZombieProcess.__reduce__   s*    499dii JKKrl   )r   r   NNNr   r   s   @rm   r   r      s"      J?
L Lrl   r   c                   8   a  ] tR t^t o RtRtRR ltR tRtV tR# )AccessDeniedz@Exception raised when permission to perform an action is denied.r   Nc                j    \         P                  V 4       Wn        W n        T;'       g    R V n        R# )r   Nr   r   s   &&&&rm   r   AccessDenied.__init__   s%    t	99"rl   c                `    V P                   V P                  V P                  V P                  33# r   r   r   s   &rm   r   AccessDenied.__reduce__   r   rl   r   r   r   r   s   @rm   r   r      s     JJA Arl   r   c                   8   a  ] tR tRt o RtRtRR ltR tRtV tR# )	TimeoutExpiredi  zORaised on Process.wait(timeout) if timeout expires and process
is still alive.
r   Nc                j    \         P                  V 4       Wn        W n        W0n        R V R2V n        R# )ztimeout after z secondsN)r   r   r   r   r   r   )r   r   r   r   s   &&&&rm   r   TimeoutExpired.__init__  s-    t	#G9H5rl   c                `    V P                   V P                  V P                  V P                  33# r   )r   r   r   r   r   s   &rm   r   TimeoutExpired.__reduce__  s$    txx CDDrl   )r   r   r   r   r   r   r   s   @rm   r   r     s"      J6E Erl   r   c                |     \        V 4      V,          ^d,          pVe   \        W24      pV#   \         d     R# i ; i)z5Calculate percentage usage of 'used' against 'total'.g        )floatroundZeroDivisionError)usedtotalround_rets   &&& rm   r7   r7     sE    T{U"c) $C
  s   , ;;c                f   a a \         P                  ! S 4      VV 3R l4       pV3R lp/ oW!n        V# )aq  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()
>>>

It supports:
 - functions
 - classes (acts as a @singleton)
 - staticmethods
 - classmethods

It does NOT support:
 - methods
c                     < V \        \        VP                  4       4      4      3p SV,          #   \         d+     S! T / TB ;pST&   M  \         d	   pTR hR p?ii ; iTu # i ; ir   )	frozensetsortedr   KeyError	Exception)argskwargskeyr   errcachefuns   *,   rm   wrappermemoize.<locals>.wrapper?  su    Yvflln567	: 	$#&#7#77eCj $t#$J	s2   0 A%A
	A%
AAAA%$A%c                 (   < S P                  4        R# )zClear cache.N)clear)r   s   rm   cache_clearmemoize.<locals>.cache_clearK  s    rl   )	functoolswrapsr   )r   r   r   r   s   f  @rm   r4   r4   '  s7    0 __S	 	 E%Nrl   c                j   a  \         P                  ! S 4      V 3R l4       pR pR pW!n        W1n        V# )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                 .  <  V P                   S,          pV#   \         d#     S! T 4      u #   \         d	   pTR hR p?ii ; i\         dG     S! T 4      pM  \         d	   pTR hR p?ii ; i YP                   S&    T#   \         d      T# i ; ii ; ir   )_cacheAttributeErrorr   r   )r   r   r   r   s   &  rm   r   'memoize_when_activated.<locals>.wrappero  s    	++c"C( 
'  	$$4y  $t#$ 	$$i $t#$#&C 
 
	 "  
		sn    B.BA<ABBABA+#A&&A++B/B  BBBBc                    / V n         R# )zcActivate cache. Expects a Process instance. Cache will be
stored as a "_cache" instance attribute.
N)r   procs   &rm   cache_activate.memoize_when_activated.<locals>.cache_activate  s     rl   c                0     V = R#   \         d     R# i ; i)zDeactivate and clear cache.N)r   r   r   s   &rm   cache_deactivate0memoize_when_activated.<locals>.cache_deactivate  s    	 		s    )r   r   r   r   )r   r   r   r   s   f   rm   memoize_when_activatedr   T  s=    6 __S 2 ,/Nrl   c                     \         P                  ! V 4      p\        P                  ! VP                  4      #   \         d    h \
         d     R# i ; i)zSame as os.path.isfile() but does not swallow EACCES / EPERM
exceptions, see:
http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
F)osstatS_ISREGst_modePermissionErrorOSError)pathsts   & rm   r3   r3     sH    
(WWT] ||BJJ''   s   8 AAAc                n     \         P                  ! V 4       R#   \         d    h \         d     R# i ; i)zSame as os.path.exists() but does not swallow EACCES / EPERM
exceptions. See:
http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
TF)r   r   r   r   )r   s   &rm   r6   r6     s6    

    s    444c                 *   \         P                  '       d	   \        f   R#  \         P                   ! \        \         P                  4      ;_uu_ 4       p V P	                  R4       RRR4       R#   + '       g   i     R# ; i  \
         d     R# i ; i)z2Return True if IPv6 is supported on this platform.NFT)z::1    )sockethas_ipv6r   r   bindr   )socks    rm   r8   r8     sb    ???h.]]8V%7%788DIIj! 9 98 s/   1B A/%B /B 	:B  B BBc                    / p^ p\         p V P                  RV4      pWB8:  d    V# V P                  RW$4      pWR8  d,   WV pW^,           V pV'       d   VP                  4       pWqV&   V^,           pKj  )zCParse a C environ block of environment variables into a dictionary. r   )r   findupper)datar   posWINDOWS_next_pos	equal_posr   r   s   &       rm   r5   r5     s     C
C H
99T3'? J IIc31	?9%CQ2EiikHlrl   c                V     \         P                  ! V 4      #   \         d    T u # i ; i)zyConvert a numeric socket family value to an IntEnum member.
If it's not a known member, return the numeric value itself.
)r  AddressFamily
ValueErrornums   &rm   r9   r9     s,    ##C(( 
    ((c                V     \         P                  ! V 4      #   \         d    T u # i ; i)zwConvert a numeric socket type value to an IntEnum member.
If it's not a known member, return the numeric value itself.
)r  
SocketKindr  r  s   &rm   r:   r:     s,      %% 
r  c           	        ^RI Hp V\        P                  \        09   d1   V'       d   VP
                  ! V!  pV'       d   VP
                  ! V!  pV\        P                  8X  d)   V\        \        09   d   VP                  V\        4      pM\        p\        V4      p\        V4      pVf   VP                  WW#WE4      # VP                  WW#WEV4      # )z2Convert a raw connection tuple to a proper ntuple.)_ntuples)r   r  r  r   r   addrr   getr   r9   r:   pconnsconn)	fdfamtype_laddrraddrstatus
status_mapr   ntps	   &&&&&&&& rm   rA   rA     s    !
v~~x((HHe$EHHe$E"""sw.A'A	2
#
CU#E
{yy%>>yy%sCCrl   c                   ^ RI pV P                  '       d   V P                  '       g   R# V P                  \        P
                  8X  d@   \        VP                  V P                   RV P                   2RR7      P                  4      # V P                  \        P                  8X  d@   \        VP                  V P                   RV P                   2RR7      P                  4      # R# )zZGiven the address ntuple returned by ``net_if_addrs()``
calculates the broadcast address.
N/F)strict)	ipaddressaddressnetmaskfamilyr  r   strIPv4Networkbroadcast_addressr   IPv6Network)r  r)  s   & rm   broadcast_addrr1  
  s     <<<t|||{{fnn$!!<<.$,,0 " 
 	

 {{foo%!!<<.$,,0 " 
 	
 &rl   c                   a  V 3R lpV# )z{A decorator which can be used to mark a method as deprecated
'replcement' is the method name which will be called instead.
c                    <a V P                    R S R2oV P                  f   SV n        \        P                  ! V 4      VV3R l4       pV# )z*() is deprecated and will be removed; use z
() insteadc                 b   < \         P                  ! S\        ^R7       \        V S4      ! V/ VB # )   )category
stacklevel)warningswarnDeprecationWarningr   )r   r   r   r   replacements   &*,rm   inner/deprecated_method.<locals>.outer.<locals>.inner-  s+    MM#(:qI4-t>v>>rl   )rg   r   r   r   )r   r<  r   r;  s   & @rm   outer deprecated_method.<locals>.outer%  sW    ||n }J( 	 ;;CK			? 
	? rl   rf   )r;  r>  s   f rm   r2   r2      s    
 Lrl   c                   L   a  ] tR tRt o RtR tR tR tR tRR lt	R	 t
R
tV tR# )_WrapNumbersi7  zFWatches numbers so that they don't overflow and wrap
(reset to zero).
c                d    \         P                  ! 4       V n        / V n        / V n        / V n        R # r   )	threadingLocklockr   	remindersreminder_keysr   s   &rm   r   _WrapNumbers.__init__<  s&    NN$	
rl   c                *   W P                   9  g   Q hW P                  9  g   Q hW P                  9  g   Q hWP                   V&   \        P                  ! \
        4      V P                  V&   \        P                  ! \        4      V P                  V&   R # r   )r   rF  rG  r   defaultdictintset)r   
input_dictr   s   &&&rm   	_add_dict_WrapNumbers._add_dictB  st    ::%%%>>)))-----%

4*66s;t#.#:#:3#?4 rl   c                >   V P                   V,          p\        VP                  4       4      \        VP                  4       4      ,
          pV FL  pV P                  V,          V,           F  pV P                  V,          V K  	  V P                  V,          V KN  	  R# )zvIn case the number of keys changed between calls (e.g. a
disk disappears) this removes the entry from self.reminders.
N)r   rL  keysrG  rF  )r   rM  r   old_dict	gone_keysgone_keyremkeys   &&&    rm   _remove_dead_reminders#_WrapNumbers._remove_dead_remindersJ  s~     ::d#(3z/@+AA	!H,,T28<<NN4(0 =""4(2 "rl   c                   W P                   9  d   V P                  W4       V# V P                  W4       V P                   V,          p/ pV F  pW,          p W5,          p. p\	        \        T4      4       F  p	Yi,          p
Yy,          pYY3pY8  dP   T P                  T,          T;;,          T,          uu&   T P                  T,          T,          P                  T4       TP                  YP                  T,          T,          ,           4       K  	  \        T4      YE&   K  	  WP                   V&   V#   \         d	    YdT&    K  i ; i)z\Cache dict and sum numbers which overflow and wrap.
Return an updated copy of `input_dict`.
)r   rN  rV  r   rangelenrF  rG  addappendtuple)r   rM  r   rR  new_dictr   input_tuple	old_tuplebitsiinput_value	old_valuerU  s   &&&          rm   run_WrapNumbers.runU  s%    zz!NN:,##J5::d#C$/K$M	 D3{+,)n%L	*NN4(0I=0&&t,S155f=K..*>v*FFG - "$KHM+ . &

4)   !,	s   D55EENc                   V P                   ;_uu_ 4        VfP   V P                  P                  4        V P                  P                  4        V P                  P                  4        MTV P                  P                  VR4       V P                  P                  VR4       V P                  P                  VR4       RRR4       R#   + '       g   i     R# ; i)z>Clear the internal cache, optionally only for function 'name'.N)rE  r   r   rF  rG  pop)r   r   s   &&rm   r   _WrapNumbers.cache_clear|  s    YYY|

  "$$&""((*

tT*""4.""&&tT2 YYYs   B(CC	c                    V P                   ;_uu_ 4        V P                  V P                  V P                  3uuRRR4       #   + '       g   i     R# ; i)z5Return internal cache dicts as a tuple of 3 elements.N)rE  r   rF  rG  r   s   &rm   
cache_info_WrapNumbers.cache_info  s/    YYYJJ0B0BC YYYs   #AA	)r   rE  rG  rF  r   )rg   rh   ri   rj   r   r   rN  rV  re  r   rk  rk   r   r   s   @rm   rA  rA  7  s1      @	3%N
3D Drl   rA  c                    \         P                  ;_uu_ 4        \         P                  W4      uuRRR4       #   + '       g   i     R# ; i)zGiven 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)_wnrE  re  )rM  r   s   &&rm   r;   r;     s%    
 
wwz( 
s	   9A
	c                 &    \        V R \        R7      # )rb)	buffering)openFILE_READ_BUFFER_SIZE)fnames   &rm   r=   r=     s    t'<==rl   c                    \        V \        \        \        R7      p \        Vn        V#   \
         d     T# \         d    TP                  4        h i ; i)zYOpen a file in text mode by using the proper FS encoding and
en/decoding error handlers.
)rq  encodingerrors)rr  rs  r/   r0   _CHUNK_SIZEr   r   close)rt  fobjs   & rm   r<   r<     sa     '	D 1 K  
 K	  

s   * AAAc                :   V\         J d,   V! V 4      ;_uu_ 4       pVP                  4       uuRRR4       #  V! V 4      ;_uu_ 4       pVP                  4       uuRRR4       #   + '       g   i     R# ; i  + '       g   i     R# ; i  \         d    Tu # i ; i)zRead entire file content and return it as a string. File is
opened in text mode. If specified, `fallback` is the value
returned in case of error, either if the file does not exist or
it can't be read().
N)_DEFAULTreadr   )rt  fallback_openfs   &&& rm   r>   r>     sn     85\\Q668 \	uvvx 	 \\  	O	s:   A"B
 A6
B
 "A3	6B	B
 B
 
BBc                $    \        W\        R7      # )z,Same as above but opens file in binary mode.)r~  r  )r>   r=   )rt  r~  s   &&rm   r?   r?     s    u{;;rl   c                \   Rp/ p\        VR,          4       F  w  rE^V^,           ^
,          ,          W5&   K   	  \        VR,          4       FD  p\        V 4      W6,          8  g   K  \        V 4      W6,          ,          pV\	        4       ,          u # 	  V\        V^ ,          V R7      ,          # )zUsed by various scripts. See: https://code.activestate.com/recipes/578019-bytes-to-human-human-to-bytes-converter/?in=user-4178764.

>>> bytes2human(10000)
'9.8K'
>>> bytes2human(100001221)
'95.4M'
:   NN)symbolr   )	BKMGTPEZY)	enumeratereversedabsr   localsdict)nr   symbolsprefixrb  sr  r   s   &&      rm   r@   r@     s     <GF'"+&!a%2%	 '72;'q6V^#!Hv~-EFH$$ ( D
!444rl   c                 D    \         P                  R,          P                  # )z+Return updated psutil.PROCFS_PATH constant.r   )sysmodulesPROCFS_PATHrf   rl   rm   get_procfs_pathr    s    ;;x ,,,rl   c                 8    V P                  \        \        R 7      # ))rv  rw  )decoder/   r0   )r  s   &rm   r  r    s    88Xm8<<rl   c                     \        V R 4      '       d   V P                  4       '       g   R#  V P                  4        R#   \         d     R# i ; i)isattyFT)hasattrr  filenor   files   &rm   rD   rD     sC    4""$++--   s   > AAFc                h   \        4       '       g   V # . p\        RRRRRRRRR	R
7	      pRVR&    WA,          pTP                  T4       T'       d   TP                  R4       RRP                  T4       RT  R2#   \         d.    RT: R\        TP	                  4       4       2p\        T4      Rhi ; i)z*Return an highlighted version of 'string'.343330323736913593)	bluebrowndarkgreygreengrey	lightblueredvioletyellow29Ninvalid color z; choose amongst 1z[;mz[0m)rD   r  r   listrQ  r  r\  r   )r  colorboldattrcolorsr   s   &&&   rm   rC   rC   	  s    !!D
F F4L( 	KKC388D>"!A3g..  (ui'8fkkm9L8MNo4'(s   A9 98B1c                   \        4       '       g   \        WR7       R# \        '       d   \        \        WV4      VR7       R# ^ RIp^pVP
                  P                  P                  pVP
                  P                  P                  p\        ^^^^R7      pWXR&    W,          pT'       d   T^8:  d
   T^,          pT\        P                  J d   RMRp
TP                   Tn        T! T
4      pT! Y4        \        YR7       T! Y4       R#   \         d/    RT: R\        TP                  4       4      : 2p	\        T	4      Rhi ; i  T! Y4       i ; i)z$Print a colorized version of string.r  N)r  r  r  r  r  z; choose between ii)rD   printr   rC   ctypeswindllKernel32GetStdHandleSetConsoleTextAttributer  r   r  rQ  r  r  stderrc_ulongrestype)r  r  r  r  r  DEFAULT_COLORr  r  r  r   	handle_idhandles   &&&&        rm   rE   rE   %  s/     !!a	fQt$40}}--::MM"":: 	  A1Aa8$t	,ME EQJQJE3::-C3	%~~i(.	;!#F:!  	, 	 *'*,  S/t+	,  $F:s   D 8E
 9E

Ec                <   \         '       d   ^ RIpVP                  VP                  4       P                  4      w  r#rEp\        V \        4      '       d#   \        V \        4      '       d   RV  2p MRV : 2p \        RV RV RV  2\        P                  R7       R# R# )z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.Nz	ignoring zpsutil-debug [:z]> r  )r   inspectgetframeinfocurrentframef_back
isinstancer   r   r  r  r  )r   r  rt  lineno__lines_indexs   &      rm   rB   rB   M  s    |+2+?+?  ")),
(q& c9%%#w''!#'!#)UG1VHCu5CJJ	
 rl   )freebsdmidnightbsd)sunossolarisr   i   )z%(value).1f%(symbol)s)NF)mr   r   enumr   r   r  r   r  rC  r8  r   r   r   r   ImportErrorr   boolgetenvr   objectr|  __all__r   r   r   platform
startswithr
   r   r   r   r   r   r	   r   AIXr%   r&   r"   r'   r)   r-   r!   r+   r,   r#   r$   r*   r(   r.   r   r   r   r   r   r   r   r   r   r   r   r   IntEnumre   globalsupdate__members__ro   getfilesystemencodingr/   getfilesystemencodeerrorsr0   r1   r   r   r   r   r   r   r7   r4   r   r3   r6   r8   r5   r9   r:   rA   r1  r2   rA  r;   rn  r   rk  rs  r=   r<   r>   r?   r@   r  r  stdoutrD   rC   rE   rB   rf   rl   rm   <module>r     s  
    	   
     
 BIIn-.8')24;=BDK  
 
 $
 &4
 6H  ' )8 :G  ! #2 4D  ) +?  ' )6 8G  ( *: <N  , .@  % '6  !   !  ",!$ %$ %%$ '6%$ 8A%& '& 0'& 2A'( )( ')( );)( =K)* +* +* !&+* (.+, -, $-, &--0 10 %10 '41D 	7
''T/()
,,
!
!"<
=
,,
!
!)
,		 	 	*""""F 45	lle$   $    ! 
	  	  && '$,, 
 	  (( ) $$&--/ 
Wh(;
*CD	Wh+/
gY&	Wh*.
gY%
gx ;
";<wi+z23xj;
34		 (k]+(j\* 
 ufy;
*CDEF>I >BAE A"LM L&A5 AEU E.	*ZDN(	8D*
,.TD TDn) n?? ..  " >4 !	 " " <
5&-
= 	!jj  	/: CJJ%;P
g  H  Gs#   O? P ?	PP	PP