+
    VN÷h¨o  ã                   óª
  € 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  ^ 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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RGNRHNRINRJNRKNRLNRMNRNNRONRPNRQNRRNRSNRTNRUNRVNRWNRXNRYNRZNt]P.                  R[8H  t]P.                  R\8H  t]P4                  P7                  R]4      t]P4                  P7                  R^4      t]t]P4                  P7                  R¿4      t]P4                  P7                  R_4      t ]P4                  P7                  R`4      t!];'       g    ] ;'       g    ]!t"]P4                  P7                  RÀ4      t#]P4                  P7                  Ra4      t$Rbt%Rct&Rdt'Ret(Rft)Rgt*Rht+Rit,Rjt-Rkt.Rlt/Rmt0Rnt1Rot2Rpt3Rqt4Rrt5Rst6Rtt7Rut8Rvt9Rwt:Rxt;Ryt<Rzt=R{t> ! R| R}]P~                  4      t@]A! 4       P…                  ]@P†                  4        ! R~ R]P~                  4      tD]A! 4       P…                  ]DP†                  4       ]PŠ                  ! 4       tF]PŽ                  ! 4       tH]
! RD. RÁO4      tI]
! R@. RÂO4      tJ]
! R>. RÃO4      tK]
! R?. RÄO4      tL]
! RA. RÅO4      tM]
! RE. RÆO4      tN]
! R<. RÇO4      tO]
! RB. RÈO4      tP]
! RC. RÉO4      tQ]
! R=. RÊO4      tR]
! R�. RËO4      tS]
! Rƒ. RÌO4      tT]
! R…. RÍO4      tU]
! R†R„R‚.4      tV]
! R4. RÎO4      tW]
! R9R‡R€.4      tX]
! R:. RÏO4      tY]
! R;. RÐO4      tZ]
! R6. RÐO4      t[]
! R7. RÑO4      t\]
! R8RˆR‰.4      t]]
! R5RŠR‹.4      t^]
! R3. RÒO4      t_]
! RŒR�RŽ.4      t`R�]]].]].3R�]].].3R‘].].3R’]].].3R“].].3R”]].]].3R•].]].3R–].]].3/ta]e   ]aP…                  R—].].3R˜].].3/4       ]e!   ]#'       g   ]aP…                  R™].]].3/4        ! Rš R›]b4      tc ! Rœ R�]c4      td ! Rž RŸ]d4      te ! R  R¡]c4      tf ! R¢ R£]c4      tgRÓR¤ lthR¥ tiR¦ tjR§ tkR¨ tlR© tmRª tnR« toR¬ tpRÓR­ ltqR® trR¯ ts ! R° R±4      ttR² tu]t! 4       tv]vPî                  ]unw        ]vPð                  ]unx        RÔtyR³ tzR´ t{]]{3Rµ lt|]3R¶ lt}RÕR· lt~R¸ tR¹ t€]i]EP                  3Rº l4       t‚RÖR¼ ltƒRR»]EP                  3R½ lt„R¾ t…R#   ] d    Rt ELûi ; i  ] d    Rt ELi ; i)×z�Common 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)Ú
namedtuple)Ú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   Ú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Ú	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^t^t^t^ tRtR# )Ú	NicDuplex© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r    r!   Ú__static_attributes__rz   ó    Ú0/usr/lib/python3/dist-packages/psutil/_common.pyry   ry      s   † Ø€OØ€OØÔr€   ry   c                   ó   € ] tR t^‰tRtRtRtR# )ÚBatteryTimerz   Néÿÿÿÿéþÿÿÿ)r{   r|   r}   r~   ÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDr   rz   r€   r�   rƒ   rƒ   ‰   s   † ØÐØÔr€   rƒ   ÚfdÚscpufreqÚcurrentÚshwtempÚlabelÚsbatteryÚsfanÚpathÚioclassÚvalueÚ	voluntaryÚinvoluntaryÚaddrÚipÚportÚallÚtcpÚtcp4ÚudpÚudp4ÚinetÚinet4Úinet6Útcp6Úudp6Úunixc                   ó:   a € ] tR tRt o RtRtR tR tR tRtV t	R# )	ÚErrori  zIBase 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Únamer‘   s   &&   r�   Ú	_infodictÚError._infodict  sC   € Ü×&Ò&Ó(ˆÛˆDÜ˜D¨Ó-ˆEß˜ ž¨5°A®:Ø"�T“
ñ ð ˆr€   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   &     r�   Ú__str__ÚError.__str__  s”   € à�~‰~Ð5Ó6ˆßØ—m‘mØ—	‘	°D·J±J´LÔA±L©D¨A˜a˜S  !¡›<±LÒAÓBó‰Gð ˆGØ�x‰x¤W¨T°5¸"Ó%=¸wÑ$GÓMÑ$G˜qË1Ÿ˜Ñ$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__r{   )rª   r¬   rº   r»   r¼   s   &    r�   Ú__repr__ÚError.__repr__  sf   € à�~‰~ÐGÓHˆØ—)‘)°d·j±j´lÔC±l©d¨a ˜s ! A¡5›\±lÒCÓDˆØ˜Ÿ™×0Ñ0Ð1°°7°)¸1Ð=Ð=ùó Ds   °A(
rz   N)
r{   r|   r}   r~   Ú__doc__r®   r¾   rÅ   r   Ú__classdictcell__©Ú__classdict__s   @r�   r£   r£     s&   ø‡ € ñð €Jòò	O÷>ð >r€   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# )	ÚNoSuchProcessi%  zPException 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   &&&&r�   rÏ   ÚNoSuchProcess.__init__,  s(   € Ü�‰�tÔØŒØŒ	Ø×4Ð4Ð4ˆŽr€   c                ó`   € V P                   V P                  V P                  V P                  33# ©N©rÄ   r¦   r­   r´   ©rª   s   &r�   Ú
__reduce__ÚNoSuchProcess.__reduce__2  ó$   € Ø—‘ §¡¨4¯9©9°d·h±hÐ ?Ð@Ð@r€   ©r´   r­   r¦   ©NN©	r{   r|   r}   r~   rÇ   rÏ   rÖ   r   rÈ   rÉ   s   @r�   rÌ   rÌ   %  s"   ø‡ € ñð €Jô5÷Að Ar€   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# )	ÚZombieProcessi6  a  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   &&&&&r�   rÏ   ÚZombieProcess.__init__@  s'   € Ü×Ñ˜t¨$Ô4ØŒ	Ø×>Ð>Ð>ˆŽr€   c                óv   € V P                   V P                  V P                  V P                  V P                  33# rÓ   )rÄ   r¦   r­   r¶   r´   rÕ   s   &r�   rÖ   ÚZombieProcess.__reduce__E  s*   € Ø—‘ §¡¨4¯9©9°d·i±iÀÇÁÐ JÐKÐKr€   )r´   r¶   ©NNNrÛ   rÉ   s   @r�   rÝ   rÝ   6  s"   ø‡ € ñð €Jô?÷
Lð Lr€   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# )	ÚAccessDeniediI  z@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   &&&&r�   rÏ   ÚAccessDenied.__init__N  s%   € Ü�‰�tÔØŒØŒ	Ø—9�9˜"ˆŽr€   c                ó`   € V P                   V P                  V P                  V P                  33# rÓ   rÔ   rÕ   s   &r�   rÖ   ÚAccessDenied.__reduce__T  rØ   r€   rÙ   râ   rÛ   rÉ   s   @r�   rä   rä   I  s   ø‡ € ÙJà€Jô÷Að Ar€   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# )	ÚTimeoutExpirediX  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   &&&&r�   rÏ   ÚTimeoutExpired.__init___  s-   € Ü�‰�tÔØŒØŒØŒ	Ø# G 9¨HÐ5ˆŽr€   c                ó`   € V P                   V P                  V P                  V P                  33# rÓ   )rÄ   rÃ   r¦   r­   rÕ   s   &r�   rÖ   ÚTimeoutExpired.__reduce__f  s$   € Ø—‘ §¡¨t¯x©x¸¿¹Ð CÐDÐDr€   )r´   r­   r¦   rÃ   rÚ   rÛ   rÉ   s   @r�   rê   rê   X  s"   ø‡ € ñð €Jô6÷Eð Er€   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   &&& r�   rK   rK   o  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   *,   €€r�   ÚwrapperÚmemoize.<locals>.wrapper“  su   ø€ à”Yœv f§l¡l£nÓ5Ó6Ð7ˆð	Ø˜•:ÐøÜô 	ð$Ù#&¨Ð#7°Ñ#7Ð7��e˜C’jøÜô $Ø˜tÐ#ûð$úàŠJð	ús2   §0 °A%¼A
Á	A%Á
AÁAÁAÁA%Á$A%c                 ó(   <€ S P                  4        R# )zClear cache.N)Úclear)r  s   €r�   Úcache_clearÚmemoize.<locals>.cache_clearŸ  s   ø€ à�‰Žr€   )Ú	functoolsÚwrapsr  )r  r  r  r  s   f  @r�   rH   rH   {  s7   ù€ ô0 ‡_‚_�SÓõ	ó ð	õð €EØ%ÔØ€Nr€   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   &  €r�   r  Ú'memoize_when_activated.<locals>.wrapperÃ  s¶   ø€ ð	à—+‘+˜cÕ"ˆCð( ˆ
øô' ô 	$ð$Ù˜4“yÒ øÜô $Ø˜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   &r�   Úcache_activateÚ.memoize_when_activated.<locals>.cache_activateÝ  s   € ð ˆŽr€   c                ó0   €  V = R#   \         d     R# i ; i)zDeactivate and clear cache.N)r  r  r  s   &r�   Úcache_deactivateÚ0memoize_when_activated.<locals>.cache_deactivateã  s   € ð	Ø’øÜô 	Úð	ús   ‚ †”)r	  r
  r  r  )r  r  r  r  s   f   r�   Úmemoize_when_activatedr  ¨  s=   ø€ ô6 ‡_‚_�SÓôó ðò2òð ,ÔØ/ÔØ€Nr€   c                óª   €  \         P                  ! V 4      p\        P                  ! VP                  4      #   \         d    h \
         d     R# i ; i)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.
F)ÚosÚstatÚS_ISREGÚst_modeÚPermissionErrorÚOSError)r�   Ústs   & r�   rG   rG   ï  sH   € ð
(Ü�WŠW�T‹]ˆô �|Š|˜BŸJ™JÓ'Ð'øô ô ØÜô Úðús   ‚8 ¸AÁAÁAc                ón   €  \         P                  ! V 4       R#   \         d    h \         d     R# i ; i)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.
TF)r  r  r  r  )r�   s   &r�   rJ   rJ   þ  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    r�   rL   rL     sb   € ä�?�?ˆ?œhÒ.ÙðÜ�]Š]œ8¤V×%7Ñ%7×8Ô8¸DØ�I‰I�jÔ!÷ 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   &       r�   rI   rI     s„   € ð €CØ
€Cô €HØ
Ø—9‘9˜T 3Ó'ˆàŒ?Øð €Jð —I‘I˜c 3Ó1ˆ	ØŒ?Ø˜9Ð%ˆCØ Q�¨Ð2ˆEçØ—i‘i“k�Ø�‰HØ˜�lŠr€   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   &r�   rM   rM   5  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$  Ú
SocketKindr3  r4  s   &r�   rN   rN   ?  s,   € ðÜ× Ò  Ó%Ð%øÜô ØŠ
ðúr6  c           	     ól  € V\         P                  \        09   d#   V'       d
   \        V!  pV'       d
   \        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   \        WW#WE4      # \        WW#WEV4      # )z2Convert a raw connection tuple to a proper ntuple.)r$  r   r   r”   r   Úgetr   rM   rN   r2   r;   )rˆ   ÚfamÚtype_ÚladdrÚraddrÚstatusÚ
status_mapr¦   s   &&&&&&&&r�   rU   rU   I  s“   € à
Œv�~‰~œxÐ(Ô(ßÜ˜%‘LˆEßÜ˜%‘LˆEØ”×"Ñ"Ô" s¬w¼Ð.AÔ'AØ—‘ ¬	Ó2‰äˆÜ
˜#Ó
€CÜ˜UÓ#€EØ
‚{Ü�R˜e¨EÓ:Ð:ä�R˜e¨E¸3Ó?Ð?r€   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”   rD  s   & r�   Úbroadcast_addrrL  \  s¾   € ó à�<�<ˆ<˜tŸ|Ÿ|˜|ÙØ‡{�{”f—n‘nÔ$ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ó çÑó
ð 	
ð
 ‡{�{”f—o‘oÔ%ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ó çÑó
ð 	
ñ &r€   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   &*,€€r�   ÚinnerÚ/deprecated_method.<locals>.outer.<locals>.inner  s+   ø€ ä�MŠM˜#Ô(:ÀqÕIÜ˜4 Ô-¨tÐ>°vÑ>Ð>r€   )r{   rÇ   r	  r
  )r  rW  r´   rV  s   & @€r�   ÚouterÚ deprecated_method.<locals>.outerw  sW   ù€ à�|‰|ˆnð Øˆ}˜Jð(ð 	ð �;‰;ÒØˆCŒKä	�Š˜Ó	õ	?ó 
ð	?ð ˆr€   rz   )rV  rY  s   f r�   rF   rF   r  s   ø€ õ
ð €Lr€   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# )Ú_WrapNumbersi‰  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   &r�   rÏ   Ú_WrapNumbers.__init__Ž  s&   € Ü—N’NÓ$ˆŒ	ØˆŒ
ØˆŒØˆÖr€   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  ra  rb  r§   ÚdefaultdictÚintÚset)rª   Ú
input_dictr­   s   &&&r�   Ú	_add_dictÚ_WrapNumbers._add_dict”  st   € ØŸ:™:Ô%Ð%Ð%ØŸ>™>Ô)Ð)Ð)Ø×-Ñ-Ô-Ð-Ð-Ø%�
‰
�4ÑÜ*×6Ò6´sÓ;ˆ�‰�tÑÜ#.×#:Ò#:¼3Ó#?ˆ×Ñ˜4Ó r€   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  rg  Úkeysrb  ra  )rª   rh  r­   Úold_dictÚ	gone_keysÚgone_keyÚremkeys   &&&    r�   Ú_remove_dead_remindersÚ#_WrapNumbers._remove_dead_remindersœ  s~   € ð —:‘:˜dÕ#ˆÜ˜Ÿ™›Ó(¬3¨z¯©Ó/@Ó+AÕAˆ	Û!ˆHØ×,Ñ,¨TÕ2°8×<Ð<�Ø—N‘N 4Õ(¨Ò0ñ =à×"Ñ" 4Õ(¨Ò2ó "r€   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Y«8  dP   T P                  T,          T;;,          T,          uu&   T P                  T,          T,          P                  T4       TP                  Y P                  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  ri  rq  rû   ÚrangeÚlenra  rb  ÚaddÚappendÚtuple)rª   rh  r­   rm  Únew_dictrÿ   Úinput_tupleÚ	old_tupleÚbitsÚiÚinput_valueÚ	old_valuerp  s   &&&          r�   ÚrunÚ_WrapNumbers.run§  s%  € ð —z‘zÔ!à�N‰N˜:Ô,ØÐà×#Ñ# JÔ5à—:‘:˜dÕ#ˆØˆÛˆCØ$�/ˆKðØ$�M�	ð ˆDÜœ3˜{Ó+Ö,�Ø)�n�Ø%�L�	Ø˜�ØÔ*à—N‘N 4Õ(¨×0°IÕ=Ó0Ø×&Ñ& tÕ,¨SÕ1×5Ñ5°fÔ=Ø—‘˜K¯.©.¸Õ*>¸vÕ*FÕFÖGñ -ô " $›KˆH‹Mñ+ ð. &�
‰
�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)r`  r  r  ra  rb  Úpop)rª   r­   s   &&r�   r  Ú_WrapNumbers.cache_clearÎ  sŠ   € à�Y�Y‹YØŠ|Ø—
‘
× Ñ Ô"Ø—‘×$Ñ$Ô&Ø×"Ñ"×(Ñ(Õ*à—
‘
—‘˜t TÔ*Ø—‘×"Ñ" 4¨Ô.Ø×"Ñ"×&Ñ& t¨TÔ2÷ �Y�YŠYús   •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)r`  r  ra  rb  rÕ   s   &r�   Ú
cache_infoÚ_WrapNumbers.cache_infoÚ  s/   € à�Y�Y‹YØ—J‘J §¡°×0BÑ0BÐC÷ �Y�Y‹Yús   •#AÁA	)r  r`  rb  ra  rÓ   )r{   r|   r}   r~   rÇ   rÏ   ri  rq  r€  r  r†  r   rÈ   rÉ   s   @r�   r\  r\  ‰  s1   ø‡ € ñò ò@ò	3ò%ôN
3÷Dð Dr€   r\  c                óš   € \         P                  ;_uu_ 4        \         P                  W4      uuRRR4       #   + '       g   i     R# ; i)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)Ú_wnr`  r€  )rh  r­   s   &&r�   rO   rO   à  s%   € ô
 
��‹Ü�w‰w�zÓ(÷ 
��‹ús	   ™9¹A
	c                 ó&   € \        V R \        R7      # )Úrb)Ú	buffering)ÚopenÚFILE_READ_BUFFER_SIZE)Úfnames   &r�   rQ   rQ   û  s   € Ü��tÔ'<Ô=Ð=r€   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.
)rŒ  ÚencodingÚerrors)r�  rŽ  r0   r1   Ú_CHUNK_SIZEr  rü   Úclose)r�  Úfobjs   & r�   rP   rP   ÿ  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)zËRead 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  )r�  ÚfallbackÚ_openÚfs   &&& r�   rR   rR     sn   € ð ”8ÓÙ�5�\Œ\˜QØ—6‘6“8÷ Š\ð	Ù�u—” Ø—v‘v“x÷ ’÷	 �\ˆ\ú÷ —�ûäô 	ØŠ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š  )rR   rQ   )r�  r™  s   &&r�   rS   rS   *  s   € äˆu¬{Ô;Ð;r€   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      ,          # )zÆUsed 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Úprefixr}  ÚsrŸ  r‘   s   &&      r�   rT   rT   /  s�   € ð <€GØ€FÜ˜' "�+Ö&‰ˆØ˜!˜a�% 2�Õ%ˆ‹	ñ 'ä˜7 2�;Ö'ˆÜˆq‹6�V•^Ö#Ü˜!“H˜v�~Õ-ˆEØœF›HÕ$Ò$ñ (ð ”D ¨¥
°!Ô4Õ4Ð4r€   c                 óD   € \         P                  R,          P                  # )z+Return updated psutil.PROCFS_PATH constant.r¤   )ÚsysÚmodulesÚPROCFS_PATHrz   r€   r�   Úget_procfs_pathr¶  B  s   € ä�;‰;�xÕ ×,Ñ,Ð,r€   c                 ó8   € V P                  \        \        R 7      # ))r‘  r’  )Údecoder0   r1   )r±  s   &r�   r¸  r¸  G  s   € Ø�8‰8œX¬mˆ8Ó<Ð<r€   c                 óä   € \         P                  R 8X  d   R#  ^ RIpV P                  4       '       g   Q hVP	                  4        VP                  R4      ^ 8”  g   Q h R#   \         d     R# i ; i)r[   TNÚcolorsF)r  r­   ÚcursesÚisattyÚ	setuptermÚtigetnumrü   )Úfiler»  s   & r�   rX   rX   P  sd   € ä	‡w�w�$„Ùð	Ûà�{‰{�}Š}Ðˆ}Ø×ÑÔØ�‰˜xÓ(¨1Ô,Ð,Ñ,ñ øô ô Úðús   ™A  ³*A  Á 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)rX   r­  rû   Úlistrl  r3  rw  r¸   )r±  ÚcolorÚboldÚattrrº  r´   s   &&&   r�   rW   rW   `  sÈ   € ä×!Ò!ØˆØ€DÜØØØØØØØØØô
€Fð €Fˆ4�Lð(Ø•ˆð 	‡K�K�ÔßØ�‰�CÔØ�3—8‘8˜D“>Ð" ! A 3 gÐ.Ð.øô ô (Ø˜u™iÐ'8¼¸f¿k¹k»mÓ9LÐ8MÐNˆÜ˜‹o 4Ð'ð(ú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! Y±4        \        YR7       T! Yµ4       R#   \         d/    RT: R\        TP                  4       4      : 2p	\        T	4      Rhi ; i  T! Yµ4       i ; i)z$Print a colorized version of string.©r¿  N)rÍ  rÐ  rË  rÒ  rÔ  z; choose between iôÿÿÿiõÿÿÿ)rX   Úprintr   rW   ÚctypesÚwindllÚKernel32ÚGetStdHandleÚSetConsoleTextAttributer­  rû   rØ  rl  r3  r³  ÚstderrÚc_ulongÚrestype)r±  rÙ  rÚ  r¿  rß  ÚDEFAULT_COLORrâ  rã  rº  r´   Ú	handle_idÚhandles   &&&&        r�   rY   rY   |  s/  € ô  ×!Ò!Üˆa×ß	‹ÜŒf�Q˜tÓ$¨4×0ãàˆØ—}‘}×-Ñ-×:Ñ:ˆà�M‰M×"Ñ"×:Ñ:ð 	 ô ˜A 1¨A°aÔ8ˆØ$ˆt‰ð	,Ø•MˆE÷ �E˜Q”JØ�Q�JˆEà¤3§:¡:Ó-‘C°3ˆ	Ø%Ÿ~™~ˆÔÙ˜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ì  r�  ÚlinenoÚ_Ú_linesÚ_indexs   &      r�   rV   rV   ¤  s�   € çƒ|Ûà+2×+?Ñ+?Ø× Ñ Ó"×)Ñ)ó,
Ñ(ˆ�q &ô �cœ9×%Ò%Ü˜#œw×'Ò'à! # Ð'‘à! #¡Ð)�ÜØ˜U˜G 1 V H¨C°¨uÐ5¼C¿J¹J÷	
ñ r€   )ÚfreebsdÚmidnightbsd)ÚsunosÚsolaris)rô   ró   ÚfreeÚpercentÚsinÚsout)rô   ró   rù  rú  )Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesÚ	read_timeÚ
write_time)ÚdeviceÚ
mountpointÚfstypeÚopts)Ú
bytes_sentÚ
bytes_recvÚpackets_sentÚpackets_recvÚerrinÚerroutÚdropinÚdropout)r­   ÚterminalÚhostÚstartedr¦   )rˆ   rG  Útyper=  r>  r?  r¦   )rG  rE  rF  Ú	broadcastÚptp)ÚisupÚduplexÚspeedÚmtuÚflags)Úctx_switchesÚ
interruptsÚsoft_interruptsÚsyscalls)rŠ   ÚminÚmax)rŒ   rŠ   ÚhighÚcritical)rú  ÚsecsleftÚpower_plugged)ÚuserÚsystemÚchildren_userÚchildren_system)ÚidÚ	user_timeÚsystem_time)ÚrealÚ	effectiveÚsaved)rý  rþ  rÿ  r   )rˆ   rG  r  r=  r>  r?  rÓ   i €  )z%(value).1f%(symbol)s)NF)†rÇ   r§   Úenumr	  r  r$  r  r³  r^  rS  r   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   ÚIntEnumry   ÚglobalsÚupdateÚ__members__rƒ   Úgetfilesystemencodingr0   Úgetfilesystemencodeerrorsr1   rC   r?   r=   r>   r@   rD   r;   rA   rB   r<   r‰   r‹   r�   rŽ   r3   r8   r9   r:   r5   r6   r7   r4   r2   r”   rE   rü   r£   rÌ   rÝ   rä   rê   rK   rH   r  rG   rJ   rL   rI   rM   rN   rU   rL  rF   r\  rO   r‰  r  r†  rŽ  rQ   rP   rR   rS   rT   r¶  r¸  ÚstdoutrX   rW   rY   rV   rz   r€   r�   Ú<module>r>     s(	  ðñ
ó Û Û Û 	Û Û Û 
Û Û Ý "Ý Ý Ý ðÝðÝñ
 �B—I’I˜nÓ-Ó.€Ù‹8€ðàðàðàðà'ðà)2ðà4;ðà=BðàDKðð ðð ðð
 ðð
 $ðð
 &4ðð
 6Hðð ðð 'ðð )8ðð :Gðð ðð !ðð #2ðð 4Dðð ðð )ðð +?ðð ðð 'ðð )6ðð 8Gðð ðð (ðð *:ðð <Nðð ðð ,ðð .@ðð ðð %ðð '6ðð  ð!ð   ð!ð  ",ð!ð$ ð%ð$ ð%ð$ #ð%ð$ %,ð%ð$ .3ð%ð$ 5>ð%ð$ @Kð%ð& ð'ð& ð'ð&  ð'ð& "-ð'ð& /8ð'ð& :Eð'ð( ð)ð( ð)ð( 'ð)ð( )4ð)ð( 6=ð)ð( ?Fð)ð, ð-ð, %ð-ð, '6ð-ð, 8Að-ð. ð/ð. 0ð/ð. 2Að/ð0 ð1ð0 'ð1ð0 );ð1ð0 =Kð1ð2 ð3ð2 ð3ð2 !&ð3ð2 (.ð3ð4 ð5ð4 $ð5ð4 &-ð5ð8 ð9ð8 %ð9ð8 '4ð9€ðL 	�‰�7Ñ€Ø
�'‰'�T‰/€Ø�‰×Ñ Ó(€Ø�‰×Ñ Ó)€Ø€Ø
�,‰,×
!Ñ
!Ð"<Ó
=€Ø
�,‰,×
!Ñ
! )Ó
,€Ø	�‰×	 Ñ	  Ó	*€Ø×"Ð"�×"Ð"˜F€Ø�‰×ÑÐ 4Ó5€Ø	‡l�l×Ñ˜eÓ$€ð €Ø€Ø Ð Ø€Ø$Ð Ø€Ø€ØÐ Ø€Ø€Ø€Ø€ØÐ Ø€ð !Ð Ø€Ø€Ø€Ø€Ø€Ø€
Ø€Ø€Ø€Ø€Ø€	ô�—‘ô ñ ƒ	× Ñ �×&Ñ&Ô 'ô�$—,‘,ô ñ
 ƒ	× Ñ �×(Ñ(Ô )ð ×$Ò$Ó&€Ø×-Ò-Ó/€ñ 	�7ò %ó 	&€ñ ˜Ò&JÓK€
á
�Yò !<ó =€ñ �{Ò$NÓO€	á	�Hò 4ó 
5€ñ
 	�7ÒJÓK€á�7ò .ó 	/€ñ �jÚJóL€ñ �{ÚBóD€	ñ ØÒNóP€	ñ �jÒ";Ó<€á
ØÒ7ó9€ñ �jÒ"JÓK€á�&˜7 IÐ.Ó/€ñ ØÒGó€	ñ �{ V¨T NÓ3€	á
�YÒ BÓ
C€á�7Ò:Ó;€á�7Ò:Ó;€áØ	ÒEó€ñ �Y ¨GÐ 4Ó
5€á	�H˜{¨MÐ:Ó	;€áØÒAó	€ñ
 �&˜4 ˜.Ó)€ð 
ˆW�h Ð(¨;¸
Ð*CÐDØ	ˆW�hÐ + Ð/Ø
ˆgˆY˜˜Ð&Ø	ˆW�hÐ * Ð.Ø
ˆgˆY˜˜Ð%Ø
ˆg�xÐ  ;°
Ð";Ð<Øˆwˆi˜+ zÐ2Ð3Øˆxˆj˜;¨
Ð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òô@ò&
ò,÷.TDñ TDòn)ñ ƒn€ØŸ?™?€Ô ØŸ.™.€Ô ð "Ð ò>òð4 !¨	ô ð" "ô <ô
5ò&-ò
=ð 	Ø!Ÿjšjó ó 	ðô/ð: ˜ C§J¢Jô%;ôP
øðS ô ØƒHðûð ô ØƒGðús$   Á T5 ÁU Ô5	UÕUÕ	UÕU